diff --git a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/AgentTelemetryClient.cs b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/AgentTelemetryClient.cs new file mode 100644 index 000000000..2fc199ac7 --- /dev/null +++ b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/AgentTelemetryClient.cs @@ -0,0 +1,31 @@ +using System; +using System.Threading; +using Microsoft.ApplicationInsights; +using Microsoft.ApplicationInsights.Extensibility; + +namespace FilterLists.Agent.Infrastructure.ApplicationInsights +{ + public class AgentTelemetryClient : IDisposable + { + public AgentTelemetryClient(TelemetryConfiguration telemetryConfiguration) + { + TelemetryClient = new TelemetryClient(telemetryConfiguration); + } + + public TelemetryClient TelemetryClient { get; } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposing) + return; + TelemetryClient.Flush(); + Thread.Sleep(5000); + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs index 1a57050a2..ca4ee2cf1 100644 --- a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs +++ b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs @@ -1,5 +1,4 @@ using FilterLists.Agent.AppSettings; -using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -21,7 +20,12 @@ public static void AddApplicationInsights(this IServiceCollection services) services.AddSingleton(b => { var configuration = b.GetService(); - return new TelemetryClient(configuration); + return new AgentTelemetryClient(configuration); + }); + services.AddSingleton(b => + { + var telemetryConfiguration = b.GetService(); + return QuickPulseTelemetryModuleBuilder.Build(telemetryConfiguration); }); } } diff --git a/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs b/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs index fb07bd12d..55d25fea1 100644 --- a/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs +++ b/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs @@ -8,7 +8,6 @@ using FilterLists.Agent.Infrastructure.Polly; using FilterLists.Agent.Infrastructure.Web; using MediatR; -using Microsoft.ApplicationInsights; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Serilog; @@ -59,7 +58,8 @@ private static void AddLogging(this IServiceCollection services) { services.AddLogging(b => { - var telemetryClient = b.Services.BuildServiceProvider().GetService(); + var telemetryClient = b.Services.BuildServiceProvider().GetService() + .TelemetryClient; b.AddSerilog(new LoggerConfiguration() .WriteTo.Console() .WriteTo.ApplicationInsights(telemetryClient, TelemetryConverter.Traces) diff --git a/src/FilterLists.Agent/Program.cs b/src/FilterLists.Agent/Program.cs index 68576e518..0644fdde5 100644 --- a/src/FilterLists.Agent/Program.cs +++ b/src/FilterLists.Agent/Program.cs @@ -1,15 +1,10 @@ using System; -using System.Threading; using System.Threading.Tasks; using CommandLine; using FilterLists.Agent.Features.Lists; using FilterLists.Agent.Features.Urls; -using FilterLists.Agent.Infrastructure.ApplicationInsights; using FilterLists.Agent.Infrastructure.DependencyInjection; using MediatR; -using Microsoft.ApplicationInsights; -using Microsoft.ApplicationInsights.Extensibility; -using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse; using Microsoft.Extensions.DependencyInjection; namespace FilterLists.Agent @@ -17,12 +12,10 @@ namespace FilterLists.Agent public static class Program { private static IServiceProvider _serviceProvider; - private static QuickPulseTelemetryModule _quickPulseTelemetryModule; public static async Task Main(string[] args) { - Setup(); - + _serviceProvider = ServiceProviderBuilder.Build(); var parser = _serviceProvider.GetService(); var mediator = _serviceProvider.GetService(); await parser.ParseArguments(args).MapResult(async o => @@ -34,25 +27,6 @@ await parser.ParseArguments(args).MapResult(async o => }, e => Task.FromResult(0) ); - - Teardown(); - } - - private static void Setup() - { - _serviceProvider = ServiceProviderBuilder.Build(); - - var telemetryConfiguration = _serviceProvider.GetService(); - _quickPulseTelemetryModule = QuickPulseTelemetryModuleBuilder.Build(telemetryConfiguration); - } - - private static void Teardown() - { - _quickPulseTelemetryModule.Dispose(); - - var telemetryClient = _serviceProvider.GetService(); - telemetryClient.Flush(); - Thread.Sleep(5000); } } } \ No newline at end of file