summary refs log tree commit diff
path: root/testFrontend/SafeNSound.FakeUser/MonitorService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'testFrontend/SafeNSound.FakeUser/MonitorService.cs')
-rw-r--r--testFrontend/SafeNSound.FakeUser/MonitorService.cs52
1 files changed, 52 insertions, 0 deletions
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<MonitorService> 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