From e10b1e30e72e0dd3b31609e99bedeb0ac21bbe8c Mon Sep 17 00:00:00 2001 From: Knut Haug Date: Fri, 18 Oct 2024 14:33:08 +0200 Subject: [PATCH] refactoring, add app insights SDK for local dev --- .../WebApplicationBuilderExtensions.cs | 50 +++++++++++++++++++ .../Program.cs | 40 ++------------- 2 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 src/Digdir.Domain.Dialogporten.WebApi/Common/Extensions/WebApplicationBuilderExtensions.cs diff --git a/src/Digdir.Domain.Dialogporten.WebApi/Common/Extensions/WebApplicationBuilderExtensions.cs b/src/Digdir.Domain.Dialogporten.WebApi/Common/Extensions/WebApplicationBuilderExtensions.cs new file mode 100644 index 000000000..014c85b1e --- /dev/null +++ b/src/Digdir.Domain.Dialogporten.WebApi/Common/Extensions/WebApplicationBuilderExtensions.cs @@ -0,0 +1,50 @@ +using Azure.Monitor.OpenTelemetry.AspNetCore; +using OpenTelemetry.Trace; +using Npgsql; +using OpenTelemetry.Metrics; +using OpenTelemetry.Resources; + +namespace Digdir.Domain.Dialogporten.WebApi.Common.Extensions; + +internal static class ServiceCollectionExtensions +{ + public static WebApplicationBuilder ConfigureTelemetry(this WebApplicationBuilder builder) + { + builder.Services.AddOpenTelemetry() + .ConfigureResource(resource => resource + .AddService(serviceName: builder.Environment.ApplicationName)) + .WithTracing(tracing => + { + if (builder.Environment.IsDevelopment()) + { + tracing.SetSampler(new AlwaysOnSampler()); + } + + tracing.AddAspNetCoreInstrumentation(options => + { + options.Filter = (httpContext) => + !httpContext.Request.Path.StartsWithSegments("/health"); + }); + + tracing.AddHttpClientInstrumentation(); + tracing.AddNpgsql(); + tracing.AddRedisInstrumentation(options => options.SetVerboseDatabaseStatements = true); + }) + .WithMetrics(metrics => + { + metrics.AddRuntimeInstrumentation(); + }); + + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING"))) + { + builder.Services.AddOpenTelemetry().UseAzureMonitor(); + } + else + { + // Use Application Insights SDK for local development + builder.Services.AddApplicationInsightsTelemetry(); + } + + return builder; + } +} diff --git a/src/Digdir.Domain.Dialogporten.WebApi/Program.cs b/src/Digdir.Domain.Dialogporten.WebApi/Program.cs index da45bb047..aef33bcd3 100644 --- a/src/Digdir.Domain.Dialogporten.WebApi/Program.cs +++ b/src/Digdir.Domain.Dialogporten.WebApi/Program.cs @@ -3,17 +3,16 @@ using System.Reflection; using System.Text.Json.Serialization; using System.Text.Json.Serialization.Metadata; -using Azure.Monitor.OpenTelemetry.AspNetCore; using Digdir.Domain.Dialogporten.Application; using Digdir.Domain.Dialogporten.Application.Common.Extensions; using Digdir.Domain.Dialogporten.Application.Common.Extensions.OptionExtensions; using Digdir.Domain.Dialogporten.Application.Externals.Presentation; +using Digdir.Domain.Dialogporten.WebApi.Common.Extensions; using Digdir.Domain.Dialogporten.Infrastructure; using Digdir.Domain.Dialogporten.WebApi; using Digdir.Domain.Dialogporten.WebApi.Common; using Digdir.Domain.Dialogporten.WebApi.Common.Authentication; using Digdir.Domain.Dialogporten.WebApi.Common.Authorization; -using Digdir.Domain.Dialogporten.WebApi.Common.Extensions; using Digdir.Domain.Dialogporten.WebApi.Common.Json; using Digdir.Domain.Dialogporten.WebApi.Common.Swagger; using Digdir.Library.Utils.AspNet; @@ -22,11 +21,7 @@ using FluentValidation; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.AspNetCore.Authorization; -using Npgsql; using NSwag; -using OpenTelemetry.Resources; -using OpenTelemetry.Trace; -using OpenTelemetry.Metrics; using Serilog; using Microsoft.Extensions.Options; @@ -76,6 +71,8 @@ static void BuildAndRun(string[] args, TelemetryConfiguration telemetryConfigura var thisAssembly = Assembly.GetExecutingAssembly(); + builder.ConfigureTelemetry(); + builder.Services // Options setup .ConfigureOptions() @@ -128,38 +125,9 @@ static void BuildAndRun(string[] args, TelemetryConfiguration telemetryConfigura .ToList() ?? []) // Auth .AddDialogportenAuthentication(builder.Configuration) - .AddAuthorization() + .AddAuthorization(); - // OpenTelemetry - .AddOpenTelemetry() - .ConfigureResource(resource => resource - .AddService(serviceName: builder.Environment.ApplicationName)) - .WithTracing(tracing => - { - if (builder.Environment.IsDevelopment()) - { - tracing.SetSampler(new AlwaysOnSampler()); - } - - tracing.AddAspNetCoreInstrumentation(options => - { - options.Filter = (httpContext) => - !httpContext.Request.Path.StartsWithSegments("/health"); - }); - - tracing.AddHttpClientInstrumentation(); - tracing.AddNpgsql(); - tracing.AddRedisInstrumentation(options => options.SetVerboseDatabaseStatements = true); - }) - .WithMetrics(metrics => - { - metrics.AddRuntimeInstrumentation(); - }); - if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING"))) - { - builder.Services.AddOpenTelemetry().UseAzureMonitor(); - } if (builder.Environment.IsDevelopment()) {