Пример #1
0
        public void ConnectionStringOverridesConfigurationFile()
        {
            const string aiConfiguration = @"
                <?xml version=""1.0"" encoding=""utf-8""?>
                <ApplicationInsights xmlns=""http://schemas.microsoft.com/ApplicationInsights/2013/Settings"">
                    <InstrumentationKey>c8da242c-9f2d-45ab-913c-c9953516e9c2</InstrumentationKey>
                    <TelemetryChannel Type=""Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel""/>
                </ApplicationInsights>
            ";

            var healthReporterMock = new Mock <IHealthReporter>();
            var telemetry          = new TraceTelemetry();

            using (var configFile = new TemporaryFile())
            {
                configFile.Write(aiConfiguration);
                var config = new ApplicationInsightsOutputConfiguration();
                config.ConnectionString      = "InstrumentationKey=d0198460-ce4a-4efa-9e17-3edef2b40f15";
                config.ConfigurationFilePath = configFile.FilePath;

                var output = new ApplicationInsightsOutput(config, healthReporterMock.Object);

                VerifyNoErrorsOrWarnings(healthReporterMock);

                output.telemetryClient.InitializeInstrumentationKey(telemetry);
            }

            Assert.Equal("d0198460-ce4a-4efa-9e17-3edef2b40f15", telemetry.Context.InstrumentationKey, StringComparer.OrdinalIgnoreCase);
        }
Пример #2
0
        private void Initialize(ApplicationInsightsOutputConfiguration aiOutputConfiguration)
        {
            Debug.Assert(aiOutputConfiguration != null);
            Debug.Assert(this.healthReporter != null);

            if (!aiOutputConfiguration.Validate(out string validationError))
            {
                this.healthReporter.ReportWarning($"{nameof(ApplicationInsightsOutput)}: invalid configuration. {validationError} No data will be sent to Application Insights", EventFlowContextIdentifiers.Output);
                return;
            }

            TelemetryConfiguration telemetryConfiguration = null;

            if (string.IsNullOrWhiteSpace(aiOutputConfiguration.ConfigurationFilePath))
            {
                telemetryConfiguration = TelemetryConfiguration.CreateDefault();
            }
            else
            {
                string configurationFileContent = File.ReadAllText(aiOutputConfiguration.ConfigurationFilePath);
                telemetryConfiguration = TelemetryConfiguration.CreateFromConfiguration(configurationFileContent);
            }

            if (!string.IsNullOrWhiteSpace(aiOutputConfiguration.ConnectionString))
            {
                telemetryConfiguration.ConnectionString = aiOutputConfiguration.ConnectionString;
            }

            if (!string.IsNullOrWhiteSpace(aiOutputConfiguration.InstrumentationKey))
            {
                telemetryConfiguration.InstrumentationKey = aiOutputConfiguration.InstrumentationKey;
            }

            this.telemetryClient = new TelemetryClient(telemetryConfiguration);
        }
        private void Initialize(ApplicationInsightsOutputConfiguration aiOutputConfiguration)
        {
            Debug.Assert(aiOutputConfiguration != null);
            Debug.Assert(this.healthReporter != null);

            if (string.IsNullOrWhiteSpace(aiOutputConfiguration.ConfigurationFilePath))
            {
                if (string.IsNullOrWhiteSpace(aiOutputConfiguration.InstrumentationKey))
                {
                    string errorMessage = $"{nameof(ApplicationInsightsOutput)}: Application Insights instrumentation key is not set)";
                    this.healthReporter.ReportProblem(errorMessage, EventFlowContextIdentifiers.Configuration);
                    throw new Exception(errorMessage);
                }

                this.telemetryClient = new TelemetryClient();
                this.telemetryClient.InstrumentationKey = aiOutputConfiguration.InstrumentationKey;
            }
            else
            {
                string configurationFileContent = File.ReadAllText(aiOutputConfiguration.ConfigurationFilePath);
                TelemetryConfiguration telemetryConfiguration = TelemetryConfiguration.CreateFromConfiguration(configurationFileContent);
                if (!string.IsNullOrWhiteSpace(aiOutputConfiguration.InstrumentationKey))
                {
                    telemetryConfiguration.InstrumentationKey = aiOutputConfiguration.InstrumentationKey;
                }
                this.telemetryClient = new TelemetryClient(telemetryConfiguration);
            }
        }
Пример #4
0
        public ApplicationInsightsOutput(ApplicationInsightsOutputConfiguration applicationInsightsOutputConfiguration, IHealthReporter healthReporter)
        {
            Requires.NotNull(applicationInsightsOutputConfiguration, nameof(applicationInsightsOutputConfiguration));
            Requires.NotNull(healthReporter, nameof(healthReporter));

            this.healthReporter = healthReporter;
            Initialize(applicationInsightsOutputConfiguration);
        }
Пример #5
0
        public void InvalidConfigurationResultsInAnError()
        {
            var healthReporterMock = new Mock <IHealthReporter>();
            var config             = new ApplicationInsightsOutputConfiguration();
            var output             = new ApplicationInsightsOutput(config, healthReporterMock.Object);

            healthReporterMock.Verify(
                hr => hr.ReportWarning(
                    It.IsRegex("invalid configuration"),
                    It.Is <string>(ctx => string.Equals(ctx, EventFlowContextIdentifiers.Output, StringComparison.Ordinal))),
                Times.Exactly(1));
        }
Пример #6
0
        public void InstrumentationKeyOverridesConnectionString()
        {
            var healthReporterMock = new Mock <IHealthReporter>();
            var config             = new ApplicationInsightsOutputConfiguration();

            config.ConnectionString   = "InstrumentationKey=d0198460-ce4a-4efa-9e17-3edef2b40f15";
            config.InstrumentationKey = "c8da242c-9f2d-45ab-913c-c9953516e9c2";
            var output = new ApplicationInsightsOutput(config, healthReporterMock.Object);

            VerifyNoErrorsOrWarnings(healthReporterMock);

            var telemetry = new TraceTelemetry();

            output.telemetryClient.InitializeInstrumentationKey(telemetry);
            Assert.Equal("c8da242c-9f2d-45ab-913c-c9953516e9c2", telemetry.Context.InstrumentationKey, StringComparer.OrdinalIgnoreCase);
        }
Пример #7
0
        public ApplicationInsightsOutput(IConfiguration configuration, IHealthReporter healthReporter)
        {
            Requires.NotNull(configuration, nameof(configuration));
            Requires.NotNull(healthReporter, nameof(healthReporter));

            this.healthReporter = healthReporter;
            var aiOutputConfiguration = new ApplicationInsightsOutputConfiguration();
            try
            {
                configuration.Bind(aiOutputConfiguration);
            }
            catch
            {
                healthReporter.ReportProblem($"Invalid {nameof(ApplicationInsightsOutput)} configuration encountered: '{configuration.ToString()}'",
                    EventFlowContextIdentifiers.Configuration);
                throw;
            }

            Initialize(aiOutputConfiguration);
        }
Пример #8
0
        private void Initialize(ApplicationInsightsOutputConfiguration aiOutputConfiguration)
        {
            Debug.Assert(aiOutputConfiguration != null);
            Debug.Assert(this.healthReporter != null);

            if (string.IsNullOrWhiteSpace(aiOutputConfiguration.ConfigurationFilePath))
            {
                this.telemetryClient = new TelemetryClient();                
            }
            else
            {
                string configurationFileContent = File.ReadAllText(aiOutputConfiguration.ConfigurationFilePath);
                TelemetryConfiguration telemetryConfiguration = TelemetryConfiguration.CreateFromConfiguration(configurationFileContent);
                this.telemetryClient = new TelemetryClient(telemetryConfiguration);
            }

            if (!string.IsNullOrWhiteSpace(aiOutputConfiguration.InstrumentationKey))
            {
                this.telemetryClient.InstrumentationKey = aiOutputConfiguration.InstrumentationKey;
            }
        }
Пример #9
0
        public void UsesIsoDateFormat()
        {
            EventData e = new EventData();

            e.Payload.Add("DateTimeProperty", new DateTime(2017, 4, 19, 10, 15, 23, DateTimeKind.Utc));
            e.Payload.Add("DateTimeOffsetProperty", new DateTimeOffset(2017, 4, 19, 10, 16, 07, TimeSpan.Zero));

            var healthReporterMock = new Mock <IHealthReporter>();
            var config             = new ApplicationInsightsOutputConfiguration();
            var aiOutput           = new ApplicationInsightsOutput(config, healthReporterMock.Object);
            var propertyBag        = new PropertyBag();

            aiOutput.AddProperties(propertyBag, e);

            var dateTimeRegex = new Regex("2017-04-19T10:15:23(\\.0+)?Z", RegexOptions.None, TimeSpan.FromMilliseconds(100));

            Assert.Matches(dateTimeRegex, propertyBag.Properties["DateTimeProperty"]);

            var dateTimeOffsetRegex = new Regex("2017-04-19T10:16:07(\\.0+)?\\+00:00", RegexOptions.None, TimeSpan.FromMilliseconds(100));

            Assert.Matches(dateTimeOffsetRegex, propertyBag.Properties["DateTimeOffsetProperty"]);
        }