public void UpdateRequestTelemetryFromRequestHandlesNulls() { var requestTelemetry = new RequestTelemetry(); var request = HttpModuleHelper.GetFakeHttpContext().Request; var appIdProvider = GetMockAppIdProvider("currentAppId").Object; RequestTrackingUtilities.UpdateRequestTelemetryFromRequest(null, request, appIdProvider); RequestTrackingUtilities.UpdateRequestTelemetryFromRequest(requestTelemetry, null, appIdProvider); }
public void UpdateRequestTelemetryFromRequestDoesntUpdateSourceIfAppIdProviderIsNull() { var requestTelemetry = new RequestTelemetry(); var headers = new Dictionary <string, string> { { RequestResponseHeaders.RequestContextHeader, $"{RequestResponseHeaders.RequestContextCorrelationSourceKey}=sourceAppId" } }; var context = HttpModuleHelper.GetFakeHttpContext(headers); RequestTrackingUtilities.UpdateRequestTelemetryFromRequest(requestTelemetry, context.Request, applicationIdProvider: null); Assert.AreEqual(context.Request.Unvalidated.Url, requestTelemetry.Url); Assert.AreEqual(string.Empty, requestTelemetry.Source, "If appIdProvider is null, requestTelemetry.Source should not be set"); }
public void UpdateRequestTelemetryFromRequestDoesntSetSourceIfSame() { var requestTelemetry = new RequestTelemetry(); var headers = new Dictionary <string, string> { { RequestResponseHeaders.RequestContextHeader, $"{RequestResponseHeaders.RequestContextCorrelationSourceKey}=currentAppId" } }; var context = HttpModuleHelper.GetFakeHttpContext(headers); var appIdProvider = GetMockAppIdProvider("currentAppId"); RequestTrackingUtilities.UpdateRequestTelemetryFromRequest(requestTelemetry, context.Request, appIdProvider.Object); Assert.AreEqual(context.Request.Unvalidated.Url, requestTelemetry.Url); Assert.AreEqual(string.Empty, requestTelemetry.Source, "If Source and CurrentAppId match, the requestTelemetry.Source must be empty"); }
public void UpdateRequestTelemetryFromRequestUpdatesTelemetryItems() { var requestTelemetry = new RequestTelemetry(); var headers = new Dictionary <string, string> { { RequestResponseHeaders.RequestContextHeader, $"{RequestResponseHeaders.RequestContextCorrelationSourceKey}=sourceAppId" } }; var context = HttpModuleHelper.GetFakeHttpContext(headers); var appIdProvider = GetMockAppIdProvider("currentAppId"); RequestTrackingUtilities.UpdateRequestTelemetryFromRequest(requestTelemetry, context.Request, appIdProvider.Object); Assert.AreEqual(context.Request.Unvalidated.Url, requestTelemetry.Url); Assert.AreEqual("sourceAppId", requestTelemetry.Source); }
public void UpdateRequestTelemetryFromRequestDoesntOverwriteIfAlreadyExists() { var requestTelemetry = new RequestTelemetry { Url = new Uri("http://shouldPreserveUrl"), Source = "shouldPreserveSource" }; var headers = new Dictionary <string, string> { { RequestResponseHeaders.RequestContextHeader, $"{RequestResponseHeaders.RequestContextCorrelationSourceKey}=sourceAppId" } }; var context = HttpModuleHelper.GetFakeHttpContext(headers); var appIdProvider = GetMockAppIdProvider("currentAppId"); RequestTrackingUtilities.UpdateRequestTelemetryFromRequest(requestTelemetry, context.Request, appIdProvider.Object); Assert.AreEqual(new Uri("http://shouldPreserveUrl"), requestTelemetry.Url); Assert.AreEqual("shouldPreserveSource", requestTelemetry.Source); }
/// <summary> /// Implements on end callback of http module. /// </summary> public void OnEndRequest(HttpContext context) { if (this.telemetryClient == null) { if (!this.initializationErrorReported) { this.initializationErrorReported = true; WebEventSource.Log.InitializeHasNotBeenCalledOnModuleYetError(); } else { WebEventSource.Log.InitializeHasNotBeenCalledOnModuleYetVerbose(); } return; } if (!this.NeedProcessRequest(context)) { return; } var requestTelemetry = context.ReadOrCreateRequestTelemetryPrivate(); requestTelemetry.Stop(); var success = true; if (string.IsNullOrEmpty(requestTelemetry.ResponseCode)) { var statusCode = context.Response.StatusCode; requestTelemetry.ResponseCode = statusCode == 200 ? "200" : statusCode.ToString(CultureInfo.InvariantCulture); if (statusCode >= 400 && statusCode != 401) { success = false; } } if (!requestTelemetry.Success.HasValue) { requestTelemetry.Success = success; } if (string.IsNullOrEmpty(requestTelemetry.Context.InstrumentationKey)) { // Instrumentation key is probably empty, because the context has not yet had a chance to associate the requestTelemetry to the telemetry client yet. // and get they instrumentation key from all possible sources in the process. Let's do that now. this.telemetryClient.InitializeInstrumentationKey(requestTelemetry); } // Setting requestTelemetry.Url and requestTelemetry.Source can be deferred until after sampling if (this.DisableTrackingProperties == false) { RequestTrackingUtilities.UpdateRequestTelemetryFromRequest(requestTelemetry, context.Request, this.telemetryConfiguration?.ApplicationIdProvider); } if (this.childRequestTrackingSuppressionModule?.OnEndRequest_ShouldLog(context) ?? true) { this.telemetryClient.TrackRequest(requestTelemetry); } else { WebEventSource.Log.RequestTrackingTelemetryModuleRequestWasNotLoggedInformational(); } }