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