Skip to content

Commit bdf6108

Browse files
committed
move out AdminClient, sink error handling
1 parent 329c027 commit bdf6108

File tree

3 files changed

+76
-53
lines changed

3 files changed

+76
-53
lines changed

LoadTester/AdminClient.cs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using static TrainingApi.Controllers.TrainingsController;
2+
3+
namespace LoadTester
4+
{
5+
internal class AdminClient
6+
{
7+
private readonly Config config;
8+
9+
public record Config(Uri BaseUrl, string AuthCookie);
10+
public AdminClient(Config config)
11+
{
12+
this.config = config;
13+
}
14+
15+
public async Task<IEnumerable<string>> GetUsernames(string group)
16+
{
17+
using var client = new HttpClient();
18+
19+
var summaries = await GetGroupTrainings(group);
20+
21+
foreach (var trainingId in summaries.Where(o => o.TrainedDays > 0).Select(o => o.Id))
22+
{
23+
var req = new HttpRequestMessage(HttpMethod.Delete, GetUri($"trainings?id={trainingId}"));
24+
AddAuth(req);
25+
var response = await client.SendAsync(req);
26+
response.EnsureSuccessStatusCode();
27+
}
28+
return summaries.Select(o => o.Username);
29+
30+
async Task<List<TrainingSummaryWithDaysDto>> GetGroupTrainings(string group)
31+
{
32+
var req = new HttpRequestMessage(HttpMethod.Get, GetUri($"Trainings/summaries?group={System.Net.WebUtility.UrlEncode(group)}"));
33+
AddAuth(req);
34+
var response = await client.SendAsync(req);
35+
response.EnsureSuccessStatusCode();
36+
var asString = await response.Content.ReadAsStringAsync();
37+
List<TrainingSummaryWithDaysDto>? result;
38+
try
39+
{
40+
result = System.Text.Json.JsonSerializer.Deserialize<List<TrainingSummaryWithDaysDto>>(asString, new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true }); // await response.Content.ReadFromJsonAsync<List<TrainingSummary>>();
41+
}
42+
catch (Exception ex)
43+
{
44+
throw ex;
45+
}
46+
if (result == null)
47+
throw new NullReferenceException();
48+
49+
return result;
50+
}
51+
52+
Uri GetUri(string path)
53+
{
54+
return new Uri(config.BaseUrl, path);
55+
}
56+
void AddAuth(HttpRequestMessage m)
57+
{
58+
if (!string.IsNullOrEmpty(config.AuthCookie))
59+
m.Headers.Add("Cookie", $".AspNetCore.Cookies={config.AuthCookie}");
60+
}
61+
}
62+
63+
}
64+
}

LoadTester/Program.cs

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
using Microsoft.Extensions.Configuration;
1+
using LoadTester;
2+
using Microsoft.Extensions.Configuration;
23
using Microsoft.Extensions.DependencyInjection;
3-
using static TrainingApi.Controllers.TrainingsController;
44

55
var configuration = new ConfigurationBuilder()
66
.AddJsonFile("appsettings.json")
@@ -9,7 +9,8 @@
99

1010
var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
1111

12-
var usernames = await GetUsernames(configuration["AdminApi:Group"]!);
12+
var admin = new AdminClient(configuration.GetSection("AdminApi").Get<AdminClient.Config>()!);
13+
var usernames = await admin.GetUsernames(configuration["AdminApi:Group"]!);
1314
//usernames = usernames.Take(1);
1415

1516
var clientFactory = serviceProvider.GetRequiredService<IHttpClientFactory>();
@@ -41,52 +42,3 @@ int GetTargetDay(int index, int maxIndex)
4142
var frac = 1f * index / maxIndex;
4243
return (int)(frac * 30) + 1;
4344
}
44-
45-
async Task<IEnumerable<string>> GetUsernames(string group)
46-
{
47-
using var client = new HttpClient();
48-
49-
var summaries = await GetGroupTrainings(group);
50-
51-
foreach (var trainingId in summaries.Select(o => o.Id))
52-
{
53-
var req = new HttpRequestMessage(HttpMethod.Delete, GetUri($"trainings?id={trainingId}"));
54-
AddAuth(req);
55-
var response = await client.SendAsync(req);
56-
response.EnsureSuccessStatusCode();
57-
}
58-
return summaries.Select(o => o.Username);
59-
60-
async Task<List<TrainingSummaryWithDaysDto>> GetGroupTrainings(string group)
61-
{
62-
var req = new HttpRequestMessage(HttpMethod.Get, GetUri($"Trainings/summaries?group={System.Net.WebUtility.UrlEncode(group)}"));
63-
AddAuth(req);
64-
var response = await client.SendAsync(req);
65-
response.EnsureSuccessStatusCode();
66-
var asString = await response.Content.ReadAsStringAsync();
67-
List<TrainingSummaryWithDaysDto>? result;
68-
try
69-
{
70-
result = System.Text.Json.JsonSerializer.Deserialize<List<TrainingSummaryWithDaysDto>>(asString, new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true }); // await response.Content.ReadFromJsonAsync<List<TrainingSummary>>();
71-
}
72-
catch (Exception ex)
73-
{
74-
throw ex;
75-
}
76-
if (result == null)
77-
throw new NullReferenceException();
78-
79-
return result;
80-
}
81-
82-
Uri GetUri(string path)
83-
{
84-
return new Uri(new Uri(configuration["AdminApi:BaseUrl"]!), path);
85-
}
86-
void AddAuth(HttpRequestMessage m)
87-
{
88-
var cookie = configuration["AdminApi:AuthCookie"];
89-
if (!string.IsNullOrEmpty(cookie))
90-
m.Headers.Add("Cookie", $".AspNetCore.Cookies={cookie}");
91-
}
92-
}

ProblemSource/ProblemSourceModule/ProblemSourceProcessingMiddleware.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,14 @@ public async Task<SyncResult> Sync(Training training, SyncInput root)
276276
// Log incoming data - but remove large State items
277277
// Warning: modifying incoming data instead of making a copy
278278
root.Events = root.Events.Where(o => LogItem.GetEventClassName(o) != "UserStatePushLogItem").ToArray();
279-
await dataSink.Log(root.Uuid, root);
279+
try
280+
{
281+
await dataSink.Log(root.Uuid, root);
282+
}
283+
catch (Exception ex)
284+
{
285+
log.LogError(ex, $"Uuid: {root.Uuid} Sink size: {JsonConvert.SerializeObject(root).Length}");
286+
}
280287

281288
var errorLogItems = logItems.OfType<ErrorLogItem>().ToList();
282289
if (errorLogItems.Any())

0 commit comments

Comments
 (0)