From e1aa51eefc1fce577e616c05e51b7eb0f7b2c07c Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Thu, 3 Jul 2025 15:37:10 +0200 Subject: [PATCH] feat(env): Migrate agent and instrumentations to environment component --- dd-java-agent/agent-bootstrap/build.gradle | 1 + .../java/datadog/trace/bootstrap/Agent.java | 16 +++-- .../trace/agent/tooling/AgentStrategies.java | 4 +- .../ipc/ChannelContextTest.groovy | 4 +- .../crashtracking/ScriptInitializer.java | 6 +- .../debugger/agent/CapturedSnapshotTest.java | 22 +++---- .../agent/SnapshotSerializationTest.java | 2 +- .../agent/StringTemplateBuilderTest.java | 2 +- .../ExceptionProbeInstrumentationTest.java | 2 +- .../debugger/symbol/SymDBEnablementTest.java | 4 +- .../debugger/symbol/SymbolAggregatorTest.java | 4 +- .../SymbolExtractionTransformerTest.java | 64 ++++++++++++++----- .../com/datadog/iast/util/ObjectVisitor.java | 4 +- .../trace/logging/PrintStreamWrapper.java | 4 +- .../DatadogProfilerOngoingRecording.java | 5 +- .../ddprof/DatadogProfilerControllerTest.java | 4 +- .../implementation/build.gradle | 1 + .../controller/jfr/SimpleJFRAccess.java | 6 +- .../controller/jfr/JPMSJFRAccess.java | 4 +- .../controller/jfr/JFRAccessTest.java | 8 ++- .../openjdk/JfrProfilerSettings.java | 3 +- .../controller/openjdk/OpenJdkController.java | 6 +- .../openjdk/events/SmapEntryFactory.java | 4 +- .../openjdk/OpenJdkControllerTest.java | 4 +- .../openjdk/OpenJdkOngoingRecordingTest.java | 4 +- .../openjdk/OpenJdkRecordingDataTest.java | 4 +- .../controller/ProfilerSettingsSupport.java | 6 +- .../controller/ProfilingSupport.java | 6 +- .../profiling/controller/ProfilingSystem.java | 15 +++-- .../profiling/ddprof/DatadogProfiler.java | 4 +- .../ddprof/DatadogProfilerConfig.java | 16 ++--- .../ddprof/DatadogProfilerRecordingTest.java | 8 ++- .../profiling/ddprof/DatadogProfilerTest.java | 4 +- .../profiling/uploader/util/JfrCliHelper.java | 4 +- .../uploader/ProfileUploaderTest.java | 4 +- .../uploader/util/JfrCliHelperTest.java | 4 +- .../profiling-utils/build.gradle | 2 +- .../profiling/utils/ExcludedVersions.java | 4 +- .../profiling/agent/CompositeController.java | 9 ++- .../profiling/agent/ProfilingAgent.java | 8 ++- .../tooling/profiler/EnvironmentChecker.java | 25 ++++---- ...cDisabledExceptionHandlerForkedTest.groovy | 4 +- .../test/BaseExceptionHandlerTest.groovy | 4 +- ...ptionHandlerExitOnFailureForkedTest.groovy | 4 +- .../test/ExceptionHandlerForkedTest.groovy | 4 +- .../event/data/ObjectIntrospection.java | 4 +- .../exceptions/KnownExcludesForkedTest.groovy | 4 +- .../exceptions/ExceptionHistogramTest.java | 4 +- .../server/MethodHandlersInstrumentation.java | 4 +- .../StructuredTaskScopeInstrumentation.java | 4 +- .../TaskRunnerInstrumentation.java | 4 +- .../test/groovy/QueueTimingForkedTest.groovy | 6 +- .../ByteBufferInstrumentation.java | 3 +- .../DirectByteBufferInstrumentation.java | 3 +- .../FileChannelImplInstrumentation.java | 3 +- .../DirectAllocationTrackingTest.groovy | 4 +- .../httpclient/HttpClientInstrumentation.java | 4 +- .../HttpHeadersInstrumentation.java | 4 +- .../karate/src/test/groovy/KarateTest.groovy | 4 +- .../mule4/JpmsMuleInstrumentation.java | 4 +- .../groovy/ReactorNettyHttp2ClientTest.groovy | 13 ++-- .../groovy/ReactorNettyHttpClientTest.groovy | 5 +- .../test_spark32/groovy/Spark32SqlTest.groovy | 4 +- ...bstractSparkStructuredStreamingTest.groovy | 4 +- .../spark/AbstractSparkTest.groovy | 4 +- .../VertxPostgresSqlClientForkedTest.groovy | 4 +- .../src/test/groovy/WildFlyForkedTest.groovy | 4 +- .../agent/InitializationTelemetryTest.groovy | 4 +- .../trace/agent/SecurityManagerTest.groovy | 4 +- .../trace/agent/test/utils/UnsafeUtils.java | 2 +- 70 files changed, 247 insertions(+), 187 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/build.gradle b/dd-java-agent/agent-bootstrap/build.gradle index c44c65c7669..547eadc939e 100644 --- a/dd-java-agent/agent-bootstrap/build.gradle +++ b/dd-java-agent/agent-bootstrap/build.gradle @@ -22,6 +22,7 @@ dependencies { api project(':internal-api:internal-api-9') api project(':dd-java-agent:agent-logging') api project(':dd-java-agent:agent-debugger:debugger-bootstrap') + api project(':components:environment') api project(':components:json') api libs.slf4j // ^ Generally a bad idea for libraries, but we're shadowing. diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java index 29afea7ba67..2913d27c957 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java @@ -1,8 +1,8 @@ package datadog.trace.bootstrap; +import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast; +import static datadog.environment.JavaVirtualMachine.isOracleJDK8; import static datadog.trace.api.ConfigDefaults.DEFAULT_STARTUP_LOGS_ENABLED; -import static datadog.trace.api.Platform.isJavaVersionAtLeast; -import static datadog.trace.api.Platform.isOracleJDK8; import static datadog.trace.bootstrap.Library.WILDFLY; import static datadog.trace.bootstrap.Library.detectLibraries; import static datadog.trace.util.AgentThreadFactory.AgentThread.JMX_STARTUP; @@ -12,6 +12,8 @@ import static datadog.trace.util.Strings.propertyNameToSystemPropertyName; import static datadog.trace.util.Strings.toEnvVar; +import datadog.environment.JavaVirtualMachine; +import datadog.environment.OperatingSystem; import datadog.trace.api.Config; import datadog.trace.api.Platform; import datadog.trace.api.StatsDClientManager; @@ -873,12 +875,12 @@ private static void startAppSec(SubscriptionService ss, Class scoClass, Objec private static boolean isSupportedAppSecArch() { final String arch = System.getProperty("os.arch"); - if (Platform.isWindows()) { + if (OperatingSystem.isWindows()) { // TODO: Windows bindings need to be built for x86 return "amd64".equals(arch) || "x86_64".equals(arch); - } else if (Platform.isMac()) { + } else if (OperatingSystem.isMacOs()) { return "amd64".equals(arch) || "x86_64".equals(arch) || "aarch64".equals(arch); - } else if (Platform.isLinux()) { + } else if (OperatingSystem.isLinux()) { return "amd64".equals(arch) || "x86_64".equals(arch) || "aarch64".equals(arch); } // Still return true in other if unexpected cases (e.g. SunOS), and we'll handle loading errors @@ -997,7 +999,7 @@ private static void stopTelemetry() { } private static void initializeErrorTracking() { - if (Platform.isJ9()) { + if (JavaVirtualMachine.isJ9()) { // TODO currently crash tracking is supported only for HotSpot based JVMs return; } @@ -1045,7 +1047,7 @@ public void withTracer(TracerAPI tracer) { */ private static ProfilingContextIntegration createProfilingContextIntegration() { if (Config.get().isProfilingEnabled()) { - if (Config.get().isDatadogProfilerEnabled() && !Platform.isWindows()) { + if (Config.get().isDatadogProfilerEnabled() && !OperatingSystem.isWindows()) { try { return (ProfilingContextIntegration) AGENT_CLASSLOADER diff --git a/dd-java-agent/agent-builder/src/main/java/datadog/trace/agent/tooling/AgentStrategies.java b/dd-java-agent/agent-builder/src/main/java/datadog/trace/agent/tooling/AgentStrategies.java index 23309b282a6..59a647d888a 100644 --- a/dd-java-agent/agent-builder/src/main/java/datadog/trace/agent/tooling/AgentStrategies.java +++ b/dd-java-agent/agent-builder/src/main/java/datadog/trace/agent/tooling/AgentStrategies.java @@ -1,11 +1,11 @@ package datadog.trace.agent.tooling; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.bytebuddy.DDClassFileTransformer; import datadog.trace.agent.tooling.bytebuddy.DDLocationStrategy; import datadog.trace.agent.tooling.bytebuddy.DDOutlinePoolStrategy; import datadog.trace.agent.tooling.bytebuddy.DDOutlineTypeStrategy; import datadog.trace.agent.tooling.bytebuddy.DDRediscoveryStrategy; -import datadog.trace.api.Platform; import net.bytebuddy.agent.builder.AgentBuilder.ClassFileBufferStrategy; import net.bytebuddy.agent.builder.AgentBuilder.LocationStrategy; import net.bytebuddy.agent.builder.AgentBuilder.PoolStrategy; @@ -24,7 +24,7 @@ public class AgentStrategies { private static final Logger log = LoggerFactory.getLogger(AgentStrategies.class); private static TransformerDecorator loadTransformerDecorator() { - if (Platform.isJavaVersionAtLeast(9)) { + if (JavaVirtualMachine.isJavaVersionAtLeast(9)) { try { return (TransformerDecorator) Instrumenter.class diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ipc/ChannelContextTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ipc/ChannelContextTest.groovy index 5281d6abae7..7373c89366d 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ipc/ChannelContextTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ipc/ChannelContextTest.groovy @@ -1,6 +1,6 @@ package datadog.trace.civisibility.ipc -import datadog.trace.api.Platform +import datadog.environment.JavaVirtualMachine import spock.lang.IgnoreIf import spock.lang.Specification @@ -9,7 +9,7 @@ import java.nio.channels.ByteChannel import java.util.concurrent.ThreadLocalRandom @IgnoreIf(reason = "JVM crash with OpenJ9", value = { - Platform.isJ9() + JavaVirtualMachine.isJ9() }) class ChannelContextTest extends Specification { diff --git a/dd-java-agent/agent-crashtracking/src/main/java/com/datadog/crashtracking/ScriptInitializer.java b/dd-java-agent/agent-crashtracking/src/main/java/com/datadog/crashtracking/ScriptInitializer.java index e07be4b7e3f..e0680204246 100644 --- a/dd-java-agent/agent-crashtracking/src/main/java/com/datadog/crashtracking/ScriptInitializer.java +++ b/dd-java-agent/agent-crashtracking/src/main/java/com/datadog/crashtracking/ScriptInitializer.java @@ -5,7 +5,7 @@ import static java.util.Locale.ROOT; import com.sun.management.HotSpotDiagnosticMXBean; -import datadog.trace.api.Platform; +import datadog.environment.OperatingSystem; import datadog.trace.util.PidHelper; import java.io.BufferedWriter; import java.io.IOException; @@ -36,12 +36,12 @@ public static void initialize() { } static InputStream getCrashUploaderTemplate() { - String name = Platform.isWindows() ? "upload_crash.bat" : "upload_crash.sh"; + String name = OperatingSystem.isWindows() ? "upload_crash.bat" : "upload_crash.sh"; return CrashUploader.class.getResourceAsStream(name); } static InputStream getOomeNotifierTemplate() { - String name = Platform.isWindows() ? "notify_oome.bat" : "notify_oome.sh"; + String name = OperatingSystem.isWindows() ? "notify_oome.bat" : "notify_oome.sh"; return OOMENotifier.class.getResourceAsStream(name); } diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java index 4a953082f45..92dbad9bcd9 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java @@ -622,7 +622,7 @@ public void sourceFileProbeGroovy() throws IOException, URISyntaxException { @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "Issue with J9 when compiling Kotlin code") public void sourceFileProbeKotlin() throws IOException, URISyntaxException { final String CLASS_NAME = "CapturedSnapshot301"; @@ -652,7 +652,7 @@ public void sourceFileProbeKotlin() throws IOException, URISyntaxException { @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "Issue with J9 when compiling Kotlin code") public void suspendKotlin() throws IOException, URISyntaxException { final String CLASS_NAME = "CapturedSnapshot302"; @@ -679,7 +679,7 @@ public void suspendKotlin() throws IOException, URISyntaxException { @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "Issue with J9 when compiling Kotlin code") public void suspendMethodKotlin() { final String CLASS_NAME = "CapturedSnapshot302"; @@ -712,7 +712,7 @@ public void suspendMethodKotlin() { @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "Issue with J9 when compiling Kotlin code") public void hoistVarKotlin() { final String CLASS_NAME = "CapturedSnapshot303"; @@ -1863,7 +1863,7 @@ public void evaluateAtExitFalse() throws IOException, URISyntaxException { @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "we cannot get local variable debug info") public void uncaughtExceptionConditionLocalVar() throws IOException, URISyntaxException { if (Config.get().getDynamicInstrumentationLocalVarHoistingLevel() < 2) { @@ -1901,7 +1901,7 @@ public void uncaughtExceptionConditionLocalVar() throws IOException, URISyntaxEx @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "we cannot get local variable debug info") public void uncaughtExceptionCaptureLocalVars() throws IOException, URISyntaxException { final String CLASS_NAME = "com.datadog.debugger.CapturedSnapshot31"; @@ -1925,7 +1925,7 @@ public void uncaughtExceptionCaptureLocalVars() throws IOException, URISyntaxExc @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "we cannot get local variable debug info") public void methodProbeLocalVarsLocalScopes() throws IOException, URISyntaxException { final String CLASS_NAME = "com.datadog.debugger.CapturedSnapshot31"; @@ -1942,7 +1942,7 @@ public void methodProbeLocalVarsLocalScopes() throws IOException, URISyntaxExcep @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "we cannot get local variable debug info") public void methodProbeLocalVarsDeepScopes() throws IOException, URISyntaxException { final String CLASS_NAME = "com.datadog.debugger.CapturedSnapshot31"; @@ -1974,7 +1974,7 @@ public void methodProbeLocalVarsDeepScopes() throws IOException, URISyntaxExcept @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "we cannot get local variable debug info") public void methodProbeExceptionLocalVars() throws IOException, URISyntaxException { final String CLASS_NAME = "com.datadog.debugger.CapturedSnapshot31"; @@ -2008,7 +2008,7 @@ public void methodProbeExceptionLocalVars() throws IOException, URISyntaxExcepti @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "we cannot get local variable debug info") public void overlappingLocalVarSlot() throws IOException, URISyntaxException { final String CLASS_NAME = "com.datadog.debugger.CapturedSnapshot31"; @@ -2025,7 +2025,7 @@ public void overlappingLocalVarSlot() throws IOException, URISyntaxException { @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "we cannot get local variable debug info") public void duplicateLocalDifferentScope() throws IOException, URISyntaxException { final String CLASS_NAME = "com.datadog.debugger.CapturedSnapshot31"; diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/SnapshotSerializationTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/SnapshotSerializationTest.java index 0fedeb542b2..428dc98b792 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/SnapshotSerializationTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/SnapshotSerializationTest.java @@ -104,7 +104,7 @@ public void roundTripProbeDetails() throws IOException { @Test @EnabledForJreRange(min = JRE.JAVA_17) - @DisabledIf("datadog.trace.api.Platform#isJ9") + @DisabledIf("datadog.environment.JavaVirtualMachine#isJ9") public void roundTripCapturedValue() throws IOException, URISyntaxException { JsonAdapter adapter = createSnapshotAdapter(); Snapshot snapshot = createSnapshot(); diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/StringTemplateBuilderTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/StringTemplateBuilderTest.java index 6644de12af4..3b704d38381 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/StringTemplateBuilderTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/StringTemplateBuilderTest.java @@ -227,7 +227,7 @@ public void argComplexObjectArrayTemplate() { @Test @EnabledForJreRange(min = JRE.JAVA_17) - @DisabledIf("datadog.trace.api.Platform#isJ9") + @DisabledIf("datadog.environment.JavaVirtualMachine#isJ9") public void argInaccessibleFieldTemplate() { LogProbe probe = createLogProbe("{obj}"); StringTemplateBuilder summaryBuilder = new StringTemplateBuilder(probe.getSegments(), LIMITS); diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/exception/ExceptionProbeInstrumentationTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/exception/ExceptionProbeInstrumentationTest.java index ed7500e0819..f5266fc8d5f 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/exception/ExceptionProbeInstrumentationTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/exception/ExceptionProbeInstrumentationTest.java @@ -208,7 +208,7 @@ public void differentExceptionsSameStack() throws Exception { @Test @DisabledIf( - value = "datadog.trace.api.Platform#isJ9", + value = "datadog.environment.JavaVirtualMachine#isJ9", disabledReason = "Bug in J9: no LocalVariableTable for ClassFileTransformer") public void recursive() throws Exception { Config config = createConfig(); diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymDBEnablementTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymDBEnablementTest.java index 547c525d63e..22a46804339 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymDBEnablementTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymDBEnablementTest.java @@ -163,7 +163,9 @@ public void parseLoadedClassFromDirectory() } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void noDuplicateSymbolExtraction() { final String CLASS_NAME_PATH = "com/datadog/debugger/symbol/SymbolExtraction01"; SymbolSink mockSymbolSink = mock(SymbolSink.class); diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymbolAggregatorTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymbolAggregatorTest.java index cbd3c82df52..5ac2455b7d9 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymbolAggregatorTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymbolAggregatorTest.java @@ -47,7 +47,9 @@ void testScanQueuedJars() { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") void testScopeFilter() { ScopeFilter mockFilter = mock(ScopeFilter.class); when(mockFilter.filterOut(any())).thenReturn(true); diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymbolExtractionTransformerTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymbolExtractionTransformerTest.java index 26a30d412f5..a09e1eb30b6 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymbolExtractionTransformerTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/symbol/SymbolExtractionTransformerTest.java @@ -58,7 +58,9 @@ public void setUp() { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction01() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction01"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction01.java"; @@ -123,7 +125,9 @@ public void symbolExtraction01() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction02() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction02"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction02.java"; @@ -150,7 +154,9 @@ public void symbolExtraction02() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction03() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction03"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction03.java"; @@ -217,7 +223,9 @@ public void symbolExtraction03() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction04() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction04"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction04.java"; @@ -288,7 +296,9 @@ public void symbolExtraction04() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction05() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction05"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction05.java"; @@ -333,7 +343,9 @@ public void symbolExtraction05() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction06() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction06"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction06.java"; @@ -378,7 +390,9 @@ public void symbolExtraction06() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction07() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction07"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction07.java"; @@ -409,7 +423,9 @@ public void symbolExtraction07() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction08() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction08"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction08.java"; @@ -442,7 +458,9 @@ public void symbolExtraction08() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction09() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction09"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction09.java"; @@ -533,7 +551,9 @@ public void symbolExtraction09() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction10() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction10"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction10.java"; @@ -583,7 +603,9 @@ public void symbolExtraction10() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction11() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction11"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction11.java"; @@ -616,7 +638,9 @@ public void symbolExtraction11() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction12() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction12"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction12.java"; @@ -689,7 +713,9 @@ public void symbolExtraction12() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction13() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction13"; SymbolSinkMock symbolSinkMock = new SymbolSinkMock(config); @@ -751,7 +777,9 @@ public void symbolExtraction13() throws IOException, URISyntaxException { } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction14() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction14"; SymbolSinkMock symbolSinkMock = new SymbolSinkMock(config); @@ -829,7 +857,9 @@ public void symbolExtraction14() throws IOException, URISyntaxException { @Test @EnabledOnJre({JRE.JAVA_17, JRE.JAVA_21}) - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void symbolExtraction15() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction15"; final String SOURCE_FILE = SYMBOL_PACKAGE_DIR + "SymbolExtraction15.java"; @@ -901,7 +931,9 @@ public void filterOutClassesFromExcludedPackages() throws IOException, URISyntax } @Test - @DisabledIf(value = "datadog.trace.api.Platform#isJ9", disabledReason = "Flaky on J9 JVMs") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") public void duplicateClassThroughDifferentClassLoader() throws IOException, URISyntaxException { final String CLASS_NAME = SYMBOL_PACKAGE + "SymbolExtraction01"; SymbolSinkMock symbolSinkMock = new SymbolSinkMock(config); diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/util/ObjectVisitor.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/util/ObjectVisitor.java index db65fed83c2..66cc4073ef3 100644 --- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/util/ObjectVisitor.java +++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/util/ObjectVisitor.java @@ -3,7 +3,7 @@ import static com.datadog.iast.util.ObjectVisitor.State.CONTINUE; import static com.datadog.iast.util.ObjectVisitor.State.EXIT; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -198,7 +198,7 @@ private static boolean inspectField(final Field field) { @Nullable private static Method fetchTrySetAccessibleMethod() { Method method = null; - if (Platform.isJavaVersionAtLeast(9)) { + if (JavaVirtualMachine.isJavaVersionAtLeast(9)) { try { method = Field.class.getMethod("trySetAccessible"); } catch (NoSuchMethodException e) { diff --git a/dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/PrintStreamWrapper.java b/dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/PrintStreamWrapper.java index 1774458e342..133572eff34 100644 --- a/dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/PrintStreamWrapper.java +++ b/dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/PrintStreamWrapper.java @@ -1,6 +1,6 @@ package datadog.trace.logging; -import datadog.trace.api.Platform; +import datadog.environment.OperatingSystem; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStream; @@ -8,7 +8,7 @@ import java.nio.file.Path; public class PrintStreamWrapper extends PrintStream { - private static final int LINE_SEPARATOR_LENGTH = Platform.isWindows() ? 2 : 1; + private static final int LINE_SEPARATOR_LENGTH = OperatingSystem.isWindows() ? 2 : 1; private volatile boolean captureOutput = false; private volatile int currentSize = 0; private PrintStream capturingStream = null; diff --git a/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/main/java/com/datadog/profiling/controller/ddprof/DatadogProfilerOngoingRecording.java b/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/main/java/com/datadog/profiling/controller/ddprof/DatadogProfilerOngoingRecording.java index 1d61e984768..7976f7f81a9 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/main/java/com/datadog/profiling/controller/ddprof/DatadogProfilerOngoingRecording.java +++ b/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/main/java/com/datadog/profiling/controller/ddprof/DatadogProfilerOngoingRecording.java @@ -19,7 +19,7 @@ import com.datadog.profiling.controller.ProfilerSettingsSupport; import com.datadog.profiling.controller.UnsupportedEnvironmentException; import com.datadog.profiling.ddprof.DatadogProfiler; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.ProfilingSnapshot; import datadog.trace.api.profiling.RecordingData; import java.time.Instant; @@ -42,7 +42,8 @@ public class DatadogProfilerOngoingRecording implements OngoingRecording { throw new UnsupportedEnvironmentException("Failed to start Datadog profiler"); } log.debug("Recording {} started", recordingName); - this.configMemento = Platform.isJ9() ? new DatadogProfilerSettings(datadogProfiler) : null; + this.configMemento = + JavaVirtualMachine.isJ9() ? new DatadogProfilerSettings(datadogProfiler) : null; } @Override diff --git a/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/test/java/com/datadog/profiling/controller/ddprof/DatadogProfilerControllerTest.java b/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/test/java/com/datadog/profiling/controller/ddprof/DatadogProfilerControllerTest.java index d7f39832a91..40a793cf59b 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/test/java/com/datadog/profiling/controller/ddprof/DatadogProfilerControllerTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/test/java/com/datadog/profiling/controller/ddprof/DatadogProfilerControllerTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import com.datadog.profiling.controller.ControllerContext; -import datadog.trace.api.Platform; +import datadog.environment.OperatingSystem; import datadog.trace.api.profiling.RecordingData; import datadog.trace.bootstrap.config.provider.ConfigProvider; import java.util.Properties; @@ -20,7 +20,7 @@ public class DatadogProfilerControllerTest { @Test public void testCreateContinuousRecording() throws Exception { - Assume.assumeTrue(Platform.isLinux()); + Assume.assumeTrue(OperatingSystem.isLinux()); Properties props = new Properties(); props.put(PROFILING_AUXILIARY_TYPE, "ddprof"); ConfigProvider configProvider = ConfigProvider.withPropertiesOverride(props); diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle index 6ccd08bc284..ae068359356 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle @@ -26,6 +26,7 @@ dependencies { api project(':dd-java-agent:agent-profiling:profiling-controller-jfr') main_java11CompileOnly project(':dd-java-agent:agent-profiling:profiling-controller-jfr') + implementation project(':components:environment') implementation libs.slf4j testImplementation libs.bundles.mockito diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/main/java/com/datadog/profiling/controller/jfr/SimpleJFRAccess.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/main/java/com/datadog/profiling/controller/jfr/SimpleJFRAccess.java index 95ea50d41af..df1bfdc359e 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/main/java/com/datadog/profiling/controller/jfr/SimpleJFRAccess.java +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/main/java/com/datadog/profiling/controller/jfr/SimpleJFRAccess.java @@ -1,6 +1,6 @@ package com.datadog.profiling.controller.jfr; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import java.lang.instrument.Instrumentation; import jdk.jfr.internal.JVM; import jdk.jfr.internal.Repository; @@ -14,11 +14,11 @@ public class SimpleJFRAccess extends JFRAccess { public static class FactoryImpl implements JFRAccess.Factory { @Override public JFRAccess create(Instrumentation inst) { - if (Platform.isJavaVersion(8)) { + if (JavaVirtualMachine.isJavaVersion(8)) { // if running on Java 8 return either SimpleJFRAccess or NOOP // J9 and Oracle JDK 8 do not contain the required classes and methods to set the stackdepth // programmatically - return !Platform.isJ9() && !Platform.isOracleJDK8() + return !JavaVirtualMachine.isJ9() && !JavaVirtualMachine.isOracleJDK8() ? new SimpleJFRAccess() : JFRAccess.NOOP; } diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/main/java11/com/datadog/profiling/controller/jfr/JPMSJFRAccess.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/main/java11/com/datadog/profiling/controller/jfr/JPMSJFRAccess.java index 03690412043..54bd992e0f8 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/main/java11/com/datadog/profiling/controller/jfr/JPMSJFRAccess.java +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/main/java11/com/datadog/profiling/controller/jfr/JPMSJFRAccess.java @@ -1,6 +1,6 @@ package com.datadog.profiling.controller.jfr; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import java.lang.instrument.Instrumentation; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; @@ -24,7 +24,7 @@ public static final class FactoryImpl implements JFRAccess.Factory { @Override public JFRAccess create(Instrumentation inst) { - if (!Platform.isJ9() && Platform.isJavaVersionAtLeast(9)) { + if (!JavaVirtualMachine.isJ9() && JavaVirtualMachine.isJavaVersionAtLeast(9)) { try { return new JPMSJFRAccess(inst); } catch (Exception e) { diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/test/java/com/datadog/profiling/controller/jfr/JFRAccessTest.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/test/java/com/datadog/profiling/controller/jfr/JFRAccessTest.java index ca3549752f9..95d20bcda23 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/test/java/com/datadog/profiling/controller/jfr/JFRAccessTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/src/test/java/com/datadog/profiling/controller/jfr/JFRAccessTest.java @@ -1,10 +1,12 @@ package com.datadog.profiling.controller.jfr; +import static datadog.environment.JavaVirtualMachine.isJ9; +import static datadog.environment.JavaVirtualMachine.isJavaVersion; +import static datadog.environment.JavaVirtualMachine.isOracleJDK8; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assumptions.assumeTrue; -import datadog.trace.api.Platform; import org.junit.jupiter.api.Test; public class JFRAccessTest { @@ -12,7 +14,7 @@ public class JFRAccessTest { void testJava8JFRAccess() { // For Java 9 and above, the JFR access requires instrumentation in order to patch the module // access - assumeTrue(Platform.isJavaVersion(8) && !Platform.isJ9() && !Platform.isOracleJDK8()); + assumeTrue(isJavaVersion(8) && !isJ9() && !isOracleJDK8()); // just do a sanity check that it is possible to instantiate the class and call // 'setStackDepth()' @@ -22,7 +24,7 @@ void testJava8JFRAccess() { @Test void testJ9JFRAccess() { - assumeTrue(Platform.isJ9()); + assumeTrue(isJ9()); // need to run a bogus setup first JFRAccess.setup(null); diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/JfrProfilerSettings.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/JfrProfilerSettings.java index 563c1692aba..0ffa1c2e1b8 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/JfrProfilerSettings.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/JfrProfilerSettings.java @@ -2,6 +2,7 @@ import com.datadog.profiling.controller.ProfilerSettingsSupport; import com.datadog.profiling.controller.openjdk.events.ProfilerSettingEvent; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.Platform; import datadog.trace.bootstrap.config.provider.ConfigProvider; @@ -22,7 +23,7 @@ public JfrProfilerSettings( this.jfrImplementation = Platform.isNativeImage() ? "native-image" - : (Platform.isOracleJDK8() ? "oracle" : "openjdk"); + : (JavaVirtualMachine.isOracleJDK8() ? "oracle" : "openjdk"); } public void publish() { diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/OpenJdkController.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/OpenJdkController.java index bc441e3cebf..42b90b5eac9 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/OpenJdkController.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/OpenJdkController.java @@ -16,7 +16,7 @@ package com.datadog.profiling.controller.openjdk; import static com.datadog.profiling.controller.ProfilingSupport.*; -import static datadog.trace.api.Platform.isJavaVersionAtLeast; +import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast; import static datadog.trace.api.config.ProfilingConfig.PROFILING_HEAP_HISTOGRAM_ENABLED; import static datadog.trace.api.config.ProfilingConfig.PROFILING_HEAP_HISTOGRAM_ENABLED_DEFAULT; import static datadog.trace.api.config.ProfilingConfig.PROFILING_HEAP_HISTOGRAM_MODE; @@ -34,8 +34,8 @@ import com.datadog.profiling.controller.jfr.JFRAccess; import com.datadog.profiling.controller.jfr.JfpUtils; import com.datadog.profiling.controller.openjdk.events.AvailableProcessorCoresEvent; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.Config; -import datadog.trace.api.Platform; import datadog.trace.api.config.ProfilingConfig; import datadog.trace.bootstrap.config.provider.ConfigProvider; import datadog.trace.bootstrap.instrumentation.jfr.backpressure.BackpressureProfiling; @@ -61,7 +61,7 @@ public final class OpenJdkController implements Controller { private static final String EXPLICITLY_DISABLED = "explicitly disabled by user"; private static final String EXPLICITLY_ENABLED = "explicitly enabled by user"; private static final String EXPENSIVE_ON_CURRENT_JVM = - "expensive on this version of the JVM (" + Platform.getRuntimeVersion() + ")"; + "expensive on this version of the JVM (" + JavaVirtualMachine.getRuntimeVersion() + ")"; static final Duration RECORDING_MAX_AGE = Duration.ofMinutes(5); private final ConfigProvider configProvider; diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryFactory.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryFactory.java index bcf0f930dde..97185a5d9a2 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryFactory.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryFactory.java @@ -1,6 +1,6 @@ package com.datadog.profiling.controller.openjdk.events; -import datadog.trace.api.Platform; +import datadog.environment.OperatingSystem; import datadog.trace.bootstrap.instrumentation.jfr.JfrHelper; import de.thetaphi.forbiddenapis.SuppressForbidden; import java.io.BufferedReader; @@ -57,7 +57,7 @@ public SmapParseErrorEvent(ErrorReason reason) { public static void registerEvents() { // Make sure the periodic event is registered only once - if (REGISTERED.compareAndSet(false, true) && Platform.isLinux()) { + if (REGISTERED.compareAndSet(false, true) && OperatingSystem.isLinux()) { // Only one of these should ever be enabled at the same time JfrHelper.addPeriodicEvent(SmapEntryEvent.class, SmapEntryEvent::emit); JfrHelper.addPeriodicEvent(AggregatedSmapEntryEvent.class, AggregatedSmapEntryEvent::emit); diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java index 4fc88a28aee..3d90c346417 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java @@ -16,7 +16,7 @@ import com.datadog.profiling.controller.ControllerContext; import com.datadog.profiling.controller.jfr.JfpUtilsTest; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.RecordingData; import datadog.trace.bootstrap.config.provider.ConfigProvider; import java.util.Properties; @@ -33,7 +33,7 @@ public class OpenJdkControllerTest { @BeforeAll static void setupSpec() { - assumeFalse(Platform.isJ9()); + assumeFalse(JavaVirtualMachine.isJ9()); } @Test diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkOngoingRecordingTest.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkOngoingRecordingTest.java index 252ac8d8a6a..d389b75b51e 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkOngoingRecordingTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkOngoingRecordingTest.java @@ -7,7 +7,7 @@ import static org.mockito.Mockito.when; import com.datadog.profiling.controller.ControllerContext; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.RecordingData; import java.time.Instant; import jdk.jfr.Recording; @@ -36,7 +36,7 @@ public class OpenJdkOngoingRecordingTest { @BeforeEach public void setup() { - assumeFalse(Platform.isJ9()); + assumeFalse(JavaVirtualMachine.isJ9()); when(recording.getState()).thenReturn(RecordingState.RUNNING); when(recording.getName()).thenReturn(TEST_NAME); diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkRecordingDataTest.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkRecordingDataTest.java index 7eb8c9cd17b..a982abac612 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkRecordingDataTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkRecordingDataTest.java @@ -8,7 +8,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.ProfilingSnapshot; import java.io.IOException; import java.io.InputStream; @@ -44,7 +44,7 @@ public class OpenJdkRecordingDataTest { @BeforeEach public void setup() throws IOException { - assumeFalse(Platform.isJ9()); + assumeFalse(JavaVirtualMachine.isJ9()); when(recording.getStream(start, end)).thenReturn(stream); when(recording.getStream(customStart, customEnd)).thenReturn(customStream); when(recording.getStartTime()).thenReturn(start); diff --git a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilerSettingsSupport.java b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilerSettingsSupport.java index fa45acd9581..7de85812bf8 100644 --- a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilerSettingsSupport.java +++ b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilerSettingsSupport.java @@ -2,8 +2,8 @@ import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY; +import datadog.environment.OperatingSystem; import datadog.trace.api.Config; -import datadog.trace.api.Platform; import datadog.trace.api.config.ProfilingConfig; import datadog.trace.api.profiling.ProfilingEnablement; import datadog.trace.bootstrap.config.provider.ConfigProvider; @@ -206,7 +206,7 @@ static ProfilerActivationSetting getProfilerActivation(ConfigProvider configProv private String getSELinuxStatus() { String value = "Not present"; - if (Platform.isLinux()) { + if (OperatingSystem.isLinux()) { try (final TraceScope scope = AgentTracer.get().muteTracing()) { ProcessBuilder pb = new ProcessBuilder("getenforce"); Process process = pb.start(); @@ -247,7 +247,7 @@ private static String getDefaultAuxiliaryProfiler() { private static String readPerfEventsParanoidSetting() { String value = "unknown"; - if (Platform.isLinux()) { + if (OperatingSystem.isLinux()) { Path perfEventsParanoid = Paths.get("/proc/sys/kernel/perf_event_paranoid"); try { if (Files.exists(perfEventsParanoid)) { diff --git a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilingSupport.java b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilingSupport.java index 5e04651f115..cac2a4c506f 100644 --- a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilingSupport.java +++ b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilingSupport.java @@ -1,8 +1,8 @@ package com.datadog.profiling.controller; -import static datadog.trace.api.Platform.isJavaVersion; -import static datadog.trace.api.Platform.isJavaVersionAtLeast; -import static datadog.trace.api.Platform.isOracleJDK8; +import static datadog.environment.JavaVirtualMachine.isJavaVersion; +import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast; +import static datadog.environment.JavaVirtualMachine.isOracleJDK8; public class ProfilingSupport { diff --git a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilingSystem.java b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilingSystem.java index 627c2747438..d1d7bfd8c99 100644 --- a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilingSystem.java +++ b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/ProfilingSystem.java @@ -15,10 +15,13 @@ */ package com.datadog.profiling.controller; +import static datadog.environment.OperatingSystem.isLinux; +import static datadog.environment.OperatingSystem.isMacOs; +import static datadog.environment.OperatingSystem.isWindows; import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY; import static datadog.trace.util.AgentThreadFactory.AgentThread.PROFILER_RECORDING_SCHEDULER; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.ProfilingSnapshot; import datadog.trace.api.profiling.RecordingData; import datadog.trace.api.profiling.RecordingDataListener; @@ -164,12 +167,10 @@ private void startProfilingRecording() { SEND_TELEMETRY, "Datadog Profiling was enabled on an unsupported JVM, will not profile application. " + "(OS: {}, JVM: lang={}, runtime={}, vendor={}) See {} for more details about supported JVMs.", - Platform.isLinux() - ? "Linux" - : Platform.isWindows() ? "Windows" : Platform.isMac() ? "MacOS" : "Other", - Platform.getLangVersion(), - Platform.getRuntimeVersion(), - Platform.getRuntimeVendor(), + isLinux() ? "Linux" : isWindows() ? "Windows" : isMacOs() ? "MacOS" : "Other", + JavaVirtualMachine.getLangVersion(), + JavaVirtualMachine.getRuntimeVersion(), + JavaVirtualMachine.getRuntimeVendor(), "https://docs.datadoghq.com/profiler/enabling/java/?tab=commandarguments#requirements"); } catch (Throwable t) { if (t instanceof RuntimeException) { diff --git a/dd-java-agent/agent-profiling/profiling-ddprof/src/main/java/com/datadog/profiling/ddprof/DatadogProfiler.java b/dd-java-agent/agent-profiling/profiling-ddprof/src/main/java/com/datadog/profiling/ddprof/DatadogProfiler.java index 21aa4564d58..343b659f53c 100644 --- a/dd-java-agent/agent-profiling/profiling-ddprof/src/main/java/com/datadog/profiling/ddprof/DatadogProfiler.java +++ b/dd-java-agent/agent-profiling/profiling-ddprof/src/main/java/com/datadog/profiling/ddprof/DatadogProfiler.java @@ -37,7 +37,7 @@ import com.datadog.profiling.utils.ProfilingMode; import com.datadoghq.profiler.ContextSetter; import com.datadoghq.profiler.JavaProfiler; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.config.ProfilingConfig; import datadog.trace.api.profiling.RecordingData; import datadog.trace.bootstrap.config.provider.ConfigProvider; @@ -287,7 +287,7 @@ String cmdStartProfiling(Path file) throws IllegalStateException { } else { // using cpu time schedule int interval = getCpuInterval(); - if (Platform.isJ9()) + if (JavaVirtualMachine.isJ9()) interval = interval == ProfilingConfig.PROFILING_DATADOG_PROFILER_CPU_INTERVAL_DEFAULT ? ProfilingConfig.PROFILING_DATADOG_PROFILER_J9_CPU_INTERVAL_DEFAULT diff --git a/dd-java-agent/agent-profiling/profiling-ddprof/src/main/java/com/datadog/profiling/ddprof/DatadogProfilerConfig.java b/dd-java-agent/agent-profiling/profiling-ddprof/src/main/java/com/datadog/profiling/ddprof/DatadogProfilerConfig.java index 5a9b73afda3..0a778c03475 100644 --- a/dd-java-agent/agent-profiling/profiling-ddprof/src/main/java/com/datadog/profiling/ddprof/DatadogProfilerConfig.java +++ b/dd-java-agent/agent-profiling/profiling-ddprof/src/main/java/com/datadog/profiling/ddprof/DatadogProfilerConfig.java @@ -1,6 +1,6 @@ package com.datadog.profiling.ddprof; -import static datadog.trace.api.Platform.isJ9; +import static datadog.environment.JavaVirtualMachine.isJ9; import static datadog.trace.api.config.ProfilingConfig.PROFILING_ALLOCATION_ENABLED; import static datadog.trace.api.config.ProfilingConfig.PROFILING_CONTEXT_ATTRIBUTES; import static datadog.trace.api.config.ProfilingConfig.PROFILING_CONTEXT_ATTRIBUTES_RESOURCE_NAME_ENABLED; @@ -54,7 +54,7 @@ import static datadog.trace.api.config.ProfilingConfig.PROFILING_ULTRA_MINIMAL; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.config.ProfilingConfig; import datadog.trace.bootstrap.config.provider.ConfigProvider; import java.lang.management.ManagementFactory; @@ -151,20 +151,20 @@ public static boolean getWallContextFilter(ConfigProvider configProvider) { private static boolean isJmethodIDSafe() { // see https://bugs.openjdk.org/browse/JDK-8313816 - if (Platform.isJavaVersionAtLeast(22)) { + if (JavaVirtualMachine.isJavaVersionAtLeast(22)) { // any version after 22 should be safe return true; } - switch (Platform.getLangVersion()) { + switch (JavaVirtualMachine.getLangVersion()) { case "8": // Java 8 is not affected by the jmethodID issue return true; case "11": - return Platform.isJavaVersionAtLeast(11, 0, 23); + return JavaVirtualMachine.isJavaVersionAtLeast(11, 0, 23); case "17": - return Platform.isJavaVersionAtLeast(17, 0, 11); + return JavaVirtualMachine.isJavaVersionAtLeast(17, 0, 11); case "21": - return Platform.isJavaVersionAtLeast(21, 0, 3); + return JavaVirtualMachine.isJavaVersionAtLeast(21, 0, 3); default: // any other non-LTS version should be considered unsafe return false; @@ -173,7 +173,7 @@ private static boolean isJmethodIDSafe() { public static boolean isAllocationProfilingEnabled(ConfigProvider configProvider) { // JVMTI Allocation Sampler is available since Java 11 - if (Platform.isJavaVersionAtLeast(11)) { + if (JavaVirtualMachine.isJavaVersionAtLeast(11)) { boolean dflt = isJmethodIDSafe(); boolean enableDdprofAlloc = getBoolean( diff --git a/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerRecordingTest.java b/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerRecordingTest.java index 00afb2899c7..182bce51fb8 100644 --- a/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerRecordingTest.java +++ b/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerRecordingTest.java @@ -1,8 +1,10 @@ package com.datadog.profiling.ddprof; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; -import datadog.trace.api.Platform; +import datadog.environment.OperatingSystem; import datadog.trace.api.profiling.RecordingData; import datadog.trace.bootstrap.config.provider.ConfigProvider; import java.io.InputStream; @@ -20,7 +22,7 @@ class DatadogProfilerRecordingTest { @BeforeEach void setup() throws Exception { - Assume.assumeTrue(Platform.isLinux()); + Assume.assumeTrue(OperatingSystem.isLinux()); Assume.assumeNoException("Profiler not available", JavaProfilerLoader.REASON_NOT_LOADED); profiler = DatadogProfiler.newInstance(ConfigProvider.getInstance()); Assume.assumeFalse(profiler.isActive()); diff --git a/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerTest.java b/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerTest.java index ae144425ca5..94b6065ef69 100644 --- a/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerTest.java +++ b/dd-java-agent/agent-profiling/profiling-ddprof/src/test/java/com/datadog/profiling/ddprof/DatadogProfilerTest.java @@ -8,7 +8,7 @@ import com.datadog.profiling.controller.OngoingRecording; import com.datadog.profiling.controller.UnsupportedEnvironmentException; import com.datadog.profiling.utils.ProfilingMode; -import datadog.trace.api.Platform; +import datadog.environment.OperatingSystem; import datadog.trace.api.config.ProfilingConfig; import datadog.trace.api.profiling.ProfilingScope; import datadog.trace.api.profiling.RecordingData; @@ -38,7 +38,7 @@ class DatadogProfilerTest { @BeforeEach public void setup() { - Assumptions.assumeTrue(Platform.isLinux()); + Assumptions.assumeTrue(OperatingSystem.isLinux()); } @Test diff --git a/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/util/JfrCliHelper.java b/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/util/JfrCliHelper.java index 2178e486052..0781bd5f183 100644 --- a/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/util/JfrCliHelper.java +++ b/dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/util/JfrCliHelper.java @@ -2,7 +2,7 @@ import static datadog.trace.util.AgentThreadFactory.AgentThread.PROFILER_HTTP_DISPATCHER; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.RecordingData; import datadog.trace.relocate.api.IOLogger; import datadog.trace.util.AgentThreadFactory; @@ -45,7 +45,7 @@ public static void invokeOn(final RecordingData data, final IOLogger ioLogger) { File tmp = null; try { Path jfr = Paths.get(System.getProperty("java.home"), "bin", "jfr"); - if (Platform.isJ9() || !Files.exists(jfr)) { + if (JavaVirtualMachine.isJ9() || !Files.exists(jfr)) { ioLogger.error("Failed to gather information on recording, can't find `jfr`"); return; } diff --git a/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ProfileUploaderTest.java b/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ProfileUploaderTest.java index 77bae0a272e..c65c605c17c 100644 --- a/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ProfileUploaderTest.java +++ b/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ProfileUploaderTest.java @@ -40,9 +40,9 @@ import com.google.common.collect.ImmutableMap; import com.google.common.io.ByteStreams; import datadog.common.version.VersionInfo; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.Config; import datadog.trace.api.DDTags; -import datadog.trace.api.Platform; import datadog.trace.api.ProcessTags; import datadog.trace.api.profiling.ProfilingSnapshot; import datadog.trace.api.profiling.RecordingData; @@ -568,7 +568,7 @@ public void test413Response() throws Exception { // J9 has 'almost' implemented JFR, but not really // we need to skip this part for J9 - if (!Platform.isJ9() + if (!JavaVirtualMachine.isJ9() && Files.exists(Paths.get(System.getProperty("java.home"), "bin", "jfr"))) { verify(ioLogger) .error( diff --git a/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/util/JfrCliHelperTest.java b/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/util/JfrCliHelperTest.java index 7c1faa3695d..a09c220c783 100644 --- a/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/util/JfrCliHelperTest.java +++ b/dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/util/JfrCliHelperTest.java @@ -9,7 +9,7 @@ import static org.mockito.Mockito.when; import static org.mockito.Mockito.withSettings; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.RecordingData; import datadog.trace.api.profiling.RecordingInputStream; import datadog.trace.relocate.api.IOLogger; @@ -48,7 +48,7 @@ public class JfrCliHelperTest { public void testInvokeOn() throws Exception { // J9 may have 'jfr' command present but it requires additional setup // Currently we don't support J9 JFR so we can safely skip this test - Assumptions.assumeFalse(Platform.isJ9()); + Assumptions.assumeFalse(JavaVirtualMachine.isJ9()); final RecordingData recording = mockRecordingData(); JfrCliHelper.invokeOn(recording, ioLogger); diff --git a/dd-java-agent/agent-profiling/profiling-utils/build.gradle b/dd-java-agent/agent-profiling/profiling-utils/build.gradle index e482421df9e..996c66f9ff5 100644 --- a/dd-java-agent/agent-profiling/profiling-utils/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-utils/build.gradle @@ -10,7 +10,7 @@ excludedClassesCoverage += [// an enum with no additional functionality 'com.datadog.profiling.utils.ProfilingMode',] dependencies { - api project(':internal-api') + implementation project(':components:environment') implementation libs.slf4j testImplementation libs.bundles.junit5 diff --git a/dd-java-agent/agent-profiling/profiling-utils/src/main/java/com/datadog/profiling/utils/ExcludedVersions.java b/dd-java-agent/agent-profiling/profiling-utils/src/main/java/com/datadog/profiling/utils/ExcludedVersions.java index 6fd2207fce4..30e5567eb21 100644 --- a/dd-java-agent/agent-profiling/profiling-utils/src/main/java/com/datadog/profiling/utils/ExcludedVersions.java +++ b/dd-java-agent/agent-profiling/profiling-utils/src/main/java/com/datadog/profiling/utils/ExcludedVersions.java @@ -1,6 +1,8 @@ package com.datadog.profiling.utils; -import static datadog.trace.api.Platform.*; +import static datadog.environment.JavaVirtualMachine.getRuntimeVersion; +import static datadog.environment.JavaVirtualMachine.isJavaVersion; +import static datadog.environment.JavaVirtualMachine.isJavaVersionBetween; public class ExcludedVersions { diff --git a/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java b/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java index 4ba800d152c..4217636d078 100644 --- a/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java +++ b/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java @@ -1,5 +1,7 @@ package com.datadog.profiling.agent; +import static datadog.environment.OperatingSystem.isLinux; +import static datadog.environment.OperatingSystem.isMacOs; import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY; import com.datadog.profiling.controller.Controller; @@ -11,6 +13,7 @@ import com.datadog.profiling.controller.oracle.OracleJdkController; import com.datadog.profiling.ddprof.Arch; import com.datadog.profiling.ddprof.OperatingSystem; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.Config; import datadog.trace.api.Platform; import datadog.trace.api.config.ProfilingConfig; @@ -140,7 +143,7 @@ private static T first(List list) { public static Controller build(ConfigProvider provider, ControllerContext context) throws UnsupportedEnvironmentException { List controllers = new ArrayList<>(); - boolean isOracleJDK8 = Platform.isOracleJDK8(); + boolean isOracleJDK8 = JavaVirtualMachine.isOracleJDK8(); boolean isDatadogProfilerEnabled = Config.get().isDatadogProfilerEnabled(); boolean isJfrEnabled = !provider.getBoolean(ProfilingConfig.PROFILING_DEBUG_JFR_DISABLED, false); @@ -174,7 +177,7 @@ public static Controller build(ConfigProvider provider, ControllerContext contex } // Datadog profiler is not supported in native-image mode or on Windows, so don't try to // instantiate it - if ((Platform.isLinux() || Platform.isMac()) + if ((isLinux() || isMacOs()) && isDatadogProfilerEnabled && !(Platform.isNativeImageBuilder() || Platform.isNativeImage())) { try { @@ -201,7 +204,7 @@ public static Controller build(ConfigProvider provider, ControllerContext contex } } } else { - if (!(Platform.isLinux() || Platform.isMac())) { + if (!(isLinux() || isMacOs())) { context.setDatadogProfilerUnavailableReason("unavailable on OS"); } else if (Platform.isNativeImageBuilder() || Platform.isNativeImage()) { context.setDatadogProfilerUnavailableReason("unavailable on GraalVM"); diff --git a/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/ProfilingAgent.java b/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/ProfilingAgent.java index 782b4d140d9..73582df86c4 100644 --- a/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/ProfilingAgent.java +++ b/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/ProfilingAgent.java @@ -1,5 +1,7 @@ package com.datadog.profiling.agent; +import static datadog.environment.JavaVirtualMachine.isJavaVersion; +import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast; import static datadog.trace.api.config.ProfilingConfig.PROFILING_START_FORCE_FIRST; import static datadog.trace.api.config.ProfilingConfig.PROFILING_START_FORCE_FIRST_DEFAULT; import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY; @@ -177,9 +179,9 @@ public static synchronized void run( } private static boolean isStartForceFirstSafe() { - return Platform.isJavaVersionAtLeast(14) - || (Platform.isJavaVersion(13) && Platform.isJavaVersionAtLeast(13, 0, 4)) - || (Platform.isJavaVersion(11) && Platform.isJavaVersionAtLeast(11, 0, 8)); + return isJavaVersionAtLeast(14) + || (isJavaVersion(13) && isJavaVersionAtLeast(13, 0, 4)) + || (isJavaVersion(11) && isJavaVersionAtLeast(11, 0, 8)); } public static void shutdown() { diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/profiler/EnvironmentChecker.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/profiler/EnvironmentChecker.java index 645cb77538c..f2dbb165a80 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/profiler/EnvironmentChecker.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/profiler/EnvironmentChecker.java @@ -1,6 +1,7 @@ package datadog.trace.agent.tooling.profiler; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; +import datadog.environment.OperatingSystem; import de.thetaphi.forbiddenapis.SuppressForbidden; import java.io.File; import java.io.IOException; @@ -19,13 +20,13 @@ public final class EnvironmentChecker { @SuppressForbidden public static boolean checkEnvironment(String temp) { - if (!Platform.isJavaVersionAtLeast(8)) { + if (!JavaVirtualMachine.isJavaVersionAtLeast(8)) { System.out.println("Profiler requires Java 8 or newer"); return false; } System.out.println( "Using Java version: " - + Platform.getRuntimeVersion() + + JavaVirtualMachine.getRuntimeVersion() + " (" + System.getProperty("java.home") + ")"); @@ -56,26 +57,27 @@ public static boolean checkEnvironment(String temp) { @SuppressForbidden private static boolean checkJFR() { - if (Platform.isOracleJDK8()) { + if (JavaVirtualMachine.isOracleJDK8()) { System.out.println( "JFR is commercial feature in Oracle JDK 8. Make sure you have the right license."); return true; - } else if (Platform.isJ9()) { + } else if (JavaVirtualMachine.isJ9()) { System.out.println("JFR is not supported on J9 JVM."); return false; } else { - System.out.println("JFR is supported on " + Platform.getRuntimeVersion()); + System.out.println("JFR is supported on " + JavaVirtualMachine.getRuntimeVersion()); return true; } } @SuppressForbidden private static boolean checkDdprof() { - if (!Platform.isLinux()) { + if (!OperatingSystem.isLinux()) { System.out.println("Datadog profiler is only supported on Linux."); return false; } else { - System.out.println("Datadog profiler is supported on " + Platform.getRuntimeVersion()); + System.out.println( + "Datadog profiler is supported on " + JavaVirtualMachine.getRuntimeVersion()); return true; } } @@ -184,7 +186,7 @@ private static boolean checkCreateTempFile(Path target) { @SuppressForbidden private static boolean checkLoadLibrary(Path target) { - if (!Platform.isLinux()) { + if (!OperatingSystem.isLinux()) { // we are loading the native library only on linux System.out.println("Skipping native library check on non-linux platform"); return true; @@ -214,8 +216,9 @@ private static boolean extractSoFromJar(Path target) throws Exception { .filter(e -> e.getName().contains("libjavaProfiler.so")) .filter( e -> - e.getName().contains(Platform.isAarch64() ? "/linux-arm64/" : "/linux-x64/") - && (!Platform.isMusl() || e.getName().contains("-musl"))) + e.getName() + .contains(OperatingSystem.isAarch64() ? "/linux-arm64/" : "/linux-x64/") + && (!OperatingSystem.isMusl() || e.getName().contains("-musl"))) .findFirst() .map( e -> { diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/AppSecDisabledExceptionHandlerForkedTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/AppSecDisabledExceptionHandlerForkedTest.groovy index 0f921dca0fb..dcea64de89b 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/AppSecDisabledExceptionHandlerForkedTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/AppSecDisabledExceptionHandlerForkedTest.groovy @@ -1,11 +1,11 @@ package datadog.trace.agent.test import ch.qos.logback.classic.Level -import datadog.trace.api.Platform +import datadog.environment.JavaVirtualMachine import spock.lang.IgnoreIf @IgnoreIf(reason = "SecurityManager used in the test is marked for removal and throws exceptions", value = { - Platform.isJavaVersionAtLeast(21) + JavaVirtualMachine.isJavaVersionAtLeast(21) }) class AppSecDisabledExceptionHandlerForkedTest extends BaseExceptionHandlerTest { diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/BaseExceptionHandlerTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/BaseExceptionHandlerTest.groovy index 2b78ef418ca..0c040e3b8f9 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/BaseExceptionHandlerTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/BaseExceptionHandlerTest.groovy @@ -4,8 +4,8 @@ import ch.qos.logback.classic.Level import ch.qos.logback.classic.Logger import ch.qos.logback.core.read.ListAppender import datadog.appsec.api.blocking.BlockingException +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.tooling.bytebuddy.ExceptionHandlers -import datadog.trace.api.Platform import datadog.trace.bootstrap.ExceptionLogger import datadog.trace.bootstrap.InstrumentationErrors import datadog.trace.bootstrap.blocking.BlockingExceptionHandler @@ -26,7 +26,7 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named @IgnoreIf(reason = "SecurityManager used in the test is marked for removal and throws exceptions", value = { - Platform.isJavaVersionAtLeast(21) + JavaVirtualMachine.isJavaVersionAtLeast(21) }) abstract class BaseExceptionHandlerTest extends DDSpecification { @Shared diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerExitOnFailureForkedTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerExitOnFailureForkedTest.groovy index 2c54a9de711..d18a0d228b3 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerExitOnFailureForkedTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerExitOnFailureForkedTest.groovy @@ -1,11 +1,11 @@ package datadog.trace.agent.test import ch.qos.logback.classic.Level -import datadog.trace.api.Platform +import datadog.environment.JavaVirtualMachine import spock.lang.IgnoreIf @IgnoreIf(reason = "SecurityManager used in the test is marked for removal and throws exceptions", value = { - Platform.isJavaVersionAtLeast(21) + JavaVirtualMachine.isJavaVersionAtLeast(21) }) class ExceptionHandlerExitOnFailureForkedTest extends BaseExceptionHandlerTest { @Override diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerForkedTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerForkedTest.groovy index 04bc69de20f..01ea9dd445a 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerForkedTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerForkedTest.groovy @@ -1,11 +1,11 @@ package datadog.trace.agent.test import ch.qos.logback.classic.Level -import datadog.trace.api.Platform +import datadog.environment.JavaVirtualMachine import spock.lang.IgnoreIf @IgnoreIf(reason = "SecurityManager used in the test is marked for removal and throws exceptions", value = { - Platform.isJavaVersionAtLeast(21) + JavaVirtualMachine.isJavaVersionAtLeast(21) }) class ExceptionHandlerForkedTest extends BaseExceptionHandlerTest { @Override diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/ObjectIntrospection.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/ObjectIntrospection.java index a024081860d..9a48da8e0c7 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/ObjectIntrospection.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/ObjectIntrospection.java @@ -1,7 +1,7 @@ package com.datadog.appsec.event.data; import com.datadog.appsec.gateway.AppSecRequestContext; -import datadog.trace.api.Platform; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.telemetry.WafMetricCollector; import datadog.trace.util.MethodHandles; import java.lang.invoke.MethodHandle; @@ -30,7 +30,7 @@ public final class ObjectIntrospection { static { // Method AccessibleObject.trySetAccessible introduced in Java 9 Method method = null; - if (Platform.isJavaVersionAtLeast(9)) { + if (JavaVirtualMachine.isJavaVersionAtLeast(9)) { try { method = Field.class.getMethod("trySetAccessible"); } catch (NoSuchMethodException e) { diff --git a/dd-java-agent/instrumentation/exception-profiling/src/test/groovy/datadog/trace/bootstrap/instrumentation/jfr/exceptions/KnownExcludesForkedTest.groovy b/dd-java-agent/instrumentation/exception-profiling/src/test/groovy/datadog/trace/bootstrap/instrumentation/jfr/exceptions/KnownExcludesForkedTest.groovy index 800b0273853..4dd40a0cb28 100644 --- a/dd-java-agent/instrumentation/exception-profiling/src/test/groovy/datadog/trace/bootstrap/instrumentation/jfr/exceptions/KnownExcludesForkedTest.groovy +++ b/dd-java-agent/instrumentation/exception-profiling/src/test/groovy/datadog/trace/bootstrap/instrumentation/jfr/exceptions/KnownExcludesForkedTest.groovy @@ -1,6 +1,6 @@ import com.zaxxer.hikari.pool.ProxyLeakTask +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.AgentTestRunner -import datadog.trace.api.Platform import datadog.trace.bootstrap.instrumentation.jfr.InstrumentationBasedProfiling import jdk.jfr.Recording import org.openjdk.jmc.common.item.Attribute @@ -14,7 +14,7 @@ import spock.lang.Shared import java.nio.file.Files @Requires({ - !Platform.isJ9() + !JavaVirtualMachine.isJ9() }) class KnownExcludesForkedTest extends AgentTestRunner { private static final IAttribute TYPE = diff --git a/dd-java-agent/instrumentation/exception-profiling/src/test/java/datadog/trace/bootstrap/instrumentation/jfr/exceptions/ExceptionHistogramTest.java b/dd-java-agent/instrumentation/exception-profiling/src/test/java/datadog/trace/bootstrap/instrumentation/jfr/exceptions/ExceptionHistogramTest.java index 79aba1d601b..5da9ab5bc43 100644 --- a/dd-java-agent/instrumentation/exception-profiling/src/test/java/datadog/trace/bootstrap/instrumentation/jfr/exceptions/ExceptionHistogramTest.java +++ b/dd-java-agent/instrumentation/exception-profiling/src/test/java/datadog/trace/bootstrap/instrumentation/jfr/exceptions/ExceptionHistogramTest.java @@ -9,8 +9,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedMap; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.Config; -import datadog.trace.api.Platform; import java.io.IOException; import java.time.Instant; import java.util.Comparator; @@ -63,7 +63,7 @@ public boolean equals(final Object obj) { @BeforeAll public static void precheck() { - assumeFalse(Platform.isJ9()); + assumeFalse(JavaVirtualMachine.isJ9()); } @BeforeEach diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/MethodHandlersInstrumentation.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/MethodHandlersInstrumentation.java index d41f56b7a9f..dccea600201 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/MethodHandlersInstrumentation.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/MethodHandlersInstrumentation.java @@ -7,9 +7,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.Platform; import java.lang.reflect.Method; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -37,7 +37,7 @@ public ElementMatcher hierarchyMatcher() { @Override public boolean isEnabled() { - return super.isEnabled() && !Platform.isGraalVM(); + return super.isEnabled() && !JavaVirtualMachine.isGraalVM(); } @Override diff --git a/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/src/main/java/datadog/trace/instrumentation/java/concurrent/structuredconcurrency/StructuredTaskScopeInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/src/main/java/datadog/trace/instrumentation/java/concurrent/structuredconcurrency/StructuredTaskScopeInstrumentation.java index 5a9787f0b40..245323db95e 100644 --- a/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/src/main/java/datadog/trace/instrumentation/java/concurrent/structuredconcurrency/StructuredTaskScopeInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/src/main/java/datadog/trace/instrumentation/java/concurrent/structuredconcurrency/StructuredTaskScopeInstrumentation.java @@ -5,9 +5,9 @@ import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.Platform; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.java.concurrent.State; @@ -35,7 +35,7 @@ public String instrumentedType() { @Override public boolean isEnabled() { - return Platform.isJavaVersionAtLeast(21) && super.isEnabled(); + return JavaVirtualMachine.isJavaVersionAtLeast(21) && super.isEnabled(); } @Override diff --git a/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/src/main/java/datadog/trace/instrumentation/java/concurrent/virtualthread/TaskRunnerInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/src/main/java/datadog/trace/instrumentation/java/concurrent/virtualthread/TaskRunnerInstrumentation.java index b54146a4b2e..e4e43fa9835 100644 --- a/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/src/main/java/datadog/trace/instrumentation/java/concurrent/virtualthread/TaskRunnerInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/src/main/java/datadog/trace/instrumentation/java/concurrent/virtualthread/TaskRunnerInstrumentation.java @@ -9,9 +9,9 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.Platform; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.java.concurrent.State; @@ -36,7 +36,7 @@ public String instrumentedType() { @Override public boolean isEnabled() { - return Platform.isJavaVersionAtLeast(19) && super.isEnabled(); + return JavaVirtualMachine.isJavaVersionAtLeast(19) && super.isEnabled(); } @Override diff --git a/dd-java-agent/instrumentation/java-concurrent/src/test/groovy/QueueTimingForkedTest.groovy b/dd-java-agent/instrumentation/java-concurrent/src/test/groovy/QueueTimingForkedTest.groovy index 7a8597aa1fe..85a1894581b 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/test/groovy/QueueTimingForkedTest.groovy +++ b/dd-java-agent/instrumentation/java-concurrent/src/test/groovy/QueueTimingForkedTest.groovy @@ -1,6 +1,6 @@ +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.TestProfilingContextIntegration -import datadog.trace.api.Platform import datadog.trace.bootstrap.instrumentation.jfr.InstrumentationBasedProfiling import java.util.concurrent.Executors @@ -40,10 +40,10 @@ class QueueTimingForkedTest extends AgentTestRunner { then: // Starting from Java 24, ForkJoinPool will wrap a Runnable with the {@code java.util.concurrent.ForkJoinTask$AdaptedInterruptibleRunnable} class - String expectedTaskClassName = Platform.isJavaVersionAtLeast(24) ? 'AdaptedInterruptibleRunnable' : 'TestRunnable' + String expectedTaskClassName = JavaVirtualMachine.isJavaVersionAtLeast(24) ? 'AdaptedInterruptibleRunnable' : 'TestRunnable' // flaky before JDK21 - if (Platform.isJavaVersionAtLeast(21)) { + if (JavaVirtualMachine.isJavaVersionAtLeast(21)) { verify("java.util.concurrent.ForkJoinPool\$WorkQueue", expectedTaskClassName) } diff --git a/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/ByteBufferInstrumentation.java b/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/ByteBufferInstrumentation.java index 29b6a963987..db2f3a6f1fd 100644 --- a/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/ByteBufferInstrumentation.java +++ b/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/ByteBufferInstrumentation.java @@ -9,6 +9,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Platform; @@ -24,7 +25,7 @@ public ByteBufferInstrumentation() { @Override public boolean isEnabled() { - return Platform.isJavaVersionAtLeast(11) + return JavaVirtualMachine.isJavaVersionAtLeast(11) && super.isEnabled() && ConfigProvider.getInstance() .getBoolean( diff --git a/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/DirectByteBufferInstrumentation.java b/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/DirectByteBufferInstrumentation.java index 76da219c253..3c3d8417d8b 100644 --- a/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/DirectByteBufferInstrumentation.java +++ b/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/DirectByteBufferInstrumentation.java @@ -7,6 +7,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Platform; @@ -22,7 +23,7 @@ public DirectByteBufferInstrumentation() { @Override public boolean isEnabled() { - return Platform.isJavaVersionAtLeast(11) + return JavaVirtualMachine.isJavaVersionAtLeast(11) && super.isEnabled() && ConfigProvider.getInstance() .getBoolean( diff --git a/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/FileChannelImplInstrumentation.java b/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/FileChannelImplInstrumentation.java index fc5b2506a79..0fac441bef8 100644 --- a/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/FileChannelImplInstrumentation.java +++ b/dd-java-agent/instrumentation/java-directbytebuffer/src/main/java/datadog/trace/instrumentation/directbytebuffer/FileChannelImplInstrumentation.java @@ -8,6 +8,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Platform; @@ -23,7 +24,7 @@ public FileChannelImplInstrumentation() { @Override public boolean isEnabled() { - return Platform.isJavaVersionAtLeast(11) + return JavaVirtualMachine.isJavaVersionAtLeast(11) && super.isEnabled() && ConfigProvider.getInstance() .getBoolean( diff --git a/dd-java-agent/instrumentation/java-directbytebuffer/src/test/groovy/DirectAllocationTrackingTest.groovy b/dd-java-agent/instrumentation/java-directbytebuffer/src/test/groovy/DirectAllocationTrackingTest.groovy index 1e33427508f..6fb745ec506 100644 --- a/dd-java-agent/instrumentation/java-directbytebuffer/src/test/groovy/DirectAllocationTrackingTest.groovy +++ b/dd-java-agent/instrumentation/java-directbytebuffer/src/test/groovy/DirectAllocationTrackingTest.groovy @@ -1,5 +1,5 @@ +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.AgentTestRunner -import datadog.trace.api.Platform import datadog.trace.bootstrap.instrumentation.api.AgentTracer import datadog.trace.bootstrap.instrumentation.jfr.InstrumentationBasedProfiling import jdk.jfr.FlightRecorder @@ -17,7 +17,7 @@ import java.util.stream.Collectors import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace @Requires({ - !Platform.isJ9() + !JavaVirtualMachine.isJ9() }) class DirectAllocationTrackingTest extends AgentTestRunner { diff --git a/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpClientInstrumentation.java b/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpClientInstrumentation.java index b8c8b393afd..e30648f61fa 100644 --- a/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpClientInstrumentation.java @@ -11,9 +11,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.Platform; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -34,7 +34,7 @@ public ElementMatcher.Junction classLoaderMatcher() { @Override public boolean isEnabled() { - return Platform.isJavaVersionAtLeast(11) && super.isEnabled(); + return JavaVirtualMachine.isJavaVersionAtLeast(11) && super.isEnabled(); } @Override diff --git a/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpHeadersInstrumentation.java b/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpHeadersInstrumentation.java index 0c19a1669b8..82b802d70a8 100644 --- a/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpHeadersInstrumentation.java +++ b/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpHeadersInstrumentation.java @@ -7,9 +7,9 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import datadog.trace.api.Platform; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -30,7 +30,7 @@ public ElementMatcher.Junction classLoaderMatcher() { @Override public boolean isEnabled() { - return Platform.isJavaVersionAtLeast(11) && super.isEnabled(); + return JavaVirtualMachine.isJavaVersionAtLeast(11) && super.isEnabled(); } @Override diff --git a/dd-java-agent/instrumentation/karate/src/test/groovy/KarateTest.groovy b/dd-java-agent/instrumentation/karate/src/test/groovy/KarateTest.groovy index f23d99e7a7e..fcbea52e388 100644 --- a/dd-java-agent/instrumentation/karate/src/test/groovy/KarateTest.groovy +++ b/dd-java-agent/instrumentation/karate/src/test/groovy/KarateTest.groovy @@ -1,7 +1,7 @@ +import datadog.environment.JavaVirtualMachine import datadog.trace.api.DisableTestTrace import datadog.trace.api.civisibility.config.TestFQN import datadog.trace.api.civisibility.config.TestIdentifier -import datadog.trace.api.Platform import datadog.trace.civisibility.CiVisibilityInstrumentationTest import datadog.trace.instrumentation.karate.KarateUtils import datadog.trace.instrumentation.karate.TestEventsHandlerHolder @@ -22,7 +22,7 @@ import java.util.concurrent.CopyOnWriteArrayList import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass @IgnoreIf(reason = "Karate instrumentation is creating an unclosed span of kind test_suite_end specifically for Java 24. Skip until we have a fix.", value = { - Platform.isJavaVersionAtLeast(24) + JavaVirtualMachine.isJavaVersionAtLeast(24) }) @DisableTestTrace(reason = "avoid self-tracing") class KarateTest extends CiVisibilityInstrumentationTest { diff --git a/dd-java-agent/instrumentation/mule-4/src/main/java/datadog/trace/instrumentation/mule4/JpmsMuleInstrumentation.java b/dd-java-agent/instrumentation/mule-4/src/main/java/datadog/trace/instrumentation/mule4/JpmsMuleInstrumentation.java index c915a1a393d..f638e91971f 100644 --- a/dd-java-agent/instrumentation/mule-4/src/main/java/datadog/trace/instrumentation/mule4/JpmsMuleInstrumentation.java +++ b/dd-java-agent/instrumentation/mule-4/src/main/java/datadog/trace/instrumentation/mule4/JpmsMuleInstrumentation.java @@ -3,10 +3,10 @@ import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import com.google.auto.service.AutoService; +import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.muzzle.Reference; -import datadog.trace.api.Platform; @AutoService(InstrumenterModule.class) public class JpmsMuleInstrumentation extends InstrumenterModule.Tracing @@ -17,7 +17,7 @@ public JpmsMuleInstrumentation() { @Override public boolean isEnabled() { - return super.isEnabled() && Platform.isJavaVersionAtLeast(9); + return super.isEnabled() && JavaVirtualMachine.isJavaVersionAtLeast(9); } @Override diff --git a/dd-java-agent/instrumentation/reactor-netty-1/src/test/groovy/ReactorNettyHttp2ClientTest.groovy b/dd-java-agent/instrumentation/reactor-netty-1/src/test/groovy/ReactorNettyHttp2ClientTest.groovy index 5cfbce31e0b..b5610c1d3b3 100644 --- a/dd-java-agent/instrumentation/reactor-netty-1/src/test/groovy/ReactorNettyHttp2ClientTest.groovy +++ b/dd-java-agent/instrumentation/reactor-netty-1/src/test/groovy/ReactorNettyHttp2ClientTest.groovy @@ -1,9 +1,4 @@ -import datadog.trace.api.Platform -import spock.lang.IgnoreIf - -import static datadog.trace.agent.test.utils.TraceUtils.basicSpan -import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace - +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.AgentTestRunner import datadog.trace.api.DDSpanTypes import datadog.trace.bootstrap.instrumentation.api.Tags @@ -11,10 +6,14 @@ import reactor.netty.DisposableServer import reactor.netty.http.HttpProtocol import reactor.netty.http.client.HttpClient import reactor.netty.http.server.HttpServer +import spock.lang.IgnoreIf import spock.lang.Shared +import static datadog.trace.agent.test.utils.TraceUtils.basicSpan +import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace + @IgnoreIf(reason = "TLS issues with OpenJ9", value = { - Platform.isJ9() + JavaVirtualMachine.isJ9() }) class ReactorNettyHttp2ClientTest extends AgentTestRunner { @Shared diff --git a/dd-java-agent/instrumentation/reactor-netty-1/src/test/groovy/ReactorNettyHttpClientTest.groovy b/dd-java-agent/instrumentation/reactor-netty-1/src/test/groovy/ReactorNettyHttpClientTest.groovy index 7bc336bfcda..2949a87dc6c 100644 --- a/dd-java-agent/instrumentation/reactor-netty-1/src/test/groovy/ReactorNettyHttpClientTest.groovy +++ b/dd-java-agent/instrumentation/reactor-netty-1/src/test/groovy/ReactorNettyHttpClientTest.groovy @@ -1,6 +1,6 @@ +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.base.HttpClientTest import datadog.trace.agent.test.naming.TestingNettyHttpNamingConventions -import datadog.trace.api.Platform import datadog.trace.instrumentation.netty41.client.NettyHttpClientDecorator import io.netty.handler.codec.http.HttpMethod import reactor.core.publisher.Flux @@ -17,8 +17,9 @@ import java.util.function.BiFunction import static datadog.trace.agent.test.utils.TraceUtils.basicSpan import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace + @IgnoreIf(reason = "TLS issues with OpenJ9", value = { - Platform.isJ9() + JavaVirtualMachine.isJ9() }) class ReactorNettyHttpClientTest extends HttpClientTest implements TestingNettyHttpNamingConventions.ClientV0 { diff --git a/dd-java-agent/instrumentation/spark/spark_2.12/src/test_spark32/groovy/Spark32SqlTest.groovy b/dd-java-agent/instrumentation/spark/spark_2.12/src/test_spark32/groovy/Spark32SqlTest.groovy index 3d867b512f7..b4e38fa7c21 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.12/src/test_spark32/groovy/Spark32SqlTest.groovy +++ b/dd-java-agent/instrumentation/spark/spark_2.12/src/test_spark32/groovy/Spark32SqlTest.groovy @@ -1,8 +1,8 @@ -import datadog.trace.api.Platform +import datadog.environment.JavaVirtualMachine import datadog.trace.instrumentation.spark.AbstractSpark32SqlTest import spock.lang.IgnoreIf @IgnoreIf(reason="Hadoop 3.3.1 (used by spark 3.2) does not support IBM java https://issues.apache.org/jira/browse/HADOOP-17971", value = { - Platform.isIbm8() + JavaVirtualMachine.isIbm8() }) class Spark32SqlTest extends AbstractSpark32SqlTest {} diff --git a/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkStructuredStreamingTest.groovy b/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkStructuredStreamingTest.groovy index 725ff7881b0..2d6c2c86327 100644 --- a/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkStructuredStreamingTest.groovy +++ b/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkStructuredStreamingTest.groovy @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.spark +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.AgentTestRunner import datadog.trace.api.DDTags import datadog.trace.api.DDTraceId -import datadog.trace.api.Platform import datadog.trace.api.sampling.PrioritySampling import datadog.trace.api.sampling.SamplingMechanism import org.apache.spark.sql.Dataset @@ -17,7 +17,7 @@ import scala.collection.immutable.Seq import spock.lang.IgnoreIf @IgnoreIf(reason="https://issues.apache.org/jira/browse/HADOOP-18174", value = { - Platform.isJ9() + JavaVirtualMachine.isJ9() }) class AbstractSparkStructuredStreamingTest extends AgentTestRunner { diff --git a/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkTest.groovy b/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkTest.groovy index b891d7ebed3..81114ec7aa7 100644 --- a/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkTest.groovy +++ b/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkTest.groovy @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.spark +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.AgentTestRunner import datadog.trace.api.DDSpanId import datadog.trace.api.DDTraceId -import datadog.trace.api.Platform import datadog.trace.api.sampling.PrioritySampling import datadog.trace.api.sampling.SamplingMechanism import datadog.trace.test.util.Flaky @@ -22,7 +22,7 @@ import org.apache.spark.sql.types.StructType import spock.lang.IgnoreIf @IgnoreIf(reason="https://issues.apache.org/jira/browse/HADOOP-18174", value = { - Platform.isJ9() + JavaVirtualMachine.isJ9() }) abstract class AbstractSparkTest extends AgentTestRunner { @Override diff --git a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/groovy/VertxPostgresSqlClientForkedTest.groovy b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/groovy/VertxPostgresSqlClientForkedTest.groovy index a7f538c5606..b174d36a38f 100644 --- a/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/groovy/VertxPostgresSqlClientForkedTest.groovy +++ b/dd-java-agent/instrumentation/vertx-pg-client-4.0/src/test/groovy/VertxPostgresSqlClientForkedTest.groovy @@ -1,4 +1,5 @@ import TestDatabases.TestDBInfo +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.asserts.TraceAssert import datadog.trace.bootstrap.instrumentation.api.Tags @@ -18,10 +19,9 @@ import java.util.concurrent.TimeUnit import static datadog.trace.agent.test.utils.TraceUtils.basicSpan import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace -import datadog.trace.api.Platform @IgnoreIf(reason = "A change in Locale.ROOT that was introduced in JDK 22 is not fixed until vertx-pg-client v4.5.1: https://github.com/eclipse-vertx/vertx-sql-client/pull/1394", value = { - Platform.isJavaVersionAtLeast(22) + JavaVirtualMachine.isJavaVersionAtLeast(22) }) class VertxPostgresSqlClientForkedTest extends AgentTestRunner { @AutoCleanup diff --git a/dd-java-agent/instrumentation/wildfly-9/src/test/groovy/WildFlyForkedTest.groovy b/dd-java-agent/instrumentation/wildfly-9/src/test/groovy/WildFlyForkedTest.groovy index 6c7d18841bd..f83ae987dbb 100644 --- a/dd-java-agent/instrumentation/wildfly-9/src/test/groovy/WildFlyForkedTest.groovy +++ b/dd-java-agent/instrumentation/wildfly-9/src/test/groovy/WildFlyForkedTest.groovy @@ -1,10 +1,10 @@ +import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.base.WithHttpServer import datadog.trace.agent.test.naming.TestingGenericHttpNamingConventions import datadog.trace.agent.test.utils.OkHttpUtils import datadog.trace.api.DDSpanTypes import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags import datadog.trace.bootstrap.instrumentation.api.Tags -import datadog.trace.api.Platform import okhttp3.HttpUrl import okhttp3.Request import org.jboss.shrinkwrap.api.ShrinkWrap @@ -14,7 +14,7 @@ import test.JakartaTestServlet import test.TestServlet @IgnoreIf(reason = "WildFly does not guarantee support for Java SE 24. The latest version 36 of WildFly recommends using the latest Java LTS: https://docs.wildfly.org/36/Getting_Started_Guide.html#requirements", value = { - Platform.isJavaVersionAtLeast(22) + JavaVirtualMachine.isJavaVersionAtLeast(22) }) class WildFlyForkedTest extends WithHttpServer implements TestingGenericHttpNamingConventions.ServerV0 { @Override diff --git a/dd-java-agent/src/test/groovy/datadog/trace/agent/InitializationTelemetryTest.groovy b/dd-java-agent/src/test/groovy/datadog/trace/agent/InitializationTelemetryTest.groovy index 607b4c74be0..f94b8df869f 100644 --- a/dd-java-agent/src/test/groovy/datadog/trace/agent/InitializationTelemetryTest.groovy +++ b/dd-java-agent/src/test/groovy/datadog/trace/agent/InitializationTelemetryTest.groovy @@ -1,7 +1,7 @@ package datadog.trace.agent +import datadog.environment.JavaVirtualMachine import datadog.test.SimpleAgentMock -import datadog.trace.api.Platform import jvmbootstraptest.InitializationTelemetryCheck import spock.lang.IgnoreIf import spock.lang.Specification @@ -9,7 +9,7 @@ import spock.lang.Timeout @Timeout(30) @IgnoreIf(reason = "SecurityManager is permanently disabled as of JDK 24", value = { - Platform.isJavaVersionAtLeast(24) + JavaVirtualMachine.isJavaVersionAtLeast(24) }) class InitializationTelemetryTest extends Specification { def "block agent start-up"() { diff --git a/dd-java-agent/src/test/groovy/datadog/trace/agent/SecurityManagerTest.groovy b/dd-java-agent/src/test/groovy/datadog/trace/agent/SecurityManagerTest.groovy index 1e0282b6169..c0504ecfc56 100644 --- a/dd-java-agent/src/test/groovy/datadog/trace/agent/SecurityManagerTest.groovy +++ b/dd-java-agent/src/test/groovy/datadog/trace/agent/SecurityManagerTest.groovy @@ -1,16 +1,16 @@ package datadog.trace.agent +import datadog.environment.JavaVirtualMachine import spock.lang.Specification import spock.lang.Timeout import spock.lang.IgnoreIf -import datadog.trace.api.Platform import jvmbootstraptest.SecurityManagerCheck import jvmbootstraptest.TestSecurityManager @Timeout(30) @IgnoreIf(reason = "SecurityManager is permanently disabled as of JDK 24", value = { - Platform.isJavaVersionAtLeast(24) + JavaVirtualMachine.isJavaVersionAtLeast(24) }) class SecurityManagerTest extends Specification { def "no env access"() { diff --git a/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/utils/UnsafeUtils.java b/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/utils/UnsafeUtils.java index f6ecad1910c..e029a970533 100644 --- a/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/utils/UnsafeUtils.java +++ b/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/utils/UnsafeUtils.java @@ -1,6 +1,6 @@ package datadog.trace.agent.test.utils; -import static datadog.trace.api.Platform.isJavaVersionAtLeast; +import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast; import java.lang.reflect.Field; import java.lang.reflect.Modifier;