public void InjectTraceContext() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new HttpClientDesktopObserver(opts, tracing); var request = GetHttpRequestMessage(); var span = tracing.Tracer.SpanBuilder("MySpan").StartSpan() as Span; AsyncLocalContext.CurrentSpan = span; obs.InjectTraceContext(request, null); Assert.NotNull(request.Headers.Get(B3Format.X_B3_TRACE_ID)); Assert.NotNull(request.Headers.Get(B3Format.X_B3_SPAN_ID)); Assert.Null(request.Headers.Get(B3Format.X_B3_PARENT_SPAN_ID)); var spanId = request.Headers.Get(B3Format.X_B3_SPAN_ID); Assert.Equal(span.Context.SpanId.ToLowerBase16(), spanId); var traceId = request.Headers.Get(B3Format.X_B3_TRACE_ID); var expected = GetTraceId(opts, span.Context); Assert.Equal(expected, traceId); if (span.Context.TraceOptions.IsSampled) { Assert.NotNull(request.Headers.Get(B3Format.X_B3_SAMPLED)); } }
public void HandleStopEvent_RecordsStats() { var options = new MetricsObserverOptions(); var stats = new TestOpenTelemetryMetrics(); var observer = new HttpClientDesktopObserver(options, stats, null); var factory = stats.Factory; var processor = stats.Processor; var req = GetHttpRequestMessage(); Activity act = new Activity("Test"); act.Start(); Thread.Sleep(1000); act.SetEndTime(DateTime.UtcNow); observer.HandleStopEvent(act, req, HttpStatusCode.InternalServerError); observer.HandleStopEvent(act, req, HttpStatusCode.OK); factory.CollectAllMetrics(); var requestTime = processor.GetMetricByName <double>("http.desktop.client.request.time"); Assert.NotNull(requestTime); Assert.InRange(requestTime.Min, 950.0, 1500.0); Assert.InRange(requestTime.Max, 950.0, 1500.0); var requestCount = processor.GetMetricByName <long>("http.desktop.client.request.count"); Assert.NotNull(requestCount); Assert.Equal(2, requestCount.Sum); act.Stop(); }
public void InjectTraceContext() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new HttpClientDesktopObserver(opts, tracing); var request = GetHttpRequestMessage(); tracing.Tracer.SpanBuilder("MySpan").StartScopedSpan(out ISpan 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.Context.SpanId.ToLowerBase16(), spanId); var traceId = request.Headers.Get(B3Constants.XB3TraceId); var expected = GetTraceId(opts, span.Context); Assert.Equal(expected, traceId); if (span.Context.TraceOptions.IsSampled) { Assert.NotNull(request.Headers.Get(B3Constants.XB3Sampled)); } }
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)); } }
public void HandleStopEvent_RecordsStats() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientDesktopObserver(options, stats, tags, null); var req = GetHttpRequestMessage(); Activity act = new Activity("Test"); act.Start(); Thread.Sleep(1000); act.SetEndTime(DateTime.UtcNow); observer.HandleStopEvent(act, req, HttpStatusCode.InternalServerError); observer.HandleStopEvent(act, req, HttpStatusCode.OK); var reqData = stats.ViewManager.GetView(ViewName.Create("http.desktop.client.request.time")); var aggData1 = MetricsHelpers.SumWithTags(reqData) as IDistributionData; Assert.InRange(aggData1.Mean, 990.0, 1025.0); Assert.InRange(aggData1.Max, 990.0, 1025.0); reqData = stats.ViewManager.GetView(ViewName.Create("http.desktop.client.request.count")); var aggData2 = MetricsHelpers.SumWithTags(reqData) as ISumDataLong; Assert.Equal(2, aggData2.Sum); act.Stop(); }
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()); }
public void ProcessEvent_IgnoresNulls() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new HttpClientDesktopObserver(opts, tracing); obs.ProcessEvent(null, null); }
public void ProcessEvent_IgnoresUnknownEvent() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new HttpClientDesktopObserver(opts, tracing); obs.ProcessEvent(string.Empty, new { Request = GetHttpRequestMessage() }); }
public void Constructor_RegistersExpectedViews() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientDesktopObserver(options, stats, tags, null); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("http.desktop.client.request.time"))); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("http.desktop.client.request.count"))); }
public void ShouldIgnore_ReturnsExpected() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new HttpClientDesktopObserver(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")); }
public void ShouldIgnore_ReturnsExpected() { var options = new MetricsObserverOptions(); var stats = new TestOpenTelemetryMetrics(); var observer = new HttpClientDesktopObserver(options, stats, null); Assert.True(observer.ShouldIgnoreRequest("/api/v2/spans")); Assert.True(observer.ShouldIgnoreRequest("/v2/apps/foobar/permissions")); Assert.True(observer.ShouldIgnoreRequest("/v2/apps/barfoo/permissions")); Assert.False(observer.ShouldIgnoreRequest("/api/test")); Assert.False(observer.ShouldIgnoreRequest("/v2/apps")); }
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)); }
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)); }
public void ShouldIgnore_ReturnsExpected() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var obs = new HttpClientDesktopObserver(options, stats, tags, null); 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")); }
public void ProcessEvent_StopEx_NothingStarted() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(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() }); Span span = AsyncLocalContext.CurrentSpan as Span; Assert.Null(span); Assert.False(obs.Pending.TryGetValue(request, out HttpClientTracingObserver.SpanContext context)); }
public void ProcessEvent_Stop_NoRespose() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new HttpClientDesktopObserver(opts, tracing); var request = GetHttpRequestMessage(); obs.ProcessEvent(HttpClientDesktopObserver.STOP_EVENT, new { Request = request }); Span span = AsyncLocalContext.CurrentSpan as Span; Assert.Null(span); Assert.False(obs.Pending.TryGetValue(request, out HttpClientTracingObserver.SpanContext context)); }
public void GetTagContext_ReturnsExpected() { var options = new MetricsObserverOptions(); var stats = new TestOpenTelemetryMetrics(); var observer = new HttpClientDesktopObserver(options, stats, null); var req = GetHttpRequestMessage(); var labels = observer.GetLabels(req, HttpStatusCode.InternalServerError); labels.Contains(KeyValuePair.Create("clientName", "localhost:5555")); labels.Contains(KeyValuePair.Create("uri", "/foo/bar")); labels.Contains(KeyValuePair.Create("status", "500")); labels.Contains(KeyValuePair.Create("method", "GET")); }
public void ProcessEvent_Start() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new HttpClientDesktopObserver(opts, tracing); var request = GetHttpRequestMessage(); obs.ProcessEvent(HttpClientDesktopObserver.START_EVENT, new { Request = request }); Span span = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(span); Assert.True(obs.Pending.TryGetValue(request, out HttpClientTracingObserver.SpanContext spanContext)); Assert.NotNull(spanContext); Assert.Equal(span, spanContext.Active); Assert.Null(spanContext.Previous); Assert.Equal("httpclient:/", span.Name); Assert.NotNull(request.Headers.Get(B3Format.X_B3_TRACE_ID)); Assert.NotNull(request.Headers.Get(B3Format.X_B3_SPAN_ID)); Assert.Null(request.Headers.Get(B3Format.X_B3_PARENT_SPAN_ID)); var spanId = request.Headers.Get(B3Format.X_B3_SPAN_ID); Assert.Equal(span.Context.SpanId.ToLowerBase16(), spanId); var traceId = request.Headers.Get(B3Format.X_B3_TRACE_ID); var expected = GetTraceId(opts, span.Context); Assert.Equal(expected, traceId); if (span.Context.TraceOptions.IsSampled) { Assert.NotNull(request.Headers.Get(B3Format.X_B3_SAMPLED)); } Assert.False(span.HasEnded); var spanData = span.ToSpanData(); var attributes = spanData.Attributes.AttributeMap; Assert.Equal(AttributeValue.StringAttributeValue(SpanAttributeConstants.ClientSpanKind), attributes[SpanAttributeConstants.SpanKindKey]); Assert.Equal(AttributeValue.StringAttributeValue("http://localhost:5555/"), attributes[SpanAttributeConstants.HttpUrlKey]); Assert.Equal(AttributeValue.StringAttributeValue(HttpMethod.Get.ToString()), attributes[SpanAttributeConstants.HttpMethodKey]); Assert.Equal(AttributeValue.StringAttributeValue("localhost"), attributes[SpanAttributeConstants.HttpHostKey]); Assert.Equal(AttributeValue.StringAttributeValue("/"), attributes[SpanAttributeConstants.HttpPathKey]); Assert.Equal(AttributeValue.StringAttributeValue("Header"), attributes["http.request.TEST"]); }
public void GetTagContext_ReturnsExpected() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientDesktopObserver(options, stats, tags, null); var req = GetHttpRequestMessage(); var tagContext = observer.GetTagContext(req, HttpStatusCode.InternalServerError); var tagValues = tagContext.ToList(); tagValues.Contains(Tag.Create(TagKey.Create("clientName"), TagValue.Create("localhost:5555"))); tagValues.Contains(Tag.Create(TagKey.Create("uri"), TagValue.Create("/foo/bar"))); tagValues.Contains(Tag.Create(TagKey.Create("status"), TagValue.Create("500"))); tagValues.Contains(Tag.Create(TagKey.Create("method"), TagValue.Create("GET"))); }
public void ProcessEvent_IgnoresNulls() { var options = new MetricsObserverOptions(); var stats = new TestOpenTelemetryMetrics(); var observer = new HttpClientDesktopObserver(options, stats, null); observer.ProcessEvent("foobar", null); observer.ProcessEvent(HttpClientDesktopObserver.STOP_EVENT, null); Activity act = new Activity("Test"); act.Start(); observer.ProcessEvent(HttpClientDesktopObserver.STOP_EVENT, null); observer.ProcessEvent(HttpClientDesktopObserver.STOPEX_EVENT, null); act.Stop(); }
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"]); }
public void ProcessEvent_IgnoresNulls() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientDesktopObserver(options, stats, tags, null); observer.ProcessEvent("foobar", null); observer.ProcessEvent(HttpClientDesktopObserver.STOP_EVENT, null); Activity act = new Activity("Test"); act.Start(); observer.ProcessEvent(HttpClientDesktopObserver.STOP_EVENT, null); observer.ProcessEvent(HttpClientDesktopObserver.STOPEX_EVENT, null); act.Stop(); }
public void ProcessEvent_StopEx_PreviousStarted() { 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); var spanData = span.ToSpanData(); Assert.Equal("httpclient:/", spanData.Name); var respHeaders = new WebHeaderCollection { { "TEST", "Header" } }; obs.ProcessEvent(HttpClientDesktopObserver.STOPEX_EVENT, new { Request = request, StatusCode = HttpStatusCode.OK, Headers = respHeaders }); Assert.True(span.HasEnded()); Assert.False(obs.Pending.TryGetValue(request, out var pendingSpan2)); 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"]); Assert.Equal("Header", attributes["http.response.TEST"]); Assert.Equal((long)HttpStatusCode.OK, attributes[SpanAttributeConstants.HttpStatusCodeKey]); }
public void ProcessEvent_StopEx_PreviousStarted() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new HttpClientDesktopObserver(opts, tracing); var request = GetHttpRequestMessage(); obs.ProcessEvent(HttpClientDesktopObserver.START_EVENT, new { Request = request }); Span span = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(span); Assert.True(obs.Pending.TryGetValue(request, out HttpClientTracingObserver.SpanContext spanContext)); Assert.NotNull(spanContext); Assert.Equal(span, spanContext.Active); Assert.Null(spanContext.Previous); Assert.Equal("httpclient:/", span.Name); var respHeaders = new WebHeaderCollection(); respHeaders.Add("TEST", "Header"); obs.ProcessEvent(HttpClientDesktopObserver.STOPEX_EVENT, new { Request = request, StatusCode = HttpStatusCode.OK, Headers = respHeaders }); Assert.True(span.HasEnded); Assert.Null(AsyncLocalContext.CurrentSpan); Assert.False(obs.Pending.TryGetValue(request, out HttpClientTracingObserver.SpanContext ctx)); var spanData = span.ToSpanData(); var attributes = spanData.Attributes.AttributeMap; Assert.Equal(AttributeValue.StringAttributeValue(SpanAttributeConstants.ClientSpanKind), attributes[SpanAttributeConstants.SpanKindKey]); Assert.Equal(AttributeValue.StringAttributeValue("http://localhost:5555/"), attributes[SpanAttributeConstants.HttpUrlKey]); Assert.Equal(AttributeValue.StringAttributeValue(HttpMethod.Get.ToString()), attributes[SpanAttributeConstants.HttpMethodKey]); Assert.Equal(AttributeValue.StringAttributeValue("localhost"), attributes[SpanAttributeConstants.HttpHostKey]); Assert.Equal(AttributeValue.StringAttributeValue("/"), attributes[SpanAttributeConstants.HttpPathKey]); Assert.Equal(AttributeValue.StringAttributeValue("Header"), attributes["http.request.TEST"]); Assert.Equal(AttributeValue.StringAttributeValue("Header"), attributes["http.response.TEST"]); Assert.Equal(AttributeValue.LongAttributeValue((long)HttpStatusCode.OK), attributes[SpanAttributeConstants.HttpStatusCodeKey]); }