public void QuickPulseTelemetryModuleInteractsWithTelemetryProcessorCorrectlyWhenLoadedBySdkProcessorFirst() { // ARRANGE var configXml = @"<?xml version=""1.0"" encoding=""utf-8""?> <ApplicationInsights xmlns=""http://schemas.microsoft.com/ApplicationInsights/2013/Settings""> <InstrumentationKey>some ikey</InstrumentationKey> <TelemetryProcessors> <Add Type=""Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector""/> </TelemetryProcessors> <TelemetryModules> <Add Type=""Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector""/> </TelemetryModules> </ApplicationInsights>"; File.WriteAllText(this.configFilePath, configXml); // ACT var config = TelemetryConfiguration.Active; // 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 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 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 QuickPulseTelemetryModuleSupportsMultipleTelemetryProcessorsForSingleConfiguration() { // ARRANGE var configXml = @"<?xml version=""1.0"" encoding=""utf-8""?> <ApplicationInsights xmlns=""http://schemas.microsoft.com/ApplicationInsights/2013/Settings""> <InstrumentationKey>some ikey</InstrumentationKey> <TelemetryModules> <Add Type=""Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector""/> </TelemetryModules> <TelemetryProcessors> <Add Type=""Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector""/> </TelemetryProcessors> </ApplicationInsights>"; File.WriteAllText(this.configFilePath, configXml); var config = TelemetryConfiguration.Active; // ACT var telemetryProcessors = new List <IQuickPulseTelemetryProcessor>(); const int TelemetryProcessorCount = 4; for (int i = 0; i < TelemetryProcessorCount; i++) { // this recreates config.TelemetryProcessors collection, and all its members are reinstantiated var builder = config.TelemetryProcessorChainBuilder; builder = builder.Use(current => new SimpleTelemetryProcessorSpy()); builder.Build(); telemetryProcessors.Add(config.TelemetryProcessors.OfType <QuickPulseTelemetryProcessor>().Single()); } // ASSERT var module = TelemetryModules.Instance.Modules.OfType <QuickPulseTelemetryModule>().SingleOrDefault(); var registeredProcessors = QuickPulseTestHelper.GetTelemetryProcessors(module); Assert.AreEqual(TelemetryProcessorCount + 1, registeredProcessors.Count); // one was there after the initial configuration loading Assert.IsTrue(telemetryProcessors.TrueForAll(registeredProcessors.Contains)); }
public void QuickPulseTelemetryModuleSupportsMultipleTelemetryProcessorsForMultipleConfigurations() { // ARRANGE var pollingInterval = TimeSpan.FromMilliseconds(1); var collectionInterval = TimeSpan.FromMilliseconds(1); var timings = new QuickPulseTimings(pollingInterval, collectionInterval); var collectionTimeSlotManager = new QuickPulseCollectionTimeSlotManagerMock(timings); var accumulatorManager = new QuickPulseDataAccumulatorManager(); var serviceClient = new QuickPulseServiceClientMock { ReturnValueFromPing = true, ReturnValueFromSubmitSample = true }; var performanceCollector = new PerformanceCollectorMock(); var topCpuCollector = new QuickPulseTopCpuCollectorMock(); var module = new QuickPulseTelemetryModule(collectionTimeSlotManager, accumulatorManager, serviceClient, performanceCollector, topCpuCollector, timings); const int TelemetryProcessorCount = 4; var ikey = "some ikey"; var config = new TelemetryConfiguration { InstrumentationKey = ikey }; // spawn a bunch of configurations, each one having an individual instance of QuickPulseTelemetryProcessor var telemetryProcessors = new List <QuickPulseTelemetryProcessor>(); for (int i = 0; i < TelemetryProcessorCount; i++) { var configuration = new TelemetryConfiguration(); var builder = configuration.TelemetryProcessorChainBuilder; builder = builder.Use(current => new QuickPulseTelemetryProcessor(new SimpleTelemetryProcessorSpy())); builder.Build(); telemetryProcessors.Add(configuration.TelemetryProcessors.OfType <QuickPulseTelemetryProcessor>().Single()); } // ACT foreach (var telemetryProcessor in telemetryProcessors) { module.RegisterTelemetryProcessor(telemetryProcessor); } module.Initialize(config); Thread.Sleep(TimeSpan.FromMilliseconds(100)); // send data to each instance of QuickPulseTelemetryProcessor var request = new RequestTelemetry() { ResponseCode = "200", Success = true, Context = { InstrumentationKey = ikey } }; telemetryProcessors[0].Process(request); request = new RequestTelemetry() { ResponseCode = "500", Success = false, Context = { InstrumentationKey = ikey } }; telemetryProcessors[1].Process(request); var dependency = new DependencyTelemetry() { Success = true, Context = { InstrumentationKey = ikey } }; telemetryProcessors[2].Process(dependency); dependency = new DependencyTelemetry() { Success = false, Context = { InstrumentationKey = ikey } }; telemetryProcessors[3].Process(dependency); Thread.Sleep(TimeSpan.FromMilliseconds(100)); // ASSERT // verify that every telemetry processor has contributed to the accumulator int samplesWithSomeRequests = serviceClient.SnappedSamples.Count(s => s.AIRequestsPerSecond > 0); int samplesWithSomeDependencies = serviceClient.SnappedSamples.Count(s => s.AIDependencyCallsPerSecond > 0); Assert.AreEqual(TelemetryProcessorCount, QuickPulseTestHelper.GetTelemetryProcessors(module).Count); Assert.IsTrue(samplesWithSomeRequests > 0 && samplesWithSomeRequests <= 2); Assert.AreEqual(1, serviceClient.SnappedSamples.Count(s => s.AIRequestsFailedPerSecond > 0)); Assert.IsTrue(samplesWithSomeDependencies > 0 && samplesWithSomeDependencies < 2); Assert.AreEqual(1, serviceClient.SnappedSamples.Count(s => s.AIDependencyCallsFailedPerSecond > 0)); }