From c80749c793e79973a943e22ff584b2ffffa3be11 Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Wed, 8 May 2019 13:27:04 -0400 Subject: [PATCH 1/4] Update to latest versions of groovy and spock --- gradle/dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 75d9387cd4..6dfaf3d7f6 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -1,4 +1,4 @@ -def groovyVer = "2.5.3" +def groovyVer = "2.5.6" def spockGroovyVer = groovyVer.replaceAll(/\.\d+$/, '') ext { @@ -9,7 +9,7 @@ ext { guava : "20.0", // Last version to support Java 7 jackson : "2.9.8", // https://nvd.nist.gov/vuln/detail/CVE-2018-1000873 - spock : "1.2-groovy-$spockGroovyVer", + spock : "1.3-groovy-$spockGroovyVer", groovy : groovyVer, junit : "4.12", logback : "1.2.3", From c0bb6f4a36b9abc348ad8143eac966b100813b77 Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Thu, 9 May 2019 09:44:42 -0400 Subject: [PATCH 2/4] Fix minor typo --- .../src/main/java/datadog/trace/agent/TracingAgent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/src/main/java/datadog/trace/agent/TracingAgent.java b/dd-java-agent/src/main/java/datadog/trace/agent/TracingAgent.java index fb9b079890..2e402de6f5 100644 --- a/dd-java-agent/src/main/java/datadog/trace/agent/TracingAgent.java +++ b/dd-java-agent/src/main/java/datadog/trace/agent/TracingAgent.java @@ -30,7 +30,7 @@ public class TracingAgent { throws Exception { startDatadogAgent(agentArgs, inst); if (isAppUsingCustomLogManager()) { - System.out.println("Custom logger detected. Delaying JMXFetch initialization."); + System.out.println("Custom logger detected. Delaying JMXFetch initialization."); /* * java.util.logging.LogManager maintains a final static LogManager, which is created during class initialization. * From 2984cc506e051f17fbf7aa3b0dc9d7f7d0b7947c Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Thu, 9 May 2019 10:17:35 -0400 Subject: [PATCH 3/4] Limit okhttp latest deps test to 3.x.x --- dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle b/dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle index 50a5192558..d518271037 100644 --- a/dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle +++ b/dd-java-agent/instrumentation/okhttp-3/okhttp-3.gradle @@ -32,5 +32,6 @@ dependencies { } testCompile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.0.0' - latestDepTestCompile group: 'com.squareup.okhttp3', name: 'okhttp', version: '[3.11.0,)' + // 4.x.x-alpha has been released and it looks like there are lots of incompatible changes + latestDepTestCompile group: 'com.squareup.okhttp3', name: 'okhttp', version: '[3.11.0, 4.0.0*)' } From 5ff04bd1e97986a2b0e21a4c8e3611dbb775bbc7 Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Thu, 9 May 2019 10:20:06 -0400 Subject: [PATCH 4/4] Allow tracing be disabled via config --- .../trace/agent/tooling/AgentInstaller.java | 6 ++++-- .../trace/agent/tooling/TracerInstaller.java | 3 ++- .../main/java/datadog/trace/api/Config.java | 18 +++++++++++++----- .../groovy/datadog/trace/api/ConfigTest.groovy | 15 ++++++++++++++- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java index 546fee5299..82930ab25f 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java @@ -43,8 +43,10 @@ public class AgentInstaller { return INSTRUMENTATION; } - public static ResettableClassFileTransformer installBytebuddyAgent(final Instrumentation inst) { - return installBytebuddyAgent(inst, new AgentBuilder.Listener[0]); + public static void installBytebuddyAgent(final Instrumentation inst) { + if (Config.get().isTraceEnabled()) { + installBytebuddyAgent(inst, new AgentBuilder.Listener[0]); + } } /** diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java index 1af78c5c23..b0e3e66a23 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java @@ -1,13 +1,14 @@ package datadog.trace.agent.tooling; import datadog.opentracing.DDTracer; +import datadog.trace.api.Config; import lombok.extern.slf4j.Slf4j; @Slf4j public class TracerInstaller { /** Register a global tracer if no global tracer is already registered. */ public static synchronized void installGlobalTracer() { - if (!io.opentracing.util.GlobalTracer.isRegistered()) { + if (Config.get().isTraceEnabled() && !io.opentracing.util.GlobalTracer.isRegistered()) { final DDTracer tracer = new DDTracer(); try { io.opentracing.util.GlobalTracer.register(tracer); diff --git a/dd-trace-api/src/main/java/datadog/trace/api/Config.java b/dd-trace-api/src/main/java/datadog/trace/api/Config.java index e20a8d81f8..79208a032b 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/Config.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/Config.java @@ -35,6 +35,7 @@ public class Config { public static final String SERVICE_NAME = "service.name"; public static final String SERVICE = "service"; + public static final String TRACE_ENABLED = "trace.enabled"; public static final String WRITER_TYPE = "writer.type"; public static final String AGENT_HOST = "agent.host"; public static final String TRACE_AGENT_PORT = "trace.agent.port"; @@ -65,24 +66,24 @@ public class Config { public static final String JMX_FETCH_REFRESH_BEANS_PERIOD = "jmxfetch.refresh-beans-period"; public static final String JMX_FETCH_STATSD_HOST = "jmxfetch.statsd.host"; public static final String JMX_FETCH_STATSD_PORT = "jmxfetch.statsd.port"; - public static final String APP_CUSTOM_LOG_MANAGER = "app.customlogmanager"; + public static final String LOGS_INJECTION_ENABLED = "logs.injection"; + private static final String APP_CUSTOM_LOG_MANAGER = "app.customlogmanager"; public static final String RUNTIME_ID_TAG = "runtime-id"; public static final String LANGUAGE_TAG_KEY = "language"; public static final String LANGUAGE_TAG_VALUE = "jvm"; + public static final String DEFAULT_SERVICE_NAME = "unnamed-java-app"; + private static final boolean DEFAULT_TRACE_ENABLED = true; public static final String DD_AGENT_WRITER_TYPE = "DDAgentWriter"; public static final String LOGGING_WRITER_TYPE = "LoggingWriter"; - public static final String DEFAULT_AGENT_WRITER_TYPE = DD_AGENT_WRITER_TYPE; + private static final String DEFAULT_AGENT_WRITER_TYPE = DD_AGENT_WRITER_TYPE; public static final String DEFAULT_AGENT_HOST = "localhost"; public static final int DEFAULT_TRACE_AGENT_PORT = 8126; public static final String DEFAULT_AGENT_UNIX_DOMAIN_SOCKET = null; - public static final String LOGS_INJECTION_ENABLED = "logs.injection"; - public static final boolean DEFAULT_LOGS_INJECTION_ENABLED = false; - private static final boolean DEFAULT_RUNTIME_CONTEXT_FIELD_INJECTION = true; private static final boolean DEFAULT_PRIORITY_SAMPLING_ENABLED = true; @@ -99,6 +100,7 @@ public class Config { public static final int DEFAULT_JMX_FETCH_STATSD_PORT = 8125; + public static final boolean DEFAULT_LOGS_INJECTION_ENABLED = false; private static final boolean DEFAULT_APP_CUSTOM_LOG_MANAGER = false; private static final String SPLIT_BY_SPACE_OR_COMMA_REGEX = "[,\\s]+"; @@ -115,6 +117,7 @@ public class Config { @Getter private final String runtimeId; @Getter private final String serviceName; + @Getter private final boolean traceEnabled; @Getter private final String writerType; @Getter private final String agentHost; @Getter private final int agentPort; @@ -149,6 +152,8 @@ public class Config { runtimeId = UUID.randomUUID().toString(); serviceName = getSettingFromEnvironment(SERVICE_NAME, DEFAULT_SERVICE_NAME); + + traceEnabled = getBooleanSettingFromEnvironment(TRACE_ENABLED, DEFAULT_TRACE_ENABLED); writerType = getSettingFromEnvironment(WRITER_TYPE, DEFAULT_AGENT_WRITER_TYPE); agentHost = getSettingFromEnvironment(AGENT_HOST, DEFAULT_AGENT_HOST); agentPort = @@ -166,6 +171,7 @@ public class Config { globalTags = getMapSettingFromEnvironment(GLOBAL_TAGS, null); spanTags = getMapSettingFromEnvironment(SPAN_TAGS, null); jmxTags = getMapSettingFromEnvironment(JMX_TAGS, null); + excludedClasses = getListSettingFromEnvironment(TRACE_CLASSES_EXCLUDE, null); headerTags = getMapSettingFromEnvironment(HEADER_TAGS, null); @@ -225,6 +231,8 @@ public class Config { runtimeId = parent.runtimeId; serviceName = properties.getProperty(SERVICE_NAME, parent.serviceName); + + traceEnabled = getPropertyBooleanValue(properties, TRACE_ENABLED, parent.traceEnabled); writerType = properties.getProperty(WRITER_TYPE, parent.writerType); agentHost = properties.getProperty(AGENT_HOST, parent.agentHost); agentPort = diff --git a/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index e64a3c7a93..1ca064b5e1 100644 --- a/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -35,6 +35,7 @@ import static datadog.trace.api.Config.SERVICE_MAPPING import static datadog.trace.api.Config.SERVICE_NAME import static datadog.trace.api.Config.SPAN_TAGS import static datadog.trace.api.Config.TRACE_AGENT_PORT +import static datadog.trace.api.Config.TRACE_ENABLED import static datadog.trace.api.Config.TRACE_RESOLVER_ENABLED import static datadog.trace.api.Config.WRITER_TYPE @@ -45,6 +46,7 @@ class ConfigTest extends Specification { public final EnvironmentVariables environmentVariables = new EnvironmentVariables() private static final DD_SERVICE_NAME_ENV = "DD_SERVICE_NAME" + private static final DD_TRACE_ENABLED_ENV = "DD_TRACE_ENABLED" private static final DD_WRITER_TYPE_ENV = "DD_WRITER_TYPE" private static final DD_SERVICE_MAPPING_ENV = "DD_SERVICE_MAPPING" private static final DD_SPAN_TAGS_ENV = "DD_SPAN_TAGS" @@ -61,6 +63,7 @@ class ConfigTest extends Specification { then: config.serviceName == "unnamed-java-app" + config.traceEnabled == true config.writerType == "DDAgentWriter" config.agentHost == "localhost" config.agentPort == 8126 @@ -98,6 +101,7 @@ class ConfigTest extends Specification { setup: def prop = new Properties() prop.setProperty(SERVICE_NAME, "something else") + prop.setProperty(TRACE_ENABLED, "false") prop.setProperty(WRITER_TYPE, "LoggingWriter") prop.setProperty(AGENT_HOST, "somehost") prop.setProperty(TRACE_AGENT_PORT, "123") @@ -129,6 +133,7 @@ class ConfigTest extends Specification { then: config.serviceName == "something else" + config.traceEnabled == false config.writerType == "LoggingWriter" config.agentHost == "somehost" config.agentPort == 123 @@ -157,6 +162,7 @@ class ConfigTest extends Specification { def "specify overrides via system properties"() { setup: System.setProperty(PREFIX + SERVICE_NAME, "something else") + System.setProperty(PREFIX + TRACE_ENABLED, "false") System.setProperty(PREFIX + WRITER_TYPE, "LoggingWriter") System.setProperty(PREFIX + AGENT_HOST, "somehost") System.setProperty(PREFIX + TRACE_AGENT_PORT, "123") @@ -188,6 +194,7 @@ class ConfigTest extends Specification { then: config.serviceName == "something else" + config.traceEnabled == false config.writerType == "LoggingWriter" config.agentHost == "somehost" config.agentPort == 123 @@ -216,6 +223,7 @@ class ConfigTest extends Specification { def "specify overrides via env vars"() { setup: environmentVariables.set(DD_SERVICE_NAME_ENV, "still something else") + environmentVariables.set(DD_TRACE_ENABLED_ENV, "false") environmentVariables.set(DD_WRITER_TYPE_ENV, "LoggingWriter") environmentVariables.set(DD_PROPAGATION_STYLE_EXTRACT, "B3 Datadog") environmentVariables.set(DD_PROPAGATION_STYLE_INJECT, "Datadog B3") @@ -226,6 +234,7 @@ class ConfigTest extends Specification { then: config.serviceName == "still something else" + config.traceEnabled == false config.writerType == "LoggingWriter" config.propagationStylesToExtract.toList() == [Config.PropagationStyle.B3, Config.PropagationStyle.DATADOG] config.propagationStylesToInject.toList() == [Config.PropagationStyle.DATADOG, Config.PropagationStyle.B3] @@ -256,6 +265,7 @@ class ConfigTest extends Specification { def "default when configured incorrectly"() { setup: System.setProperty(PREFIX + SERVICE_NAME, " ") + System.setProperty(PREFIX + TRACE_ENABLED, " ") System.setProperty(PREFIX + WRITER_TYPE, " ") System.setProperty(PREFIX + AGENT_HOST, " ") System.setProperty(PREFIX + TRACE_AGENT_PORT, " ") @@ -276,6 +286,7 @@ class ConfigTest extends Specification { then: config.serviceName == " " + config.traceEnabled == true config.writerType == " " config.agentHost == " " config.agentPort == 8126 @@ -337,6 +348,7 @@ class ConfigTest extends Specification { setup: Properties properties = new Properties() properties.setProperty(SERVICE_NAME, "something else") + properties.setProperty(TRACE_ENABLED, "false") properties.setProperty(WRITER_TYPE, "LoggingWriter") properties.setProperty(AGENT_HOST, "somehost") properties.setProperty(TRACE_AGENT_PORT, "123") @@ -359,12 +371,13 @@ class ConfigTest extends Specification { properties.setProperty(JMX_FETCH_REFRESH_BEANS_PERIOD, "200") properties.setProperty(JMX_FETCH_STATSD_HOST, "statsd host") properties.setProperty(JMX_FETCH_STATSD_PORT, "321") - + when: def config = Config.get(properties) then: config.serviceName == "something else" + config.traceEnabled == false config.writerType == "LoggingWriter" config.agentHost == "somehost" config.agentPort == 123