2024-04-22 13:01:39 -07:00

43 lines
1.5 KiB
C#

using FabApprovalWorkerService.Models;
using Infineon.Monitoring.MonA;
namespace FabApprovalWorkerService.Services;
public class WindowsService : BackgroundService {
private readonly ILogger<WindowsService> _logger;
private readonly IMonInClient _monInClient;
public WindowsService(ILogger<WindowsService> logger,
IServiceProvider serviceProvider) {
_logger = logger ??
throw new ArgumentNullException("ILogger not injected");
using (IServiceScope scope = serviceProvider.CreateScope()) {
_monInClient = scope.ServiceProvider.GetService<IMonInClient>() ??
throw new ArgumentNullException("IMonInClient not injected");
}
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
_logger.LogInformation("Starting Windows service");
try {
while (!stoppingToken.IsCancellationRequested) {
_monInClient.PostStatus("WindowsService", State.Ok);
await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken);
}
} catch (OperationCanceledException) {
_logger.LogError("The Windows service has been stopped");
_monInClient.PostStatus("WindowsService", State.Ok);
} catch (Exception ex) {
_logger.LogError($"An exception occurred when running Windows Service. Exception: {ex.Message}");
_monInClient.PostStatus("WindowsService", State.Critical);
Environment.Exit(1);
}
}
}