using ErsatzTV.Core; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Interfaces.Repositories; using Serilog.Events; namespace ErsatzTV.Services.RunOnce; public class LoadLoggingLevelService : BackgroundService { private readonly IServiceScopeFactory _serviceScopeFactory; private readonly SystemStartup _systemStartup; public LoadLoggingLevelService(IServiceScopeFactory serviceScopeFactory, SystemStartup systemStartup) { _serviceScopeFactory = serviceScopeFactory; _systemStartup = systemStartup; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await Task.Yield(); await _systemStartup.WaitForDatabase(stoppingToken); if (stoppingToken.IsCancellationRequested) { return; } using IServiceScope scope = _serviceScopeFactory.CreateScope(); IConfigElementRepository configElementRepository = scope.ServiceProvider.GetRequiredService(); foreach (LogEventLevel logLevel in await configElementRepository.GetValue( ConfigElementKey.MinimumLogLevel, stoppingToken)) { LoggingLevelSwitches loggingLevelSwitches = scope.ServiceProvider.GetRequiredService(); loggingLevelSwitches.DefaultLevelSwitch.MinimumLevel = logLevel; } foreach (LogEventLevel logLevel in await configElementRepository.GetValue( ConfigElementKey.MinimumLogLevelScanning, stoppingToken)) { LoggingLevelSwitches loggingLevelSwitches = scope.ServiceProvider.GetRequiredService(); loggingLevelSwitches.ScanningLevelSwitch.MinimumLevel = logLevel; } foreach (LogEventLevel logLevel in await configElementRepository.GetValue( ConfigElementKey.MinimumLogLevelScheduling, stoppingToken)) { LoggingLevelSwitches loggingLevelSwitches = scope.ServiceProvider.GetRequiredService(); loggingLevelSwitches.SchedulingLevelSwitch.MinimumLevel = logLevel; } foreach (LogEventLevel logLevel in await configElementRepository.GetValue( ConfigElementKey.MinimumLogLevelSearching, stoppingToken)) { LoggingLevelSwitches loggingLevelSwitches = scope.ServiceProvider.GetRequiredService(); loggingLevelSwitches.SearchingLevelSwitch.MinimumLevel = logLevel; } foreach (LogEventLevel logLevel in await configElementRepository.GetValue( ConfigElementKey.MinimumLogLevelStreaming, stoppingToken)) { LoggingLevelSwitches loggingLevelSwitches = scope.ServiceProvider.GetRequiredService(); loggingLevelSwitches.StreamingLevelSwitch.MinimumLevel = logLevel; } foreach (LogEventLevel logLevel in await configElementRepository.GetValue( ConfigElementKey.MinimumLogLevelHttp, stoppingToken)) { LoggingLevelSwitches loggingLevelSwitches = scope.ServiceProvider.GetRequiredService(); loggingLevelSwitches.HttpLevelSwitch.MinimumLevel = logLevel; } } }