diff --git a/.github/workflows/run-system-tests.yaml b/.github/workflows/run-system-tests.yaml index d488c8d4d91..e3ae3b62d7b 100644 --- a/.github/workflows/run-system-tests.yaml +++ b/.github/workflows/run-system-tests.yaml @@ -62,6 +62,7 @@ jobs: scenarios_groups: tracer-release excluded_scenarios: CROSSED_TRACING_LIBRARIES,INTEGRATIONS_AWS,APM_TRACING_E2E_OTEL,APM_TRACING_E2E_SINGLE_SPAN,PROFILING # require AWS and datadog credentials skip_empty_scenarios: true + ref: bbujon/context # Ensure the main job is run to completion check: diff --git a/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java b/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java index 42361d7c85f..f29efc9251a 100644 --- a/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java +++ b/dd-java-agent/agent-bootstrap/src/jmh/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorBenchmark.java @@ -1,6 +1,8 @@ package datadog.trace.bootstrap.instrumentation.decorator; +import static datadog.context.Context.root; import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromContext; +import static java.util.Collections.emptyMap; import static java.util.concurrent.TimeUnit.MICROSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -8,7 +10,6 @@ import datadog.trace.api.GlobalTracer; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.ContextVisitors; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.URIDefaultDataAdapter; @@ -17,7 +18,6 @@ import datadog.trace.core.CoreTracer; import datadog.trace.core.DDSpan; import java.net.URI; -import java.util.Collections; import java.util.List; import java.util.Map; import org.openjdk.jmh.annotations.Benchmark; @@ -59,13 +59,13 @@ public void setUp() { .build(); GlobalTracer.forceRegister(tracer); decorator = new BenchmarkHttpServerDecorator(); - Context context = decorator.startSpan(Collections.emptyMap(), Context.root()); + Context context = decorator.startSpan(emptyMap(), root()); span = fromContext(context); } @Benchmark public AgentSpan onRequest() { - return decorator.onRequest(span, null, request, (AgentSpanContext.Extracted) null); + return decorator.onRequest(span, null, request, root()); } public static class Request { diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java index bca86637d5d..25684aeb42e 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java @@ -4,6 +4,7 @@ import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS; import static datadog.trace.api.datastreams.DataStreamsContext.forHttpServer; import static datadog.trace.api.gateway.Events.EVENTS; +import static datadog.trace.bootstrap.ActiveSubsystems.APPSEC_ACTIVE; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; @@ -17,11 +18,11 @@ import datadog.trace.api.gateway.BlockResponseFunction; import datadog.trace.api.gateway.CallbackProvider; import datadog.trace.api.gateway.Flow; +import datadog.trace.api.gateway.Flow.Action.RequestBlockingAction; import datadog.trace.api.gateway.IGSpanInfo; import datadog.trace.api.gateway.RequestContext; import datadog.trace.api.gateway.RequestContextSlot; import datadog.trace.api.naming.SpanNaming; -import datadog.trace.bootstrap.ActiveSubsystems; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; @@ -146,12 +147,12 @@ public Context startSpan(REQUEST_CARRIER carrier, Context context) { instrumentationNames != null && instrumentationNames.length > 0 ? instrumentationNames[0] : DEFAULT_INSTRUMENTATION_NAME; - AgentSpanContext.Extracted extracted = callIGCallbackStart(context); + AgentSpanContext.Extracted extracted = callIGCallbackStart(getExtractedSpanContext(context)); AgentSpan span = tracer().startSpan(instrumentationName, spanName(), extracted).setMeasured(true); Flow flow = callIGCallbackRequestHeaders(span, carrier); - if (flow.getAction() instanceof Flow.Action.RequestBlockingAction) { - span.setRequestBlockingAction((Flow.Action.RequestBlockingAction) flow.getAction()); + if (flow.getAction() instanceof RequestBlockingAction) { + span.setRequestBlockingAction((RequestBlockingAction) flow.getAction()); } AgentPropagation.ContextVisitor getter = getter(); if (null != carrier && null != getter) { @@ -165,25 +166,9 @@ public AgentSpan onRequest( final CONNECTION connection, final REQUEST request, final Context context) { - return onRequest(span, connection, request, getExtractedSpanContext(context)); - } - - public AgentSpanContext.Extracted getExtractedSpanContext(Context context) { - AgentSpan extractedSpan = AgentSpan.fromContext(context); - return extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); - } - - public AgentSpan onRequest( - final AgentSpan span, - final CONNECTION connection, - final REQUEST request, - @Nullable final AgentSpanContext.Extracted context) { Config config = Config.get(); - boolean clientIpResolverEnabled = - config.isClientIpEnabled() - || traceClientIpResolverEnabled && ActiveSubsystems.APPSEC_ACTIVE; - if (ActiveSubsystems.APPSEC_ACTIVE) { + if (APPSEC_ACTIVE) { RequestContext requestContext = span.getRequestContext(); if (requestContext != null) { BlockResponseFunction brf = createBlockResponseFunction(request, connection); @@ -193,35 +178,38 @@ public AgentSpan onRequest( } Flow flow = callIGCallbackRequestSessionId(span, request); Flow.Action action = flow.getAction(); - if (action instanceof Flow.Action.RequestBlockingAction) { - span.setRequestBlockingAction((Flow.Action.RequestBlockingAction) flow.getAction()); + if (action instanceof RequestBlockingAction) { + span.setRequestBlockingAction((RequestBlockingAction) flow.getAction()); } } - if (context != null) { + AgentSpanContext.Extracted extracted = getExtractedSpanContext(context); + boolean clientIpResolverEnabled = + config.isClientIpEnabled() || traceClientIpResolverEnabled && APPSEC_ACTIVE; + if (extracted != null) { if (clientIpResolverEnabled) { - String forwarded = context.getForwarded(); + String forwarded = extracted.getForwarded(); if (forwarded != null) { span.setTag(Tags.HTTP_FORWARDED, forwarded); } - String forwardedProto = context.getXForwardedProto(); + String forwardedProto = extracted.getXForwardedProto(); if (forwardedProto != null) { span.setTag(Tags.HTTP_FORWARDED_PROTO, forwardedProto); } - String forwardedHost = context.getXForwardedHost(); + String forwardedHost = extracted.getXForwardedHost(); if (forwardedHost != null) { span.setTag(Tags.HTTP_FORWARDED_HOST, forwardedHost); } - String forwardedIp = context.getXForwardedFor(); + String forwardedIp = extracted.getXForwardedFor(); if (forwardedIp != null) { span.setTag(Tags.HTTP_FORWARDED_IP, forwardedIp); } - String forwardedPort = context.getXForwardedPort(); + String forwardedPort = extracted.getXForwardedPort(); if (forwardedPort != null) { span.setTag(Tags.HTTP_FORWARDED_PORT, forwardedPort); } } - String userAgent = context.getUserAgent(); + String userAgent = extracted.getUserAgent(); if (userAgent != null) { span.setTag(Tags.HTTP_USER_AGENT, userAgent); } @@ -245,8 +233,8 @@ public AgentSpan onRequest( } else if (supportsRaw) { span.setTag(Tags.HTTP_URL, URIUtils.lazyInvalidUrl(url.raw())); } - if (context != null && context.getXForwardedHost() != null) { - span.setTag(Tags.HTTP_HOSTNAME, context.getXForwardedHost()); + if (extracted != null && extracted.getXForwardedHost() != null) { + span.setTag(Tags.HTTP_HOSTNAME, extracted.getXForwardedHost()); } else if (url.host() != null) { span.setTag(Tags.HTTP_HOSTNAME, url.host()); } @@ -258,8 +246,8 @@ public AgentSpan onRequest( span.setTag(DDTags.HTTP_FRAGMENT, url.fragment()); } Flow flow = callIGCallbackURI(span, url, method); - if (flow.getAction() instanceof Flow.Action.RequestBlockingAction) { - span.setRequestBlockingAction((Flow.Action.RequestBlockingAction) flow.getAction()); + if (flow.getAction() instanceof RequestBlockingAction) { + span.setRequestBlockingAction((RequestBlockingAction) flow.getAction()); } if (valid && SHOULD_SET_URL_RESOURCE_NAME) { HTTP_RESOURCE_DECORATOR.withServerPath(span, method, path, encoded); @@ -280,8 +268,8 @@ public AgentSpan onRequest( } String inferredAddressStr = null; - if (clientIpResolverEnabled && context != null) { - InetAddress inferredAddress = ClientIpAddressResolver.resolve(context, span); + if (clientIpResolverEnabled && extracted != null) { + InetAddress inferredAddress = ClientIpAddressResolver.resolve(extracted, span); // the peer address should be used if: // 1. the headers yield nothing, regardless of whether it is public or not // 2. it is public and the headers yield a private address @@ -300,9 +288,9 @@ public AgentSpan onRequest( span.setTag(Tags.HTTP_CLIENT_IP, inferredAddressStr); } } else if (clientIpResolverEnabled && span.getLocalRootSpan() != span) { - // in this case context == null - // If there is no context we can't do anything but use the peer addr. - // Additionally, context == null arises on subspans for which the resolution + // in this case extracted == null + // If there is no extracted we can't do anything but use the peer addr. + // Additionally, extracted == null arises on subspans for which the resolution // likely already happened on the top span, so we don't need to do the resolution // again. Instead, copy from the top span, should it exist AgentSpan localRootSpan = span.getLocalRootSpan(); @@ -321,13 +309,18 @@ public AgentSpan onRequest( } setPeerPort(span, peerPort); Flow flow = callIGCallbackAddressAndPort(span, peerIp, peerPort, inferredAddressStr); - if (flow.getAction() instanceof Flow.Action.RequestBlockingAction) { - span.setRequestBlockingAction((Flow.Action.RequestBlockingAction) flow.getAction()); + if (flow.getAction() instanceof RequestBlockingAction) { + span.setRequestBlockingAction((RequestBlockingAction) flow.getAction()); } return span; } + protected static AgentSpanContext.Extracted getExtractedSpanContext(Context context) { + AgentSpan extractedSpan = AgentSpan.fromContext(context); + return extractedSpan == null ? null : (AgentSpanContext.Extracted) extractedSpan.context(); + } + protected BlockResponseFunction createBlockResponseFunction( REQUEST request, CONNECTION connection) { return null; @@ -388,8 +381,8 @@ public AgentSpan onResponse(final AgentSpan span, final RESPONSE response) { return span; } - private AgentSpanContext.Extracted callIGCallbackStart(final Context context) { - AgentSpanContext.Extracted extracted = getExtractedSpanContext(context); + private AgentSpanContext.Extracted callIGCallbackStart( + @Nullable final AgentSpanContext.Extracted extracted) { AgentTracer.TracerAPI tracer = tracer(); Supplier> startedCbAppSec = tracer.getCallbackProvider(RequestContextSlot.APPSEC).getCallback(EVENTS.requestStarted()); diff --git a/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy b/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy index d038fbdac26..7c3efb1d48c 100644 --- a/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy +++ b/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy @@ -1,13 +1,14 @@ package datadog.trace.bootstrap.instrumentation.decorator + import datadog.trace.api.DDTags +import datadog.trace.api.TraceConfig import datadog.trace.api.function.TriConsumer import datadog.trace.api.gateway.CallbackProvider import datadog.trace.api.gateway.Flow import datadog.trace.api.gateway.InstrumentationGateway import datadog.trace.api.gateway.RequestContext import datadog.trace.api.gateway.RequestContextSlot -import datadog.trace.api.TraceConfig import datadog.trace.bootstrap.ActiveSubsystems import datadog.trace.bootstrap.instrumentation.api.AgentPropagation import datadog.trace.bootstrap.instrumentation.api.AgentSpan @@ -64,7 +65,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def decorator = newDecorator() when: - decorator.onRequest(this.span, null, req, (AgentSpanContext.Extracted) null) + decorator.onRequest(this.span, null, req, root()) then: if (req) { @@ -97,7 +98,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def decorator = newDecorator() when: - decorator.onRequest(this.span, null, req, (AgentSpanContext.Extracted) null) + decorator.onRequest(this.span, null, req, root()) then: if (expectedUrl) { @@ -148,7 +149,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def decorator = newDecorator() when: - decorator.onRequest(this.span, null, req, (AgentSpanContext.Extracted) null) + decorator.onRequest(this.span, null, req, root()) then: 1 * this.span.setTag(Tags.HTTP_URL, {it.toString() == expectedUrl}) @@ -178,7 +179,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def decorator = newDecorator() when: - decorator.onRequest(this.span, null, [url: new URI('http://host/p%20ath')], (AgentSpanContext.Extracted) null) + decorator.onRequest(this.span, null, [url: new URI('http://host/p%20ath')], root()) then: 1 * this.span.setResourceName({ it as String == '/path' }, ResourceNamePriorities.HTTP_PATH_NORMALIZER) @@ -188,29 +189,30 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { def "test onConnection"() { setup: - def ctx = Mock(AgentSpanContext.Extracted) + def extracted = Mock(AgentSpanContext.Extracted) + def context = AgentSpan.fromSpanContext(extracted) def decorator = newDecorator() when: - decorator.onRequest(this.span, conn, null, ctx) + decorator.onRequest(this.span, conn, null, context) then: - _ * ctx.getForwarded() >> "by=;for=;host=;proto=" - _ * ctx.getForwardedFor() >> null - _ * ctx.getXForwardedProto() >> "https" - _ * ctx.getXForwardedHost() >> "somehost" - _ * ctx.getXForwardedFor() >> conn?.ip - _ * ctx.getXForwardedPort() >> "123" - _ * ctx.getXForwarded() - _ * ctx.getXClusterClientIp() >> null - _ * ctx.getXRealIp() >> null - _ * ctx.getXClientIp() >> null - _ * ctx.getUserAgent() >> "some-user-agent" - _ * ctx.getCustomIpHeader() >> null - _ * ctx.getTrueClientIp() >> null - _ * ctx.getFastlyClientIp() >> null - _ * ctx.getCfConnectingIp() >> null - _ * ctx.getCfConnectingIpv6() >> null + _ * extracted.getForwarded() >> "by=;for=;host=;proto=" + _ * extracted.getForwardedFor() >> null + _ * extracted.getXForwardedProto() >> "https" + _ * extracted.getXForwardedHost() >> "somehost" + _ * extracted.getXForwardedFor() >> conn?.ip + _ * extracted.getXForwardedPort() >> "123" + _ * extracted.getXForwarded() + _ * extracted.getXClusterClientIp() >> null + _ * extracted.getXRealIp() >> null + _ * extracted.getXClientIp() >> null + _ * extracted.getUserAgent() >> "some-user-agent" + _ * extracted.getCustomIpHeader() >> null + _ * extracted.getTrueClientIp() >> null + _ * extracted.getFastlyClientIp() >> null + _ * extracted.getCfConnectingIp() >> null + _ * extracted.getCfConnectingIpv6() >> null 1 * this.span.setTag(Tags.HTTP_FORWARDED, "by=;for=;host=;proto=") 1 * this.span.setTag(Tags.HTTP_FORWARDED_PROTO, "https") 1 * this.span.setTag(Tags.HTTP_FORWARDED_HOST, "somehost") @@ -241,12 +243,13 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { void 'preference for header derived vs peer ip address'() { setup: - def ctx = Mock(AgentSpanContext.Extracted) + def extracted = Mock(AgentSpanContext.Extracted) + def context = AgentSpan.fromSpanContext(extracted) def decorator = newDecorator() when: - 1 * ctx.getXClientIp() >> headerIpAddr - decorator.onRequest(this.span, [peerIp: peerIpAddr], null, ctx) + 1 * extracted.getXClientIp() >> headerIpAddr + decorator.onRequest(this.span, [peerIp: peerIpAddr], null, context) then: 1 * this.span.setTag(Tags.HTTP_CLIENT_IP, result) @@ -263,14 +266,15 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { setup: injectSysConfig('dd.trace.client-ip.resolver.enabled', 'false') - def ctx = Mock(AgentSpanContext.Extracted) + def extracted = Mock(AgentSpanContext.Extracted) + def context = AgentSpan.fromSpanContext(extracted) def decorator = newDecorator() when: - decorator.onRequest(this.span, [peerIp: '4.4.4.4'], null, ctx) + decorator.onRequest(this.span, [peerIp: '4.4.4.4'], null, context) then: - 0 * ctx.getForwarded() + 0 * extracted.getForwarded() 0 * span.setTag(Tags.HTTP_FORWARDED, _) 0 * this.span.setTag(Tags.HTTP_CLIENT_IP, _) } @@ -279,14 +283,15 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { setup: ActiveSubsystems.APPSEC_ACTIVE = false - def ctx = Mock(AgentSpanContext.Extracted) + def extracted = Mock(AgentSpanContext.Extracted) + def context = AgentSpan.fromSpanContext(extracted) def decorator = newDecorator() when: - decorator.onRequest(this.span, [peerIp: '4.4.4.4'], null, ctx) + decorator.onRequest(this.span, [peerIp: '4.4.4.4'], null, context) then: - 0 * ctx.getForwarded() + 0 * extracted.getForwarded() 0 * span.setTag(Tags.HTTP_FORWARDED, _) 0 * this.span.setTag(Tags.HTTP_CLIENT_IP, _) } @@ -296,20 +301,21 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { injectSysConfig('dd.trace.client-ip.enabled', 'true') ActiveSubsystems.APPSEC_ACTIVE = false - def ctx = Mock(AgentSpanContext.Extracted) + def extracted = Mock(AgentSpanContext.Extracted) + def context = AgentSpan.fromSpanContext(extracted) def decorator = newDecorator() when: - decorator.onRequest(this.span, [peerIp: '4.4.4.4'], null, ctx) + decorator.onRequest(this.span, [peerIp: '4.4.4.4'], null, context) _ * this.span.getLocalRootSpan() >> this.span then: - 2 * ctx.getXForwardedFor() >> '2.3.4.5' + 2 * extracted.getXForwardedFor() >> '2.3.4.5' 1 * this.span.setTag(Tags.HTTP_CLIENT_IP, '2.3.4.5') 1 * this.span.setTag(Tags.HTTP_FORWARDED_IP, '2.3.4.5') // Forwarded doesn't participate in client ip resolution anymore - 1 * ctx.getForwarded() >> 'for=9.9.9.9' + 1 * extracted.getForwarded() >> 'for=9.9.9.9' 1 * this.span.setTag(Tags.HTTP_FORWARDED, 'for=9.9.9.9') } @@ -317,14 +323,15 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { setup: injectSysConfig('dd.trace.client-ip-header', 'my-header') - def ctx = Mock(AgentSpanContext.Extracted) + def extracted = Mock(AgentSpanContext.Extracted) + def context = AgentSpan.fromSpanContext(extracted) def decorator = newDecorator() when: - decorator.onRequest(this.span, [peerIp: '4.4.4.4'], null, ctx) + decorator.onRequest(this.span, [peerIp: '4.4.4.4'], null, context) then: - 1 * ctx.getCustomIpHeader() >> '5.5.5.5' + 1 * extracted.getCustomIpHeader() >> '5.5.5.5' 1 * this.span.setTag(Tags.HTTP_CLIENT_IP, '5.5.5.5') } diff --git a/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/HTTPPluginAdvice.java b/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/HTTPPluginAdvice.java index 44fe2bce995..b698fbdedb9 100644 --- a/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/HTTPPluginAdvice.java +++ b/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/HTTPPluginAdvice.java @@ -2,26 +2,24 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.getRootContext; import static datadog.trace.instrumentation.axway.AxwayHTTPPluginDecorator.DECORATE; import static datadog.trace.instrumentation.axway.AxwayHTTPPluginDecorator.SERVER_TRANSACTION_CLASS; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; public class HTTPPluginAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static AgentScope onEnter(@Advice.Argument(value = 2) final Object serverTransaction) { - final AgentSpan span = startSpan(DECORATE.spanName()).setMeasured(true); + final AgentSpan span = startSpan("axway-api", DECORATE.spanName()).setMeasured(true); DECORATE.afterStart(span); // serverTransaction is like request + connection in one object: - DECORATE.onRequest( - span, serverTransaction, serverTransaction, (AgentSpanContext.Extracted) null); - final AgentScope scope = activateSpan(span); - return scope; + DECORATE.onRequest(span, serverTransaction, serverTransaction, getRootContext()); + return activateSpan(span); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyDecorator.java b/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyDecorator.java index 585a35332b0..45fdb6adab1 100644 --- a/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyDecorator.java +++ b/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyDecorator.java @@ -34,7 +34,7 @@ public class LibertyDecorator public static final LibertyDecorator DECORATE = new LibertyDecorator(); public static final CharSequence SERVLET_REQUEST = UTF8BytesString.create(DECORATE.operationName()); - public static final String DD_EXTRACTED_CONTEXT_ATTRIBUTE = "datadog.extracted-context"; + public static final String DD_PARENT_CONTEXT_ATTRIBUTE = "datadog.parent-context"; public static final String DD_CONTEXT_PATH_ATTRIBUTE = "datadog.context.path"; public static final String DD_SERVLET_PATH_ATTRIBUTE = "datadog.servlet.path"; diff --git a/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java b/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java index 80b94a4377e..1cb460dfbcb 100644 --- a/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java @@ -3,7 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromContext; import static datadog.trace.instrumentation.liberty20.HttpInboundServiceContextImplInstrumentation.REQUEST_MSG_TYPE; -import static datadog.trace.instrumentation.liberty20.LibertyDecorator.DD_EXTRACTED_CONTEXT_ATTRIBUTE; +import static datadog.trace.instrumentation.liberty20.LibertyDecorator.DD_PARENT_CONTEXT_ATTRIBUTE; import static datadog.trace.instrumentation.liberty20.LibertyDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.liberty20.LibertyDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -105,7 +105,7 @@ public static class HandleRequestAdvice { } final Context parentContext = DECORATE.extract(request); - request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, parentContext); + request.setAttribute(DD_PARENT_CONTEXT_ATTRIBUTE, parentContext); final Context context = DECORATE.startSpan(request, parentContext); scope = context.attach(); final AgentSpan span = fromContext(context); diff --git a/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyDecorator.java b/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyDecorator.java index b65461d0556..5a46a20028c 100644 --- a/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyDecorator.java +++ b/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyDecorator.java @@ -34,7 +34,7 @@ public class LibertyDecorator public static final LibertyDecorator DECORATE = new LibertyDecorator(); public static final CharSequence SERVLET_REQUEST = UTF8BytesString.create(DECORATE.operationName()); - public static final String DD_EXTRACTED_CONTEXT_ATTRIBUTE = "datadog.extracted-context"; + public static final String DD_PARENT_CONTEXT_ATTRIBUTE = "datadog.parent-context"; public static final String DD_CONTEXT_PATH_ATTRIBUTE = "datadog.context.path"; public static final String DD_SERVLET_PATH_ATTRIBUTE = "datadog.servlet.path"; diff --git a/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java b/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java index efe145611cd..2fb526942d7 100644 --- a/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java +++ b/dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java @@ -3,7 +3,7 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromContext; import static datadog.trace.instrumentation.liberty23.HttpInboundServiceContextImplInstrumentation.REQUEST_MSG_TYPE; -import static datadog.trace.instrumentation.liberty23.LibertyDecorator.DD_EXTRACTED_CONTEXT_ATTRIBUTE; +import static datadog.trace.instrumentation.liberty23.LibertyDecorator.DD_PARENT_CONTEXT_ATTRIBUTE; import static datadog.trace.instrumentation.liberty23.LibertyDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.liberty23.LibertyDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -107,7 +107,7 @@ public static class HandleRequestAdvice { } final Context parentContext = DECORATE.extract(request); - request.setAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE, parentContext); + request.setAttribute(DD_PARENT_CONTEXT_ATTRIBUTE, parentContext); final Context context = DECORATE.startSpan(request, parentContext); scope = context.attach(); final AgentSpan span = fromContext(context); diff --git a/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java index 07145401713..b3014547ce7 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayAdvice.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.getRootContext; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.PLAY_REQUEST; @@ -10,7 +11,6 @@ import datadog.context.Context; import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import play.api.mvc.Action; import play.api.mvc.Headers; @@ -51,7 +51,7 @@ public static void stopTraceOnResponse( final AgentSpan playControllerSpan = spanFromContext(playControllerScope.context()); // Call onRequest on return after tags are populated. - DECORATE.onRequest(playControllerSpan, req, req, (AgentSpanContext.Extracted) null); + DECORATE.onRequest(playControllerSpan, req, req, getRootContext()); if (throwable == null) { responseFuture.onComplete( @@ -71,7 +71,7 @@ public static void stopTraceOnResponse( final AgentSpan rootSpan = activeSpan(); // set the resource name on the upstream akka/netty span if there is one if (rootSpan != null) { - DECORATE.onRequest(rootSpan, req, req, (AgentSpanContext.Extracted) null); + DECORATE.onRequest(rootSpan, req, req, getRootContext()); } } } diff --git a/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayHttpServerDecorator.java b/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayHttpServerDecorator.java index 9144fb8fe1e..746ad8437d0 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/play-2.3/src/main/java/datadog/trace/instrumentation/play23/PlayHttpServerDecorator.java @@ -3,13 +3,13 @@ import static datadog.trace.api.gateway.Events.EVENTS; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; +import datadog.context.Context; import datadog.trace.api.Config; import datadog.trace.api.gateway.CallbackProvider; import datadog.trace.api.gateway.RequestContext; import datadog.trace.api.gateway.RequestContextSlot; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -25,7 +25,7 @@ import scala.Option; public class PlayHttpServerDecorator - extends HttpServerDecorator { + extends HttpServerDecorator, Request, play.api.mvc.Result, Headers> { private static final Logger LOG = LoggerFactory.getLogger(PlayHttpServerDecorator.class); public static final boolean REPORT_HTTP_STATUS = Config.get().getPlayReportHttpStatus(); public static final CharSequence PLAY_REQUEST = UTF8BytesString.create("play.request"); @@ -58,22 +58,22 @@ public CharSequence spanName() { } @Override - protected String method(final Request httpRequest) { + protected String method(final Request httpRequest) { return httpRequest.method(); } @Override - protected URIDataAdapter url(final Request request) { + protected URIDataAdapter url(final Request request) { return new RequestURIDataAdapter(request); } @Override - protected String peerHostIP(final Request request) { + protected String peerHostIP(final Request request) { return request.remoteAddress(); } @Override - protected int peerPort(final Request request) { + protected int peerPort(final Request request) { return 0; } @@ -85,9 +85,9 @@ protected int status(final play.api.mvc.Result httpResponse) { @Override public AgentSpan onRequest( final AgentSpan span, - final Request connection, - final Request request, - AgentSpanContext.Extracted context) { + final Request connection, + final Request request, + final Context context) { super.onRequest(span, connection, request, context); if (request != null) { // more about routes here: diff --git a/dd-java-agent/instrumentation/play-2.3/src/test/groovy/datadog/trace/instrumentation/play23/test/server/PlayServerTest.groovy b/dd-java-agent/instrumentation/play-2.3/src/test/groovy/datadog/trace/instrumentation/play23/test/server/PlayServerTest.groovy index 68290bab3f9..2eb08e3ea2c 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/test/groovy/datadog/trace/instrumentation/play23/test/server/PlayServerTest.groovy +++ b/dd-java-agent/instrumentation/play-2.3/src/test/groovy/datadog/trace/instrumentation/play23/test/server/PlayServerTest.groovy @@ -54,8 +54,8 @@ class PlayServerTest extends HttpServerTest { tags { "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.component() "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER - "$Tags.PEER_HOST_IPV4" { it == (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") } - "$Tags.HTTP_CLIENT_IP" { it == (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") } + "$Tags.PEER_HOST_IPV4" (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") + "$Tags.HTTP_CLIENT_IP" (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") "$Tags.HTTP_URL" String "$Tags.HTTP_HOSTNAME" address.host "$Tags.HTTP_METHOD" String diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java index f40924bb90f..ff617daa07a 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayAdvice.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.getRootContext; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.PLAY_REQUEST; @@ -10,7 +11,6 @@ import datadog.context.Context; import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import play.api.mvc.Action; import play.api.mvc.Headers; @@ -49,7 +49,7 @@ public static ContextScope onEnter(@Advice.Argument(value = 0, readOnly = false) // Moved from OnMethodExit // Call onRequest on return after tags are populated. - DECORATE.onRequest(span, req, req, (AgentSpanContext.Extracted) null); + DECORATE.onRequest(span, req, req, getRootContext()); return scope; } @@ -86,7 +86,7 @@ public static void stopTraceOnResponse( final AgentSpan rootSpan = activeSpan(); // set the resource name on the upstream akka/netty span if there is one if (rootSpan != null) { - DECORATE.onRequest(rootSpan, req, req, (AgentSpanContext.Extracted) null); + DECORATE.onRequest(rootSpan, req, req, getRootContext()); } } diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayHttpServerDecorator.java b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayHttpServerDecorator.java index 4aa8a27cf98..70d05b8f34e 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayHttpServerDecorator.java @@ -3,13 +3,13 @@ import static datadog.trace.api.gateway.Events.EVENTS; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; +import datadog.context.Context; import datadog.trace.api.Config; import datadog.trace.api.gateway.CallbackProvider; import datadog.trace.api.gateway.RequestContext; import datadog.trace.api.gateway.RequestContextSlot; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -25,7 +25,7 @@ import scala.Option; public class PlayHttpServerDecorator - extends HttpServerDecorator { + extends HttpServerDecorator, Request, Result, Headers> { private static final Logger LOG = LoggerFactory.getLogger(PlayHttpServerDecorator.class); public static final boolean REPORT_HTTP_STATUS = Config.get().getPlayReportHttpStatus(); public static final CharSequence PLAY_REQUEST = UTF8BytesString.create("play.request"); @@ -58,22 +58,22 @@ public CharSequence spanName() { } @Override - protected String method(final Request httpRequest) { + protected String method(final Request httpRequest) { return httpRequest.method(); } @Override - protected URIDataAdapter url(final Request request) { + protected URIDataAdapter url(final Request request) { return new RequestURIDataAdapter(request); } @Override - protected String peerHostIP(final Request request) { + protected String peerHostIP(final Request request) { return request.remoteAddress(); } @Override - protected int peerPort(final Request request) { + protected int peerPort(final Request request) { return 0; } @@ -85,14 +85,14 @@ protected int status(final Result httpResponse) { @Override public AgentSpan onRequest( final AgentSpan span, - final Request connection, - final Request request, - AgentSpanContext.Extracted context) { + final Request connection, + final Request request, + final Context context) { super.onRequest(span, connection, request, context); if (request != null) { // more about routes here: // https://github.com/playframework/playframework/blob/master/documentation/manual/releases/release26/migration26/Migration26.md#router-tags-are-now-attributes - final Option pathOption = request.tags().get("ROUTE_PATTERN"); + final Option pathOption = request.tags().get("ROUTE_PATTERN"); if (!pathOption.isEmpty()) { final String path = (String) pathOption.get(); HTTP_RESOURCE_DECORATOR.withRoute(span, request.method(), path); diff --git a/dd-java-agent/instrumentation/play-2.4/src/test/groovy/datadog/trace/instrumentation/play25/server/PlayScalaRoutesServerTest.groovy b/dd-java-agent/instrumentation/play-2.4/src/test/groovy/datadog/trace/instrumentation/play25/server/PlayScalaRoutesServerTest.groovy index 68be5fbe0e3..c61007bd864 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/test/groovy/datadog/trace/instrumentation/play25/server/PlayScalaRoutesServerTest.groovy +++ b/dd-java-agent/instrumentation/play-2.4/src/test/groovy/datadog/trace/instrumentation/play25/server/PlayScalaRoutesServerTest.groovy @@ -98,8 +98,8 @@ class PlayScalaRoutesServerTest extends PlayServerTest { tags { "$Tags.COMPONENT" 'play-action' "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER - "$Tags.PEER_HOST_IPV4" { it == (endpoint == FORWARDED ? endpoint.body : '127.0.0.1') } - "$Tags.HTTP_CLIENT_IP" { it == (endpoint == FORWARDED ? endpoint.body : '127.0.0.1') } + "$Tags.PEER_HOST_IPV4" (endpoint == FORWARDED ? endpoint.body : '127.0.0.1') + "$Tags.HTTP_CLIENT_IP" (endpoint == FORWARDED ? endpoint.body : '127.0.0.1') "$Tags.HTTP_URL" String "$Tags.HTTP_HOSTNAME" address.host "$Tags.HTTP_METHOD" String diff --git a/dd-java-agent/instrumentation/play-2.4/src/test/groovy/datadog/trace/instrumentation/play25/server/PlayServerTest.groovy b/dd-java-agent/instrumentation/play-2.4/src/test/groovy/datadog/trace/instrumentation/play25/server/PlayServerTest.groovy index bf5d9a09928..b29d5709c28 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/test/groovy/datadog/trace/instrumentation/play25/server/PlayServerTest.groovy +++ b/dd-java-agent/instrumentation/play-2.4/src/test/groovy/datadog/trace/instrumentation/play25/server/PlayServerTest.groovy @@ -130,8 +130,8 @@ class PlayServerTest extends HttpServerTest { tags { "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.component() "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER - "$Tags.PEER_HOST_IPV4" { it == (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") } - "$Tags.HTTP_CLIENT_IP" { it == (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") } + "$Tags.PEER_HOST_IPV4" (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") + "$Tags.HTTP_CLIENT_IP" (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") "$Tags.HTTP_URL" String "$Tags.HTTP_HOSTNAME" address.host "$Tags.HTTP_METHOD" String diff --git a/dd-java-agent/instrumentation/play-2.6/src/baseTest/groovy/datadog/trace/instrumentation/play26/server/PlayServerTest.groovy b/dd-java-agent/instrumentation/play-2.6/src/baseTest/groovy/datadog/trace/instrumentation/play26/server/PlayServerTest.groovy index 15030d324bd..2f5b1f27f96 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/baseTest/groovy/datadog/trace/instrumentation/play26/server/PlayServerTest.groovy +++ b/dd-java-agent/instrumentation/play-2.6/src/baseTest/groovy/datadog/trace/instrumentation/play26/server/PlayServerTest.groovy @@ -134,7 +134,7 @@ class PlayServerTest extends HttpServerTest { "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.component() "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER "$Tags.PEER_HOST_IPV4" '127.0.0.1' - "$Tags.HTTP_CLIENT_IP" { it == (endpoint == FORWARDED ? endpoint.body : '127.0.0.1') } + "$Tags.HTTP_CLIENT_IP" (endpoint == FORWARDED ? endpoint.body : '127.0.0.1') "$Tags.HTTP_URL" String "$Tags.HTTP_HOSTNAME" address.host "$Tags.HTTP_METHOD" String diff --git a/dd-java-agent/instrumentation/play-2.6/src/latestDepTest/groovy/datadog/trace/instrumentation/play26/server/latestdep/PlayAsyncServerRoutesScalaWithErrorHandlerTest.groovy b/dd-java-agent/instrumentation/play-2.6/src/latestDepTest/groovy/datadog/trace/instrumentation/play26/server/latestdep/PlayAsyncServerRoutesScalaWithErrorHandlerTest.groovy index 1b90b01b764..9ca31fbffa8 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/latestDepTest/groovy/datadog/trace/instrumentation/play26/server/latestdep/PlayAsyncServerRoutesScalaWithErrorHandlerTest.groovy +++ b/dd-java-agent/instrumentation/play-2.6/src/latestDepTest/groovy/datadog/trace/instrumentation/play26/server/latestdep/PlayAsyncServerRoutesScalaWithErrorHandlerTest.groovy @@ -88,7 +88,7 @@ class PlayAsyncServerRoutesScalaWithErrorHandlerTest extends PlayServerWithError "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.component() "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER "$Tags.PEER_HOST_IPV4" '127.0.0.1' - "$Tags.HTTP_CLIENT_IP" { it == (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") } + "$Tags.HTTP_CLIENT_IP" (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") "$Tags.HTTP_URL" String "$Tags.HTTP_HOSTNAME" address.host "$Tags.HTTP_METHOD" String diff --git a/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java index 4aee183c204..83d6a74cf76 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayAdvice.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.getRootContext; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.PLAY_REQUEST; @@ -9,7 +10,6 @@ import datadog.context.Context; import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge; import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import net.bytebuddy.asm.Advice; import play.api.mvc.Action; @@ -39,7 +39,7 @@ public static ContextScope onEnter(@Advice.Argument(value = 0, readOnly = false) } else { // An upstream framework (e.g. akka-http, netty) has already started the span. // Do not extract the context. - parentContext = Java8BytecodeBridge.getRootContext(); + parentContext = getRootContext(); span = startSpan("play", PLAY_REQUEST); scope = span.attach(); } diff --git a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java index 3398cdff034..ad00fa0041d 100644 --- a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java +++ b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/TracingHandler.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.ratpack; +import static datadog.context.Context.root; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; @@ -9,7 +10,6 @@ import datadog.trace.api.gateway.Flow; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import io.netty.util.Attribute; import io.netty.util.AttributeKey; import ratpack.handling.Context; @@ -38,7 +38,7 @@ public void handle(final Context ctx) { // Relying on executor instrumentation to assume the netty span is in context as the parent. final AgentSpan ratpackSpan = startSpan(DECORATE.spanName()).setMeasured(true); DECORATE.afterStart(ratpackSpan); - DECORATE.onRequest(ratpackSpan, request, request, (AgentSpanContext.Extracted) null); + DECORATE.onRequest(ratpackSpan, request, request, root()); ctx.getExecution().add(ratpackSpan); boolean setFinalizer = false; diff --git a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Decorator.java b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Decorator.java index 1f8005f6049..d16bb29a9c3 100644 --- a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Decorator.java +++ b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Decorator.java @@ -2,9 +2,9 @@ import static datadog.trace.instrumentation.servlet2.HttpServletRequestExtractAdapter.GETTER; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -79,7 +79,7 @@ public AgentSpan onRequest( final AgentSpan span, final HttpServletRequest connection, final HttpServletRequest request, - AgentSpanContext.Extracted context) { + final Context context) { assert span != null; if (request != null) { span.setTag("servlet.context", request.getContextPath()); diff --git a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java index f36907c76d9..bd96e500587 100644 --- a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java +++ b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.servlet3; +import datadog.context.Context; import datadog.trace.api.ClassloaderConfigurationOverrides; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -82,7 +82,7 @@ public AgentSpan onRequest( final AgentSpan span, final HttpServletRequest connection, final HttpServletRequest request, - AgentSpanContext.Extracted context) { + final Context context) { assert span != null; ClassloaderConfigurationOverrides.maybeEnrichSpan(span); if (request != null) { diff --git a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala index 1c9ddeb47e4..29436ce4bd4 100644 --- a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala +++ b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHelper.scala @@ -1,8 +1,9 @@ package datadog.trace.instrumentation.spray +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentSpan -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext import datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan +import datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.getRootContext; import datadog.trace.instrumentation.spray.SprayHttpServerDecorator.DECORATE import spray.http.HttpResponse import spray.routing.{RequestContext, Route} @@ -13,10 +14,10 @@ object SprayHelper { def wrapRequestContext( ctx: RequestContext, span: AgentSpan, - extracted: AgentSpanContext.Extracted + parentContext: Context ): RequestContext = { ctx.withRouteResponseMapped(message => { - DECORATE.onRequest(span, ctx, ctx.request, extracted) + DECORATE.onRequest(span, ctx, ctx.request, parentContext) message match { case response: HttpResponse => DECORATE.onResponse(span, response) case throwable: Throwable => DECORATE.onError(span, throwable) @@ -30,7 +31,7 @@ object SprayHelper { def wrapRoute(route: Route): Route = { ctx => { - DECORATE.onRequest(activeSpan(), ctx, ctx.request, null.asInstanceOf[AgentSpanContext.Extracted]) + DECORATE.onRequest(activeSpan(), ctx, ctx.request, getRootContext()) try route(ctx) catch { case NonFatal(e) => diff --git a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java index f2aa29be00e..9a44db3476d 100644 --- a/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java +++ b/dd-java-agent/instrumentation/spray-1.3/src/main/scala/datadog/trace/instrumentation/spray/SprayHttpServerRunSealedRouteAdvice.java @@ -2,13 +2,13 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.getRootContext; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.spray.SprayHttpServerDecorator.DECORATE; import datadog.context.Context; import datadog.context.ContextScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import net.bytebuddy.asm.Advice; import spray.http.HttpRequest; import spray.routing.RequestContext; @@ -17,19 +17,18 @@ public class SprayHttpServerRunSealedRouteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static ContextScope enter( @Advice.Argument(value = 1, readOnly = false) RequestContext ctx) { - final AgentSpan span; - final AgentSpanContext.Extracted extractedSpanContext; + final Context parentContext; final Context context; + final AgentSpan span; if (activeSpan() == null) { // Propagate context in case income request was going through several routes // TODO: Add test for it final HttpRequest request = ctx.request(); - Context parentContext = DECORATE.extract(request); - extractedSpanContext = DECORATE.getExtractedSpanContext(parentContext); + parentContext = DECORATE.extract(request); context = DECORATE.startSpan(request, parentContext); span = spanFromContext(context); } else { - extractedSpanContext = null; + parentContext = getRootContext(); span = startSpan("spray", DECORATE.spanName()); context = span; } @@ -37,7 +36,7 @@ public static ContextScope enter( ContextScope scope = context.attach(); DECORATE.afterStart(span); - ctx = SprayHelper.wrapRequestContext(ctx, span, extractedSpanContext); + ctx = SprayHelper.wrapRequestContext(ctx, span, parentContext); return scope; } diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java index 48103d52600..9304644ea12 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java @@ -6,6 +6,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.getRootContext; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.springweb.SpringWebHttpServerDecorator.DD_HANDLER_SPAN_CONTINUE_SUFFIX; import static datadog.trace.instrumentation.springweb.SpringWebHttpServerDecorator.DD_HANDLER_SPAN_PREFIX_KEY; @@ -20,7 +21,6 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import javax.servlet.http.HttpServletRequest; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -75,8 +75,7 @@ public static AgentScope nameResourceAndStartSpan( // Name the parent span based on the matching pattern Object parentSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); if (parentSpan instanceof AgentSpan) { - DECORATE.onRequest( - (AgentSpan) parentSpan, request, request, (AgentSpanContext.Extracted) null); + DECORATE.onRequest((AgentSpan) parentSpan, request, request, getRootContext()); } if (activeSpan() == null) { diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerMappingResourceNameFilter.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerMappingResourceNameFilter.java index 90dff2df129..f78268e61fc 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerMappingResourceNameFilter.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerMappingResourceNameFilter.java @@ -1,10 +1,10 @@ package datadog.trace.instrumentation.springweb; +import static datadog.context.Context.root; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.instrumentation.springweb.SpringWebHttpServerDecorator.DECORATE; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import java.io.IOException; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -41,11 +41,7 @@ protected void doFilterInternal( if (findMapping(wrappedRequest)) { // Name the parent span based on the matching pattern // Let the parent span resource name be set with the attribute set in findMapping. - DECORATE.onRequest( - (AgentSpan) parentSpan, - wrappedRequest, - wrappedRequest, - (AgentSpanContext.Extracted) null); + DECORATE.onRequest((AgentSpan) parentSpan, wrappedRequest, wrappedRequest, root()); } } catch (final Exception ignored) { // mapping.getHandler() threw exception. Ignore diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java index 2b0bf4dd18e..5d7723b0395 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/SpringWebHttpServerDecorator.java @@ -2,9 +2,9 @@ import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -97,7 +97,7 @@ public AgentSpan onRequest( final AgentSpan span, final HttpServletRequest connection, final HttpServletRequest request, - AgentSpanContext.Extracted context) { + final Context context) { if (request != null) { final String method = request.getMethod(); final Object bestMatchingPattern = diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/ControllerAdvice.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/ControllerAdvice.java index b85449e17ce..670b4f2ac45 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/ControllerAdvice.java +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/ControllerAdvice.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.springweb6; +import static datadog.context.Context.root; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -10,7 +11,6 @@ import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import jakarta.servlet.http.HttpServletRequest; import net.bytebuddy.asm.Advice; import org.springframework.web.method.HandlerMethod; @@ -26,8 +26,7 @@ public static AgentScope nameResourceAndStartSpan( // Name the parent span based on the matching pattern Object parentSpan = request.getAttribute(DD_SPAN_ATTRIBUTE); if (parentSpan instanceof AgentSpan) { - DECORATE.onRequest( - (AgentSpan) parentSpan, request, request, (AgentSpanContext.Extracted) null); + DECORATE.onRequest((AgentSpan) parentSpan, request, request, root()); } if (activeSpan() == null) { diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.java index a75bee6ff98..0b5008f5e00 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.java +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.java @@ -1,9 +1,10 @@ package datadog.trace.instrumentation.springweb6; +import static datadog.context.Context.root; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; +import static datadog.trace.instrumentation.springweb6.SpringWebHttpServerDecorator.DECORATE; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -40,11 +41,7 @@ protected void doFilterInternal( if (findMapping(wrappedRequest)) { // Name the parent span based on the matching pattern // Let the parent span resource name be set with the attribute set in findMapping. - SpringWebHttpServerDecorator.DECORATE.onRequest( - (AgentSpan) parentSpan, - wrappedRequest, - wrappedRequest, - (AgentSpanContext.Extracted) null); + DECORATE.onRequest((AgentSpan) parentSpan, wrappedRequest, wrappedRequest, root()); } } catch (final Exception ignored) { // mapping.getHandler() threw exception. Ignore diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java index 3d05ae9e1a0..e55a86f4f8f 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java17/datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.java @@ -2,9 +2,9 @@ import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -101,7 +101,7 @@ public AgentSpan onRequest( final AgentSpan span, final HttpServletRequest connection, final HttpServletRequest request, - AgentSpanContext.Extracted context) { + final Context context) { // FIXME: adding a filter to avoid resource name to be overridden on redirect and forwards. // Remove myself when jakarta.servlet will be available if (request != null && request.getAttribute(DD_FILTERED_SPRING_ROUTE_ALREADY_APPLIED) == null) { diff --git a/dd-java-agent/instrumentation/tomcat-5.5-common/src/main/java/datadog/trace/instrumentation/tomcat/TomcatDecorator.java b/dd-java-agent/instrumentation/tomcat-5.5-common/src/main/java/datadog/trace/instrumentation/tomcat/TomcatDecorator.java index c1e70323507..5a4de186d88 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5-common/src/main/java/datadog/trace/instrumentation/tomcat/TomcatDecorator.java +++ b/dd-java-agent/instrumentation/tomcat-5.5-common/src/main/java/datadog/trace/instrumentation/tomcat/TomcatDecorator.java @@ -1,13 +1,13 @@ package datadog.trace.instrumentation.tomcat; import datadog.appsec.api.blocking.BlockingContentType; +import datadog.context.Context; import datadog.trace.api.Config; import datadog.trace.api.DDTags; import datadog.trace.api.gateway.BlockResponseFunction; import datadog.trace.api.internal.TraceSegment; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator; @@ -20,7 +20,7 @@ public class TomcatDecorator public static final CharSequence TOMCAT_SERVER = UTF8BytesString.create("tomcat-server"); public static final TomcatDecorator DECORATE = new TomcatDecorator(); - public static final String DD_EXTRACTED_CONTEXT_ATTRIBUTE = "datadog.extracted-context"; + public static final String DD_PARENT_CONTEXT_ATTRIBUTE = "datadog.parent-context"; public static final String DD_CONTEXT_PATH_ATTRIBUTE = "datadog.context.path"; public static final String DD_SERVLET_PATH_ATTRIBUTE = "datadog.servlet.path"; public static final String DD_REAL_STATUS_CODE = "datadog.servlet.real_status_code"; @@ -94,7 +94,7 @@ public AgentSpan onRequest( final AgentSpan span, final Request connection, final Request request, - AgentSpanContext.Extracted context) { + final Context context) { if (request != null) { String contextPath = request.getContextPath(); String servletPath = request.getServletPath(); diff --git a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java index 5a3ed4dee6f..4534a35b8e5 100644 --- a/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-5.5/src/main/java/datadog/trace/instrumentation/tomcat/TomcatServerInstrumentation.java @@ -4,10 +4,11 @@ import static datadog.trace.agent.tooling.muzzle.Reference.EXPECTS_NON_STATIC; import static datadog.trace.agent.tooling.muzzle.Reference.EXPECTS_PUBLIC; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; +import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.getRootContext; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE; -import static datadog.trace.instrumentation.tomcat.TomcatDecorator.DD_EXTRACTED_CONTEXT_ATTRIBUTE; +import static datadog.trace.instrumentation.tomcat.TomcatDecorator.DD_PARENT_CONTEXT_ATTRIBUTE; import static datadog.trace.instrumentation.tomcat.TomcatDecorator.DECORATE; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -22,7 +23,6 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.gateway.Flow; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter; import java.util.Arrays; @@ -124,11 +124,7 @@ public static ContextScope onService(@Advice.Argument(0) org.apache.coyote.Reque } final Context parentContext = DECORATE.extract(req); - // TODO: Migrate setting DD_EXTRACTED_CONTEXT_ATTRIBUTE from AgentSpanContext.Extracted to - // Context - req.setAttribute( - DD_EXTRACTED_CONTEXT_ATTRIBUTE, DECORATE.getExtractedSpanContext(parentContext)); - + req.setAttribute(DD_PARENT_CONTEXT_ATTRIBUTE, parentContext); final Context context = DECORATE.startSpan(req, parentContext); final ContextScope scope = context.attach(); @@ -171,12 +167,9 @@ public static void afterParse( AgentSpan span = (AgentSpan) spanObj; req.setAttribute(CorrelationIdentifier.getTraceIdKey(), AgentTracer.get().getTraceId(span)); req.setAttribute(CorrelationIdentifier.getSpanIdKey(), AgentTracer.get().getSpanId(span)); - Object ctxObj = req.getAttribute(DD_EXTRACTED_CONTEXT_ATTRIBUTE); - AgentSpanContext.Extracted ctx = - ctxObj instanceof AgentSpanContext.Extracted - ? (AgentSpanContext.Extracted) ctxObj - : null; - DECORATE.onRequest(span, req, req, ctx); + Object ctxObj = req.getAttribute(DD_PARENT_CONTEXT_ATTRIBUTE); + Context parentContext = ctxObj instanceof Context ? (Context) ctxObj : getRootContext(); + DECORATE.onRequest(span, req, req, parentContext); Flow.Action.RequestBlockingAction rba = span.getRequestBlockingAction(); if (rba != null) { TomcatBlockingHelper.commitBlockingResponse( diff --git a/dd-java-agent/instrumentation/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/VertxDecorator.java b/dd-java-agent/instrumentation/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/VertxDecorator.java index 65659862ba0..bc870206b24 100644 --- a/dd-java-agent/instrumentation/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/VertxDecorator.java +++ b/dd-java-agent/instrumentation/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/VertxDecorator.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.vertx_3_4.server; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapterBase; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; @@ -58,7 +58,7 @@ public AgentSpan onRequest( final AgentSpan span, final RoutingContext connection, final RoutingContext routingContext, - AgentSpanContext.Extracted context) { + final Context context) { return span; } diff --git a/dd-java-agent/instrumentation/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/VertxDecorator.java b/dd-java-agent/instrumentation/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/VertxDecorator.java index f79f53d8c6f..d3369f21218 100644 --- a/dd-java-agent/instrumentation/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/VertxDecorator.java +++ b/dd-java-agent/instrumentation/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/VertxDecorator.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.vertx_4_0.server; +import datadog.context.Context; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapterBase; import datadog.trace.bootstrap.instrumentation.api.URIDefaultDataAdapter; @@ -59,7 +59,7 @@ public AgentSpan onRequest( final AgentSpan span, final RoutingContext connection, final RoutingContext routingContext, - AgentSpanContext.Extracted context) { + final Context context) { return span; }