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

Commit

Permalink
Merge pull request #418 from yantang-msft/Fix416
Browse files Browse the repository at this point in the history
Fix issue #416. Add certain domains to dependency collector's exclude list
  • Loading branch information
cijothomas committed May 3, 2017
2 parents bf5e2cd + 10fc0fd commit 366b3fe
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 3 deletions.
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
@@ -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
}
}
}
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
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

0 comments on commit 366b3fe

Please sign in to comment.