public void InjectTraceContext()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            // tracing.Tracer.SpanBuilder("MySpan").StartScopedSpan(out ISpan span);
            tracing.Tracer.StartActiveSpan("MySpan", out var span);

            obs.InjectTraceContext(request, null);

            Assert.True(request.Headers.Contains(B3Constants.XB3TraceId));
            Assert.True(request.Headers.Contains(B3Constants.XB3SpanId));
            Assert.False(request.Headers.Contains(B3Constants.XB3ParentSpanId));

            var spanId = request.Headers.GetValues(B3Constants.XB3SpanId).Single();

            Assert.Equal(span.ToSpanData().Context.SpanId.ToHexString(), spanId);

            var traceId  = request.Headers.GetValues(B3Constants.XB3TraceId).Single();
            var expected = GetTraceId(opts, span.Context);

            Assert.Equal(expected, traceId);

            if (span.IsRecording)
            {
                Assert.True(request.Headers.Contains(B3Constants.XB3Sampled));
            }
        }
        public void ProcessEvent_Exception_NothingStarted()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            // No Exception
            obs.ProcessEvent(HttpClientCoreObserver.EXCEPTION_EVENT, new { Request = request });
            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
#if NETCOREAPP3_1
            Assert.False(request.Properties.TryGetValue(HttpClientCoreObserver.SPANCONTEXT_KEY, out var context));
#else
            Assert.DoesNotContain(request.Options, o => o.Key == HttpClientCoreObserver.SPANCONTEXT_KEY);
#endif

            obs.ProcessEvent(HttpClientCoreObserver.EXCEPTION_EVENT, new { Request = request, Exception = new Exception() });
            span = GetCurrentSpan(tracing.Tracer);
            Assert.Null(span);
#if NETCOREAPP3_1
            Assert.False(request.Properties.TryGetValue(HttpClientCoreObserver.SPANCONTEXT_KEY, out context));
#else
            Assert.DoesNotContain(request.Options, o => o.Key == HttpClientCoreObserver.SPANCONTEXT_KEY);
#endif
        }
Exemplo n.º 3
0
        public void ProcessEvent_Start()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_START_EVENT, new { HttpContext = request });

            var span = GetCurrentSpan(tracing.Tracer);

            Assert.NotNull(span);

            Assert.Equal("http:/", span.ToSpanData().Name);

            Assert.False(span.HasEnded());

            var spanData   = span.ToSpanData();
            var attributes = spanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value);

            Assert.Equal(SpanKind.Server, spanData.Kind);
            Assert.Equal("http://localhost:5555/", attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(HttpMethod.Get.ToString(), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal("localhost:5555", attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal("/", attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal("Header", attributes["http.request.TEST"]);
        }
Exemplo n.º 4
0
        public void InjectTraceContext()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            tracing.Tracer.StartActiveSpan("MySpan", out var span);

            obs.InjectTraceContext(request, null);

            Assert.NotNull(request.Headers.Get(B3Constants.XB3TraceId));
            Assert.NotNull(request.Headers.Get(B3Constants.XB3SpanId));
            Assert.Null(request.Headers.Get(B3Constants.XB3ParentSpanId));

            var spanId = request.Headers.Get(B3Constants.XB3SpanId);

            Assert.Equal(span.ToSpanData().Context.SpanId.ToHexString(), spanId);

            var traceId  = request.Headers.Get(B3Constants.XB3TraceId);
            var expected = GetTraceId(opts, span.Context);

            Assert.Equal(expected, traceId);

            if (span.IsRecording)
            {
                Assert.NotNull(request.Headers.Get(B3Constants.XB3Sampled));
            }
        }
Exemplo n.º 5
0
        public void BindsCorrectSampler()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:tracing:name"] = "foobar",
                ["management:tracing:ingressIgnorePattern"]     = "pattern",
                ["management:tracing:egressIgnorePattern"]      = "pattern",
                ["management:tracing:maxNumberOfAttributes"]    = "100",
                ["management:tracing:maxNumberOfAnnotations"]   = "100",
                ["management:tracing:maxNumberOfMessageEvents"] = "100",
                ["management:tracing:maxNumberOfLinks"]         = "100",
                ["management:tracing:alwaysSample"]             = "true",
                ["management:tracing:neverSample"]      = "true",
                ["management:tracing:useShortTraceIds"] = "true",
            };

            var builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(appsettings);
            var opts = new TracingOptions(null, builder.Build());

            var tracing = new OpenTelemetryTracing(opts, builder => builder.SetSampler(new TestSampler()));

            Assert.Throws <TestSamplerException>(
                () => tracing.Tracer.StartActiveSpan("mySpan", out var span));
        }
Exemplo n.º 6
0
        public void ExtractTraceContext()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            request.Request.Headers.Add(B3Constants.XB3TraceId, new StringValues(TRACE_ID_BASE16));
            request.Request.Headers.Add(B3Constants.XB3SpanId, new StringValues(SPAN_ID_BASE16));
            request.Request.Headers.Add(B3Constants.XB3Sampled, new StringValues("1"));

            var context = obs.ExtractTraceContext(request);

            Assert.Equal(TRACE_ID_BASE16, context.TraceId.ToHexString());
            Assert.Equal(SPAN_ID_BASE16, context.SpanId.ToHexString());
            Assert.True(context.TraceOptions.IsSampled());

            request = GetHttpRequestMessage();
            request.Request.Headers.Add(B3Constants.XB3TraceId, new StringValues(TRACE_ID_BASE16_EIGHT_BYTES));
            request.Request.Headers.Add(B3Constants.XB3SpanId, new StringValues(SPAN_ID_BASE16));
            request.Request.Headers.Add(B3Constants.XB3Sampled, new StringValues("1"));

            context = obs.ExtractTraceContext(request);
            Assert.Equal("0000000000000000" + TRACE_ID_BASE16_EIGHT_BYTES, context.TraceId.ToHexString());
            Assert.Equal(SPAN_ID_BASE16, context.SpanId.ToHexString());
            Assert.True(context.TraceOptions.IsSampled());
        }
Exemplo n.º 7
0
        public void Process_NoCurrentSpan_DoesNothing()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:tracing:name"] = "foobar",
                ["management:tracing:ingressIgnorePattern"]     = "pattern",
                ["management:tracing:egressIgnorePattern"]      = "pattern",
                ["management:tracing:maxNumberOfAttributes"]    = "100",
                ["management:tracing:maxNumberOfAnnotations"]   = "100",
                ["management:tracing:maxNumberOfMessageEvents"] = "100",
                ["management:tracing:maxNumberOfLinks"]         = "100",
                ["management:tracing:alwaysSample"]             = "true",
                ["management:tracing:neverSample"]      = "true",
                ["management:tracing:useShortTraceIds"] = "true",
            };

            var builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(appsettings);
            var opts = new TracingOptions(null, builder.Build());

            var tracing   = new OpenTelemetryTracing(opts);
            var processor = new TracingLogProcessor(opts, tracing);
            var result    = processor.Process("InputLogMessage");

            Assert.Equal("InputLogMessage", result);
        }
        public void ProcessEvent_IgnoresUnknownEvent()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);

            obs.ProcessEvent(string.Empty, new { Request = GetHttpRequestMessage() });
        }
Exemplo n.º 9
0
        public void ProcessEvent_IgnoresMissingHttpRequestMessage()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);

            obs.ProcessEvent(string.Empty, new object());
        }
Exemplo n.º 10
0
        public void ProcessEvent_IgnoresUnknownEvent()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreMvcViewObserver(opts, tracing);

            obs.ProcessEvent(string.Empty, new { viewContext = GetViewContext() });
        }
Exemplo n.º 11
0
        public void ProcessEvent_IgnoresNulls()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);

            obs.ProcessEvent(null, null);
        }
Exemplo n.º 12
0
        public void BindsConfigurationCorrectly()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:tracing:name"] = "foobar",
                ["management:tracing:ingressIgnorePattern"]     = "pattern",
                ["management:tracing:egressIgnorePattern"]      = "pattern",
                ["management:tracing:maxNumberOfAttributes"]    = "100",
                ["management:tracing:maxNumberOfAnnotations"]   = "100",
                ["management:tracing:maxNumberOfMessageEvents"] = "100",
                ["management:tracing:maxNumberOfLinks"]         = "100",
                ["management:tracing:alwaysSample"]             = "true",
                ["management:tracing:neverSample"]      = "true",
                ["management:tracing:useShortTraceIds"] = "true",
            };

            var builder = new ConfigurationBuilder();

            builder.AddInMemoryCollection(appsettings);
            var opts = new TracingOptions(null, builder.Build());

            var tracing = new OpenTelemetryTracing(opts);

            Assert.NotNull(tracing.Tracer);
            Assert.NotNull(tracing.TracerConfiguration);
            var p = tracing.TracerConfiguration;

            Assert.Equal(100, p.MaxNumberOfAttributes);
            Assert.Equal(100, p.MaxNumberOfLinks);
            Assert.Equal(100, p.MaxNumberOfEvents);

            appsettings = new Dictionary <string, string>()
            {
                ["management:tracing:name"] = "foobar",
                ["management:tracing:ingressIgnorePattern"]     = "pattern",
                ["management:tracing:egressIgnorePattern"]      = "pattern",
                ["management:tracing:maxNumberOfAttributes"]    = "100",
                ["management:tracing:maxNumberOfAnnotations"]   = "100",
                ["management:tracing:maxNumberOfMessageEvents"] = "100",
                ["management:tracing:maxNumberOfLinks"]         = "100",
                ["management:tracing:alwaysSample"]             = "true",
                ["management:tracing:useShortTraceIds"]         = "true",
            };

            builder = new ConfigurationBuilder();
            builder.AddInMemoryCollection(appsettings);
            opts = new TracingOptions(null, builder.Build());

            tracing = new OpenTelemetryTracing(opts);
            Assert.NotNull(tracing.Tracer);
            Assert.NotNull(tracing.TracerConfiguration);
            p = tracing.TracerConfiguration;
            Assert.Equal(100, p.MaxNumberOfAttributes);
            Assert.Equal(100, p.MaxNumberOfLinks);
            Assert.Equal(100, p.MaxNumberOfEvents);
            Assert.IsType <AlwaysOnSampler>(tracing.ConfiguredSampler);
        }
Exemplo n.º 13
0
        public void ExtractViewPath()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreMvcViewObserver(opts, tracing);

            var ctx  = GetViewContext();
            var path = obs.ExtractViewPath(ctx);

            Assert.Equal(ctx.View.Path, path);
        }
Exemplo n.º 14
0
        public void ExtractSpanName()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreMvcViewObserver(opts, tracing);

            var ctx      = GetViewContext();
            var spanName = obs.ExtractSpanName(ctx);

            Assert.Equal("view:" + ctx.View.Path, spanName);
        }
Exemplo n.º 15
0
        public void ShouldIgnore_ReturnsExpected()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);

            Assert.True(obs.ShouldIgnoreRequest("/api/v2/spans"));
            Assert.True(obs.ShouldIgnoreRequest("/v2/apps/foobar/permissions"));
            Assert.True(obs.ShouldIgnoreRequest("/v2/apps/barfoo/permissions"));
            Assert.False(obs.ShouldIgnoreRequest("/api/test"));
            Assert.False(obs.ShouldIgnoreRequest("/v2/apps"));
        }
Exemplo n.º 16
0
        public void ProcessEvent_Start()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientCoreObserver.START_EVENT, new { Request = request });

            var span = GetCurrentSpan(tracing.Tracer);

            Assert.NotNull(span);
#if NETCOREAPP3_1
            Assert.True(request.Properties.TryGetValue(HttpClientCoreObserver.SPANCONTEXT_KEY, out object context));
            var contextSpan = context as TelemetrySpan;
#else
            var contextSpan = request.Options.FirstOrDefault(o => o.Key == HttpClientCoreObserver.SPANCONTEXT_KEY).Value;
            Assert.NotNull(contextSpan);
#endif

            Assert.NotNull(contextSpan);
            Assert.Equal(span, contextSpan);
            Assert.Equal("httpclient:/", span.ToSpanData().Name);

            Assert.True(request.Headers.Contains(B3Constants.XB3TraceId));
            Assert.True(request.Headers.Contains(B3Constants.XB3SpanId));
            Assert.False(request.Headers.Contains(B3Constants.XB3ParentSpanId));

            var spanId = request.Headers.GetValues(B3Constants.XB3SpanId).Single();
            Assert.Equal(span.Context.SpanId.ToHexString(), spanId);
            var spanData = span.ToSpanData();

            var traceId  = request.Headers.GetValues(B3Constants.XB3TraceId).Single();
            var expected = GetTraceId(opts, spanData.Context);
            Assert.Equal(expected, traceId);

            if (span.IsRecording)
            {
                Assert.True(request.Headers.Contains(B3Constants.XB3Sampled));
            }

            Assert.False(span.HasEnded());

            spanData = span.ToSpanData();
            var attributes = spanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value);
            Assert.Equal(SpanKind.Client, spanData.Kind);
            Assert.Equal("http://localhost:5555/", attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(HttpMethod.Get.ToString(), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal("localhost:5555", attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal("/", attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal("Header", attributes["http.request.TEST"]);
        }
Exemplo n.º 17
0
        public void ProcessEvent_StopEx_NothingStarted()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientDesktopObserver.STOPEX_EVENT, new { Request = request, StatusCode = HttpStatusCode.OK, Headers = new WebHeaderCollection() });
            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.False(obs.Pending.TryGetValue(request, out var context));
        }
Exemplo n.º 18
0
        public void ProcessEvent_Stop_NoArgs()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_STOP_EVENT, new { });
            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.Null(obs.Active);
        }
Exemplo n.º 19
0
        public void ProcessEvent_Stop_NoRespose()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientDesktopObserver.STOP_EVENT, new { Request = request });
            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.False(obs.Pending.TryGetValue(request, out var context));
        }
Exemplo n.º 20
0
        public void ProcessEvent_BeforeView_NoArgs()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreMvcViewObserver(opts, tracing);
            var ctx     = GetViewContext();

            obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { });
            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.Null(obs.Active);
        }
Exemplo n.º 21
0
        public void ProcessEvent_Stop_NothingStarted()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientCoreObserver.STOP_EVENT, new { Request = request });
            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.False(request.Properties.TryGetValue(HttpClientCoreObserver.SPANCONTEXT_KEY, out object context));
        }
Exemplo n.º 22
0
        public void ProcessEvent_BeforeAction_NoArgs()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreMvcActionObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_BEFOREACTION_EVENT, new { });
            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);
            Assert.Null(obs.Active);
        }
Exemplo n.º 23
0
        public void ProcessEvent_AfterView_NoBeforeView()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreMvcViewObserver(opts, tracing);

            obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_AFTERVIEW_EVENT, new { });

            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);

            var spanContext = obs.Active;

            Assert.Null(spanContext);
        }
Exemplo n.º 24
0
        public void ExtractResponseSize()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);

            var request = GetHttpRequestMessage();

            request.Response.Body.WriteByte(1);
            request.Response.Body.WriteByte(2);

            var result = obs.ExtractResponseSize(request);

            Assert.NotNull(result);
            Assert.Equal(2, result.Value);
        }
Exemplo n.º 25
0
        public void ProcessEvent_Exception_PreviousStarted()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientCoreObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientCoreObserver.START_EVENT, new { Request = request });

            var span = GetCurrentSpan(tracing.Tracer);

            Assert.NotNull(span);
#if NETCOREAPP3_1
            Assert.True(request.Properties.TryGetValue(HttpClientCoreObserver.SPANCONTEXT_KEY, out object context));
            var contextSpan = context as TelemetrySpan;
#else
            var contextSpan = request.Options.FirstOrDefault(o => o.Key == HttpClientCoreObserver.SPANCONTEXT_KEY).Value;
            Assert.NotNull(contextSpan);
#endif
            Assert.Equal(span, contextSpan);
            Assert.Equal("httpclient:/", span.ToSpanData().Name);

            var exception = new Exception("Help");
            obs.ProcessEvent(HttpClientCoreObserver.EXCEPTION_EVENT, new { Request = request, Exception = exception });

            var response = GetHttpResponseMessage(HttpStatusCode.InternalServerError);
            obs.ProcessEvent(HttpClientCoreObserver.STOP_EVENT, new { Request = request, Response = response, RequestTaskStatus = TaskStatus.RanToCompletion });
            Assert.True(span.HasEnded());
#if NETCOREAPP3_1
            Assert.False(request.Properties.TryGetValue(HttpClientCoreObserver.SPANCONTEXT_KEY, out context));
#else
            Assert.DoesNotContain(request.Options, o => o.Key == HttpClientCoreObserver.SPANCONTEXT_KEY);
#endif

            var spanData   = span.ToSpanData();
            var attributes = spanData.Attributes.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
            Assert.Equal(SpanKind.Client, spanData.Kind);
            Assert.Equal("http://localhost:5555/", attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(HttpMethod.Get.ToString(), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal("localhost:5555", attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal("/", attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal("Header", attributes["http.request.TEST"]);
            Assert.Equal("Header", attributes["http.response.TEST"]);
            Assert.Equal((long)HttpStatusCode.InternalServerError, attributes[SpanAttributeConstants.HttpStatusCodeKey]);
            Assert.Equal(obs.GetExceptionMessage(exception), attributes[SpanAttributeConstants.ErrorKey]);
            Assert.Equal(obs.GetExceptionStackTrace(exception), attributes[SpanAttributeConstants.ErrorStackTrace]);
        }
Exemplo n.º 26
0
        public void ProcessEvent_Start()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new HttpClientDesktopObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(HttpClientDesktopObserver.START_EVENT, new { Request = request });

            var span = GetCurrentSpan(tracing.Tracer);

            Assert.NotNull(span);
            Assert.True(obs.Pending.TryGetValue(request, out var pendingSpan));
            Assert.NotNull(pendingSpan);
            Assert.Equal(span, pendingSpan);
            Assert.Equal("httpclient:/", span.ToSpanData().Name);

            Assert.NotNull(request.Headers.Get(B3Constants.XB3TraceId));
            Assert.NotNull(request.Headers.Get(B3Constants.XB3SpanId));
            Assert.Null(request.Headers.Get(B3Constants.XB3ParentSpanId));

            var spanId = request.Headers.Get(B3Constants.XB3SpanId);

            Assert.Equal(span.Context.SpanId.ToHexString(), spanId);

            var traceId  = request.Headers.Get(B3Constants.XB3TraceId);
            var expected = GetTraceId(opts, span.Context);

            Assert.Equal(expected, traceId);

            if (span.IsRecording)
            {
                Assert.NotNull(request.Headers.Get(B3Constants.XB3Sampled));
            }

            Assert.False(span.HasEnded());

            var spanData   = span.ToSpanData();
            var attributes = spanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value);

            Assert.Equal(SpanKind.Client, spanData.Kind);
            Assert.Equal("http://localhost:5555/", attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(HttpMethod.Get.ToString(), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal("localhost:5555", attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal("/", attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal("Header", attributes["http.request.TEST"]);
        }
Exemplo n.º 27
0
        public void InitializedWithDefaults()
        {
            var builder = new ConfigurationBuilder();
            var opts    = new TracingOptions(null, builder.Build());

            var tracing = new OpenTelemetryTracing(opts);

            Assert.NotNull(tracing.Tracer);
            Assert.NotNull(tracing.TracerConfiguration);
            var p = tracing.TracerConfiguration;

            Assert.Equal(32, p.MaxNumberOfAttributes);
            Assert.Equal(32, p.MaxNumberOfLinks);
            Assert.Equal(128, p.MaxNumberOfEvents);
            Assert.NotEqual(tracing.ConfiguredSampler, new AlwaysOnSampler());
            Assert.NotEqual(tracing.ConfiguredSampler, new AlwaysOffSampler());
        }
Exemplo n.º 28
0
        public void Process_CurrentSpan_ReturnsExpected()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:tracing:name"] = "foobar",
                ["management:tracing:ingressIgnorePattern"]     = "pattern",
                ["management:tracing:egressIgnorePattern"]      = "pattern",
                ["management:tracing:maxNumberOfAttributes"]    = "100",
                ["management:tracing:maxNumberOfAnnotations"]   = "100",
                ["management:tracing:maxNumberOfMessageEvents"] = "100",
                ["management:tracing:maxNumberOfLinks"]         = "100",
                ["management:tracing:alwaysSample"]             = "true",
                ["management:tracing:neverSample"]      = "false",
                ["management:tracing:useShortTraceIds"] = "false",
            };

            var config = TestHelpers.GetConfigurationFromDictionary(appsettings);
            var opts   = new TracingOptions(new ApplicationInstanceInfo(config), config);

            var tracing = new OpenTelemetryTracing(opts);

            tracing.Tracer.StartActiveSpan("spanName", out var span);

            var processor = new TracingLogProcessor(opts, tracing);
            var result    = processor.Process("InputLogMessage");

            Assert.Contains("InputLogMessage", result);
            Assert.Contains("[", result);
            Assert.Contains("]", result);
            Assert.Contains(span.Context.TraceId.ToHexString(), result);
            Assert.Contains(span.Context.SpanId.ToHexString(), result);
            Assert.Contains("foobar", result);

            tracing.Tracer.StartActiveSpan("spanName2", span, out var childSpan);

            result = processor.Process("InputLogMessage2");

            Assert.Contains("InputLogMessage2", result);
            Assert.Contains("[", result);
            Assert.Contains("]", result);
            Assert.Contains(childSpan.Context.TraceId.ToHexString(), result);
            Assert.Contains(childSpan.Context.SpanId.ToHexString(), result);

            // Assert.Contains(span.Context.SpanId.ToHexString(), result);  TODO: ParentID not supported
            Assert.Contains("foobar", result);
        }
Exemplo n.º 29
0
        public void ProcessEvent_AfterAction_NoBeforeAction()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreMvcActionObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_AFTERACTION_EVENT, new { httpContext = request });

            var span = GetCurrentSpan(tracing.Tracer);

            Assert.Null(span);

            var spanContext = obs.Active;

            Assert.Null(spanContext);
        }
Exemplo n.º 30
0
        public void ProcessEvent_Exception_PreviousStarted()
        {
            var opts    = GetOptions();
            var tracing = new OpenTelemetryTracing(opts, null);
            var obs     = new AspNetCoreHostingObserver(opts, tracing);
            var request = GetHttpRequestMessage();

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_START_EVENT, new { HttpContext = request });

            var span = GetCurrentSpan(tracing.Tracer);

            Assert.NotNull(span);

            var spanData = span.ToSpanData();

            Assert.Equal("http:/", spanData.Name);

            var exception = new Exception("Help");

            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_EXCEPTION_EVENT, new { httpContext = request, exception = exception });

            request.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            obs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_STOP_EVENT, new { HttpContext = request });

            Assert.True(span.HasEnded());

            Assert.Null(GetCurrentSpan(tracing.Tracer));
            Assert.Null(obs.Active);

            spanData = span.ToSpanData();
            var attributes = spanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value);

            Assert.Equal(SpanKind.Server, spanData.Kind);
            Assert.Equal("http://localhost:5555/", attributes[SpanAttributeConstants.HttpUrlKey]);
            Assert.Equal(HttpMethod.Get.ToString(), attributes[SpanAttributeConstants.HttpMethodKey]);
            Assert.Equal("localhost:5555", attributes[SpanAttributeConstants.HttpHostKey]);
            Assert.Equal("/", attributes[SpanAttributeConstants.HttpPathKey]);
            Assert.Equal("Header", attributes["http.request.TEST"]);
            Assert.Equal("Header", attributes["http.response.TEST"]);
            Assert.Equal((long)HttpStatusCode.InternalServerError, attributes[SpanAttributeConstants.HttpStatusCodeKey]);
            Assert.Equal(obs.GetExceptionMessage(exception), attributes[SpanAttributeConstants.ErrorKey]);
            Assert.Equal(obs.GetExceptionStackTrace(exception), attributes[SpanAttributeConstants.ErrorStackTrace]);
        }