using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Configuration; using ResourceMonitorService.Configuration; using ResourceMonitorService.Services; using Serilog; using System.Diagnostics; namespace ResourceMonitorService { public class Program { public static void Main(string[] args) { // Configure Serilog early Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File("logs/resourcemonitor-.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); try { Log.Information("Starting Resource Monitor Service"); CreateHostBuilder(args).Build().Run(); } catch (Exception ex) { Log.Fatal(ex, "Application start-up failed"); } finally { Log.CloseAndFlush(); } } public static IHostBuilder CreateHostBuilder(string[] args) { var builder = Host.CreateDefaultBuilder(args) .UseSerilog() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); // URLs are now configured via appsettings.{Environment}.json files }) .ConfigureServices((hostContext, services) => { // Bind configuration sections services.Configure( hostContext.Configuration.GetSection("MonitoringSettings")); services.Configure( hostContext.Configuration.GetSection("ApiSettings")); services.Configure( hostContext.Configuration.GetSection("LoggingSettings")); // Register services services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // Register the main worker service services.AddHostedService(); }); // Configure as Windows Service if requested if (args.Contains("--windows-service") || Environment.GetEnvironmentVariable("RUN_AS_SERVICE") == "true") { builder.UseWindowsService(options => { options.ServiceName = "ResourceMonitorService"; }); } return builder; } } }