Exemplo n.º 1
0
        public async Task Traces_Block()
        {
            var uri      = $"/TraceSamples/{nameof(TraceSamplesController.TraceHelloWorld)}/{_testId}";
            var response = await _client.GetAsync(uri);

            var trace = s_polling.GetTrace(uri, _startTime);

            TraceEntryVerifiers.AssertParentChildSpan(trace, uri, _testId);
            TraceEntryVerifiers.AssertSpanLabelsContains(
                trace.Spans.First(s => s.Name == uri), TraceEntryData.HttpGetSuccessLabels);
            Assert.False(response.Headers.Contains(TraceHeaderContext.TraceHeader));
        }
Exemplo n.º 2
0
        public void Trace()
        {
            using (var cloudTrace = CloudTrace.InitializeInternal(new HttpApplication(), _projectId, _noBuffer))
            {
                cloudTrace.BeginRequest(null, null);
                cloudTrace.EndRequest(null, null);
            }

            var trace = _polling.GetTrace($"/{_testId}", _startTime);

            Assert.NotNull(trace);
            Assert.Single(trace.Spans);
        }
Exemplo n.º 3
0
        public async Task Trace()
        {
            string testId    = Utils.GetTestId();
            var    startTime = Timestamp.FromDateTime(DateTime.UtcNow);

            var client   = _noBufferHighQps.CreateClient();
            var response = await client.GetAsync($"/Trace/Trace/{testId}");

            var spanName = TraceController.GetMessage(nameof(TraceController.Trace), testId);
            var trace    = _polling.GetTrace(spanName, startTime);

            Assert.NotNull(trace);
            Assert.Equal(2, trace.Spans.Count);
            var span = trace.Spans.First(s => s.Name.StartsWith("/Trace/Trace/"));

            Assert.NotEmpty(span.Labels);
            Assert.Equal(span.Labels[TraceLabels.HttpMethod], "GET");
            Assert.Equal(span.Labels[TraceLabels.HttpStatusCode], "200");

            Assert.False(response.Headers.Contains(TraceHeaderContext.TraceHeader));
        }
Exemplo n.º 4
0
        public async Task Logging_Trace_FromHeader_Implicit()
        {
            string traceId = s_traceIdFactory.NextId();
            ulong  spanId  = s_spanIdFactory.NextId();
            string testId  = IdGenerator.FromGuid();

            using (var server = GetTestServer <NoBufferWarningLoggerTestApplication>())
                using (var client = server.CreateClient())
                {
                    client.DefaultRequestHeaders.Add(TraceHeaderContext.TraceHeader,
                                                     TraceHeaderContext.Create(traceId, spanId, true).ToString());
                    await client.GetAsync($"/Main/Critical/{testId}");
                }

            _fixture.AddValidator(testId, results =>
            {
                // We only have one log entry.
                LogEntry entry = Assert.Single(results);

                // And the resource name of the trace associated to it points to the trace
                // we specified on the header.
                Assert.Contains(TestEnvironment.GetTestProjectId(), entry.Trace);
                Assert.Contains(traceId, entry.Trace);

                // Let's get our trace.
                var trace = s_tracePolling.GetTrace(traceId);
                Assert.NotNull(trace);

                // The span associated to our entry needs to be part of that trace.
                // (We created this span on the middleware to encompass the whole request)
                var entrySpan = Assert.Single(trace.Spans, s => EntryData.SpanIdToHex(s.SpanId) == entry.SpanId);
                // And its parent needs to be the span specified in the header
                Assert.Equal(spanId, entrySpan.ParentSpanId);
            });
        }
Exemplo n.º 5
0
        public async Task Trace()
        {
            string testId    = Utils.GetTestId();
            var    startTime = Timestamp.FromDateTime(DateTime.UtcNow);

            var builder = new WebHostBuilder().UseStartup <TraceTestNoBufferHighQpsApplication>();

            using (var server = new TestServer(builder))
            {
                var client = server.CreateClient();
                await client.GetAsync($"/Trace/Trace/{testId}");

                var spanName = TraceController.GetMessage(nameof(TraceController.Trace), testId);
                var trace    = _polling.GetTrace(spanName, startTime);

                Assert.NotNull(trace);
                Assert.Equal(2, trace.Spans.Count);
                var span = trace.Spans.First(s => s.Name.StartsWith("/Trace/Trace/"));
                Assert.NotEmpty(span.Labels);
                Assert.Equal(span.Labels[TraceLabels.HttpMethod], "GET");
                Assert.Equal(span.Labels[TraceLabels.HttpStatusCode], "200");
            }
        }
        public async Task TraceAsync()
        {
            // Naming it like an instance variable so that it looks like that on sample code.
            IHost _host = null;

            try
            {
                // Sample: Start
                _host = CreateHostBuilder().Build();
                await _host.StartAsync();

                // End sample

                // Sample: IncomingContext
                ITraceContext  traceContext  = GetTraceContextFromIncomingRequest();
                var            tracerFactory = _host.Services.GetRequiredService <Func <ITraceContext, IManagedTracer> >();
                IManagedTracer tracer        = tracerFactory(traceContext);
                ContextTracerManager.SetCurrentTracer(tracer);
                // End sample

                // Let's just start a span with the test ID so we can find it faster.
                // But we don't show this in sample code.
                using (tracer.StartSpan(_testId))
                {
                    // Sample: Trace
                    IManagedTracer currentTracer = _host.Services.GetRequiredService <IManagedTracer>();
                    using (currentTracer.StartSpan("standalone_tracing"))
                    {
                        Console.WriteLine("Using Cloud Trace from a non ASP.NET Core app");
                    }
                    // End sample
                }

                var trace = s_polling.GetTrace(_testId, _startTime);
                TraceEntryVerifiers.AssertParentChildSpan(trace, _testId, "standalone_tracing");
                Assert.Equal(traceContext.TraceId, trace.TraceId);
            }
            finally
            {
                if (_host != null)
                {
                    await _host.StopAsync();
                }
            }
        }
        private static async Task TestTrace(string testId, DateTime startTime, HttpClient client)
        {
            var uri           = $"/Trace/{nameof(TraceController.Trace)}/{testId}";
            var childSpanName = EntryData.GetMessage(nameof(TraceController.Trace), testId);

            var response = await client.GetAsync(uri);

            // Give the polling a little extra time to find the trace as
            // trace processing can sometimes take time and the default buffer is a
            // timed buffer.
            var polling = new TraceEntryPolling(TimeSpan.FromSeconds(20));
            var trace   = polling.GetTrace(uri, Timestamp.FromDateTime(startTime));

            TraceEntryVerifiers.AssertParentChildSpan(trace, uri, childSpanName);
            TraceEntryVerifiers.AssertSpanLabelsContains(
                trace.Spans.First(s => s.Name == uri), TraceEntryData.HttpGetSuccessLabels);

            Assert.False(response.Headers.Contains(TraceHeaderContext.TraceHeader));
        }
Exemplo n.º 8
0
        private static async Task TestTrace(string testId, DateTime startTime, HttpClient client)
        {
            var response = await client.GetAsync($"/Trace/Trace/{testId}");

            var spanName = TraceController.GetMessage(nameof(TraceController.Trace), testId);

            var polling = new TraceEntryPolling();
            var trace   = polling.GetTrace(spanName, Timestamp.FromDateTime(startTime));

            Assert.NotNull(trace);
            Assert.Equal(2, trace.Spans.Count);
            var span = trace.Spans.First(s => s.Name.StartsWith("/Trace/Trace/"));

            Assert.NotEmpty(span.Labels);
            Assert.Equal("GET", span.Labels[TraceLabels.HttpMethod]);
            Assert.Equal("200", span.Labels[TraceLabels.HttpStatusCode]);

            Assert.False(response.Headers.Contains(TraceHeaderContext.TraceHeader));
        }
        internal static void PollAndVerifyTrace(Timestamp startTime, string automaticSpanName, string explicitSpanName, HttpResponseMessage response)
        {
            GcpTrace trace = s_polling.GetTrace(explicitSpanName, startTime);

            Assert.NotNull(trace);
            Assert.Equal(2, trace.Spans.Count);

            var span = trace.Spans.FirstOrDefault(s => s.Name.StartsWith(automaticSpanName));

            Assert.NotNull(span);
            Assert.NotEmpty(span.Labels);
            Assert.Equal("GET", span.Labels[TraceLabels.HttpMethod]);
            Assert.Equal("200", span.Labels[TraceLabels.HttpStatusCode]);

            span = trace.Spans.FirstOrDefault(s => s.Name.StartsWith(explicitSpanName));

            Assert.NotNull(span);

            Assert.False(response.Headers.Contains(TraceHeaderContext.TraceHeader));
        }
        private static async Task TestTrace(string testId, DateTime startTime, HttpClient client)
        {
            var response = await client.GetAsync($"/Trace/Trace/{testId}");

            var spanName = TraceController.GetMessage(nameof(TraceController.Trace), testId);

            // Give the polling a little extra time to find the trace as
            // trace processing can sometimes take time and the default buffer is a
            // timed buffer.
            var polling = new TraceEntryPolling(TimeSpan.FromSeconds(20));
            var trace   = polling.GetTrace(spanName, Timestamp.FromDateTime(startTime));

            Assert.NotNull(trace);
            Assert.Equal(2, trace.Spans.Count);
            var span = trace.Spans.First(s => s.Name.StartsWith("/Trace/Trace/"));

            Assert.NotEmpty(span.Labels);
            Assert.Equal("GET", span.Labels[TraceLabels.HttpMethod]);
            Assert.Equal("200", span.Labels[TraceLabels.HttpStatusCode]);

            Assert.False(response.Headers.Contains(TraceHeaderContext.TraceHeader));
        }
Exemplo n.º 11
0
        public async Task Trace()
        {
            var uri           = $"/Trace/{nameof(TraceController.Trace)}/{_testId}";
            var childSpanName = EntryData.GetMessage(nameof(TraceController.Trace), _testId);

            using (var server = new TestServer(new WebHostBuilder().UseStartup <TraceTestNoBufferHighQpsApplication>()))
                using (var client = server.CreateClient())
                {
                    var response = await client.GetAsync(uri);

                    var trace = _polling.GetTrace(uri, _startTime);

                    TraceEntryVerifiers.AssertParentChildSpan(trace, uri, childSpanName);
                    TraceEntryVerifiers.AssertSpanLabelsContains(
                        trace.Spans.First(s => s.Name == uri), TraceEntryData.HttpGetSuccessLabels);

                    Assert.False(response.Headers.Contains(TraceHeaderContext.TraceHeader));
                }
        }
Exemplo n.º 12
0
        public async Task Trace(Action <IWebHostBuilder> testServerConfigurator)
        {
            var uri           = $"/Trace/{nameof(TraceController.Trace)}/{_testId}";
            var childSpanName = EntryData.GetMessage(nameof(TraceController.Trace), _testId);

            using var server = GetTestServer <TraceTestNoBufferHighQpsApplication>(testServerConfigurator);
            using var client = server.CreateClient();
            var response = await client.GetAsync(uri);

            var trace = _polling.GetTrace(uri, _startTime);

            TraceEntryVerifiers.AssertParentChildSpan(trace, uri, childSpanName);
            TraceEntryVerifiers.AssertSpanLabelsContains(
                trace.Spans.First(s => s.Name == uri), TraceEntryData.HttpGetSuccessLabels);

            AssertNoTraceHeaders(response);
        }