public void OnActivityStartInjectsLegacyHeaders() { var listenerWithLegacyHeaders = new HttpCoreDiagnosticSourceListener( this.configuration, setComponentCorrelationHttpHeaders: true, correlationDomainExclusionList: new[] { "excluded.host.com" }, injectLegacyHeaders: true, injectW3CHeaders: false); using (listenerWithLegacyHeaders) { var activity = new Activity("System.Net.Http.HttpRequestOut"); activity.AddBaggage("k", "v"); activity.Start(); HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme); listenerWithLegacyHeaders.OnActivityStart(requestMsg); // Request-Id and Correlation-Context are injected by HttpClient // check only legacy headers here Assert.AreEqual(Activity.Current.RootId, requestMsg.Headers.GetValues(RequestResponseHeaders.StandardRootIdHeader).Single()); Assert.AreEqual(Activity.Current.Id, requestMsg.Headers.GetValues(RequestResponseHeaders.StandardParentIdHeader).Single()); Assert.AreEqual(this.testApplicationId1, GetRequestContextKeyValue(requestMsg, RequestResponseHeaders.RequestContextCorrelationSourceKey)); } }
public void OnActivityStartInjectsW3CHeaders() { var listenerWithW3CHeaders = new HttpCoreDiagnosticSourceListener( this.configuration, setComponentCorrelationHttpHeaders: true, correlationDomainExclusionList: new[] { "excluded.host.com" }, injectLegacyHeaders: false, injectW3CHeaders: true); this.configuration.TelemetryInitializers.Add(new W3COperationCorrelationTelemetryInitializer()); using (listenerWithW3CHeaders) { var activity = new Activity("System.Net.Http.HttpRequestOut").SetParentId("|guid.").Start(); HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme); listenerWithW3CHeaders.OnActivityStart(requestMsg); // Request-Id and Correlation-Context are injected by HttpClient // check only W3C headers here Assert.AreEqual(this.testApplicationId1, GetRequestContextKeyValue(requestMsg, RequestResponseHeaders.RequestContextCorrelationSourceKey)); Assert.AreEqual($"00-{activity.GetTraceId()}-{activity.GetSpanId()}-02", requestMsg.Headers.GetValues(W3C.W3CConstants.TraceParentHeader).Single()); Assert.AreEqual($"{W3C.W3CConstants.AzureTracestateNamespace}={this.testApplicationId1}", requestMsg.Headers.GetValues(W3C.W3CConstants.TraceStateHeader).Single()); } }
public void OnActivityStartInjectsW3CHeadersAndTracksLegacyId() { var listenerWithW3CHeaders = new HttpCoreDiagnosticSourceListener( this.configuration, setComponentCorrelationHttpHeaders: true, correlationDomainExclusionList: new string[0], injectLegacyHeaders: false, injectW3CHeaders: true); this.configuration.TelemetryInitializers.Add(new W3COperationCorrelationTelemetryInitializer()); using (listenerWithW3CHeaders) { var activity = new Activity("System.Net.Http.HttpRequestOut").SetParentId("foo").Start(); HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme); listenerWithW3CHeaders.OnActivityStart(requestMsg); // simulate Request-Id injection by .NET requestMsg.Headers.Add(RequestResponseHeaders.RequestIdHeader, activity.Id); listenerWithW3CHeaders.OnActivityStop(new HttpResponseMessage(HttpStatusCode.OK), requestMsg, TaskStatus.RanToCompletion); var telemetry = this.sentTelemetry.Single() as DependencyTelemetry; Assert.IsNotNull(telemetry); Assert.IsTrue(telemetry.Properties.ContainsKey(W3C.W3CConstants.LegacyRequestIdProperty)); Assert.AreEqual(activity.Id, telemetry.Properties[W3C.W3CConstants.LegacyRequestIdProperty]); Assert.IsTrue(telemetry.Properties.ContainsKey(W3C.W3CConstants.LegacyRootIdProperty)); Assert.AreEqual(activity.RootId, telemetry.Properties[W3C.W3CConstants.LegacyRootIdProperty]); } }
public void OnStartActivityWithUriInExcludedDomainListW3COff() { Activity.DefaultIdFormat = ActivityIdFormat.Hierarchical; Activity.ForceDefaultIdFormat = true; HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, "http://excluded.host.com/path/to/file.html"); using (var listener = new HttpCoreDiagnosticSourceListener( this.configuration, setComponentCorrelationHttpHeaders: true, correlationDomainExclusionList: new string[] { "excluded.host.com" }, injectLegacyHeaders: false, injectRequestIdInW3CMode: true, HttpInstrumentationVersion.V2)) { listener.OnActivityStart(requestMsg); Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.RequestContextHeader)); Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.RequestIdHeader)); Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.StandardParentIdHeader)); Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.StandardRootIdHeader)); Assert.IsFalse(requestMsg.Headers.Contains(W3C.W3CConstants.TraceParentHeader)); Assert.IsFalse(requestMsg.Headers.Contains(W3C.W3CConstants.TraceStateHeader)); Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.CorrelationContextHeader)); } }
public void NetCore30_OnActivityStartInjectsLegacyHeaders() { var listenerWithLegacyHeaders = new HttpCoreDiagnosticSourceListener( this.configuration, setComponentCorrelationHttpHeaders: true, correlationDomainExclusionList: new[] { "excluded.host.com" }, injectLegacyHeaders: true, injectRequestIdInW3CMode: true, HttpInstrumentationVersion.V3); using (listenerWithLegacyHeaders) { var activity = new Activity("System.Net.Http.HttpRequestOut"); activity.AddBaggage("k", "v"); activity.TraceStateString = "trace=state"; activity.Start(); HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme); listenerWithLegacyHeaders.OnActivityStart(requestMsg); // Traceparent and tracestate and Correlation-Context are injected by HttpClient // check only legacy headers here Assert.AreEqual(activity.RootId, requestMsg.Headers.GetValues(RequestResponseHeaders.StandardRootIdHeader).Single()); Assert.AreEqual(activity.SpanId.ToHexString(), requestMsg.Headers.GetValues(RequestResponseHeaders.StandardParentIdHeader).Single()); Assert.AreEqual(this.testApplicationId1, GetRequestContextKeyValue(requestMsg, RequestResponseHeaders.RequestContextCorrelationSourceKey)); } }
public void OnActivityStartInjectsHeadersRequestIdOff() { using (var listenerWithoutRequestId = new HttpCoreDiagnosticSourceListener( this.configuration, setComponentCorrelationHttpHeaders: true, correlationDomainExclusionList: new[] { "excluded.host.com" }, injectLegacyHeaders: false, injectRequestIdInW3CMode: false, HttpInstrumentationVersion.V2)) { var activity = new Activity("System.Net.Http.HttpRequestOut"); activity.Start(); HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme); listenerWithoutRequestId.OnActivityStart(requestMsg); Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.RequestIdHeader)); var traceparents = requestMsg.Headers.GetValues(W3C.W3CConstants.TraceParentHeader).ToArray(); Assert.AreEqual(1, traceparents.Length); Assert.AreEqual(activity.Id, traceparents[0]); } }
public void NetCore30_OnActivityStartInjectsHeadersRequestIdOff() { using (var listenerWithoutRequestId = new HttpCoreDiagnosticSourceListener( this.configuration, setComponentCorrelationHttpHeaders: true, correlationDomainExclusionList: new[] { "excluded.host.com" }, injectLegacyHeaders: false, injectRequestIdInW3CMode: false, HttpInstrumentationVersion.V3)) { var activity = new Activity("System.Net.Http.HttpRequestOut"); activity.AddBaggage("k", "v"); activity.TraceStateString = "trace=state"; activity.Start(); HttpRequestMessage requestMsg = new HttpRequestMessage(HttpMethod.Post, RequestUrlWithScheme); listenerWithoutRequestId.OnActivityStart(requestMsg); Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.RequestIdHeader)); Assert.IsFalse(requestMsg.Headers.Contains(W3C.W3CConstants.TraceParentHeader)); Assert.IsFalse(requestMsg.Headers.Contains(W3C.W3CConstants.TraceStateHeader)); Assert.IsFalse(requestMsg.Headers.Contains(RequestResponseHeaders.CorrelationContextHeader)); } }