/// <summary>
 /// Initializes an instance of <see cref="TransactionContext"/>.
 /// </summary>
 public TransactionContext(
     string name,
     string operation,
     SentryTraceHeader traceHeader)
     : this(traceHeader.SpanId, traceHeader.TraceId, name, operation, traceHeader.IsSampled)
 {
 }
        public async Task SendAsync_SentryTraceHeaderAlreadySet_NotOverwritten()
        {
            // Arrange
            var hub = Substitute.For <IHub>();

            hub.GetTraceHeader().ReturnsForAnyArgs(
                SentryTraceHeader.Parse("75302ac48a024bde9a3b3734a82e36c8-1000000000000000-0")
                );

            using var innerHandler  = new RecordingHttpMessageHandler(new FakeHttpMessageHandler());
            using var sentryHandler = new SentryHttpMessageHandler(innerHandler, hub);
            using var client        = new HttpClient(sentryHandler);

            client.DefaultRequestHeaders.Add("sentry-trace", "foobar");

            // Act
            await client.GetAsync("https://example.com/");

            using var request = innerHandler.GetRequests().Single();

            // Assert
            request.Headers.Should().Contain(h =>
                                             h.Key == "sentry-trace" &&
                                             string.Concat(h.Value) == "foobar"
                                             );
        }
Exemple #3
0
 private static SentryTraceHeader?TryGetTraceHeader(NameValueCollection headers)
 {
     try
     {
         var traceHeader = headers.Get(SentryTraceHeader.HttpHeaderName);
         return(SentryTraceHeader.Parse(traceHeader));
     }
     catch
     {
         return(null);
     }
 }
Exemple #4
0
        public void Parse_WithoutSampled_Works()
        {
            // Arrange
            const string headerValue = "75302ac48a024bde9a3b3734a82e36c8-1000000000000000";

            // Act
            var header = SentryTraceHeader.Parse(headerValue);

            // Assert
            header.TraceId.Should().Be(SentryId.Parse("75302ac48a024bde9a3b3734a82e36c8"));
            header.SpanId.Should().Be(SpanId.Parse("1000000000000000"));
            header.IsSampled.Should().BeNull();
        }
        private SentryTraceHeader?TryGetSentryTraceHeader(HttpContext context)
        {
            var value = context.Request.Headers.GetValueOrDefault(SentryTraceHeader.HttpHeaderName);

            if (string.IsNullOrWhiteSpace(value))
            {
                return(null);
            }

            _options.DiagnosticLogger?.LogDebug("Received Sentry trace header '{0}'.", value);

            try
            {
                return(SentryTraceHeader.Parse(value));
            }
            catch (Exception ex)
            {
                _options.DiagnosticLogger?.LogError("Invalid Sentry trace header '{0}'.", ex, value);
                return(null);
            }
        }