Пример #1
0
        /// <summary>
        /// Initializes a new instance of the TelemetryConfiguration class.
        /// </summary>
        /// <param name="instrumentationKey">The instrumentation key this configuration instance will provide.</param>
        /// <param name="channel">The telemetry channel to provide with this configuration instance.</param>
        public TelemetryConfiguration(string instrumentationKey, ITelemetryChannel channel)
        {
            this.instrumentationKey = instrumentationKey ?? throw new ArgumentNullException(nameof(instrumentationKey));

            SetTelemetryChannelEndpoint(channel, this.EndpointContainer.FormattedIngestionEndpoint, force: true);
            var defaultSink = new TelemetrySink(this, channel);

            defaultSink.Name = "default";
            this.telemetrySinks.Add(defaultSink);
        }
Пример #2
0
        /// <summary>
        /// Initializes a new instance of the TelemetryConfiguration class.
        /// </summary>
        /// <param name="instrumentationKey">The instrumentation key this configuration instance will provide.</param>
        /// <param name="channel">The telemetry channel to provide with this configuration instance.</param>
        public TelemetryConfiguration(string instrumentationKey, ITelemetryChannel channel)
        {
            if (instrumentationKey == null)
            {
                throw new ArgumentNullException(nameof(instrumentationKey));
            }

            this.instrumentationKey = instrumentationKey;
            var defaultSink = new TelemetrySink(this, channel);

            defaultSink.Name = "default";
            this.telemetrySinks.Add(defaultSink);
        }
        public void ConfigurationDisposesAllSinks()
        {
            var configuration      = new TelemetryConfiguration();
            var commonChainBuilder = new TelemetryProcessorChainBuilder(configuration);

            configuration.TelemetryProcessorChainBuilder = commonChainBuilder;

            var  firstChannel         = new StubTelemetryChannel();
            bool firstChannelDisposed = false;

            firstChannel.OnDispose = () => firstChannelDisposed = true;
            configuration.DefaultTelemetrySink.TelemetryChannel = firstChannel;
            var  firstSinkChainBuilder = new TelemetryProcessorChainBuilder(configuration, configuration.DefaultTelemetrySink);
            bool firstSinkTelemetryProcessorDisposed = false;

            firstSinkChainBuilder.Use((next) =>
            {
                var firstSinkTelemetryProcessor       = new StubTelemetryProcessor(next);
                firstSinkTelemetryProcessor.OnDispose = () => firstSinkTelemetryProcessorDisposed = true;
                return(firstSinkTelemetryProcessor);
            });
            configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder = firstSinkChainBuilder;

            var  secondChannel         = new StubTelemetryChannel();
            bool secondChannelDisposed = false;

            secondChannel.OnDispose = () => secondChannelDisposed = true;
            var  secondSink             = new TelemetrySink(configuration, secondChannel);
            var  secondSinkChainBuilder = new TelemetryProcessorChainBuilder(configuration, secondSink);
            bool secondSinkTelemetryProcessorDisposed = false;

            secondSinkChainBuilder.Use((next) =>
            {
                var secondSinkTelemetryProcessor       = new StubTelemetryProcessor(next);
                secondSinkTelemetryProcessor.OnDispose = () => secondSinkTelemetryProcessorDisposed = true;
                return(secondSinkTelemetryProcessor);
            });
            secondSink.TelemetryProcessorChainBuilder = secondSinkChainBuilder;
            configuration.TelemetrySinks.Add(secondSink);

            var client = new TelemetryClient(configuration);

            client.TrackTrace("t1");
            configuration.Dispose();

            // We expect the channels to not be disposed (because they were created externally to sinks), but the processors should be disposed.
            Assert.IsTrue(firstSinkTelemetryProcessorDisposed);
            Assert.IsTrue(secondSinkTelemetryProcessorDisposed);
            Assert.IsFalse(firstChannelDisposed);
            Assert.IsFalse(secondChannelDisposed);
        }
Пример #4
0
        public void TelemetryIsDeliveredToMultipleSinks()
        {
            var configuration = new TelemetryConfiguration();

            var firstChannelTelemetry = new List <ITelemetry>();
            var firstChannel          = new StubTelemetryChannel();

            firstChannel.OnSend = (telemetry) => firstChannelTelemetry.Add(telemetry);
            configuration.DefaultTelemetrySink.TelemetryChannel = firstChannel;
            var chainBuilder = new TelemetryProcessorChainBuilder(configuration);

            configuration.TelemetryProcessorChainBuilder = chainBuilder;

            var secondChannelTelemetry = new List <ITelemetry>();
            var secondChannel          = new StubTelemetryChannel();

            secondChannel.OnSend = (telemetry) => secondChannelTelemetry.Add(telemetry);
            var secondSink = new TelemetrySink(configuration, secondChannel);

            configuration.TelemetrySinks.Add(secondSink);

            var thirdChannelTelemetry = new List <ITelemetry>();
            var thirdChannel          = new StubTelemetryChannel();

            thirdChannel.OnSend = (telemetry) => thirdChannelTelemetry.Add(telemetry);
            var thirdSink = new TelemetrySink(configuration, thirdChannel);

            configuration.TelemetrySinks.Add(thirdSink);

            var client = new TelemetryClient(configuration);

            client.TrackTrace("t1");

            Assert.AreEqual(1, firstChannelTelemetry.Count);
            Assert.AreEqual("t1", ((TraceTelemetry)firstChannelTelemetry[0]).Message);
            Assert.AreEqual(1, secondChannelTelemetry.Count);
            Assert.AreEqual("t1", ((TraceTelemetry)secondChannelTelemetry[0]).Message);
            Assert.AreEqual(1, thirdChannelTelemetry.Count);
            Assert.AreEqual("t1", ((TraceTelemetry)thirdChannelTelemetry[0]).Message);
        }
Пример #5
0
        public void MultipleSinkTelemetryProcessorsAreInvoked()
        {
            var configuration = new TelemetryConfiguration();

            var commonChainBuilder = new TelemetryProcessorChainBuilder(configuration);

            configuration.TelemetryProcessorChainBuilder = commonChainBuilder;
            commonChainBuilder.Use((next) =>
            {
                var commonProcessor       = new StubTelemetryProcessor(next);
                commonProcessor.OnProcess = (telemetry) => telemetry.Context.Properties.Add("SeenByCommonProcessor", "true");
                return(commonProcessor);
            });

            var firstChannelTelemetry = new List <ITelemetry>();
            var firstChannel          = new StubTelemetryChannel();

            firstChannel.OnSend = (telemetry) => firstChannelTelemetry.Add(telemetry);
            configuration.DefaultTelemetrySink.TelemetryChannel = firstChannel;

            var firstSinkChainBuilder = new TelemetryProcessorChainBuilder(configuration, configuration.DefaultTelemetrySink);

            firstSinkChainBuilder.Use((next) =>
            {
                var firstSinkTelemetryProcessor       = new StubTelemetryProcessor(next);
                firstSinkTelemetryProcessor.OnProcess = (telemetry) => telemetry.Context.Properties.Add("SeenByFirstSinkProcessor", "true");
                return(firstSinkTelemetryProcessor);
            });
            configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder = firstSinkChainBuilder;

            var secondChannelTelemetry = new List <ITelemetry>();
            var secondChannel          = new StubTelemetryChannel();

            secondChannel.OnSend = (telemetry) => secondChannelTelemetry.Add(telemetry);
            var secondSink = new TelemetrySink(configuration, secondChannel);

            configuration.TelemetrySinks.Add(secondSink);

            var secondSinkChainBuilder = new TelemetryProcessorChainBuilder(configuration, secondSink);

            secondSinkChainBuilder.Use((next) =>
            {
                var secondSinkTelemetryProcessor       = new StubTelemetryProcessor(next);
                secondSinkTelemetryProcessor.OnProcess = (telemetry) => telemetry.Context.Properties.Add("SeenBySecondSinkProcessor", "true");
                return(secondSinkTelemetryProcessor);
            });
            secondSink.TelemetryProcessorChainBuilder = secondSinkChainBuilder;

            var client = new TelemetryClient(configuration);

            client.TrackTrace("t1");

            Assert.AreEqual(1, firstChannelTelemetry.Count);
            Assert.IsTrue(firstChannelTelemetry[0].Context.Properties.ContainsKey("SeenByCommonProcessor"));
            Assert.IsTrue(firstChannelTelemetry[0].Context.Properties.ContainsKey("SeenByFirstSinkProcessor"));
            Assert.IsFalse(firstChannelTelemetry[0].Context.Properties.ContainsKey("SeenBySecondSinkProcessor"));

            Assert.AreEqual(1, secondChannelTelemetry.Count);
            Assert.IsTrue(secondChannelTelemetry[0].Context.Properties.ContainsKey("SeenByCommonProcessor"));
            Assert.IsFalse(secondChannelTelemetry[0].Context.Properties.ContainsKey("SeenByFirstSinkProcessor"));
            Assert.IsTrue(secondChannelTelemetry[0].Context.Properties.ContainsKey("SeenBySecondSinkProcessor"));
        }