From 6f3f08ed340e59a62a2d0428a5c32f99551ef1ce Mon Sep 17 00:00:00 2001 From: Rory& Date: Tue, 3 Jun 2025 01:01:40 +0200 Subject: Fix performance issues, add fake user bot to test client, more testing --- testFrontend/SafeNSound.FakeUser/MonitorService.cs | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 testFrontend/SafeNSound.FakeUser/MonitorService.cs (limited to 'testFrontend/SafeNSound.FakeUser/MonitorService.cs') diff --git a/testFrontend/SafeNSound.FakeUser/MonitorService.cs b/testFrontend/SafeNSound.FakeUser/MonitorService.cs new file mode 100644 index 0000000..57d90a5 --- /dev/null +++ b/testFrontend/SafeNSound.FakeUser/MonitorService.cs @@ -0,0 +1,52 @@ +using ArcaneLibs.Extensions; + +namespace SafeNSound.FakeUser; + +public class MonitorService(ILogger logger, UserStore userStore): IHostedService { + private Task? _getAllAlarmsTask, _assignBudgetTask; + private readonly CancellationTokenSource _cts = new(); + + public async Task StartAsync(CancellationToken cancellationToken) { + _getAllAlarmsTask = GetAllAlarms(_cts.Token); + _assignBudgetTask = AssignBudget(_cts.Token); + } + + private async Task GetAllAlarms(CancellationToken cancellationToken) { + while (!cancellationToken.IsCancellationRequested) { + try { + var user = userStore.GetRandomMonitor(); + var alarms = await user.Client!.GetAllAlarms(); + if(alarms.Count > 0) + logger.LogInformation("Monitor {UserId} has outstanding alarms: {Alarm}", user.Auth.Username, alarms.ToJson(indent: false)); + // else + // logger.LogInformation("Monitor {UserId} found no alarms to query", user.Auth.Username); + await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); + } catch (Exception ex) { + logger.LogError(ex, "Error querying alarm"); + } + } + } + + private async Task AssignBudget(CancellationToken cancellationToken) { + while (!cancellationToken.IsCancellationRequested) { + try { + var user = userStore.GetRandomMonitor(); + // var alarms = await user.Client!.GetAllAlarms(); + // if(alarms.Count > 0) + // logger.LogInformation("Monitor {UserId} has outstanding alarms: {Alarm}", user.Auth.Username, alarms.ToJson(indent: false)); + // else + // logger.LogInformation("Monitor {UserId} found no alarms to query", user.Auth.Username); + await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); + + } catch (Exception ex) { + logger.LogError(ex, "Error querying alarm"); + } + + } + } + + public async Task StopAsync(CancellationToken cancellationToken) { + await _cts.CancelAsync(); + await _getAllAlarmsTask!; + } +} \ No newline at end of file -- cgit 1.5.1