Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
import static datadog.trace.util.ProcessSupervisor.Health.NEVER_CHECKED;
import static datadog.trace.util.ProcessSupervisor.Health.READY_TO_START;

import datadog.environment.OperatingSystem;
import datadog.trace.api.Config;
import datadog.trace.api.Platform;
import datadog.trace.util.ProcessSupervisor;
import java.io.Closeable;
import java.io.File;
Expand All @@ -17,7 +17,7 @@ public class ExternalAgentLauncher implements Closeable {
private static final Logger log = LoggerFactory.getLogger(ExternalAgentLauncher.class);

private static final ProcessBuilder.Redirect DISCARD =
ProcessBuilder.Redirect.to(new File((Platform.isWindows() ? "NUL" : "/dev/null")));
ProcessBuilder.Redirect.to(new File((OperatingSystem.isWindows() ? "NUL" : "/dev/null")));

private ProcessSupervisor traceProcessSupervisor;
private ProcessSupervisor dogStatsDProcessSupervisor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import com.timgroup.statsd.NoOpDirectStatsDClient;
import com.timgroup.statsd.NonBlockingStatsDClientBuilder;
import com.timgroup.statsd.StatsDClientErrorHandler;
import datadog.environment.OperatingSystem;
import datadog.trace.api.Config;
import datadog.trace.api.Platform;
import datadog.trace.relocate.api.IOLogger;
import datadog.trace.util.AgentTaskScheduler;
import datadog.trace.util.AgentThreadFactory;
Expand Down Expand Up @@ -136,7 +136,7 @@ private void doConnect() {
if (bufferSize != null) {
clientBuilder.socketBufferSize(bufferSize);
}
int packetSize = Platform.isMac() ? 2048 : 8192;
int packetSize = OperatingSystem.isMacOs() ? 2048 : 8192;
if (bufferSize != null && bufferSize < packetSize) {
packetSize = bufferSize;
}
Expand Down Expand Up @@ -185,7 +185,7 @@ private void discoverConnectionSettings() {
}

if (null == host) {
if (!Platform.isWindows() && new File(DEFAULT_DOGSTATSD_SOCKET_PATH).exists()) {
if (!OperatingSystem.isWindows() && new File(DEFAULT_DOGSTATSD_SOCKET_PATH).exists()) {
log.info("Detected {}. Using it to send StatsD data.", DEFAULT_DOGSTATSD_SOCKET_PATH);
host = DEFAULT_DOGSTATSD_SOCKET_PATH;
port = 0; // tells dogstatsd client to treat host as a socket path
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String[
+ "com.datadog.profiling.controller.openjdk.events.SmapEntryFactory$SmapParseErrorEvent:build_time,"
+ "com.datadog.profiling.controller.TempLocationManager$SingletonHolder:run_time,"
+ "com.datadog.profiling.ddprof.JavaProfilerLoader:run_time,"
+ "datadog.environment.JavaVirtualMachine:rerun,"
+ "datadog.trace.agent.tooling.WeakMaps$Adapter:build_time,"
+ "datadog.trace.api.Config:rerun,"
+ "datadog.trace.api.Platform:rerun,"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package datadog.trace.common.writer;

import datadog.environment.OperatingSystem;
import datadog.trace.api.DDSpanId;
import datadog.trace.api.DDTraceId;
import datadog.trace.api.Platform;
import datadog.trace.core.DDSpan;
import de.thetaphi.forbiddenapis.SuppressForbidden;
import java.io.FileOutputStream;
Expand Down Expand Up @@ -81,7 +81,7 @@ public TraceStructureWriter(String outputFile, boolean debugLog) {
private static String[] parseArgs(String outputFile) {
String[] args = ARGS_DELIMITER.split(outputFile);
// Check Windows absolute paths (<drive>:<path>) as column is used as arg delimiter
if (Platform.isWindows()
if (OperatingSystem.isWindows()
&& args.length > 1
&& args[0].length() == 1
&& (args[1].startsWith("\\") || args[1].startsWith("/"))) {
Expand Down
6 changes: 5 additions & 1 deletion internal-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,10 @@ excludedClassesBranchCoverage = [
'datadog.trace.api.ProductActivationConfig',
'datadog.trace.api.ClassloaderConfigurationOverrides.Lazy',
'datadog.trace.util.stacktrace.HotSpotStackWalker',
'datadog.trace.util.stacktrace.StackWalkerFactory'
'datadog.trace.util.stacktrace.StackWalkerFactory',
// Tested using forked process
'datadog.trace.api.env.CapturedEnvironment',
'datadog.trace.api.env.CapturedEnvironment.ProcessInfo'
]
excludedClassesInstructionCoverage = [
'datadog.trace.bootstrap.config.provider.EnvironmentConfigSource',
Expand All @@ -244,6 +247,7 @@ dependencies {
api project(':dd-trace-api')
api libs.slf4j
api project(':components:context')
api project(':components:environment')
api project(':components:yaml')
api project(':components:cli')
api project(":utils:time-utils")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datadog.trace.util.stacktrace;

import datadog.trace.api.Platform;
import datadog.environment.JavaVirtualMachine;
import de.thetaphi.forbiddenapis.SuppressForbidden;
import java.util.function.Function;
import java.util.stream.Stream;
Expand Down Expand Up @@ -46,7 +46,7 @@ private static java.lang.StackWalker newStackWalker() {

private static StackMapper findMapper() {
try {
return Platform.isJ9()
return JavaVirtualMachine.isJ9()
? JDK9StackWalker::mapFrameForJ9
: java.lang.StackWalker.StackFrame::toStackTraceElement;
} catch (final Throwable e) {
Expand Down
36 changes: 20 additions & 16 deletions internal-api/src/main/java/datadog/trace/api/Config.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package datadog.trace.api;

import static datadog.environment.JavaVirtualMachine.isJavaVersion;
import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast;
import static datadog.trace.api.ConfigDefaults.DEFAULT_ADD_SPAN_POINTERS;
import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_HOST;
import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_TIMEOUT;
Expand Down Expand Up @@ -609,6 +611,8 @@
import static datadog.trace.util.CollectionUtils.tryMakeImmutableSet;
import static datadog.trace.util.Strings.propertyNameToEnvironmentVariableName;

import datadog.environment.JavaVirtualMachine;
import datadog.environment.OperatingSystem;
import datadog.trace.api.civisibility.CiVisibilityWellKnownTags;
import datadog.trace.api.config.GeneralConfig;
import datadog.trace.api.config.ProfilingConfig;
Expand Down Expand Up @@ -3299,41 +3303,41 @@ public boolean isDatadogProfilerEnabled() {
public static boolean isDatadogProfilerEnablementOverridden() {
// old non-LTS versions without important backports
// also, we have no windows binaries
return Platform.isWindows()
|| Platform.isJavaVersion(18)
|| Platform.isJavaVersion(16)
|| Platform.isJavaVersion(15)
|| Platform.isJavaVersion(14)
|| Platform.isJavaVersion(13)
|| Platform.isJavaVersion(12)
|| Platform.isJavaVersion(10)
|| Platform.isJavaVersion(9);
return OperatingSystem.isWindows()
|| isJavaVersion(18)
|| isJavaVersion(16)
|| isJavaVersion(15)
|| isJavaVersion(14)
|| isJavaVersion(13)
|| isJavaVersion(12)
|| isJavaVersion(10)
|| isJavaVersion(9);
}

public static boolean isDatadogProfilerSafeInCurrentEnvironment() {
// don't want to put this logic (which will evolve) in the public ProfilingConfig, and can't
// access Platform there
if (!Platform.isJ9() && Platform.isJavaVersion(8)) {
if (!JavaVirtualMachine.isJ9() && isJavaVersion(8)) {
String arch = System.getProperty("os.arch");
if ("aarch64".equalsIgnoreCase(arch) || "arm64".equalsIgnoreCase(arch)) {
return false;
}
}
if (Platform.isGraalVM()) {
if (JavaVirtualMachine.isGraalVM()) {
// let's be conservative about GraalVM and require opt-in from the users
return false;
}
boolean result = false;
if (Platform.isJ9()) {
if (JavaVirtualMachine.isJ9()) {
// OpenJ9 will activate only JVMTI GetAllStackTraces based profiling which is safe
result = true;
} else {
// JDK 18 is missing ASGCT fixes, so we can't use it
if (!Platform.isJavaVersion(18)) {
if (!isJavaVersion(18)) {
result =
Platform.isJavaVersionAtLeast(17, 0, 5)
|| (Platform.isJavaVersion(11) && Platform.isJavaVersionAtLeast(11, 0, 17))
|| (Platform.isJavaVersion(8) && Platform.isJavaVersionAtLeast(8, 0, 352));
isJavaVersionAtLeast(17, 0, 5)
|| (isJavaVersion(11) && isJavaVersionAtLeast(11, 0, 17))
|| (isJavaVersion(8) && isJavaVersionAtLeast(8, 0, 352));
}
}
return result;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package datadog.trace.api.env;

import datadog.environment.JavaVirtualMachine;
import datadog.trace.api.config.GeneralConfig;
import de.thetaphi.forbiddenapis.SuppressForbidden;
import java.io.File;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
Expand All @@ -18,28 +17,10 @@ public static class ProcessInfo {
public String mainClass;
public File jarFile;

@SuppressForbidden
public ProcessInfo() {
// Besides "sun.java.command" property is not an standard, all main JDKs has set this
// property.
// Tested on:
// - OracleJDK, OpenJDK, AdoptOpenJDK, IBM JDK, Azul Zulu JDK, Amazon Coretto JDK
final String command = System.getProperty("sun.java.command");
if (command == null || command.isEmpty()) {
return;
}

final String[] split = command.trim().split(" ");
if (split.length == 0 || split[0].isEmpty()) {
return;
}

final String candidate = split[0];
if (candidate.toLowerCase(Locale.ROOT).endsWith(".jar")) {
jarFile = new File(candidate);
} else {
mainClass = candidate;
}
String jarName = JavaVirtualMachine.getJarFile();
jarFile = jarName == null ? null : new File(jarName);
mainClass = JavaVirtualMachine.getMainClass();
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package datadog.trace.api.iast;

import datadog.environment.JavaVirtualMachine;
import datadog.trace.api.Config;
import datadog.trace.api.Platform;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -13,7 +13,7 @@ private IastEnabledChecks() {}

public static boolean isMajorJavaVersionAtLeast(final String version) {
try {
return Platform.isJavaVersionAtLeast(Integer.parseInt(version));
return JavaVirtualMachine.isJavaVersionAtLeast(Integer.parseInt(version));
} catch (final Exception e) {
LOGGER.error(
"Error checking major java version {}, expect some call sites to be disabled",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datadog.trace.util;

import static datadog.trace.api.Platform.isJavaVersionAtLeast;
import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast;

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
Expand Down
17 changes: 9 additions & 8 deletions internal-api/src/main/java/datadog/trace/util/PidHelper.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package datadog.trace.util;

import datadog.trace.api.Platform;
import datadog.environment.JavaVirtualMachine;
import datadog.environment.OperatingSystem;
import de.thetaphi.forbiddenapis.SuppressForbidden;
import java.io.IOException;
import java.lang.management.ManagementFactory;
Expand Down Expand Up @@ -36,7 +37,7 @@ public static long getPidAsLong() {
@SuppressWarnings("unchecked")
private static String findPid() {
String pid = "";
if (Platform.isJavaVersionAtLeast(9)) {
if (JavaVirtualMachine.isJavaVersionAtLeast(9)) {
try {
pid =
Strings.trim(
Expand Down Expand Up @@ -65,20 +66,20 @@ private static String findPid() {
}

private static String getTempDir() {
if (!Platform.isJ9()) {
if (!JavaVirtualMachine.isJ9()) {
// See
// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-gettemppatha#remarks
// and
// the JDK OS-specific implementations of os::get_temp_directory(), i.e.
// https://github.com/openjdk/jdk/blob/f50bd0d9ec65a6b9596805d0131aaefc1bb913f3/src/hotspot/os/bsd/os_bsd.cpp#L886-L904
if (Platform.isLinux()) {
if (OperatingSystem.isLinux()) {
return "/tmp";
} else if (Platform.isWindows()) {
} else if (OperatingSystem.isWindows()) {
return Stream.of(System.getenv("TMP"), System.getenv("TEMP"), System.getenv("USERPROFILE"))
.filter(String::isEmpty)
.findFirst()
.orElse("C:\\Windows");
} else if (Platform.isMac()) {
} else if (OperatingSystem.isMacOs()) {
return System.getenv("TMPDIR");
} else {
return System.getProperty("java.io.tmpdir");
Expand All @@ -95,7 +96,7 @@ private static String getTempDir() {
String tmpDir = System.getProperty("java.io.tmpdir");
if (tmpDir != null && !tmpDir.isEmpty()) {
return tmpDir;
} else if (Platform.isWindows()) {
} else if (OperatingSystem.isWindows()) {
return "C:\\Documents";
} else {
return "/tmp";
Expand All @@ -105,7 +106,7 @@ private static String getTempDir() {
}

private static Path getJavaProcessesDir() {
if (Platform.isJ9()) {
if (JavaVirtualMachine.isJ9()) {
// J9 uses a different temporary directory AND subdirectory for storing jps / attach-related
// info
// https://github.com/eclipse-openj9/openj9/blob/196082df056a990756a5571bfac29585fbbfbb42/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/CommonDirectory.java#L94
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datadog.trace.util;

import datadog.trace.api.Platform;
import datadog.environment.JavaVirtualMachine;
import de.thetaphi.forbiddenapis.SuppressForbidden;
import java.util.function.Supplier;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -29,7 +29,7 @@ public abstract class ProcessUtils {
@Nullable
@SuppressForbidden
public static String getCurrentJvmPath() {
if (Platform.isJavaVersionAtLeast(9)) {
if (JavaVirtualMachine.isJavaVersionAtLeast(9)) {
try {
Supplier<String> jdk9Supplier =
(Supplier<String>)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datadog.trace.util.stacktrace;

import datadog.trace.api.Platform;
import datadog.environment.JavaVirtualMachine;
import java.util.function.Function;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
Expand All @@ -19,7 +19,7 @@ public class HotSpotStackWalker extends AbstractStackWalker {
@Override
public boolean isEnabled() {
try {
if (Platform.isJavaVersion(8) && access != null) {
if (JavaVirtualMachine.isJavaVersion(8) && access != null) {
access.getStackTraceElement(new Throwable(), 0);
return true;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datadog.trace.util.stacktrace;

import datadog.trace.api.Platform;
import datadog.environment.JavaVirtualMachine;
import de.thetaphi.forbiddenapis.SuppressForbidden;
import java.util.Objects;
import java.util.function.Supplier;
Expand Down Expand Up @@ -31,7 +31,7 @@ private static Supplier<StackWalker> defaultStackWalker() {

private static Supplier<StackWalker> hotspot() {
return () -> {
if (!Platform.isJavaVersion(8)) {
if (!JavaVirtualMachine.isJavaVersion(8)) {
return null;
}
return new HotSpotStackWalker();
Expand All @@ -40,7 +40,7 @@ private static Supplier<StackWalker> hotspot() {

private static Supplier<StackWalker> jdk9() {
return () -> {
if (!Platform.isJavaVersionAtLeast(9)) {
if (!JavaVirtualMachine.isJavaVersionAtLeast(9)) {
return null;
}
try {
Expand Down
Loading