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);
        }
示例#5
0
        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);
        }
示例#6
0
        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());
        }
示例#11
0
        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);
        }
示例#12
0
        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);
        }
示例#15
0
        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);
        }
示例#18
0
        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());
        }
示例#23
0
        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);
        }
示例#24
0
        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);
        }
示例#26
0
        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
        }
示例#28
0
        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);
        }
示例#29
0
        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);
        }