using Microsoft.AspNetCore.Components; using BlazorApp.Components; using Serilog; using OpenTelemetry.Resources; using OpenTelemetry.Trace; using OpenTelemetry.Metrics; var builder = WebApplication.CreateBuilder(args); // Configure Serilog Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) .Enrich.FromLogContext() .WriteTo.Console() .WriteTo.File("logs/blazorapp-.log", rollingInterval: RollingInterval.Day) .CreateLogger(); builder.Host.UseSerilog(); // Add services to the container builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); // Add Application Insights builder.Services.AddApplicationInsightsTelemetry(); // Add OpenTelemetry builder.Services.AddOpenTelemetry() .ConfigureResource(resource => resource .AddService(serviceName: "BlazorApp")) .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddConsoleExporter()) .WithMetrics(metrics => metrics .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddConsoleExporter()); // Add health checks builder.Services.AddHealthChecks(); var app = builder.Build(); // Configure the HTTP request pipeline if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAntiforgery(); // Enable Prometheus metrics endpoint app.UseMetricServer(); app.UseHttpMetrics(); // Map health check endpoint app.MapHealthChecks("/health"); app.MapRazorComponents() .AddInteractiveServerRenderMode(); app.Logger.LogInformation("BlazorApp starting up..."); app.Run();