Example #1
0
        private static void AddResponseTags(HttpWebResponse response, Activity activity)
        {
            activity.SetCustomProperty("HttpWebRequest.Response", response);

            if (activity.IsAllDataRequested)
            {
                activity.AddTag(SemanticConventions.AttributeHttpStatusCode, HttpTagHelper.GetStatusCodeTagValueFromHttpStatusCode(response.StatusCode));

                activity.SetStatus(
                    SpanHelper
                    .ResolveSpanStatusForHttpStatusCode((int)response.StatusCode)
                    .WithDescription(response.StatusDescription));
            }
        }
Example #2
0
        public override void OnStopActivity(Activity activity, object payload)
        {
            if (activity.IsAllDataRequested)
            {
                var requestTaskStatus = this.stopRequestStatusFetcher.Fetch(payload) as TaskStatus?;

                if (requestTaskStatus.HasValue)
                {
                    if (requestTaskStatus != TaskStatus.RanToCompletion)
                    {
                        if (requestTaskStatus == TaskStatus.Canceled)
                        {
                            activity.SetStatus(Status.Cancelled);
                        }
                        else if (requestTaskStatus != TaskStatus.Faulted)
                        {
                            // Faults are handled in OnException and should already have a span.Status of Unknown w/ Description.
                            activity.SetStatus(Status.Unknown);
                        }
                    }
                }

                if (this.stopResponseFetcher.Fetch(payload) is HttpResponseMessage response)
                {
                    // response could be null for DNS issues, timeouts, etc...
                    activity.SetTag(SemanticConventions.AttributeHttpStatusCode, HttpTagHelper.GetStatusCodeTagValueFromHttpStatusCode(response.StatusCode));

                    activity.SetStatus(
                        SpanHelper
                        .ResolveSpanStatusForHttpStatusCode((int)response.StatusCode)
                        .WithDescription(response.ReasonPhrase));
                }
            }

            this.activitySource.Stop(activity);
        }
Example #3
0
        private static void AddExceptionTags(Exception exception, Activity activity)
        {
            activity.SetCustomProperty("HttpWebRequest.Exception", exception);

            if (!activity.IsAllDataRequested)
            {
                return;
            }

            Status status;

            if (exception is WebException wexc)
            {
                if (wexc.Response is HttpWebResponse response)
                {
                    activity.AddTag(SemanticConventions.AttributeHttpStatusCode, HttpTagHelper.GetStatusCodeTagValueFromHttpStatusCode(response.StatusCode));

                    status = SpanHelper.ResolveSpanStatusForHttpStatusCode((int)response.StatusCode).WithDescription(response.StatusDescription);
                }
                else
                {
                    switch (wexc.Status)
                    {
                    case WebExceptionStatus.Timeout:
                        status = Status.DeadlineExceeded;
                        break;

                    case WebExceptionStatus.NameResolutionFailure:
                        status = Status.InvalidArgument.WithDescription(exception.Message);
                        break;

                    case WebExceptionStatus.SendFailure:
                    case WebExceptionStatus.ConnectFailure:
                    case WebExceptionStatus.SecureChannelFailure:
                    case WebExceptionStatus.TrustFailure:
                        status = Status.FailedPrecondition.WithDescription(exception.Message);
                        break;

                    case WebExceptionStatus.ServerProtocolViolation:
                        status = Status.Unimplemented.WithDescription(exception.Message);
                        break;

                    case WebExceptionStatus.RequestCanceled:
                        status = Status.Cancelled;
                        break;

                    case WebExceptionStatus.MessageLengthLimitExceeded:
                        status = Status.ResourceExhausted.WithDescription(exception.Message);
                        break;

                    default:
                        status = Status.Unknown.WithDescription(exception.Message);
                        break;
                    }
                }
            }
            else
            {
                status = Status.Unknown.WithDescription(exception.Message);
            }

            activity.SetStatus(status);
        }