private void AddTelemetryChannelAndProcessorsForFullFramework(TelemetryConfiguration configuration) { #if NET451 // Adding Server Telemetry Channel if services doesn't have an existing channel configuration.TelemetryChannel = this.telemetryChannel ?? new ServerTelemetryChannel(); if (configuration.TelemetryChannel is ServerTelemetryChannel) { // Enabling Quick Pulse Metric Stream if (this.applicationInsightsServiceOptions.EnableQuickPulseMetricStream) { var quickPulseModule = new QuickPulseTelemetryModule(); quickPulseModule.Initialize(configuration); QuickPulseTelemetryProcessor processor = null; configuration.TelemetryProcessorChainBuilder.Use((next) => { processor = new QuickPulseTelemetryProcessor(next); quickPulseModule.RegisterTelemetryProcessor(processor); return(processor); }); } // Enabling Adaptive Sampling and initializing server telemetry channel with configuration if (configuration.TelemetryChannel.GetType() == typeof(ServerTelemetryChannel)) { if (this.applicationInsightsServiceOptions.EnableAdaptiveSampling) { configuration.TelemetryProcessorChainBuilder.UseAdaptiveSampling(); } (configuration.TelemetryChannel as ServerTelemetryChannel).Initialize(configuration); } configuration.TelemetryProcessorChainBuilder.Build(); } #endif }
public LogException(string RoleName) { TelemetryConfiguration configuration = TelemetryConfiguration.Active; //configuration.InstrumentationKey = "29502735-045e-4be0-ac49-7e75782e5582"; configuration.InstrumentationKey = "c03887f2-1122-4e53-b8f1-30f6bbd96846"; //configuration.TelemetryInitializers.Add(new CloudRoleNameInitializer()); QuickPulseTelemetryProcessor processor = null; configuration.TelemetryProcessorChainBuilder .Use((next) => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }) .Build(); var QuickPulse = new QuickPulseTelemetryModule(); QuickPulse.Initialize(configuration); QuickPulse.RegisterTelemetryProcessor(processor); _telemetryClient = new TelemetryClient(configuration); _telemetryClient.Context.Cloud.RoleName = RoleName; Telemetry = _telemetryClient; }
private void AddQuickPulse(TelemetryConfiguration configuration) { if (this.applicationInsightsServiceOptions.EnableQuickPulseMetricStream) { QuickPulseTelemetryModule quickPulseModule = this.modules.FirstOrDefault((module) => module.GetType() == typeof(QuickPulseTelemetryModule)) as QuickPulseTelemetryModule; if (quickPulseModule != null) { QuickPulseTelemetryProcessor processor = null; configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder.Use((next) => { processor = new QuickPulseTelemetryProcessor(next); quickPulseModule.RegisterTelemetryProcessor(processor); return(processor); }); } else { #if AI_ASPNETCORE_WEB AspNetCoreEventSource.Instance.UnableToFindModuleToConfigure("QuickPulseTelemetryModule"); #else WorkerServiceEventSource.Instance.UnableToFindModuleToConfigure("QuickPulseTelemetryModule"); #endif } } }
public void QuickPulseTelemetryProcessorFiltersOutDependencyCallsToDefaultQuickPulseServiceEndpointInIdleMode() { // ARRANGE var simpleTelemetryProcessorSpy = new SimpleTelemetryProcessorSpy(); var telemetryProcessor = new QuickPulseTelemetryProcessor(simpleTelemetryProcessorSpy); // ACT telemetryProcessor.Process(new DependencyTelemetry() { Name = "http://microsoft.ru" }); telemetryProcessor.Process(new DependencyTelemetry() { Name = "http://rt.services.visualstudio.com/blabla" }); telemetryProcessor.Process(new DependencyTelemetry() { Name = "https://bing.com" }); // ASSERT Assert.AreEqual(2, simpleTelemetryProcessorSpy.ReceivedCalls); Assert.AreEqual("http://microsoft.ru", (simpleTelemetryProcessorSpy.ReceivedItems[0] as DependencyTelemetry).Name); Assert.AreEqual("https://bing.com", (simpleTelemetryProcessorSpy.ReceivedItems[1] as DependencyTelemetry).Name); }
public void Start(ServiceContext context) { //Will track each dependency call as a request. //Not needed for now //new ServiceRemotingRequestTrackingTelemetryModule().Initialize(configuration); new ServiceRemotingDependencyTrackingTelemetryModule().Initialize(TelemetryConfiguration.Active); //QuickPulseTelemtryProcessor is needed for Live metrics QuickPulseTelemetryProcessor processor = null; var telemetry = new ServiceFabricContextTelemetryInitializer(context); TelemetryConfiguration.Active.TelemetryInitializers.Add(telemetry); TelemetryConfiguration.Active.TelemetryProcessorChainBuilder .Use(next => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }) .Build(); var quickPulse = new QuickPulseTelemetryModule(); quickPulse.Initialize(TelemetryConfiguration.Active); quickPulse.RegisterTelemetryProcessor(processor); }
public Misc() { var configuration = new TelemetryConfiguration("160f0ea2-8aa2-416f-83c0-813efea62e1f"); QuickPulseTelemetryProcessor processor = null; configuration.TelemetryProcessorChainBuilder .Use((next) => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }) .Build(); var QuickPulse = new QuickPulseTelemetryModule() { AuthenticationApiKey = "qlcmbw246dpsur28kin18fkbs4vbbtnfdlotsox0" }; QuickPulse.Initialize(configuration); QuickPulse.RegisterTelemetryProcessor(processor); foreach (var telemetryProcessor in configuration.TelemetryProcessors) { if (telemetryProcessor is ITelemetryModule telemetryModule) { telemetryModule.Initialize(configuration); } } client = new TelemetryClient(configuration); }
public void QuickPulseTelemetryProcessorIgnoresTelemetryItemsToDifferentInstrumentationKeys() { // ARRANGE var accumulatorManager = new QuickPulseDataAccumulatorManager(); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); ((IQuickPulseTelemetryProcessor)telemetryProcessor).StartCollection( accumulatorManager, new Uri("http://microsoft.com"), new TelemetryConfiguration() { InstrumentationKey = "some ikey" }); // ACT telemetryProcessor.Process(new RequestTelemetry() { Context = { InstrumentationKey = "some other ikey" } }); telemetryProcessor.Process(new RequestTelemetry() { Context = { InstrumentationKey = "some ikey" } }); // ASSERT Assert.AreEqual(1, accumulatorManager.CurrentDataAccumulator.AIRequestCount); }
public void QuickPulseTelemetryProcessorKeepsAccurateCountOfExceptions() { // ARRANGE var accumulatorManager = new QuickPulseDataAccumulatorManager(); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); ((IQuickPulseTelemetryProcessor)telemetryProcessor).StartCollection( accumulatorManager, new Uri("http://microsoft.com"), new TelemetryConfiguration() { InstrumentationKey = "some ikey" }); // ACT telemetryProcessor.Process(new ExceptionTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new ExceptionTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new ExceptionTelemetry() { Context = { InstrumentationKey = "some ikey" } }); // ASSERT Assert.AreEqual(3, accumulatorManager.CurrentDataAccumulator.AIExceptionCount); }
public void QuickPulseTelemetryProcessorStopsCollection() { // ARRANGE var accumulatorManager = new QuickPulseDataAccumulatorManager(); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); var endpoint = new Uri("http://microsoft.com"); var config = new TelemetryConfiguration() { InstrumentationKey = "some ikey" }; // ACT ((IQuickPulseTelemetryProcessor)telemetryProcessor).StartCollection(accumulatorManager, endpoint, config); telemetryProcessor.Process(new RequestTelemetry() { Context = { InstrumentationKey = "some ikey" } }); ((IQuickPulseTelemetryProcessor)telemetryProcessor).StopCollection(); telemetryProcessor.Process(new DependencyTelemetry() { Context = { InstrumentationKey = "some ikey" } }); // ASSERT Assert.AreEqual(1, accumulatorManager.CurrentDataAccumulator.AIRequestCount); Assert.AreEqual(0, accumulatorManager.CurrentDataAccumulator.AIDependencyCallCount); }
public void QuickPulseTelemetryModuleInteractsWithTelemetryProcessorCorrectlyWhenLoadedAtRuntime() { // ARRANGE TelemetryConfiguration config = new TelemetryConfiguration(); QuickPulseTelemetryModule newModule = new QuickPulseTelemetryModule(); newModule.Initialize(config); config.TelemetryProcessorChainBuilder.Use(next => { QuickPulseTelemetryProcessor processor = new QuickPulseTelemetryProcessor(next); newModule.RegisterTelemetryProcessor(processor); return(processor); }); config.TelemetryProcessorChainBuilder.Build(); TelemetryModules.Instance.Modules.Add(newModule); // ASSERT var module = TelemetryModules.Instance.Modules.OfType <QuickPulseTelemetryModule>().SingleOrDefault(); Assert.IsNotNull(module); var telemetryProcessor = config.TelemetryProcessors.OfType <QuickPulseTelemetryProcessor>().SingleOrDefault(); Assert.IsNotNull(telemetryProcessor); Assert.AreEqual(telemetryProcessor, QuickPulseTestHelper.GetTelemetryProcessors(module).SingleOrDefault()); }
public static IHostConfiguration EnableLiveMetricsStream(this IHostConfiguration hostConfiguration, TelemetryConfiguration telemetryConfiguration) { QuickPulseTelemetryProcessor processor = null; telemetryConfiguration.TelemetryProcessorChainBuilder .Use(next => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }) .Build(); var quickPulse = new QuickPulseTelemetryModule(); quickPulse.Initialize(telemetryConfiguration); quickPulse.RegisterTelemetryProcessor(processor); foreach (var telemetryProcessor in telemetryConfiguration.TelemetryProcessors) { if (telemetryProcessor is ITelemetryModule telemetryModule) { telemetryModule.Initialize(telemetryConfiguration); } } return(hostConfiguration); }
private void AddTelemetryChannelAndProcessors(TelemetryConfiguration configuration) { configuration.TelemetryChannel = this.telemetryChannel ?? new ServerTelemetryChannel(); if (configuration.TelemetryChannel is ServerTelemetryChannel) { if (this.applicationInsightsServiceOptions.EnableQuickPulseMetricStream) { var quickPulseModule = new QuickPulseTelemetryModule(); quickPulseModule.Initialize(configuration); QuickPulseTelemetryProcessor processor = null; configuration.TelemetryProcessorChainBuilder.Use((next) => { processor = new QuickPulseTelemetryProcessor(next); quickPulseModule.RegisterTelemetryProcessor(processor); return(processor); }); } if (this.applicationInsightsServiceOptions.EnableAdaptiveSampling) { configuration.TelemetryProcessorChainBuilder.UseAdaptiveSampling(); } } }
public ApplicationInsightsWriter(string instrumentationKey, WriterOptions options) { TelemetryConfiguration.Active.InstrumentationKey = instrumentationKey; TelemetryProcessorChainBuilder builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder; QuickPulseTelemetryProcessor quickPulseProcessor = null; // add our own telemetry processor that can override session based variables //builder.Use(next => new LogMagicTelemetryProcessor(next)); // optionally enable QuickPulse /* * - Free and is not counted towards the bill. * - The latency is 1 second compared to a few minutes. * - Retention is while the data is on the chart, not 90 days. * - Data is only streamed while you are in Live Metrics view. */ if (options.EnableQuickPulse) { builder.Use((next) => { quickPulseProcessor = new QuickPulseTelemetryProcessor(next); return(quickPulseProcessor); }); } builder.Build(); _telemetryClient = new TelemetryClient(TelemetryConfiguration.Active); _telemetryClient.InstrumentationKey = instrumentationKey; _context = new InsightsContext(_telemetryClient, options); if (options.EnableQuickPulse) { var quickPulse = new QuickPulseTelemetryModule(); quickPulse.Initialize(TelemetryConfiguration.Active); quickPulse.RegisterTelemetryProcessor(quickPulseProcessor); } #if NETFULL // see https://github.com/Microsoft/ApplicationInsights-dotnet-server/blob/develop/Src/PerformanceCollector/Perf.Shared/PerformanceCollectorModule.cs if (options.CollectPerformanceCounters) { //optionally enable performance counters collection var pcm = new PerformanceCollectorModule(); //custom counters can be easily added here if required pcm.Counters.Add(new PerformanceCounterCollectionRequest(@"\.NET CLR Memory(LogMagic.Console)\# GC Handles", "GC Handles")); pcm.Initialize(TelemetryConfiguration.Active); } #endif TelemetryConfiguration.Active.TelemetryInitializers.Add(new OperationTelemetryInitialiser()); _options = options; }
public void QuickPulseTelemetryModuleIsInitializedBySdk() { var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); var configuration = new TelemetryConfiguration(); var builder = configuration.TelemetryProcessorChainBuilder; builder = builder.Use(current => telemetryProcessor); builder.Build(); new QuickPulseTelemetryModule().Initialize(configuration); }
public void QuickPulseTelemetryModuleCollectsData() { // ARRANGE var pause = TimeSpan.FromMilliseconds(100); var interval = TimeSpan.FromMilliseconds(1); var timings = new QuickPulseTimings(interval, interval); var collectionTimeSlotManager = new QuickPulseCollectionTimeSlotManagerMock(timings); var serviceClient = new QuickPulseServiceClientMock { ReturnValueFromPing = true, ReturnValueFromSubmitSample = true }; var performanceCollector = new PerformanceCollectorMock(); var module = new QuickPulseTelemetryModule(collectionTimeSlotManager, null, serviceClient, performanceCollector, timings); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); telemetryProcessor.Initialize(new TelemetryConfiguration()); module.RegisterTelemetryProcessor(telemetryProcessor); // ACT module.Initialize(new TelemetryConfiguration() { InstrumentationKey = "some ikey" }); Thread.Sleep(pause); telemetryProcessor.Process(new RequestTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new DependencyTelemetry() { Context = { InstrumentationKey = "some ikey" } }); Thread.Sleep(pause); Assert.AreEqual(1, serviceClient.PingCount); // ASSERT serviceClient.ReturnValueFromPing = false; serviceClient.ReturnValueFromSubmitSample = false; Thread.Sleep(pause); Assert.IsTrue(serviceClient.SnappedSamples.Count > 0); Assert.IsTrue(serviceClient.SnappedSamples.Any(s => s.AIRequestsPerSecond > 0)); Assert.IsTrue(serviceClient.SnappedSamples.Any(s => s.AIDependencyCallsPerSecond > 0)); Assert.IsTrue( serviceClient.SnappedSamples.Any( s => Math.Abs(s.PerfCountersLookup[@"\ASP.NET Applications(__Total__)\Requests In Application Queue"]) > double.Epsilon)); }
public static void Setup() { TelemetryConfiguration.Active.InstrumentationKey = "32cf968e-40d4-42d3-a2de-037140fd4371"; AddAndInitializeModule <UnhandledExceptionTelemetryModule>(); AddAndInitializeModule <UnobservedExceptionTelemetryModule>(); // for performance counter collection see: http://apmtips.com/blog/2015/10/07/performance-counters-in-non-web-applications/ AddAndInitializeModule <PerformanceCollectorModule>(); // for more information on QuickPulse see: http://apmtips.com/blog/2017/02/13/enable-application-insights-live-metrics-from-code/ (note the corresponding processor below) var quickPulseModule = AddAndInitializeModule <QuickPulseTelemetryModule>(); #pragma warning disable S1313 AddAndInitializeModule(() => new DependencyTrackingTelemetryModule { ExcludeComponentCorrelationHttpHeadersOnDomains = { "core.windows.net", "core.chinacloudapi.cn", "core.cloudapi.de", "core.usgovcloudapi.net", "localhost", "127.0.0.1", }, }); #pragma warning restore S1313 TelemetryConfiguration.Active.TelemetryInitializers.Add(new BuildInfoConfigComponentVersionTelemetryInitializer()); TelemetryConfiguration.Active.TelemetryInitializers.Add(new DeviceTelemetryInitializer()); TelemetryConfiguration.Active.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer()); TelemetryConfiguration.Active.TelemetryInitializers.Add(new AzureWebAppRoleEnvironmentTelemetryInitializer()); TelemetryConfiguration.Active.TelemetryProcessorChainBuilder .Use(next => { var processor = new QuickPulseTelemetryProcessor(next); quickPulseModule.RegisterTelemetryProcessor(processor); return(processor); }) .Use(next => new AutocollectedMetricsExtractor(next)) .Build(); // ReSharper disable once UseObjectOrCollectionInitializer TelemetryConfiguration.Active.TelemetryChannel = new InMemoryChannel(); #if DEBUG TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true; #endif AppDomain.CurrentDomain.ProcessExit += (s, e) => Client.Flush(); }
internal TelemetryConfiguration InitializeConfiguration() { TelemetryConfiguration config = new TelemetryConfiguration() { InstrumentationKey = _instrumentationKey }; AddInitializers(config); // Plug in Live stream and adaptive sampling QuickPulseTelemetryProcessor processor = null; TelemetryProcessorChainBuilder builder = config.TelemetryProcessorChainBuilder .Use((next) => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }); if (_samplingSettings != null) { builder.Use((next) => { return(new AdaptiveSamplingTelemetryProcessor(_samplingSettings, null, next)); }); } builder.Build(); _quickPulseModule = new QuickPulseTelemetryModule(); _quickPulseModule.Initialize(config); _quickPulseModule.RegisterTelemetryProcessor(processor); // Plug in perf counters _perfModule = new PerformanceCollectorModule(); _perfModule.Initialize(config); // Configure the TelemetryChannel ITelemetryChannel channel = CreateTelemetryChannel(); // call Initialize if available ITelemetryModule module = channel as ITelemetryModule; if (module != null) { module.Initialize(config); } config.TelemetryChannel = channel; return(config); }
private void UseQuickPulse() { var quickPulseModule = new QuickPulseTelemetryModule(); quickPulseModule.Initialize(TelemetryConfiguration.Active); TelemetryConfiguration.Active.TelemetryProcessorChainBuilder.Use(next => { var processor = new QuickPulseTelemetryProcessor(next); quickPulseModule.RegisterTelemetryProcessor(processor); return(processor); }); TelemetryConfiguration.Active.TelemetryProcessorChainBuilder.Build(); }
public void QuickPulseTelemetryModuleDoesNotRegisterSameProcessorMoreThanOnce() { // ARRANGE var module = new QuickPulseTelemetryModule(null, null, null, null, null, null); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); // ACT module.RegisterTelemetryProcessor(telemetryProcessor); module.RegisterTelemetryProcessor(telemetryProcessor); module.RegisterTelemetryProcessor(telemetryProcessor); // ASSERT Assert.AreEqual(telemetryProcessor, QuickPulseTestHelper.GetTelemetryProcessors(module).Single()); }
public void QuickPulseTelemetryProcessorCallsNext() { // ARRANGE var spy = new SimpleTelemetryProcessorSpy(); var telemetryProcessor = new QuickPulseTelemetryProcessor(spy); // ACT telemetryProcessor.Process(new RequestTelemetry() { Context = { InstrumentationKey = "some ikey" } }); // ASSERT Assert.AreEqual(1, spy.ReceivedCalls); }
public void QuickPulseTelemetryProcessorIgnoresUnrelatedTelemetryItems() { // ARRANGE var accumulatorManager = new QuickPulseDataAccumulatorManager(); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); ((IQuickPulseTelemetryProcessor)telemetryProcessor).StartCollection( accumulatorManager, new Uri("http://microsoft.com"), new TelemetryConfiguration() { InstrumentationKey = "some ikey" }); // ACT telemetryProcessor.Process(new EventTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new ExceptionTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new MetricTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new PageViewTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new PerformanceCounterTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new SessionStateTelemetry() { Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process(new TraceTelemetry() { Context = { InstrumentationKey = "some ikey" } }); // ASSERT Assert.AreEqual(0, accumulatorManager.CurrentDataAccumulator.AIRequestCount); Assert.AreEqual(0, accumulatorManager.CurrentDataAccumulator.AIDependencyCallCount); }
public void QuickPulseTelemetryProcessorRegistersWithModule() { // ARRANGE var module = new QuickPulseTelemetryModule(null, null, null, null, null); TelemetryModules.Instance.Modules.Add(module); // ACT var spy = new SimpleTelemetryProcessorSpy(); var telemetryProcessor = new QuickPulseTelemetryProcessor(spy); telemetryProcessor.Initialize(new TelemetryConfiguration()); // ASSERT Assert.AreEqual(telemetryProcessor, QuickPulseTestHelper.GetTelemetryProcessors(module).Single()); }
public void Enable() { QuickPulseTelemetryProcessor processor = null; _configuration.TelemetryProcessorChainBuilder .Use(next => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }) .Build(); var quickPulse = new QuickPulseTelemetryModule(); quickPulse.Initialize(_configuration); quickPulse.RegisterTelemetryProcessor(processor); }
public static QuickPulseTelemetryModule InitializePerformanceTracking(TelemetryConfiguration configuration) { QuickPulseTelemetryProcessor processor = null; configuration.TelemetryProcessorChainBuilder .Use((next) => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }) .Build(); QuickPulseTelemetryModule QuickPulse = new QuickPulseTelemetryModule(); QuickPulse.Initialize(configuration); QuickPulse.RegisterTelemetryProcessor(processor); return(QuickPulse); }
public void QuickPulseTelemetryProcessorKeepsAccurateCountOfDependencies() { // ARRANGE var accumulatorManager = new QuickPulseDataAccumulatorManager(); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); ((IQuickPulseTelemetryProcessor)telemetryProcessor).StartCollection( accumulatorManager, new Uri("http://microsoft.com"), new TelemetryConfiguration() { InstrumentationKey = "some ikey" }); // ACT telemetryProcessor.Process( new DependencyTelemetry() { Success = true, Duration = TimeSpan.FromSeconds(1), Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process( new DependencyTelemetry() { Success = true, Duration = TimeSpan.FromSeconds(1), Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process( new DependencyTelemetry() { Success = false, Duration = TimeSpan.FromSeconds(2), Context = { InstrumentationKey = "some ikey" } }); telemetryProcessor.Process( new DependencyTelemetry() { Success = null, Duration = TimeSpan.FromSeconds(3), Context = { InstrumentationKey = "some ikey" } }); // ASSERT Assert.AreEqual(4, accumulatorManager.CurrentDataAccumulator.AIDependencyCallCount); Assert.AreEqual(1 + 1 + 2 + 3, TimeSpan.FromTicks(accumulatorManager.CurrentDataAccumulator.AIDependencyCallDurationInTicks).TotalSeconds); Assert.AreEqual(2, accumulatorManager.CurrentDataAccumulator.AIDependencyCallSuccessCount); Assert.AreEqual(1, accumulatorManager.CurrentDataAccumulator.AIDependencyCallFailureCount); }
private void InitializeQuickPulse() { var quickPulseModule = new QuickPulseTelemetryModule(); quickPulseModule.Initialize(this.configuration); QuickPulseTelemetryProcessor processor = null; this.configuration.TelemetryProcessorChainBuilder.Use( next => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }) .Build(); quickPulseModule.RegisterTelemetryProcessor(processor); this.initializedModules.Add(quickPulseModule); }
public void QuickPulseTelemetryProcessorMustBeStoppedBeforeReceivingStartCommand() { // ARRANGE var accumulatorManager = new QuickPulseDataAccumulatorManager(); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); ((IQuickPulseTelemetryProcessor)telemetryProcessor).StartCollection( accumulatorManager, new Uri("http://test.com"), new TelemetryConfiguration()); // ACT ((IQuickPulseTelemetryProcessor)telemetryProcessor).StartCollection( accumulatorManager, new Uri("http://test.com"), new TelemetryConfiguration()); // ASSERT // must throw }
public static TelemetryConfiguration Create(AppInsightsConfig appInsightsConfig) { var teleConfig = new TelemetryConfiguration(appInsightsConfig.InstrumentationKey); var teleBuilder = teleConfig.TelemetryProcessorChainBuilder; QuickPulseTelemetryProcessor quickPulseTelemetryProcessor = null; teleBuilder.Use(next => { quickPulseTelemetryProcessor = new QuickPulseTelemetryProcessor(next); return(quickPulseTelemetryProcessor); }); var quickPulse = new QuickPulseTelemetryModule(); quickPulse.Initialize(teleConfig); quickPulse.RegisterTelemetryProcessor(quickPulseTelemetryProcessor); return(teleConfig); }
public void Enable() { var module = new DependencyTrackingTelemetryModule(); module.Initialize(configuration); QuickPulseTelemetryProcessor processor = null; configuration.TelemetryProcessorChainBuilder .Use(next => { processor = new QuickPulseTelemetryProcessor(next); return(processor); }) .Build(); var quickPulse = new QuickPulseTelemetryModule(); quickPulse.Initialize(configuration); quickPulse.RegisterTelemetryProcessor(processor); }
public void QuickPulseTelemetryProcessorHandlesMultipleThreadsCorrectly() { // ARRANGE var accumulatorManager = new QuickPulseDataAccumulatorManager(); var telemetryProcessor = new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy()); ((IQuickPulseTelemetryProcessor)telemetryProcessor).StartCollection( accumulatorManager, new Uri("http://microsoft.com"), new TelemetryConfiguration() { InstrumentationKey = "some ikey" }); // expected data loss if threading is misimplemented is around 10% (established through experiment) int taskCount = 10000; var tasks = new List <Task>(taskCount); for (int i = 0; i < taskCount; i++) { var requestTelemetry = new RequestTelemetry() { ResponseCode = (i % 2 == 0) ? "200" : "500", Duration = TimeSpan.FromMilliseconds(i), Context = { InstrumentationKey = "some ikey" } }; var task = new Task(() => telemetryProcessor.Process(requestTelemetry)); tasks.Add(task); } // ACT tasks.ForEach(task => task.Start()); Task.WaitAll(tasks.ToArray()); // ASSERT Assert.AreEqual(taskCount, accumulatorManager.CurrentDataAccumulator.AIRequestCount); Assert.AreEqual(taskCount / 2, accumulatorManager.CurrentDataAccumulator.AIRequestSuccessCount); }