diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Constants.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Constants.java index d6ddee8410d..01c2c66ef9a 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Constants.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Constants.java @@ -15,9 +15,10 @@ public final class Constants { */ public static final String[] BOOTSTRAP_PACKAGE_PREFIXES = { "datadog.slf4j", + "datadog.context", + "datadog.environment", "datadog.json", "datadog.yaml", - "datadog.context", "datadog.cli", "datadog.appsec.api", "datadog.trace.api", diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index 6213b00d8d7..e00f162e464 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -250,7 +250,8 @@ tasks.withType(GenerateMavenPom).configureEach { task -> dependencies { implementation project(path: ':components:json') - implementation project(path: ':components:cli') + // Depend on the bootstrap-specific shadow configuration to avoid having the same component reused by both bootstrap and agent + implementation project(path: ':components:environment', configuration: 'shadow') modules { module("com.squareup.okio:okio") { replacedBy("com.datadoghq.okio:okio") // embed our patched fork @@ -270,6 +271,7 @@ dependencies { testImplementation group: 'io.opentracing', name: 'opentracing-util', version: '0.31.0' // Includes for the top level shadow jar + shadowInclude project(path: ':components:environment', configuration: 'shadow') shadowInclude project(path: ':dd-java-agent:agent-bootstrap') shadowInclude project(path: ':dd-java-agent:agent-debugger:debugger-bootstrap') shadowInclude project(path: ':dd-java-agent:agent-otel:otel-bootstrap', configuration: 'shadow') diff --git a/dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java b/dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java index ea784033ebb..b5926c38d93 100644 --- a/dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java +++ b/dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java @@ -1,9 +1,10 @@ package datadog.trace.bootstrap; -import static datadog.trace.bootstrap.SystemUtils.getPropertyOrEnvVar; import static java.nio.charset.StandardCharsets.UTF_8; -import datadog.cli.CLIHelper; +import datadog.trace.bootstrap.environment.EnvironmentVariables; +import datadog.trace.bootstrap.environment.JavaVirtualMachine; +import datadog.trace.bootstrap.environment.SystemProperties; import de.thetaphi.forbiddenapis.SuppressForbidden; import java.io.BufferedReader; import java.io.File; @@ -90,7 +91,7 @@ public static void agentmain(final String agentArgs, final Instrumentation inst) } private static BootstrapInitializationTelemetry createInitializationTelemetry() { - String forwarderPath = SystemUtils.tryGetEnv("DD_TELEMETRY_FORWARDER_PATH"); + String forwarderPath = EnvironmentVariables.get("DD_TELEMETRY_FORWARDER_PATH"); if (forwarderPath == null) { return BootstrapInitializationTelemetry.noOpInstance(); } @@ -100,7 +101,7 @@ private static BootstrapInitializationTelemetry createInitializationTelemetry() initTelemetry.initMetaInfo("runtime_name", "jvm"); initTelemetry.initMetaInfo("language_name", "jvm"); - String javaVersion = SystemUtils.tryGetProperty("java.version"); + String javaVersion = SystemProperties.get("java.version"); if (javaVersion != null) { initTelemetry.initMetaInfo("runtime_version", javaVersion); initTelemetry.initMetaInfo("language_version", javaVersion); @@ -163,7 +164,12 @@ static boolean getConfig(String configName) { return System.getenv(LIB_INJECTION_ENABLED_ENV_VAR) != null; case LIB_INJECTION_FORCE_SYS_PROP: { - String injectionForceFlag = getPropertyOrEnvVar(LIB_INJECTION_FORCE_SYS_PROP); + String envVarName = + LIB_INJECTION_FORCE_SYS_PROP.replace('.', '_').replace('-', '_').toUpperCase(); + String injectionForceFlag = EnvironmentVariables.get(envVarName); + if (injectionForceFlag == null) { + injectionForceFlag = SystemProperties.get(LIB_INJECTION_FORCE_SYS_PROP); + } return "true".equalsIgnoreCase(injectionForceFlag) || "1".equals(injectionForceFlag); } default: @@ -172,7 +178,7 @@ static boolean getConfig(String configName) { } private static void recordInstrumentationSource(String source) { - SystemUtils.trySetProperty(LIB_INSTRUMENTATION_SOURCE_SYS_PROP, source); + SystemProperties.set(LIB_INSTRUMENTATION_SOURCE_SYS_PROP, source); } static boolean exceptionCauseChainContains(Throwable ex, String exClassName) { @@ -200,7 +206,7 @@ private static boolean alreadyInitialized() { } private static boolean isJdkTool() { - String moduleMain = SystemUtils.tryGetProperty("jdk.module.main"); + String moduleMain = SystemProperties.get("jdk.module.main"); if (null != moduleMain && !moduleMain.isEmpty() && moduleMain.charAt(0) == 'j') { switch (moduleMain) { case "java.base": // keytool @@ -352,7 +358,7 @@ private static List getAgentFilesFromVMArguments() { // - On IBM-based JDKs since at least 1.7 // This prevents custom log managers from working correctly // Use reflection to bypass the loading of the class~ - for (final String argument : CLIHelper.getVmArgs()) { + for (final String argument : JavaVirtualMachine.getVmOptions()) { if (argument.startsWith(JAVA_AGENT_ARGUMENT)) { int index = argument.indexOf('=', JAVA_AGENT_ARGUMENT.length()); String agentPathname = diff --git a/dd-java-agent/src/main/java/datadog/trace/bootstrap/SystemUtils.java b/dd-java-agent/src/main/java/datadog/trace/bootstrap/SystemUtils.java deleted file mode 100644 index 21e28cf509f..00000000000 --- a/dd-java-agent/src/main/java/datadog/trace/bootstrap/SystemUtils.java +++ /dev/null @@ -1,53 +0,0 @@ -package datadog.trace.bootstrap; - -public final class SystemUtils { - private SystemUtils() {} - - public static String tryGetEnv(String envVar) { - return getEnvOrDefault(envVar, null); - } - - public static String getEnvOrDefault(String envVar, String defaultValue) { - try { - return System.getenv(envVar); - } catch (SecurityException e) { - return defaultValue; - } - } - - public static String tryGetProperty(String property) { - try { - return System.getProperty(property); - } catch (SecurityException e) { - return null; - } - } - - public static String trySetProperty(String property, String value) { - try { - return System.setProperty(property, value); - } catch (SecurityException e) { - return null; - } - } - - public static String getPropertyOrDefault(String property, String defaultValue) { - try { - return System.getProperty(property, defaultValue); - } catch (SecurityException e) { - return defaultValue; - } - } - - private static String toEnvVar(String string) { - return string.replace('.', '_').replace('-', '_').toUpperCase(); - } - - public static String getPropertyOrEnvVar(String property) { - String envVarValue = System.getenv(toEnvVar(property)); - if (envVarValue != null) { - return envVarValue; - } - return System.getProperty(property); - } -} diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/SpockRunner.java b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/SpockRunner.java index 83bf7732644..22d038b8e15 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/SpockRunner.java +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/SpockRunner.java @@ -38,9 +38,10 @@ public class SpockRunner extends JUnitPlatform { */ public static final String[] BOOTSTRAP_PACKAGE_PREFIXES_COPY = { "datadog.slf4j", + "datadog.context", + "datadog.environment", "datadog.json", "datadog.yaml", - "datadog.context", "datadog.cli", "datadog.appsec.api", "datadog.trace.api", diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 2850bf26a59..2b08df91736 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -20,7 +20,6 @@ final class CachedData { exclude(project(':components:environment')) exclude(project(':components:json')) exclude(project(':components:yaml')) - exclude(project(':components:cli')) exclude(project(':remote-config:remote-config-api')) exclude(project(':remote-config:remote-config-core')) exclude(project(':telemetry'))