/// <summary> /// Initializes a new instance of the <see cref="ApplicationInsightsHttpModule"/> class. /// </summary> public ApplicationInsightsHttpModule() { try { // The call initializes TelemetryConfiguration that will create and Intialize modules TelemetryConfiguration configuration = TelemetryConfiguration.Active; foreach (var module in TelemetryModules.Instance.Modules) { if (module is RequestTrackingTelemetryModule) { this.requestModule = (RequestTrackingTelemetryModule)module; } else { if (module is ExceptionTrackingTelemetryModule) { this.exceptionModule = (ExceptionTrackingTelemetryModule)module; } } } } catch (Exception exc) { this.isEnabled = false; WebEventSource.Log.WebModuleInitializationExceptionEvent(exc.ToInvariantString()); } }
public void NeedProcessRequestReturnsFalseOnNullHttpContext() { var module = new RequestTrackingTelemetryModule(); { Assert.False(module.NeedProcessRequest(null)); } }
private RequestTrackingTelemetryModule RequestTrackingTelemetryModuleFactory(TelemetryConfiguration config = null) { var module = new RequestTrackingTelemetryModule(); module.OverrideCorrelationIdLookupHelper(this.correlationIdLookupHelper); module.Initialize(config ?? this.CreateDefaultConfig(HttpModuleHelper.GetFakeHttpContext())); return(module); }
private RequestTrackingTelemetryModule RequestTrackingTelemetryModuleFactory() { var module = new RequestTrackingTelemetryModule(); module.OverrideCorrelationIdLookupHelper(this.correlationIdLookupHelper); return(module); }
private RequestTrackingTelemetryModule RequestTrackingTelemetryModuleFactory(TelemetryConfiguration config = null) { var module = new RequestTrackingTelemetryModule() { EnableChildRequestTrackingSuppression = false }; module.Initialize(config ?? this.CreateDefaultConfig(HttpModuleHelper.GetFakeHttpContext())); return(module); }
public void OnEndCreatesRequestTelemetryIfBeginWasNotCalled() { var context = HttpModuleHelper.GetFakeHttpContext(); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnEndRequest(context); Assert.NotNull(context.GetRequestTelemetry()); }
public void OnEndSetsDurationToZeroIfBeginWasNotCalled() { var context = HttpModuleHelper.GetFakeHttpContext(); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnEndRequest(context); Assert.Equal(0, context.GetRequestTelemetry().Duration.Ticks); }
/// <summary> /// Initializes a new instance of the <see cref="ApplicationInsightsHttpModule"/> class. /// </summary> public ApplicationInsightsHttpModule() { try { // The call initializes TelemetryConfiguration that will create and Intialize modules TelemetryConfiguration configuration = TelemetryConfiguration.Active; foreach (var module in TelemetryModules.Instance.Modules) { if (module is RequestTrackingTelemetryModule) { this.requestModule = (RequestTrackingTelemetryModule)module; } else { if (module is ExceptionTrackingTelemetryModule) { this.exceptionModule = (ExceptionTrackingTelemetryModule)module; } } } // We use reflection here because 'AddOnSendingHeaders' is only available post .net framework 4.5.2. Hence we call it if we can find it. // Not using reflection would result in MissingMethodException when 4.5 or 4.5.1 is present. this.addOnSendingHeadersMethod = typeof(HttpResponse).GetMethod("AddOnSendingHeaders"); this.addOnSendingHeadersMethodExists = this.addOnSendingHeadersMethod != null; if (this.addOnSendingHeadersMethodExists) { this.addOnSendingHeadersMethodParam = new Action <HttpContext>((httpContext) => { try { if (this.requestModule != null) { this.requestModule.AddTargetHashForResponseHeader(httpContext); } } catch (Exception ex) { WebEventSource.Log.AddTargetHeaderFailedWarning(ex.ToInvariantString()); } }); this.addOnSendingHeadersMethodParams = new object[] { this.addOnSendingHeadersMethodParam }; #if !NET40 this.openDelegateForInvokingAddOnSendingHeadersMethod = this.CreateOpenDelegate(this.addOnSendingHeadersMethod); #endif } } catch (Exception exc) { this.isEnabled = false; WebEventSource.Log.WebModuleInitializationExceptionEvent(exc.ToInvariantString()); } }
public void OnEndSetsUrl() { var context = HttpModuleHelper.GetFakeHttpContext(); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); module.OnEndRequest(context); Assert.Equal(context.Request.Url, context.GetRequestTelemetry().Url); }
public void RequestIdIsAvailableAfterOnBegin() { var context = HttpModuleHelper.GetFakeHttpContext(); var requestTelemetry = context.CreateRequestTelemetryPrivate(); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); Assert.True(!string.IsNullOrEmpty(requestTelemetry.Id)); }
public void OnEndSetsDurationToPositiveValue() { var context = HttpModuleHelper.GetFakeHttpContext(); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); module.OnEndRequest(context); Assert.True(context.GetRequestTelemetry().Duration.TotalMilliseconds >= 0); }
public void SdkVersionHasCorrectFormat() { string expectedVersion = SdkVersionHelper.GetExpectedSdkVersion(typeof(RequestTrackingTelemetryModule), prefix: "web:"); var context = HttpModuleHelper.GetFakeHttpContext(); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); module.OnEndRequest(context); Assert.Equal(expectedVersion, context.GetRequestTelemetry().Context.GetInternalContext().SdkVersion); }
public void OnBeginRequestSetsTimeIfItWasNotAssignedBefore() { var context = HttpModuleHelper.GetFakeHttpContext(); var requestTelemetry = context.CreateRequestTelemetryPrivate(); requestTelemetry.Timestamp = default(DateTimeOffset); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); Assert.NotEqual(default(DateTimeOffset), requestTelemetry.Timestamp); }
public void OnEndSetsResponseCode() { var context = HttpModuleHelper.GetFakeHttpContext(); context.Response.StatusCode = 401; var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); module.OnEndRequest(context); Assert.Equal("401", context.GetRequestTelemetry().ResponseCode); }
public void NeedProcessRequestReturnsTrueForNon200() { var context = HttpModuleHelper.GetFakeHttpContext(); context.Response.StatusCode = 500; context.Handler = new System.Web.Handlers.AssemblyResourceLoader(); var requestTelemetry = context.CreateRequestTelemetryPrivate(); requestTelemetry.Start(); var module = new RequestTrackingTelemetryModule(); var configuration = TelemetryConfiguration.CreateDefault(); module.Initialize(configuration); Assert.True(module.NeedProcessRequest(context)); }
public void OnEndDoesNotOverrideUrl() { var context = HttpModuleHelper.GetFakeHttpContext(); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); var requestTelemetry = context.GetRequestTelemetry(); requestTelemetry.Url = new Uri("http://test/"); module.OnEndRequest(context); Assert.Equal("http://test/", requestTelemetry.Url.OriginalString); }
public void OnBeginRequestDoesNotSetTimeIfItWasAssignedBefore() { var startTime = DateTimeOffset.UtcNow; var context = HttpModuleHelper.GetFakeHttpContext(); var requestTelemetry = context.CreateRequestTelemetryPrivate(); requestTelemetry.Timestamp = startTime; var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); Assert.Equal(startTime, requestTelemetry.Timestamp); }
public void NeedProcessRequestReturnsFalseForCustomHandler() { var context = HttpModuleHelper.GetFakeHttpContext(); context.Response.StatusCode = 200; context.Handler = new FakeHttpHandler(); var requestTelemetry = context.CreateRequestTelemetryPrivate(); requestTelemetry.Start(); var module = new RequestTrackingTelemetryModule(); module.Handlers.Add("Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModuleTest+FakeHttpHandler"); var configuration = TelemetryConfiguration.CreateDefault(); module.Initialize(configuration); Assert.False(module.NeedProcessRequest(context)); }
public void NeedProcessRequestReturnsTrueForUnknownHandler() { var context = HttpModuleHelper.GetFakeHttpContext(); context.Response.StatusCode = 200; context.Handler = new FakeHttpHandler(); var requestTelemetry = context.CreateRequestTelemetryPrivate(); requestTelemetry.Start(); using (var module = new RequestTrackingTelemetryModule()) { var configuration = TelemetryConfiguration.CreateDefault(); module.Initialize(configuration); Assert.IsTrue(module.NeedProcessRequest(context)); } }
public void OnEndDoesNotOverrideResponseCode() { var context = HttpModuleHelper.GetFakeHttpContext(); context.Response.StatusCode = 300; var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); var requestTelemetry = context.GetRequestTelemetry(); requestTelemetry.ResponseCode = "Test"; module.OnEndRequest(context); Assert.Equal("Test", requestTelemetry.ResponseCode); }
public void OnEndTracksRequest() { var sendItems = new List <ITelemetry>(); var stubTelemetryChannel = new StubTelemetryChannel { OnSend = item => sendItems.Add(item) }; var configuration = new TelemetryConfiguration { InstrumentationKey = Guid.NewGuid().ToString(), TelemetryChannel = stubTelemetryChannel }; var module = new RequestTrackingTelemetryModule(); module.Initialize(configuration); module.OnBeginRequest(null); module.OnEndRequest(null); Assert.Equal(1, sendItems.Count); }
public void OnEndAddsSourceFieldForRequestWithSourceIkey() { string hashedIkey = "vwuSMCFBLdIHSdeEXvFnmiXPO5ilQRqw9kO/SE5ino4="; Dictionary <string, string> headers = new Dictionary <string, string>(); headers.Add(RequestResponseHeaders.SourceInstrumentationKeyHeader, hashedIkey); var context = HttpModuleHelper.GetFakeHttpContext(headers); var module = new RequestTrackingTelemetryModule(); var config = TelemetryConfiguration.CreateDefault(); config.InstrumentationKey = Guid.NewGuid().ToString(); module.Initialize(config); module.OnBeginRequest(context); module.OnEndRequest(context); Assert.Equal(hashedIkey, context.GetRequestTelemetry().Source); }
private RequestTrackingTelemetryModule RequestTrackingTelemetryModuleFactory(TelemetryConfiguration config = null, bool enableW3CTracing = false) { var module = new RequestTrackingTelemetryModule() { EnableChildRequestTrackingSuppression = false, EnableW3CHeadersExtraction = enableW3CTracing }; if (config == null) { config = this.CreateDefaultConfig(HttpModuleHelper.GetFakeHttpContext()); } if (enableW3CTracing) { config.TelemetryInitializers.Add(new W3COperationCorrelationTelemetryInitializer()); } module.Initialize(config); return(module); }
public void OnEndDoesNotAddSourceFieldForRequestForSameComponent() { string instrumentationKey = "b3eb14d6-bb32-4542-9b93-473cd94aaedf"; // Here is the equivalent generated IKey Hash string hashedIkey = "o05HMrc4Og8W1Jyy60JPDPxxQy3bOKyuaj6HudZHTjE="; Dictionary <string, string> headers = new Dictionary <string, string>(); headers.Add(RequestResponseHeaders.SourceInstrumentationKeyHeader, hashedIkey); var context = HttpModuleHelper.GetFakeHttpContext(headers); var module = new RequestTrackingTelemetryModule(); var config = TelemetryConfiguration.CreateDefault(); config.InstrumentationKey = instrumentationKey; module.Initialize(config); module.OnBeginRequest(context); module.OnEndRequest(context); Assert.True(string.IsNullOrEmpty(context.GetRequestTelemetry().Source)); }
/// <summary> /// Initializes the telemetry module. /// </summary> /// <param name="configuration">Telemetry configuration to use for initialization.</param> public void Initialize(TelemetryConfiguration configuration) { try { foreach (var module in TelemetryModules.Instance.Modules) { if (module is RequestTrackingTelemetryModule requestTrackingModule) { this.requestModule = requestTrackingModule; } else if (module is ExceptionTrackingTelemetryModule exceptionTracingModule) { this.exceptionModule = exceptionTracingModule; } } } catch (Exception exc) { this.isEnabled = false; WebEventSource.Log.WebModuleInitializationExceptionEvent(exc.ToInvariantString()); } this.allListenerSubscription = DiagnosticListener.AllListeners.Subscribe(this); }
/// <summary> /// Initializes a new instance of the <see cref="ApplicationInsightsHttpModule"/> class. /// </summary> public ApplicationInsightsHttpModule() { try { // The call initializes TelemetryConfiguration that will create and Initialize modules TelemetryConfiguration configuration = TelemetryConfiguration.Active; foreach (var module in TelemetryModules.Instance.Modules) { if (module is RequestTrackingTelemetryModule telemetryModule) { this.requestModule = telemetryModule; } } if (AddOnSendingHeadersMethodExists) { this.addOnSendingHeadersMethodParam = (httpContext) => { try { this.requestModule?.AddTargetHashForResponseHeader(httpContext); } catch (Exception ex) { WebEventSource.Log.AddTargetHeaderFailedWarning(ex.ToInvariantString()); } }; this.addOnSendingHeadersMethodParams = new object[] { this.addOnSendingHeadersMethodParam }; } } catch (Exception exc) { this.isEnabled = false; WebEventSource.Log.WebModuleInitializationExceptionEvent(exc.ToInvariantString()); } }
public void OnEndAddsSourceFieldForRequestWithSourceIkey() { string hashedIkey = "vwuSMCFBLdIHSdeEXvFnmiXPO5ilQRqw9kO/SE5ino4="; Dictionary<string, string> headers = new Dictionary<string, string>(); headers.Add(RequestResponseHeaders.SourceInstrumentationKeyHeader, hashedIkey); var context = HttpModuleHelper.GetFakeHttpContext(headers); var module = new RequestTrackingTelemetryModule(); module.Initialize(TelemetryConfiguration.CreateDefault()); module.OnBeginRequest(context); module.OnEndRequest(context); Assert.Equal(hashedIkey, context.GetRequestTelemetry().Source); }
public void OnEndTracksRequest() { var sendItems = new List<ITelemetry>(); var stubTelemetryChannel = new StubTelemetryChannel { OnSend = item => sendItems.Add(item) }; var configuration = new TelemetryConfiguration { InstrumentationKey = Guid.NewGuid().ToString(), TelemetryChannel = stubTelemetryChannel }; var module = new RequestTrackingTelemetryModule(); module.Initialize(configuration); module.OnBeginRequest(null); module.OnEndRequest(null); Assert.Equal(1, sendItems.Count); }
public AspNetEventObserver(RequestTrackingTelemetryModule requestModule, ExceptionTrackingTelemetryModule exceptionModule) { this.requestModule = requestModule; this.exceptionModule = exceptionModule; }