public void LogHttpDependency_WithHttpDependency_CreatesHttpDependencyTelemetry() { // Arrange var spySink = new InMemoryLogSink(); string operationId = $"operation-id-{Guid.NewGuid()}"; ILogger logger = CreateLogger(spySink, config => config.Enrich.WithProperty(ContextProperties.Correlation.OperationId, operationId)); var request = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, "https://localhost/api/v1/health"); var startTime = DateTimeOffset.UtcNow; var duration = TimeSpan.FromSeconds(5); var telemetryContext = new Dictionary <string, object> { ["Port"] = "4000" }; logger.LogHttpDependency(request, HttpStatusCode.OK, startTime, duration, 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, DependencyTracking.DependencyLogEntry); Assert.Collection(telemetries, telemetry => { var dependencyTelemetry = Assert.IsType <DependencyTelemetry>(telemetry); Assert.Equal(DependencyType.Http.ToString(), dependencyTelemetry.Type); Assert.Equal("localhost", dependencyTelemetry.Target); Assert.Equal("GET /api/v1/health", dependencyTelemetry.Name); Assert.Null(dependencyTelemetry.Data); Assert.Equal(startTime, dependencyTelemetry.Timestamp); Assert.Equal(duration, dependencyTelemetry.Duration); Assert.Equal("200", dependencyTelemetry.ResultCode); Assert.True(dependencyTelemetry.Success); AssertOperationContext(dependencyTelemetry, operationId); AssertContainsTelemetryProperty(dependencyTelemetry, "Port", "4000"); }); }
public async Task LogHttpDependencyWithComponentName_SinksToApplicationInsights_ResultsInHttpDependencyTelemetryWithComponentName() { // Arrange string componentName = BogusGenerator.Commerce.ProductName(); HttpMethod httpMethod = GenerateHttpMethod(); string requestUrl = BogusGenerator.Image.LoremFlickrUrl(); using (ILoggerFactory loggerFactory = CreateLoggerFactory(config => config.Enrich.WithComponentName(componentName))) { ILogger logger = loggerFactory.CreateLogger <ApplicationInsightsSinkTests>(); var request = new HttpRequestMessage(httpMethod, requestUrl) { Content = new StringContent(BogusGenerator.Lorem.Paragraph()) }; var statusCode = BogusGenerator.PickRandom <HttpStatusCode>(); var duration = BogusGenerator.Date.Timespan(); Dictionary <string, object> telemetryContext = CreateTestTelemetryContext(); // Act logger.LogHttpDependency(request, statusCode, DateTimeOffset.UtcNow, duration, telemetryContext); } // Assert var requestUri = new Uri(requestUrl); using (ApplicationInsightsDataClient client = CreateApplicationInsightsClient()) { await RetryAssertUntilTelemetryShouldBeAvailableAsync(async() => { EventsResults <EventsDependencyResult> results = await client.Events.GetDependencyEventsAsync(ApplicationId); Assert.NotEmpty(results.Value); Assert.Contains(results.Value, result => { return(result.Dependency.Type == "HTTP" && result.Dependency.Target == requestUri.Host && result.Dependency.Name == $"{httpMethod} {requestUri.AbsolutePath}" && result.Cloud.RoleName == componentName); }); }); } }