예제 #1
0
        public void LogMetric_WithMetric_CreatesMetricTelemetry()
        {
            // Arrange
            const string metricName  = "Request stream";
            const double metricValue = 0.13;
            var          timestamp   = DateTimeOffset.UtcNow;
            var          spySink     = new InMemoryLogSink();
            string       operationId = $"operation-id-{Guid.NewGuid()}";
            ILogger      logger      = CreateLogger(spySink, config => config.Enrich.WithProperty(ContextProperties.Correlation.OperationId, operationId));

            var telemetryContext = new Dictionary <string, object>
            {
                ["Capacity"] = "0.45"
            };

            logger.LogMetric(metricName, metricValue, timestamp, telemetryContext);
            LogEvent logEvent = Assert.Single(spySink.CurrentLogEmits);

            Assert.NotNull(logEvent);

            var converter = ApplicationInsightsTelemetryConverter.Create();

            // Act
            IEnumerable <ITelemetry> telemetries = converter.Convert(logEvent, formatProvider: null);

            // Assert
            AssertDoesNotContainLogProperty(logEvent, MetricTracking.MetricLogEntry);
            Assert.Collection(telemetries, telemetry =>
            {
                var metricTelemetry = Assert.IsType <MetricTelemetry>(telemetry);
                Assert.Equal(metricName, metricTelemetry.Name);
                Assert.Equal(metricValue, metricTelemetry.Sum);
                Assert.Equal(timestamp, metricTelemetry.Timestamp);
                AssertOperationContext(metricTelemetry, operationId);

                AssertContainsTelemetryProperty(metricTelemetry, "Capacity", "0.45");
            });
        }