public void Extract_InvalidSamplingPriority(string samplingPriority) { // HttpRequestHeaders setup var request = new HttpRequestMessage(); var headers = new ReflectionHttpHeadersCollection(request.Headers); const ulong traceId = 9; const ulong spanId = 7; const string origin = "synthetics"; InjectContext( headers, traceId.ToString(CultureInfo.InvariantCulture), spanId.ToString(CultureInfo.InvariantCulture), samplingPriority, origin); var resultContext = SpanContextPropagator.Instance.Extract(headers); Assert.NotNull(resultContext); Assert.Equal(traceId, resultContext.TraceId); Assert.Equal(spanId, resultContext.SpanId); Assert.Null(resultContext.SamplingPriority); Assert.Equal(origin, resultContext.Origin); }
public void Extract_EmptyHeadersReturnsNull() { // HttpRequestHeaders setup var request = new HttpRequestMessage(); var headers = new ReflectionHttpHeadersCollection(request.Headers); var resultContext = SpanContextPropagator.Instance.Extract(headers); Assert.Null(resultContext); }
private static Scope CreateScope(object controllerContext, out AspNetTags tags) { Scope scope = null; tags = null; try { if (!Tracer.Instance.Settings.IsIntegrationEnabled(IntegrationName)) { // integration disabled, don't create a scope, skip this trace return(null); } var tracer = Tracer.Instance; var request = controllerContext.GetProperty <object>("Request").GetValueOrDefault(); SpanContext propagatedContext = null; var tagsFromHeaders = Enumerable.Empty <KeyValuePair <string, string> >(); if (request != null && tracer.ActiveScope == null) { try { // extract propagated http headers var headers = request.GetProperty <object>("Headers").GetValueOrDefault(); var headersCollection = new ReflectionHttpHeadersCollection(headers); propagatedContext = SpanContextPropagator.Instance.Extract(headersCollection); tagsFromHeaders = SpanContextPropagator.Instance.ExtractHeaderTags(headersCollection, tracer.Settings.HeaderTags); } catch (Exception ex) { Log.Error(ex, "Error extracting propagated HTTP headers."); } } tags = new AspNetTags(); scope = tracer.StartActiveWithTags(OperationName, propagatedContext, tags: tags); UpdateSpan(controllerContext, scope.Span, tags, tagsFromHeaders); // set analytics sample rate if enabled var analyticsSampleRate = tracer.Settings.GetIntegrationAnalyticsSampleRate(IntegrationName, enabledWithGlobalSetting: true); if (analyticsSampleRate != null) { tags.AnalyticsSampleRate = analyticsSampleRate; } } catch (Exception ex) { Log.Error(ex, "Error creating scope."); } return(scope); }
public void ExtractHeaderTags_EmptyHeadersReturnsEmptyTagsList() { // HttpRequestHeaders setup var request = new HttpRequestMessage(); var headers = new ReflectionHttpHeadersCollection(request.Headers); var tagsFromHeader = SpanContextPropagator.Instance.ExtractHeaderTags(headers, new Dictionary <string, string>()); Assert.NotNull(tagsFromHeader); Assert.Empty(tagsFromHeader); }
public void Extract_InvalidTraceId(string traceId) { // HttpRequestHeaders setup var request = new HttpRequestMessage(); var headers = new ReflectionHttpHeadersCollection(request.Headers); const string spanId = "7"; const string samplingPriority = "2"; const string origin = "synthetics"; InjectContext(headers, traceId, spanId, samplingPriority, origin); var resultContext = SpanContextPropagator.Instance.Extract(headers); // invalid traceId should return a null context even if other values are set Assert.Null(resultContext); }
public void InjectExtract_Identity() { // HttpRequestHeaders setup var request = new HttpRequestMessage(); var headers = new ReflectionHttpHeadersCollection(request.Headers); const int traceId = 9; const int spanId = 7; const SamplingPriority samplingPriority = SamplingPriority.UserKeep; const string origin = "synthetics"; var context = new SpanContext(traceId, spanId, samplingPriority, null, origin); SpanContextPropagator.Instance.Inject(context, headers); var resultContext = SpanContextPropagator.Instance.Extract(headers); Assert.NotNull(resultContext); Assert.Equal(context.SpanId, resultContext.SpanId); Assert.Equal(context.TraceId, resultContext.TraceId); Assert.Equal(context.SamplingPriority, resultContext.SamplingPriority); Assert.Equal(context.Origin, resultContext.Origin); }
public void ExtractHeaderTags_MatchesCaseInsensitive() { // HttpRequestHeaders setup var request = new HttpRequestMessage(); var headers = new ReflectionHttpHeadersCollection(request.Headers); // Initialize constants const string customHeader1Name = "dd-custom-header1"; const string customHeader1Value = "match1"; const string customHeader1TagName = "custom-header1-tag"; const string customHeader2Name = "DD-CUSTOM-HEADER-MISMATCHING-CASE"; const string customHeader2Value = "match2"; const string customHeader2TagName = "custom-header2-tag"; string customHeader2LowercaseHeaderName = customHeader2Name.ToLowerInvariant(); // Initialize WebRequest and add headers headers.Add(customHeader1Name, customHeader1Value); headers.Add(customHeader2Name, customHeader2Value); // Initialize header tag arguments var headerToTagMap = new Dictionary <string, string>(); headerToTagMap.Add(customHeader1Name, customHeader1TagName); headerToTagMap.Add(customHeader2LowercaseHeaderName, customHeader2TagName); // Set expectations var expectedResults = new Dictionary <string, string>(); expectedResults.Add(customHeader1TagName, customHeader1Value); expectedResults.Add(customHeader2TagName, customHeader2Value); // Test var tagsFromHeader = SpanContextPropagator.Instance.ExtractHeaderTags(headers, headerToTagMap); // Assert Assert.NotNull(tagsFromHeader); Assert.Equal(expectedResults, tagsFromHeader); }