2022-02-21 09:39:59 +00:00
|
|
|
using Newtonsoft.Json;
|
2022-02-10 16:36:53 +00:00
|
|
|
using Prometheus;
|
2022-08-30 21:59:13 +01:00
|
|
|
using VoidCat;
|
2022-01-25 17:57:07 +00:00
|
|
|
using VoidCat.Model;
|
2022-09-07 12:40:52 +01:00
|
|
|
using VoidCat.Services.Analytics;
|
2022-02-17 15:52:49 +00:00
|
|
|
using VoidCat.Services.Migrations;
|
2022-02-27 13:54:25 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
JsonConvert.DefaultSettings = () => VoidStartup.ConfigJsonSettings(new());
|
2022-01-28 10:32:00 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
RunModes mode = args.Length == 0 ? RunModes.All : 0;
|
2022-01-28 10:32:00 +00:00
|
|
|
|
2022-08-30 22:07:10 +01:00
|
|
|
if (args.Contains("--run-webserver"))
|
|
|
|
{
|
|
|
|
mode |= RunModes.Webserver;
|
|
|
|
}
|
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
if (args.Contains("--run-migrations"))
|
2022-02-16 23:19:31 +00:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
mode |= RunModes.Migrations;
|
2022-02-16 23:19:31 +00:00
|
|
|
}
|
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
if (args.Contains("--run-background-jobs"))
|
2022-03-08 22:15:28 +00:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
mode |= RunModes.BackgroundJobs;
|
|
|
|
}
|
2022-06-06 22:51:25 +01:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
Console.WriteLine($"Running with modes: {mode}");
|
2022-06-06 22:51:25 +01:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
async Task RunMigrations(IServiceProvider services)
|
2022-03-08 13:47:42 +00:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
using var migrationScope = services.CreateScope();
|
|
|
|
var migrations = migrationScope.ServiceProvider.GetServices<IMigration>();
|
|
|
|
var logger = migrationScope.ServiceProvider.GetRequiredService<ILogger<IMigration>>();
|
|
|
|
foreach (var migration in migrations.OrderBy(a => a.Order))
|
2022-03-08 13:47:42 +00:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
logger.LogInformation("Running migration: {Migration}", migration.GetType().Name);
|
|
|
|
var res = await migration.Migrate(args);
|
|
|
|
logger.LogInformation("== Result: {Result}", res.ToString());
|
|
|
|
if (res == IMigration.MigrationResult.ExitCompleted)
|
2022-03-08 13:47:42 +00:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
return;
|
2022-03-08 13:47:42 +00:00
|
|
|
}
|
2022-08-30 21:59:13 +01:00
|
|
|
}
|
|
|
|
}
|
2022-01-28 00:18:27 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
if (mode.HasFlag(RunModes.Webserver))
|
2022-03-08 13:47:42 +00:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
var services = builder.Services;
|
2022-02-21 22:35:06 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
var configuration = builder.Configuration;
|
|
|
|
var voidSettings = configuration.GetSection("Settings").Get<VoidSettings>();
|
|
|
|
services.AddSingleton(voidSettings);
|
|
|
|
services.AddSingleton(voidSettings.Strike ?? new());
|
2022-02-21 12:54:57 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
var seqSettings = configuration.GetSection("Seq");
|
|
|
|
builder.Logging.AddSeq(seqSettings);
|
2022-02-21 12:54:57 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
services.AddBaseServices(voidSettings);
|
|
|
|
services.AddDatabaseServices(voidSettings);
|
|
|
|
services.AddWebServices(voidSettings);
|
2022-02-21 12:54:57 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
if (mode.HasFlag(RunModes.Migrations))
|
|
|
|
{
|
|
|
|
services.AddMigrations(voidSettings);
|
|
|
|
}
|
2022-02-21 12:54:57 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
if (mode.HasFlag(RunModes.BackgroundJobs))
|
|
|
|
{
|
|
|
|
services.AddBackgroundServices(voidSettings);
|
|
|
|
}
|
2022-02-21 22:35:06 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
var app = builder.Build();
|
2022-03-04 20:05:01 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
if (mode.HasFlag(RunModes.Migrations))
|
|
|
|
{
|
|
|
|
await RunMigrations(app.Services);
|
|
|
|
}
|
2022-03-07 13:38:53 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
#if HostSPA
|
|
|
|
app.UseStaticFiles();
|
|
|
|
#endif
|
2022-03-11 15:59:08 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
app.UseHttpLogging();
|
|
|
|
app.UseRouting();
|
|
|
|
app.UseCors();
|
|
|
|
app.UseSwagger();
|
|
|
|
app.UseSwaggerUI();
|
|
|
|
app.UseAuthentication();
|
|
|
|
app.UseAuthorization();
|
2022-06-06 22:51:25 +01:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
app.UseHealthChecks("/healthz");
|
2022-07-06 23:03:53 +01:00
|
|
|
|
2022-09-07 12:40:52 +01:00
|
|
|
app.UseMiddleware<AnalyticsMiddleware>();
|
2022-08-30 21:59:13 +01:00
|
|
|
app.UseEndpoints(ep =>
|
|
|
|
{
|
|
|
|
ep.MapControllers();
|
|
|
|
ep.MapMetrics();
|
|
|
|
ep.MapRazorPages();
|
|
|
|
#if HostSPA
|
|
|
|
ep.MapFallbackToFile("index.html");
|
|
|
|
#endif
|
|
|
|
});
|
|
|
|
|
|
|
|
app.Run();
|
2022-02-16 23:19:31 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
// daemon style, dont run web server
|
|
|
|
var builder = Host.CreateDefaultBuilder(args);
|
|
|
|
builder.ConfigureServices((context, services) =>
|
2022-06-06 22:51:25 +01:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
var voidSettings = context.Configuration.GetSection("Settings").Get<VoidSettings>();
|
|
|
|
services.AddSingleton(voidSettings);
|
|
|
|
services.AddSingleton(voidSettings.Strike ?? new());
|
|
|
|
|
|
|
|
services.AddBaseServices(voidSettings);
|
|
|
|
services.AddDatabaseServices(voidSettings);
|
|
|
|
if (mode.HasFlag(RunModes.Migrations))
|
2022-06-06 22:51:25 +01:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
services.AddMigrations(voidSettings);
|
2022-06-06 22:51:25 +01:00
|
|
|
}
|
2022-02-17 15:52:49 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
if (mode.HasFlag(RunModes.BackgroundJobs))
|
|
|
|
{
|
|
|
|
services.AddBackgroundServices(voidSettings);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
builder.ConfigureLogging((context, logging) => { logging.AddSeq(context.Configuration.GetSection("Seq")); });
|
2022-02-22 14:20:31 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
var app = builder.Build();
|
|
|
|
if (mode.HasFlag(RunModes.Migrations))
|
|
|
|
{
|
|
|
|
await RunMigrations(app.Services);
|
|
|
|
}
|
2022-02-22 14:20:31 +00:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
if (mode.HasFlag(RunModes.BackgroundJobs))
|
|
|
|
{
|
|
|
|
app.Run();
|
|
|
|
}
|
|
|
|
}
|
2022-07-23 21:58:17 +01:00
|
|
|
|
2022-08-30 21:59:13 +01:00
|
|
|
[Flags]
|
|
|
|
internal enum RunModes
|
2022-01-25 16:17:48 +00:00
|
|
|
{
|
2022-08-30 21:59:13 +01:00
|
|
|
Webserver = 1,
|
|
|
|
BackgroundJobs = 2,
|
|
|
|
Migrations = 4,
|
|
|
|
All = 255
|
|
|
|
}
|