diff --git a/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/PlayAdvice.java index 34d746fda7d..6fb55f2510f 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/PlayAdvice.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.play23.PlayHeaders.GETTER; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.PLAY_REQUEST; +import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.REPORT_HTTP_STATUS; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -55,7 +56,9 @@ public static void stopTraceOnResponse( ((Action) thisAction).executionContext()); } else { DECORATE.onError(playControllerSpan, throwable); - playControllerSpan.setHttpStatusCode(500); + if (REPORT_HTTP_STATUS) { + playControllerSpan.setHttpStatusCode(500); + } DECORATE.beforeFinish(playControllerSpan); playControllerSpan.finish(); } diff --git a/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/PlayHttpServerDecorator.java b/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/PlayHttpServerDecorator.java index 2eb1cc5ea05..9b3f25fae74 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/PlayHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/PlayHttpServerDecorator.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.decorator.RouteHandlerDecorator.ROUTE_HANDLER_DECORATOR; +import datadog.trace.api.Config; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; @@ -14,6 +15,7 @@ import scala.Option; public class PlayHttpServerDecorator extends HttpServerDecorator { + public static final boolean REPORT_HTTP_STATUS = Config.get().getPlayReportHttpStatus(); public static final CharSequence PLAY_REQUEST = UTF8BytesString.create("play.request"); public static final CharSequence PLAY_ACTION = UTF8BytesString.create("play-action"); public static final PlayHttpServerDecorator DECORATE = new PlayHttpServerDecorator(); @@ -74,7 +76,9 @@ public AgentSpan onRequest( @Override public AgentSpan onError(final AgentSpan span, Throwable throwable) { - span.setHttpStatusCode(500); + if (REPORT_HTTP_STATUS) { + span.setHttpStatusCode(500); + } if (throwable != null // This can be moved to instanceof check when using Java 8. && throwable.getClass().getName().equals("java.util.concurrent.CompletionException") diff --git a/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/RequestCompleteCallback.java b/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/RequestCompleteCallback.java index 1d7348233a0..24dfe9c1c95 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/RequestCompleteCallback.java +++ b/dd-java-agent/instrumentation/play-2.3/src/main/java8/datadog/trace/instrumentation/play23/RequestCompleteCallback.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope; import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.DECORATE; +import static datadog.trace.instrumentation.play23.PlayHttpServerDecorator.REPORT_HTTP_STATUS; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.context.TraceScope; @@ -25,7 +26,9 @@ public Object apply(final Try result) { if (result.isFailure()) { DECORATE.onError(span, result.failed().get()); } else { - DECORATE.onResponse(span, result.get()); + if (REPORT_HTTP_STATUS) { + DECORATE.onResponse(span, result.get()); + } } DECORATE.beforeFinish(span); final TraceScope scope = activeScope(); diff --git a/dd-java-agent/instrumentation/play-2.3/src/test/groovy/server/PlayServerTest.groovy b/dd-java-agent/instrumentation/play-2.3/src/test/groovy/server/PlayServerTest.groovy index 10a190acf75..2828c1ead1f 100644 --- a/dd-java-agent/instrumentation/play-2.3/src/test/groovy/server/PlayServerTest.groovy +++ b/dd-java-agent/instrumentation/play-2.3/src/test/groovy/server/PlayServerTest.groovy @@ -10,7 +10,6 @@ import datadog.trace.instrumentation.netty38.server.NettyHttpServerDecorator import datadog.trace.instrumentation.play23.PlayHttpServerDecorator import play.api.test.TestServer -import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.ERROR import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.EXCEPTION import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.FORWARDED import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.SUCCESS @@ -44,7 +43,7 @@ class PlayServerTest extends HttpServerTest { serviceName expectedServiceName() operationName "play.request" spanType DDSpanTypes.HTTP_SERVER - errored endpoint == ERROR || endpoint == EXCEPTION + errored endpoint == EXCEPTION childOfPrevious() tags { "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.component() @@ -52,7 +51,6 @@ class PlayServerTest extends HttpServerTest { "$Tags.PEER_HOST_IPV4" { it == (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") } "$Tags.HTTP_URL" String "$Tags.HTTP_METHOD" String - "$Tags.HTTP_STATUS" Integer // BUG // "$Tags.HTTP_ROUTE" String if (endpoint == EXCEPTION) { diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/PlayAdvice.java b/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/PlayAdvice.java index 8c8716b22e3..8ff5a2aedc7 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/PlayAdvice.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/PlayAdvice.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.play24.PlayHeaders.GETTER; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.DECORATE; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.PLAY_REQUEST; +import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.REPORT_HTTP_STATUS; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -69,7 +70,9 @@ public static void stopTraceOnResponse( ((Action) thisAction).executionContext()); } else { DECORATE.onError(playControllerSpan, throwable); - playControllerSpan.setHttpStatusCode(500); + if (REPORT_HTTP_STATUS) { + playControllerSpan.setHttpStatusCode(500); + } DECORATE.beforeFinish(playControllerSpan); playControllerSpan.finish(); } diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/PlayHttpServerDecorator.java b/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/PlayHttpServerDecorator.java index 045965459f1..9f1d7b85416 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/PlayHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/PlayHttpServerDecorator.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.decorator.RouteHandlerDecorator.ROUTE_HANDLER_DECORATOR; +import datadog.trace.api.Config; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; @@ -13,6 +14,7 @@ import scala.Option; public class PlayHttpServerDecorator extends HttpServerDecorator { + public static final boolean REPORT_HTTP_STATUS = Config.get().getPlayReportHttpStatus(); public static final CharSequence PLAY_REQUEST = UTF8BytesString.create("play.request"); public static final CharSequence PLAY_ACTION = UTF8BytesString.create("play-action"); public static final PlayHttpServerDecorator DECORATE = new PlayHttpServerDecorator(); @@ -73,7 +75,9 @@ public AgentSpan onRequest( @Override public AgentSpan onError(final AgentSpan span, Throwable throwable) { - span.setHttpStatusCode(500); + if (REPORT_HTTP_STATUS) { + span.setHttpStatusCode(500); + } if (throwable != null // This can be moved to instanceof check when using Java 8. && throwable.getClass().getName().equals("java.util.concurrent.CompletionException") diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/RequestCompleteCallback.java b/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/RequestCompleteCallback.java index 73b5ea73269..05611aaa9cd 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/RequestCompleteCallback.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java8/datadog/trace/instrumentation/play24/RequestCompleteCallback.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope; import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.DECORATE; +import static datadog.trace.instrumentation.play24.PlayHttpServerDecorator.REPORT_HTTP_STATUS; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.context.TraceScope; @@ -24,7 +25,9 @@ public Object apply(final Try result) { if (result.isFailure()) { DECORATE.onError(span, result.failed().get()); } else { - DECORATE.onResponse(span, result.get()); + if (REPORT_HTTP_STATUS) { + DECORATE.onResponse(span, result.get()); + } } DECORATE.beforeFinish(span); final TraceScope scope = activeScope(); diff --git a/dd-java-agent/instrumentation/play-2.4/src/test/groovy/server/PlayServerTest.groovy b/dd-java-agent/instrumentation/play-2.4/src/test/groovy/server/PlayServerTest.groovy index b0ad0f4d258..95070069963 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/test/groovy/server/PlayServerTest.groovy +++ b/dd-java-agent/instrumentation/play-2.4/src/test/groovy/server/PlayServerTest.groovy @@ -86,7 +86,7 @@ class PlayServerTest extends HttpServerTest { serviceName expectedServiceName() operationName "play.request" spanType DDSpanTypes.HTTP_SERVER - errored endpoint == ERROR || endpoint == EXCEPTION + errored endpoint == EXCEPTION childOfPrevious() tags { "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.component() @@ -94,7 +94,6 @@ class PlayServerTest extends HttpServerTest { "$Tags.PEER_HOST_IPV4" { it == (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") } "$Tags.HTTP_URL" String "$Tags.HTTP_METHOD" String - "$Tags.HTTP_STATUS" Integer // BUG // "$Tags.HTTP_ROUTE" String if (endpoint == EXCEPTION) { diff --git a/dd-java-agent/instrumentation/play-2.6/src/main/java8/datadog/trace/instrumentation/play26/PlayHttpServerDecorator.java b/dd-java-agent/instrumentation/play-2.6/src/main/java8/datadog/trace/instrumentation/play26/PlayHttpServerDecorator.java index b4203d2a0b1..0782f8fa8ee 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/main/java8/datadog/trace/instrumentation/play26/PlayHttpServerDecorator.java +++ b/dd-java-agent/instrumentation/play-2.6/src/main/java8/datadog/trace/instrumentation/play26/PlayHttpServerDecorator.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.decorator.RouteHandlerDecorator.ROUTE_HANDLER_DECORATOR; +import datadog.trace.api.Config; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; @@ -20,6 +21,7 @@ import scala.Option; public class PlayHttpServerDecorator extends HttpServerDecorator { + public static final boolean REPORT_HTTP_STATUS = Config.get().getPlayReportHttpStatus(); public static final CharSequence PLAY_REQUEST = UTF8BytesString.create("play.request"); public static final CharSequence PLAY_ACTION = UTF8BytesString.create("play-action"); public static final PlayHttpServerDecorator DECORATE = new PlayHttpServerDecorator(); @@ -116,7 +118,9 @@ public AgentSpan onRequest( @Override public AgentSpan onError(final AgentSpan span, Throwable throwable) { - span.setHttpStatusCode(500); + if (REPORT_HTTP_STATUS) { + span.setHttpStatusCode(500); + } if (throwable instanceof CompletionException && throwable.getCause() != null) { throwable = throwable.getCause(); } diff --git a/dd-java-agent/instrumentation/play-2.6/src/main/java8/datadog/trace/instrumentation/play26/RequestCompleteCallback.java b/dd-java-agent/instrumentation/play-2.6/src/main/java8/datadog/trace/instrumentation/play26/RequestCompleteCallback.java index fbf2d7ac103..cabe8c9b5ac 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/main/java8/datadog/trace/instrumentation/play26/RequestCompleteCallback.java +++ b/dd-java-agent/instrumentation/play-2.6/src/main/java8/datadog/trace/instrumentation/play26/RequestCompleteCallback.java @@ -2,6 +2,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope; import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.DECORATE; +import static datadog.trace.instrumentation.play26.PlayHttpServerDecorator.REPORT_HTTP_STATUS; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.context.TraceScope; @@ -26,7 +27,9 @@ public Object apply(final Try result) { if (result.isFailure()) { DECORATE.onError(span, result.failed().get()); } else { - DECORATE.onResponse(span, result.get()); + if (REPORT_HTTP_STATUS) { + DECORATE.onResponse(span, result.get()); + } } DECORATE.beforeFinish(span); final TraceScope scope = activeScope(); diff --git a/dd-java-agent/instrumentation/play-2.6/src/test/groovy/server/PlayServerTest.groovy b/dd-java-agent/instrumentation/play-2.6/src/test/groovy/server/PlayServerTest.groovy index 991806b9418..88327297ec9 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/test/groovy/server/PlayServerTest.groovy +++ b/dd-java-agent/instrumentation/play-2.6/src/test/groovy/server/PlayServerTest.groovy @@ -93,7 +93,7 @@ class PlayServerTest extends HttpServerTest { serviceName expectedServiceName() operationName "play.request" spanType DDSpanTypes.HTTP_SERVER - errored endpoint == ERROR || endpoint == EXCEPTION + errored endpoint == EXCEPTION childOfPrevious() tags { "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.component() @@ -101,7 +101,6 @@ class PlayServerTest extends HttpServerTest { "$Tags.PEER_HOST_IPV4" { it == (endpoint == FORWARDED ? endpoint.body : "127.0.0.1") } "$Tags.HTTP_URL" String "$Tags.HTTP_METHOD" String - "$Tags.HTTP_STATUS" Integer // BUG // "$Tags.HTTP_ROUTE" String if (endpoint == EXCEPTION) { diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java index 47b1169a22a..bb31a20c44d 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java @@ -52,6 +52,8 @@ public final class TraceInstrumentationConfig { public static final String OSGI_SEARCH_DEPTH = "osgi.search.depth"; + public static final String PLAY_REPORT_HTTP_STATUS = "trace.play.report-http-status"; + public static final String SERVLET_PRINCIPAL_ENABLED = "trace.servlet.principal.enabled"; public static final String SERVLET_ASYNC_TIMEOUT_ERROR = "trace.servlet.async-timeout.error"; diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index a195970efaf..fe3b827cd36 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -135,6 +135,7 @@ import static datadog.trace.api.config.TraceInstrumentationConfig.LOGS_INJECTION_ENABLED; import static datadog.trace.api.config.TraceInstrumentationConfig.LOGS_MDC_TAGS_INJECTION_ENABLED; import static datadog.trace.api.config.TraceInstrumentationConfig.OSGI_SEARCH_DEPTH; +import static datadog.trace.api.config.TraceInstrumentationConfig.PLAY_REPORT_HTTP_STATUS; import static datadog.trace.api.config.TraceInstrumentationConfig.RESOLVER_USE_LOADCLASS; import static datadog.trace.api.config.TraceInstrumentationConfig.RUNTIME_CONTEXT_FIELD_INJECTION; import static datadog.trace.api.config.TraceInstrumentationConfig.SERIALVERSIONUID_FIELD_INJECTION; @@ -362,6 +363,9 @@ public class Config { private final int osgiSearchDepth; + // TODO: remove at a future point. + private final boolean playReportHttpStatus; + private final boolean servletPrincipalEnabled; private final boolean servletAsyncTimeoutError; @@ -753,6 +757,8 @@ && isJavaVersionAtLeast(8) osgiSearchDepth = configProvider.getInteger(OSGI_SEARCH_DEPTH, 1); + playReportHttpStatus = configProvider.getBoolean(PLAY_REPORT_HTTP_STATUS, false); + servletPrincipalEnabled = configProvider.getBoolean(SERVLET_PRINCIPAL_ENABLED, false); servletAsyncTimeoutError = configProvider.getBoolean(SERVLET_ASYNC_TIMEOUT_ERROR, true); @@ -1149,6 +1155,10 @@ public int getOsgiSearchDepth() { return osgiSearchDepth; } + public boolean getPlayReportHttpStatus() { + return playReportHttpStatus; + } + public boolean isServletPrincipalEnabled() { return servletPrincipalEnabled; }