protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { using (var clientTrace = new ClientTrace(_serviceName, _getClientTraceRpc(request))) { if (clientTrace.Trace != null) { _injector.Inject(clientTrace.Trace.CurrentSpan, request.Headers); } var result = await clientTrace.TracedActionAsync(base.SendAsync(request, cancellationToken)).ConfigureAwait(false); if (clientTrace.Trace != null) { clientTrace.AddAnnotation(Annotations.Tag(zipkinCoreConstants.HTTP_PATH, result.RequestMessage.RequestUri.LocalPath)); clientTrace.AddAnnotation(Annotations.Tag(zipkinCoreConstants.HTTP_METHOD, result.RequestMessage.Method.Method)); if (_logHttpHost) { clientTrace.AddAnnotation(Annotations.Tag(zipkinCoreConstants.HTTP_HOST, result.RequestMessage.RequestUri.Host)); } if (!result.IsSuccessStatusCode) { clientTrace.AddAnnotation(Annotations.Tag(zipkinCoreConstants.HTTP_STATUS_CODE, ((int)result.StatusCode).ToString())); } } return(result); } }
public void ExceptionThrownInTracedActionAsyncShouldBeRethrownWhenCurrentTraceIsNull() { Trace.Current = null; var clientTrace = new ClientTrace(serviceName, rpc); Task <object> task = Task.Run <object>(() => throw new SomeException()); Assert.ThrowsAsync <SomeException>(() => clientTrace.TracedActionAsync(task)); }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { using (var clientTrace = new ClientTrace(_serviceName, request.Method.ToString())) { if (clientTrace.Trace != null) { _injector.Inject(clientTrace.Trace.CurrentSpan, request.Headers); } return(await clientTrace.TracedActionAsync(base.SendAsync(request, cancellationToken))); } }
public void ExceptionThrownInTracedActionAsyncShouldAddErrorTagAndRethrow() { var trace = Trace.Create(); trace.ForceSampled(); Trace.Current = trace; var clientTrace = new ClientTrace(serviceName, rpc); var ex = new Exception("something bad happened"); Task <int> task = Task.Run(() => { try { return(0); } finally { throw ex; } }); Assert.ThrowsAsync <Exception>(() => clientTrace.TracedActionAsync(task)); VerifyDispatcherRecordedAnnotation(new TagAnnotation("error", ex.Message)); }