diff --git a/src/FilterLists.Agent/FilterLists.Agent.csproj b/src/FilterLists.Agent/FilterLists.Agent.csproj index 8847ece4d..c4dc85995 100644 --- a/src/FilterLists.Agent/FilterLists.Agent.csproj +++ b/src/FilterLists.Agent/FilterLists.Agent.csproj @@ -34,6 +34,7 @@ + diff --git a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/QuickPulseTelemetryModuleExtensions.cs b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/QuickPulseTelemetryModuleExtensions.cs new file mode 100644 index 000000000..a0d180303 --- /dev/null +++ b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/QuickPulseTelemetryModuleExtensions.cs @@ -0,0 +1,26 @@ +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse; + +namespace FilterLists.Agent.Infrastructure.ApplicationInsights +{ + public static class QuickPulseTelemetryModuleExtensions + { + public static void InitializeQuickPulseTelemetryModule(this QuickPulseTelemetryModule quickPulseTelemetryModule, + TelemetryConfiguration telemetryConfiguration) + { + QuickPulseTelemetryProcessor processor = null; + telemetryConfiguration.TelemetryProcessorChainBuilder + .Use(next => + { + processor = new QuickPulseTelemetryProcessor(next); + return processor; + }) + .Build(); + quickPulseTelemetryModule.Initialize(telemetryConfiguration); + quickPulseTelemetryModule.RegisterTelemetryProcessor(processor); + foreach (var telemetryProcessor in telemetryConfiguration.TelemetryProcessors) + if (telemetryProcessor is ITelemetryModule telemetryModule) + telemetryModule.Initialize(telemetryConfiguration); + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs new file mode 100644 index 000000000..2c21c9785 --- /dev/null +++ b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs @@ -0,0 +1,28 @@ +using FilterLists.Agent.AppSettings; +using Microsoft.ApplicationInsights; +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace FilterLists.Agent.Infrastructure.ApplicationInsights +{ + public static class ServiceCollectionExtensions + { + public static void AddApplicationInsight(this IServiceCollection services) + { + services.AddSingleton(b => + { + var applicationInsightsSettings = b.GetService>().Value; + return new TelemetryConfiguration + { + InstrumentationKey = applicationInsightsSettings.InstrumentationKey + }; + }); + services.AddSingleton(b => + { + var configuration = b.GetService(); + return new TelemetryClient(configuration); + }); + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs b/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs index e544abab1..b92d70bec 100644 --- a/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs +++ b/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs @@ -1,6 +1,7 @@ using System; using CommandLine; using FilterLists.Agent.AppSettings; +using FilterLists.Agent.Infrastructure.ApplicationInsights; using FilterLists.Agent.Infrastructure.Disk; using FilterLists.Agent.Infrastructure.FilterListsApi; using FilterLists.Agent.Infrastructure.GitHub; @@ -10,7 +11,6 @@ using Microsoft.ApplicationInsights; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; using Serilog; namespace FilterLists.Agent.Infrastructure.DependencyInjection @@ -20,7 +20,8 @@ public static class ServiceCollectionExtensions public static void ConfigureServices(this IServiceCollection services) { services.AddConfiguration(); - services.AddLoggingCustom(); + services.AddApplicationInsight(); + services.AddLogging(); services.AddLocalization(); services.AddTransient(); services.AddMediatR(AppDomain.CurrentDomain.GetAssemblies()); @@ -54,16 +55,8 @@ private static void ConfigureCustom(this IServiceCollection services, configuration.GetSection(typeof(TSettings).Name.Replace("Settings", "", StringComparison.Ordinal))); } - private static void AddLoggingCustom(this IServiceCollection services) + private static void AddLogging(this IServiceCollection services) { - services.AddSingleton(b => - { - var applicationInsightsSettings = b.GetService>().Value; - return new TelemetryClient - { - InstrumentationKey = applicationInsightsSettings.InstrumentationKey - }; - }); services.AddLogging(b => { var telemetryClient = b.Services.BuildServiceProvider().GetService(); diff --git a/src/FilterLists.Agent/Program.cs b/src/FilterLists.Agent/Program.cs index 1d017fba7..6fb268afa 100644 --- a/src/FilterLists.Agent/Program.cs +++ b/src/FilterLists.Agent/Program.cs @@ -4,9 +4,12 @@ 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 @@ -14,6 +17,7 @@ namespace FilterLists.Agent public static class Program { private static IServiceProvider _serviceProvider; + private static QuickPulseTelemetryModule _quickPulseTelemetryModule; public static async Task Main(string[] args) { @@ -39,10 +43,15 @@ private static void Setup() var serviceCollection = new ServiceCollection(); serviceCollection.ConfigureServices(); _serviceProvider = serviceCollection.BuildServiceProvider(); + + var telemetryConfiguration = _serviceProvider.GetService(); + _quickPulseTelemetryModule = new QuickPulseTelemetryModule(); + _quickPulseTelemetryModule.InitializeQuickPulseTelemetryModule(telemetryConfiguration); } private static void Teardown() { + _quickPulseTelemetryModule.Dispose(); var telemetryClient = _serviceProvider.GetService(); telemetryClient.Flush(); Thread.Sleep(5000);