public RegisterTelemetryProcessor ( ITelemetryProcessor telemetryProcessor ) : void | ||
telemetryProcessor | ITelemetryProcessor | QuickPulseTelemetryProcessor instance to be registered with the module. |
return | void |
private static QuickPulseTelemetryModule InitializeQuickPulseModule() { var quickPulseModule = new QuickPulseTelemetryModule(); quickPulseModule.QuickPulseServiceEndpoint = "http://localhost:4555/QuickPulseService.svc/"; QuickPulseTelemetryProcessor processor = null; TelemetryConfiguration.Active.TelemetryProcessorChainBuilder.Use( (next) => { processor = new QuickPulseTelemetryProcessor(next); quickPulseModule.RegisterTelemetryProcessor(processor); return processor; }); TelemetryConfiguration.Active.TelemetryProcessorChainBuilder.Build(); quickPulseModule.Initialize(TelemetryConfiguration.Active); return quickPulseModule; }
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[@"\Processor(_Total)\% Processor Time"]) > double.Epsilon)); }
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 module = new QuickPulseTelemetryModule(collectionTimeSlotManager, accumulatorManager, serviceClient, performanceCollector, 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 Assert.AreEqual(TelemetryProcessorCount, QuickPulseTestHelper.GetTelemetryProcessors(module).Count); Assert.AreEqual(1, serviceClient.SnappedSamples.Count(s => s.AIRequestsPerSecond > 0)); Assert.AreEqual(1, serviceClient.SnappedSamples.Count(s => s.AIRequestsFailedPerSecond > 0)); Assert.AreEqual(1, serviceClient.SnappedSamples.Count(s => s.AIDependencyCallsPerSecond > 0)); Assert.AreEqual(1, serviceClient.SnappedSamples.Count(s => s.AIDependencyCallsFailedPerSecond > 0)); }
public void QuickPulseTelemetryModuleDoesNotRegisterSameProcessorMoreThanOnce() { // ARRANGE var module = new QuickPulseTelemetryModule(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 QuickPulseTelemetryModuleDoesNotRegisterNullProcessor() { // ARRANGE var module = new QuickPulseTelemetryModule(null, null, null, null, null); // ACT module.RegisterTelemetryProcessor(null); // ASSERT }