Пример #1
0
        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);
            }
        }