using FabApprovalWorkerService.Models; using Infineon.Monitoring.MonA; namespace FabApprovalWorkerService.Services; public class WindowsService : BackgroundService { private readonly ILogger _logger; private readonly IMonInClient _monInClient; public WindowsService(ILogger logger, IServiceProvider serviceProvider) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); using (IServiceScope scope = serviceProvider.CreateScope()) { _monInClient = scope.ServiceProvider.GetService() ?? 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); } } }