Skip to content

Commit

Permalink
Prefer W3C traceparent over elastic-apm-traceparent (elastic#1302)
Browse files Browse the repository at this point in the history
* Update WebRequestTransactionCreator.cs

Prefer W3C traceparent over elastic-apm-traceparent

* Update DistributedTracingAspNetCoreTests.cs

Add test to assert that the traceparent header is used over elastic-apm-traceparent
  • Loading branch information
gregkalapos authored Jun 8, 2021
1 parent 04c147d commit d924d8d
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
10 changes: 5 additions & 5 deletions src/Elastic.Apm.AspNetCore/WebRequestTransactionCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,12 @@ internal static ITransaction StartTransactionAsync(HttpContext context, IApmLogg
ITransaction transaction;
var transactionName = $"{context.Request.Method} {context.Request.Path}";

var containsPrefixedTraceParentHeader =
context.Request.Headers.TryGetValue(TraceContext.TraceParentHeaderNamePrefixed, out var traceParentHeader);
var containsTraceParentHeader =
context.Request.Headers.TryGetValue(TraceContext.TraceParentHeaderName, out var traceParentHeader);

var containsTraceParentHeader = false;
if (!containsPrefixedTraceParentHeader)
containsTraceParentHeader = context.Request.Headers.TryGetValue(TraceContext.TraceParentHeaderName, out traceParentHeader);
var containsPrefixedTraceParentHeader = false;
if (!containsTraceParentHeader)
containsPrefixedTraceParentHeader = context.Request.Headers.TryGetValue(TraceContext.TraceParentHeaderNamePrefixed, out traceParentHeader);

if (containsPrefixedTraceParentHeader || containsTraceParentHeader)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,24 @@ public async Task DistributedTraceAcross2ServicesWithTraceState()
_payloadSender2.FirstTransaction.Context.Request.Headers["tracestate"].Should().Be("rojo=00f067aa0ba902b7,congo=t61rcWkgMzE");
}

/// <summary>
/// Makes sure that the header `traceparent` is used when both `traceparent` and `elastic-apm-traceparent` are present.
/// </summary>
[Fact]
public async Task PreferW3CTraceHeaderOverElasticTraceHeader()
{
var client = new HttpClient();
var expectedTraceId = "0af7651916cd43dd8448eb211c80319c";
var expectedParentId = "b7ad6b7169203331";
client.DefaultRequestHeaders.Add("traceparent", $"00-{expectedTraceId}-{expectedParentId}-01");
client.DefaultRequestHeaders.Add("elastic-apm-traceparent", "00-000000000000000000000000000019c-0000000000000001-01");
var res = await client.GetAsync("http://localhost:5901/Home/Index");
res.IsSuccessStatusCode.Should().BeTrue();

_payloadSender1.FirstTransaction.TraceId.Should().Be(expectedTraceId);
_payloadSender1.FirstTransaction.ParentId.Should().Be(expectedParentId);
}

public async Task DisposeAsync()
{
_cancellationTokenSource.Cancel();
Expand Down

0 comments on commit d924d8d

Please sign in to comment.