protected internal void HandleStopEvent(HttpRequestMessage request, HttpResponseMessage response, TaskStatus taskStatus) { if (!request.Properties.TryGetValue(SPANCONTEXT_KEY, out object context)) { Logger?.LogDebug("HandleStopEvent: Missing span context"); return; } SpanContext spanContext = context as SpanContext; if (spanContext != null) { ISpan span = spanContext.Active; IScope scope = spanContext.ActiveScope; if (response != null) { span.PutHttpStatusCodeAttribute((int)response.StatusCode) .PutHttpResponseHeadersAttribute(response.Headers.ToList()); } if (taskStatus == TaskStatus.Faulted) { span.PutErrorAttribute("TaskStatus.Faulted") .Status = Status.Aborted; } if (taskStatus == TaskStatus.Canceled) { span.PutErrorAttribute("TaskStatus.Canceled") .Status = Status.Cancelled; } scope.Dispose(); // Calls span.End(); and replaces CurrentSpan with previous span request.Properties.Remove(SPANCONTEXT_KEY); } }
protected internal void HandleStopEvent(HttpRequestMessage request, HttpResponseMessage response, TaskStatus taskStatus) { if (!request.Properties.TryGetValue(SPANCONTEXT_KEY, out object context)) { Logger?.LogDebug("HandleStopEvent: Missing span context"); return; } var spanContext = context as SpanContext; if (spanContext != null) { ISpan span = spanContext.Active; if (response != null) { span.PutHttpStatusCodeAttribute((int)response.StatusCode) .PutHttpResponseHeadersAttribute(response.Headers.ToList()); } if (taskStatus == TaskStatus.Faulted) { span.PutErrorAttribute("TaskStatus.Faulted") .Status = Status.ABORTED; } if (taskStatus == TaskStatus.Canceled) { span.PutErrorAttribute("TaskStatus.Canceled") .Status = Status.CANCELLED; } span.End(); AsyncLocalContext.CurrentSpan = spanContext.Previous; request.Properties.Remove(SPANCONTEXT_KEY); } }