gatus-to-mona/Program.cs
2025-04-04 18:35:22 -07:00

54 lines
2.4 KiB
C#

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<Program>? logger = null;
#pragma warning disable IL3050
WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
#pragma warning restore IL3050
_ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
AppSettings appSettings = AppSettings.Get(webApplicationBuilder.Configuration);
try {
#pragma warning disable IL2026
List<string> collection =
[
$"BuildNumber:{webApplicationBuilder.Configuration.GetValue<string>("BuildNumber")};",
$"GitCommit:{webApplicationBuilder.Configuration.GetValue<string>("GitCommit")};"
];
#pragma warning restore IL2026
_ = webApplicationBuilder.Services.AddHttpClient();
_ = webApplicationBuilder.Services.AddHostedService<Worker>();
_ = webApplicationBuilder.Services.AddSingleton(collection);
_ = webApplicationBuilder.Services.AddSingleton(appSettings);
if (WindowsServiceHelpers.IsWindowsService()) {
collection.Add(nameof(WindowsServiceLifetime));
_ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
_ = 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<ILogger<Program>>();
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;
}
}
}