diff --git a/services/Archival/FilterLists.Archival.Infrastructure/ConfigurationExtensions.cs b/services/Archival/FilterLists.Archival.Infrastructure/ConfigurationExtensions.cs index d801483c0..18f4b50a0 100644 --- a/services/Archival/FilterLists.Archival.Infrastructure/ConfigurationExtensions.cs +++ b/services/Archival/FilterLists.Archival.Infrastructure/ConfigurationExtensions.cs @@ -1,5 +1,6 @@ using System; using FilterLists.Archival.Infrastructure.Clients; +using FilterLists.Archival.Infrastructure.Logging; using FilterLists.Archival.Infrastructure.Persistence; using FilterLists.Archival.Infrastructure.Scheduling; using FilterLists.SharedKernel.Apis.Clients; @@ -22,7 +23,7 @@ public static void AddInfrastructureServices(this IServiceCollection services, I { _ = configuration ?? throw new ArgumentNullException(nameof(configuration)); - services.AddSharedKernelLogging(configuration); + services.AddArchivalLogging(configuration); services.AddSchedulingServices(configuration); services.AddApiClients(configuration); services.AddClients(); @@ -31,7 +32,7 @@ public static void AddInfrastructureServices(this IServiceCollection services, I public static void UseInfrastructure(this IApplicationBuilder app) { - app.UseLogging(); + app.UseArchivalLogging(); app.UseScheduling(); } } diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Logging/ConfigurationExtensions.cs b/services/Archival/FilterLists.Archival.Infrastructure/Logging/ConfigurationExtensions.cs new file mode 100644 index 000000000..82f66edb4 --- /dev/null +++ b/services/Archival/FilterLists.Archival.Infrastructure/Logging/ConfigurationExtensions.cs @@ -0,0 +1,22 @@ +using FilterLists.SharedKernel.Logging; +using MediatR.Pipeline; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace FilterLists.Archival.Infrastructure.Logging +{ + internal static class ConfigurationExtensions + { + public static void AddArchivalLogging(this IServiceCollection services, IConfiguration configuration) + { + services.AddSharedKernelLogging(configuration); + services.AddTransient(typeof(IRequestPostProcessor<,>), typeof(TelemetryClientFlushPostProcessor<,>)); + } + + public static void UseArchivalLogging(this IApplicationBuilder app) + { + app.UseLogging(); + } + } +} diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Logging/TelemetryClientFlushPostProcessor.cs b/services/Archival/FilterLists.Archival.Infrastructure/Logging/TelemetryClientFlushPostProcessor.cs new file mode 100644 index 000000000..83dde1816 --- /dev/null +++ b/services/Archival/FilterLists.Archival.Infrastructure/Logging/TelemetryClientFlushPostProcessor.cs @@ -0,0 +1,29 @@ +using System.Threading; +using System.Threading.Tasks; +using MediatR.Pipeline; +using Microsoft.ApplicationInsights; + +namespace FilterLists.Archival.Infrastructure.Logging +{ + /// https://docs.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics#flushing-data + public class TelemetryClientFlushPostProcessor : IRequestPostProcessor + where TRequest : notnull + { + private readonly TelemetryClient _telemetryClient; + + public TelemetryClientFlushPostProcessor(TelemetryClient telemetryClient) + { + _telemetryClient = telemetryClient; + } + + public Task Process(TRequest request, TResponse response, CancellationToken cancellationToken) + { + _telemetryClient.Flush(); + + // Allow some time for flushing before shutdown. + Thread.Sleep(5000); + + return Task.CompletedTask; + } + } +}