public override void OnStartActivity(Activity activity, object payload) { const string EventNameSuffix = ".OnStartActivity"; if (!(this.startRequestFetcher.Fetch(payload) is HttpRequestMessage request)) { InstrumentationEventSource.Log.NullPayload(nameof(HttpHandlerDiagnosticListener) + EventNameSuffix); return; } if (request.Headers.Contains("traceparent")) { // this request is already instrumented, we should back off return; } // TODO: Avoid the reflection hack once .NET ships new Activity with Kind settable. activity.GetType().GetProperty("Kind").SetValue(activity, ActivityKind.Client); activity.DisplayName = HttpTagHelper.GetOperationNameForHttpMethod(request.Method); var samplingParameters = new ActivitySamplingParameters( activity.Context, activity.TraceId, activity.DisplayName, activity.Kind, activity.Tags, activity.Links); // TODO: Find a way to avoid Instrumentation being tied to Sampler var samplingDecision = this.sampler.ShouldSample(samplingParameters); activity.IsAllDataRequested = samplingDecision.IsSampled; if (samplingDecision.IsSampled) { activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded; } if (activity.IsAllDataRequested) { activity.AddTag(SpanAttributeConstants.ComponentKey, "http"); activity.AddTag(SpanAttributeConstants.HttpMethodKey, HttpTagHelper.GetNameForHttpMethod(request.Method)); activity.AddTag(SpanAttributeConstants.HttpHostKey, HttpTagHelper.GetHostTagValueFromRequestUri(request.RequestUri)); activity.AddTag(SpanAttributeConstants.HttpUrlKey, request.RequestUri.OriginalString); if (this.options.SetHttpFlavor) { activity.AddTag(SpanAttributeConstants.HttpFlavorKey, HttpTagHelper.GetFlavorTagValueFromProtocolVersion(request.Version)); } } if (!(this.httpClientSupportsW3C && this.options.TextFormat is TraceContextFormat)) { // TODO: implement this // this.options.TextFormat.Inject(span.Context, request, (r, k, v) => r.Headers.Add(k, v)); } }
public override void OnStartActivity(Activity activity, object payload) { const string EventNameSuffix = ".OnStartActivity"; if (!(this.startRequestFetcher.Fetch(payload) is HttpRequestMessage request)) { InstrumentationEventSource.Log.NullPayload(nameof(HttpHandlerDiagnosticListener) + EventNameSuffix); return; } if (request.Headers.Contains("traceparent")) { // this request is already instrumented, we should back off activity.IsAllDataRequested = false; return; } // TODO: Avoid the reflection hack once .NET ships new Activity with Kind settable. activity.GetType().GetProperty("Kind").SetValue(activity, ActivityKind.Client); activity.DisplayName = HttpTagHelper.GetOperationNameForHttpMethod(request.Method); this.activitySource.Start(activity); if (activity.IsAllDataRequested) { activity.AddTag(SpanAttributeConstants.ComponentKey, "http"); activity.AddTag(SpanAttributeConstants.HttpMethodKey, HttpTagHelper.GetNameForHttpMethod(request.Method)); activity.AddTag(SpanAttributeConstants.HttpHostKey, HttpTagHelper.GetHostTagValueFromRequestUri(request.RequestUri)); activity.AddTag(SpanAttributeConstants.HttpUrlKey, request.RequestUri.OriginalString); if (this.options.SetHttpFlavor) { activity.AddTag(SpanAttributeConstants.HttpFlavorKey, HttpTagHelper.GetFlavorTagValueFromProtocolVersion(request.Version)); } } if (!(this.httpClientSupportsW3C && this.options.TextFormat is TraceContextFormatActivity)) { this.options.TextFormat.Inject(activity.Context, request, (r, k, v) => r.Headers.Add(k, v)); } }
public override void OnStartActivity(Activity activity, object payload) { if (!(this.startRequestFetcher.Fetch(payload) is HttpRequestMessage request)) { DependenciesInstrumentationEventSource.Log.NullPayload(nameof(HttpHandlerDiagnosticListener), nameof(this.OnStartActivity)); return; } if (this.options.TextFormat.IsInjected(request, HttpRequestMessageHeaderValuesGetter)) { // this request is already instrumented, we should back off activity.IsAllDataRequested = false; return; } activity.SetKind(ActivityKind.Client); activity.DisplayName = HttpTagHelper.GetOperationNameForHttpMethod(request.Method); this.activitySource.Start(activity); if (activity.IsAllDataRequested) { activity.AddTag(SemanticConventions.AttributeHTTPMethod, HttpTagHelper.GetNameForHttpMethod(request.Method)); activity.AddTag(SemanticConventions.AttributeHTTPHost, HttpTagHelper.GetHostTagValueFromRequestUri(request.RequestUri)); activity.AddTag(SemanticConventions.AttributeHTTPURL, request.RequestUri.OriginalString); if (this.options.SetHttpFlavor) { activity.AddTag(SemanticConventions.AttributeHTTPFlavor, HttpTagHelper.GetFlavorTagValueFromProtocolVersion(request.Version)); } } if (!(this.httpClientSupportsW3C && this.options.TextFormat is TraceContextFormatActivity)) { this.options.TextFormat.Inject(activity.Context, request, HttpRequestMessageHeaderValueSetter); } }