enable AppInsights Live Metrics

This commit is contained in:
Collin M. Barrett 2019-07-12 23:25:27 -05:00
parent 74110bdff6
commit 3f6fb2b3ff
5 changed files with 68 additions and 11 deletions

View file

@ -34,6 +34,7 @@
<PackageReference Include="MediatR" Version="7.0.0" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.ApplicationInsights" Version="2.10.0" />
<PackageReference Include="Microsoft.ApplicationInsights.PerfCounterCollector" Version="2.10.0" />
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.3" />
<PackageReference Include="Microsoft.DotNet.Analyzers.Compatibility" Version="0.2.12-alpha" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.4" />

View file

@ -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);
}
}
}

View file

@ -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<IOptions<ApplicationInsightsSettings>>().Value;
return new TelemetryConfiguration
{
InstrumentationKey = applicationInsightsSettings.InstrumentationKey
};
});
services.AddSingleton(b =>
{
var configuration = b.GetService<TelemetryConfiguration>();
return new TelemetryClient(configuration);
});
}
}
}

View file

@ -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<Parser>();
services.AddMediatR(AppDomain.CurrentDomain.GetAssemblies());
@ -54,16 +55,8 @@ private static void ConfigureCustom<TSettings>(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<IOptions<ApplicationInsightsSettings>>().Value;
return new TelemetryClient
{
InstrumentationKey = applicationInsightsSettings.InstrumentationKey
};
});
services.AddLogging(b =>
{
var telemetryClient = b.Services.BuildServiceProvider().GetService<TelemetryClient>();

View file

@ -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<TelemetryConfiguration>();
_quickPulseTelemetryModule = new QuickPulseTelemetryModule();
_quickPulseTelemetryModule.InitializeQuickPulseTelemetryModule(telemetryConfiguration);
}
private static void Teardown()
{
_quickPulseTelemetryModule.Dispose();
var telemetryClient = _serviceProvider.GetService<TelemetryClient>();
telemetryClient.Flush();
Thread.Sleep(5000);