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;
+ }
+ }
+}