From bdf058ab5c936463a022f62ffbb55bb71c26e856 Mon Sep 17 00:00:00 2001 From: Rory& Date: Wed, 12 Mar 2025 19:52:15 +0100 Subject: More work --- MatrixContentFilter/Program.cs | 117 +++++++++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 44 deletions(-) (limited to 'MatrixContentFilter/Program.cs') diff --git a/MatrixContentFilter/Program.cs b/MatrixContentFilter/Program.cs index 7eec930..b849131 100644 --- a/MatrixContentFilter/Program.cs +++ b/MatrixContentFilter/Program.cs @@ -1,3 +1,4 @@ +using ArcaneLibs.Extensions; using MatrixContentFilter; using MatrixContentFilter.Handlers; using LibMatrix.Services; @@ -8,63 +9,91 @@ using MatrixContentFilter.Services; using MatrixContentFilter.Services.AsyncActionQueues; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.Metrics; using Microsoft.Extensions.Hosting; +using OpenTelemetry.Metrics; +using OpenTelemetry.Resources; +using OpenTelemetry.Trace; var builder = Host.CreateDefaultBuilder(args); -builder.ConfigureHostOptions(host => { - host.ServicesStartConcurrently = true; - host.ServicesStopConcurrently = true; - host.ShutdownTimeout = TimeSpan.FromSeconds(5); -}); - if (Environment.GetEnvironmentVariable("MATRIXCONTENTFILTER_APPSETTINGS_PATH") is string path) builder.ConfigureAppConfiguration(x => x.AddJsonFile(path)); var host = builder.ConfigureServices((ctx, services) => { - var config = new MatrixContentFilterConfiguration(ctx.Configuration); - services.AddSingleton(config); + var config = new MatrixContentFilterConfiguration(ctx.Configuration); + Console.WriteLine("Configuration: {0}", config.ToJson()); + services.AddSingleton(config); + + services.AddMetrics(m => m.AddDebugConsole()); + services.AddSingleton(); + + if (config.OpenTelemetry.Enabled) { + services.AddOpenTelemetry() + .ConfigureResource(resource => resource.AddService("MatrixContentFilter")) + .WithTracing(tracing => tracing + .AddAspNetCoreInstrumentation() + .AddConsoleExporter()) + .WithMetrics(metrics => metrics + .AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddRuntimeInstrumentation() + .AddConsoleExporter()); + } + + services.AddRoryLibMatrixServices(new() { + AppName = "MatrixContentFilter" + }); - services.AddRoryLibMatrixServices(new() { - AppName = "MatrixContentFilter" - }); + services.AddMatrixBot().AddCommandHandler().DiscoverAllCommands() + .WithInviteHandler() + .WithCommandResultHandler(CommandResultHandler.HandleAsync); - services.AddMatrixBot().AddCommandHandler().DiscoverAllCommands() - .WithInviteHandler(InviteHandler.HandleAsync) - .WithCommandResultHandler(CommandResultHandler.HandleAsync); + services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(s => s.GetRequiredService()); + services.AddSingleton(); + services.AddSingleton(s => s.GetRequiredService()); - services.AddSingleton(); - services.AddSingleton(s => s.GetRequiredService()); - services.AddSingleton(); - services.AddSingleton(s => s.GetRequiredService()); + switch (config.AppMode) { + case "bot": + services.AddHostedService(); + if (config.SanityCheck.Enabled) + services.AddHostedService(); + break; + default: + throw new NotSupportedException($"Unknown app mode: {config.AppMode}"); + } - switch (config.AppMode) { - case "bot": - services.AddHostedService(); - // services.AddHostedService(); - break; - default: - throw new NotSupportedException($"Unknown app mode: {config.AppMode}"); - } - - switch (config.AsyncQueueImplementation) { - case "lifo": - services.AddSingleton(); - services.AddSingleton(s => s.GetRequiredService()); - services.AddSingleton(s => s.GetRequiredService()); - break; - case "fifo": - services.AddSingleton(); - services.AddSingleton(s => s.GetRequiredService()); - services.AddSingleton(s => s.GetRequiredService()); - break; - default: - throw new NotSupportedException($"Unknown async queue implementation: {config.AsyncQueueImplementation}"); - } -}).UseConsoleLifetime().Build(); + switch (config.AsyncQueueImplementation) { + case "lifo": + services.AddSingleton(); + services.AddSingleton(s => s.GetRequiredService()); + services.AddSingleton(s => s.GetRequiredService()); + break; + case "fifo": + services.AddSingleton(); + services.AddSingleton(s => s.GetRequiredService()); + services.AddSingleton(s => s.GetRequiredService()); + break; + default: + throw new NotSupportedException($"Unknown async queue implementation: {config.AsyncQueueImplementation}"); + } + }) + // .ConfigureLogging((ctx, lb) => { + // lb.AddOpenTelemetry(options => { + // options + // .SetResourceBuilder( + // ResourceBuilder.CreateDefault() + // .AddService("MatrixContentFilter")) + // .AddConsoleExporter(); + // }); + // }) + .UseConsoleLifetime().Build(); await host.RunAsync(); \ No newline at end of file -- cgit 1.5.1