Skip to content
This repository has been archived by the owner on Jun 10, 2020. It is now read-only.

Fix issue #416. Add certain domains to dependency collector's exclude list #418

Merged
merged 3 commits into from
May 3, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,16 @@ public static IServiceCollection AddApplicationInsightsTelemetry(this IServiceCo
services.AddSingleton<ITelemetryInitializer, WebUserTelemetryInitializer>();
services.AddSingleton<ITelemetryInitializer, AspNetCoreEnvironmentTelemetryInitializer>();
services.AddSingleton<ITelemetryInitializer, HttpDependenciesParsingTelemetryInitializer>();
services.AddSingleton<ITelemetryModule, DependencyTrackingTelemetryModule>();
services.AddSingleton<ITelemetryModule, DependencyTrackingTelemetryModule>(provider => {
var module = new DependencyTrackingTelemetryModule();
var excludedDomains = module.ExcludeComponentCorrelationHttpHeadersOnDomains;
excludedDomains.Add("core.windows.net");
excludedDomains.Add("core.chinacloudapi.cn");
excludedDomains.Add("core.cloudapi.de");
excludedDomains.Add("core.usgovcloudapi.net");

return module;
});

#if NET451
services.AddSingleton<ITelemetryModule, PerformanceCollectorModule>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
namespace MVCFramework45.FunctionalTests.FunctionalTest
{
using FunctionalTestUtils;
using Microsoft.ApplicationInsights.DataContracts;
using System;
using System.Linq;
using System.Net.Http;
using Xunit;

public class CorrelationMvcTests : TelemetryTestsBase
{
private const string assemblyName = "MVCFramework45.FunctionalTests";

[Fact]
public void CorrelationInfoIsPropagatedToDependendedService()
{
#if !NET451 // Correlation is not supported in NET451. It works with NET46 and .Net core.
InProcessServer server;

using (server = new InProcessServer(assemblyName, InProcessServer.UseApplicationInsights))
{
using (var httpClient = new HttpClient())
{
var task = httpClient.GetAsync(server.BaseHost + "/");
task.Wait(TestTimeoutMs);
}
}

var telemetries = server.BackChannel.Buffer;

Assert.True(telemetries.Count >= 2);
var requestTelemetry = telemetries.OfType<RequestTelemetry>().Single();
var dependencyTelemetry = telemetries.OfType<DependencyTelemetry>().Single();
Assert.Equal(requestTelemetry.Context.Operation.Id, dependencyTelemetry.Context.Operation.Id);
Assert.Equal(requestTelemetry.Context.Operation.ParentId, dependencyTelemetry.Id);
#endif
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,48 @@ namespace SampleWebAppIntegration.FunctionalTest
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Xunit;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.Extensions.DependencyInjection;

public class DependencyTelemetryMvcTests : TelemetryTestsBase
{
private const string assemblyName = "MVCFramework45.FunctionalTests";

[Fact]
public void CorrelationInfoIsNotAddedToRequestHeaderIfUserAddDomainToExcludedList()
{
#if !NET451 // Correlation is not supported in NET451. It works with NET46 and .Net core.
InProcessServer server;

using (server = new InProcessServer(assemblyName, InProcessServer.UseApplicationInsights))
{
var dependencyCollectorModule = server.ApplicationServices.GetServices<ITelemetryModule>().OfType<DependencyTrackingTelemetryModule>().Single();
dependencyCollectorModule.ExcludeComponentCorrelationHttpHeadersOnDomains.Add(server.BaseHost);

using (var httpClient = new HttpClient())
{
var task = httpClient.GetAsync(server.BaseHost + "/");
task.Wait(TestTimeoutMs);
}
}

var telemetries = server.BackChannel.Buffer;
try
{
Assert.True(telemetries.Count >= 2);
var requestTelemetry = telemetries.OfType<RequestTelemetry>().Single();
var dependencyTelemetry = telemetries.OfType<DependencyTelemetry>().Single();
Assert.NotEqual(requestTelemetry.Context.Operation.Id, dependencyTelemetry.Context.Operation.Id);
}
catch (Exception e)
{
string data = DebugTelemetryItems(telemetries);
throw new Exception(data, e);
}
#endif
}

[Fact]
public void OperationIdOfRequestIsPropagatedToChildDependency()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -314,8 +314,11 @@ public static void RegistersTelemetryConfigurationFactoryMethodThatPopulatesItWi
Assert.Equal(1, modules.Count());
#endif

var dependencyModule = services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationType == typeof(DependencyTrackingTelemetryModule));
Assert.NotNull(dependencyModule);
var dependencyModuleDescriptor = services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationFactory?.GetMethodInfo().ReturnType == typeof(DependencyTrackingTelemetryModule));
Assert.NotNull(dependencyModuleDescriptor);

var dependencyModule = modules.OfType<DependencyTrackingTelemetryModule>().Single();
Assert.True(dependencyModule.ExcludeComponentCorrelationHttpHeadersOnDomains.Count > 0);
}

#if NET451
Expand Down