public void InnerHandler_Set()
        {
            var mockTracer   = new Mock <IManagedTracer>();
            var traceHandler = new TraceHeaderPropagatingHandler(() => mockTracer.Object);

            Assert.NotNull(traceHandler.InnerHandler);
        }
        public void InnerHandler_Set()
        {
#pragma warning disable CS0618 // Type or member is obsolete
            var traceHandler = new TraceHeaderPropagatingHandler(() => new FakeManagedTracer(null, null));
#pragma warning restore CS0618 // Type or member is obsolete
            Assert.NotNull(traceHandler.InnerHandler);
        }
Ejemplo n.º 3
0
        // End sample

        // Sample: TraceOutgoing
        /// <summary>
        /// Add a handler to trace outgoing requests and to propagate the trace header.
        /// The <see cref="TraceHeaderPropagatingHandler"/> is populated by dependency injection
        /// thanks to the use of the <see cref="FromServicesAttribute"/> attribute.
        /// </summary>
        public async Task <HttpResponseMessage> TraceOutgoing([FromServices] TraceHeaderPropagatingHandler traceHeaderHandler)
        {
            using (var httpClient = new HttpClient(traceHeaderHandler))
            {
                // Any code that makes outgoing requests.
                return(await httpClient.GetAsync("https://weather.com/"));
            }
        }
Ejemplo n.º 4
0
            // End sample

            // Sample: TraceOutgoing
            /// <summary>
            /// The <see cref="TraceHeaderPropagatingHandler"/> is populated by dependency injection.
            /// </summary>
            public async Task <HttpResponseMessage> TraceOutgoing(TraceHeaderPropagatingHandler traceHeaderHandler)
            {
                // Add a handler to trace outgoing requests and to propagate the trace header.
                using (var httpClient = new HttpClient(traceHeaderHandler))
                {
                    return(await httpClient.GetAsync("https://weather.com/"));
                }
            }
 // This incoming HTTP request should be captured by Trace.
 public IActionResult Index([FromServices] IManagedTracer tracer)
 {
     using (tracer.StartSpan(nameof(Index)))
     {
         var traceHeaderHandler = new TraceHeaderPropagatingHandler(() => tracer);
         var response           = TraceOutgoing(traceHeaderHandler);
         ViewData["text"] = response.Result.ToString();
         return(View());
     }
 }
Ejemplo n.º 6
0
        // Sample: TraceOutgoing
        public async Task <HttpResponseMessage> TraceOutgoing(IManagedTracer tracer)
        {
            // Add a handler to trace outgoing requests and to propagate the trace header.
            var traceHeaderHandler = TraceHeaderPropagatingHandler.Create(tracer);

            using (var httpClient = HttpClientFactory.Create(traceHeaderHandler))
            {
                return(await httpClient.GetAsync("https://weather.com/"));
            }
        }
 // This outgoing HTTP request should be captured by Trace.
 public async Task <string> TraceOutgoing(TraceHeaderPropagatingHandler traceHeaderHandler)
 {
     // Add a handler to trace outgoing requests and to propagate the trace header.
     using (var httpClient = new HttpClient(traceHeaderHandler))
     {
         string url = "https://www.googleapis.com/discovery/v1/apis";
         using (var response = await httpClient.GetAsync(url))
         {
             return(await response.Content.ReadAsStringAsync());
         }
     }
 }
Ejemplo n.º 8
0
        public async Task <HttpResponseMessage> TraceOutgoing()
        {
            // Sample: TraceOutgoing
            // Add a handler to trace outgoing requests and to propagate the trace header.
            var traceHeaderHandler = TraceHeaderPropagatingHandler.Create(CloudTrace.CurrentTracer);

            using (var httpClient = new HttpClient(traceHeaderHandler))
            {
                return(await httpClient.GetAsync("https://weather.com/"));
            }
            // End sample
        }
        public async Task SendAsync_NoTrace()
        {
            var mockTracer   = new Mock <IManagedTracer>();
            var fakeHandler  = new FakeDelegatingHandler();
            var traceHandler = new TraceHeaderPropagatingHandler(() => mockTracer.Object, fakeHandler);

            using (var httpClient = new HttpClient(traceHandler))
            {
                await httpClient.GetAsync("https://www.google.com");
            }

            mockTracer.Verify(t => t.StartSpan(It.IsAny <string>(), null), Times.Never());
        }
        public async Task SendAsync_NoTrace()
        {
            var managedTracer = new FakeManagedTracer(null, null);
            var traceHandler  = new TraceHeaderPropagatingHandler(() => managedTracer, new BounceBackRequestHandler());

            using var httpClient = new HttpClient(traceHandler);
            var response = await httpClient.GetAsync("https://www.google.com");

            AssertDoesNotContainGoogleTraceHeader(response.RequestMessage);
            AssertDoesNotContainTraceProperties(response.RequestMessage);

            managedTracer.AssertNoRanInSpan();
        }
        public async Task SendAsync_Trace_Default()
        {
            var managedTracer = new FakeManagedTracer(TraceId, SpanId);
            var traceHandler  = new TraceHeaderPropagatingHandler(() => managedTracer, new BounceBackRequestHandler());

            var url = "https://www.google.com/";

            using var httpClient = new HttpClient(traceHandler);
            var response = await httpClient.GetAsync(url);

            AssertContainsGoogleTraceHeader(response.RequestMessage);
            AssertDoesNotContainTraceProperties(response.RequestMessage);

            managedTracer.AssertSingleRanInSpan(url);
        }
Ejemplo n.º 12
0
        public async Task SendAsync_Trace()
        {
            var mockTracer   = GetSetUpTracer();
            var fakeHandler  = new FakeDelegatingHandler(headerContext);
            var traceHandler = TraceHeaderPropagatingHandler.Create(mockTracer.Object, fakeHandler);

            var requestUri = new Uri("https://www.google.com");

            using (var httpClient = new HttpClient(traceHandler))
            {
                await httpClient.GetAsync(requestUri);
            }

            mockTracer.Verify(t => t.StartSpan(requestUri.ToString(), null), Times.Once());
            mockTracer.Verify(t => t.EndSpan(), Times.Once());
        }
Ejemplo n.º 13
0
        public async Task SendAsync_TraceException()
        {
            var mockTracer   = GetSetUpTracer();
            var fakeHandler  = new FakeDelegatingHandler(headerContext, throwException: true);
            var traceHandler = TraceHeaderPropagatingHandler.Create(mockTracer.Object, fakeHandler);

            var requestUri = new Uri("https://www.google.com");

            using (var httpClient = new HttpClient(traceHandler))
            {
                await Assert.ThrowsAsync <DivideByZeroException>(() => httpClient.GetAsync(requestUri));
            }

            mockTracer.Verify(t => t.StartSpan(requestUri.ToString(), null), Times.Once());
            mockTracer.Verify(t => t.SetStackTrace(It.IsAny <StackTrace>()), Times.Once());
            mockTracer.Verify(t => t.EndSpan(), Times.Once());
        }
        /// <summary>
        /// Creates a <see cref="TraceHeaderPropagatingHandler"/> and traces the sending of a
        /// GET request to the given Uri.  The trace is wrapped in a parent span.
        /// </summary>
        /// <param name="rootSpanName">The name of the root span that will wrap the span
        /// that traces the request.</param>
        /// <param name="uri">The Uri to request.</param>
        /// <param name="exceptionExpected">True if an exception from the request to the Uri is expected.</param>
        private async Task TraceOutGoingRequest(string rootSpanName, string uri, bool exceptionExpected)
        {
            using (_tracer.StartSpan(rootSpanName))
                using (var traceHeaderHandler = new TraceHeaderPropagatingHandler(() => _tracer))
                    using (var httpClient = new HttpClient(traceHeaderHandler))
                    {
                        try
                        {
                            await httpClient.GetAsync(uri);

                            Assert.False(exceptionExpected);
                        }
                        catch (Exception e) when(exceptionExpected && !(e is Xunit.Sdk.XunitException))
                        {
                        }
                    }
        }
        public async Task SendAsync_Trace_Custom()
        {
            var managedTracer = new FakeManagedTracer(TraceId, SpanId);

#pragma warning disable CS0618 // Type or member is obsolete
            var traceHandler = new TraceHeaderPropagatingHandler(
#pragma warning restore CS0618 // Type or member is obsolete
                () => managedTracer, SetOutgoingHttpTraceContext, new BounceBackRequestHandler());

            var url = "https://www.google.com/";

            using var httpClient = new HttpClient(traceHandler);
            var response = await httpClient.GetAsync(url);

            AssertContainsTraceProperties(response.RequestMessage);
            AssertDoesNotContainGoogleTraceHeader(response.RequestMessage);

            managedTracer.AssertSingleRanInSpan(url);
        }
        public async Task SendAsync_Trace()
        {
            var mockTracer   = GetSetUpTracer();
            var fakeHandler  = new FakeDelegatingHandler(headerContext);
            var traceHandler = new TraceHeaderPropagatingHandler(() => mockTracer.Object, fakeHandler);

            var requestUri       = new Uri("https://www.google.com");
            var requestUriString = requestUri.ToString();

            mockTracer.Setup(t => t.RunInSpanAsync(
                                 It.IsAny <Func <Task <HttpResponseMessage> > >(), requestUri.ToString(), null))
            .Returns(Task.FromResult(new HttpResponseMessage()));

            using (var httpClient = new HttpClient(traceHandler))
            {
                await httpClient.GetAsync(requestUri);
            }

            mockTracer.VerifyAll();
        }
Ejemplo n.º 17
0
        public async Task <IActionResult> PostAsync(
            [FromBody] WeatherForecastModel model,
            CancellationToken cancellationToken)
        {
            using (_tracer.StartSpan("save"))
            {
                try
                {
                    //These two lines are for example
                    var traceHeaderHandler = new TraceHeaderPropagatingHandler(() => _tracer);
                    var response           = TraceOutgoing(traceHeaderHandler);

                    await _storageLogic.SaveToFileAsync(model, cancellationToken);

                    return(Ok());
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Service Error, attention!!!!");
                    return(StatusCode(StatusCodes.Status500InternalServerError,
                                      e.Message));
                }
            }
        }
Ejemplo n.º 18
0
        public async Task <string> TraceOutgoing(string id, [FromServices] IManagedTracer tracer, [FromServices] TraceHeaderPropagatingHandler propagatingHandler)
        {
            string message = EntryData.GetMessage(nameof(TraceOutgoing), id);

            using (tracer.StartSpan(message))
                using (var httpClient = new HttpClient(propagatingHandler))
                {
                    await httpClient.GetAsync("https://google.com/");
                }
            return(message);
        }
Ejemplo n.º 19
0
 public PropagationController([FromServices] IManagedTracer tracer, [FromServices] TraceHeaderPropagatingHandler propagatingHandler)
 {
     _tracer             = tracer;
     _propagatingHandler = propagatingHandler;
 }
        public void InnerHandler_Set()
        {
            var traceHandler = new TraceHeaderPropagatingHandler(() => new FakeManagedTracer(null, null));

            Assert.NotNull(traceHandler.InnerHandler);
        }