using Gatus.To.MonA.Models; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting.WindowsServices; namespace Gatus.To.MonA; public class Program { internal static async Task Main(string[] args) { ILogger? logger = null; #pragma warning disable IL3050 WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args); #pragma warning restore IL3050 _ = webApplicationBuilder.Configuration.AddUserSecrets(); AppSettings appSettings = AppSettings.Get(webApplicationBuilder.Configuration); try { #pragma warning disable IL2026 List collection = [ $"BuildNumber:{webApplicationBuilder.Configuration.GetValue("BuildNumber")};", $"GitCommit:{webApplicationBuilder.Configuration.GetValue("GitCommit")};" ]; #pragma warning restore IL2026 _ = webApplicationBuilder.Services.AddHttpClient(); _ = webApplicationBuilder.Services.AddHostedService(); _ = webApplicationBuilder.Services.AddSingleton(collection); _ = webApplicationBuilder.Services.AddSingleton(appSettings); if (WindowsServiceHelpers.IsWindowsService()) { collection.Add(nameof(WindowsServiceLifetime)); _ = webApplicationBuilder.Services.AddSingleton(); _ = webApplicationBuilder.Logging.AddEventLog(settings => { #pragma warning disable CA1416 if (string.IsNullOrEmpty(settings.SourceName)) settings.SourceName = webApplicationBuilder.Environment.ApplicationName; #pragma warning restore }); } using WebApplication webApplication = webApplicationBuilder.Build(); logger = webApplication.Services.GetRequiredService>(); if (string.IsNullOrEmpty(appSettings.GatusToMonaConfiguration.Company)) { Environment.ExitCode = -1; _ = webApplication.StopAsync(); } logger.LogInformation("Starting Web Application"); logger.LogCritical("{Company}", appSettings.GatusToMonaConfiguration.Company); await webApplication.RunAsync(); } catch (Exception ex) { try { logger?.LogCritical(ex, "WebApplication terminated unexpectedly"); } catch (Exception) { } throw; } } }