示例#1
0
        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);
            }
        }
示例#2
0
        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)));
     }
 }
示例#4
0
        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));
        }