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)); } }
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); }
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); }