Skip to content

Migrate products and instrumentations to environment component #9290

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Aug 1, 2025
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import datadog.common.container.ContainerInfo;
import datadog.common.socket.NamedPipeSocketFactory;
import datadog.common.socket.UnixDomainSocketFactory;
import datadog.environment.SystemProperties;
import datadog.trace.api.Config;
import datadog.trace.util.AgentProxySelector;
import java.io.File;
Expand Down Expand Up @@ -49,9 +50,12 @@ public final class OkHttpUtils {

private static final String DD_API_KEY = "DD-API-KEY";

private static final String JAVA_VERSION = System.getProperty("java.version", "unknown");
private static final String JAVA_VM_NAME = System.getProperty("java.vm.name", "unknown");
private static final String JAVA_VM_VENDOR = System.getProperty("java.vm.vendor", "unknown");
private static final String JAVA_VERSION =
SystemProperties.getOrDefault("java.version", "unknown");
private static final String JAVA_VM_NAME =
SystemProperties.getOrDefault("java.vm.name", "unknown");
private static final String JAVA_VM_VENDOR =
SystemProperties.getOrDefault("java.vm.vendor", "unknown");

public static OkHttpClient buildHttpClient(final HttpUrl url, final long timeoutMillis) {
return buildHttpClient(url, null, null, timeoutMillis);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,17 +144,17 @@ private static GitClient.Factory buildGitClientFactory(

@Nonnull
private static CiEnvironment buildCiEnvironment(Config config, SharedCommunicationObjects sco) {
CiEnvironment localEnvironment = CiEnvironmentImpl.local();
String remoteEnvVarsProviderUrl = config.getCiVisibilityRemoteEnvVarsProviderUrl();
if (remoteEnvVarsProviderUrl != null) {
String remoteEnvVarsProviderKey = config.getCiVisibilityRemoteEnvVarsProviderKey();
CiEnvironment remoteEnvironment =
new CiEnvironmentImpl(
getRemoteEnvironment(
remoteEnvVarsProviderUrl, remoteEnvVarsProviderKey, sco.okHttpClient));
CiEnvironment localEnvironment = new CiEnvironmentImpl(System.getenv());
return new CompositeCiEnvironment(remoteEnvironment, localEnvironment);
} else {
return new CiEnvironmentImpl(System.getenv());
return localEnvironment;
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package datadog.trace.civisibility;

import static datadog.trace.api.config.CiVisibilityConfig.CIVISIBILITY_SIGNAL_SERVER_HOST;
import static datadog.trace.api.config.CiVisibilityConfig.CIVISIBILITY_SIGNAL_SERVER_PORT;
import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext;
import static datadog.trace.util.Strings.propertyNameToSystemPropertyName;

import datadog.trace.api.config.CiVisibilityConfig;
import datadog.environment.SystemProperties;
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
import datadog.trace.util.Strings;
import java.net.InetSocketAddress;
import java.util.Properties;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -69,8 +71,8 @@ private boolean isWrapper() {
}

private boolean isMavenParent() {
return System.getProperty("maven.home") != null
&& System.getProperty("classworlds.conf") != null
return SystemProperties.get("maven.home") != null
&& SystemProperties.get("classworlds.conf") != null
// when using Maven Wrapper
|| ClassLoader.getSystemClassLoader()
.getResource("org/apache/maven/wrapper/WrapperExecutor.class")
Expand All @@ -82,7 +84,7 @@ private boolean isGradleDaemon() {
.getResource("org/gradle/launcher/daemon/bootstrap/GradleDaemon.class")
!= null
// double-check this is not a Gradle Worker
&& System.getProperties().getProperty("org.gradle.internal.worker.tmpdir") == null;
&& SystemProperties.get("org.gradle.internal.worker.tmpdir") == null;
}

private boolean isGradleLauncher() {
Expand All @@ -93,16 +95,12 @@ private boolean isGradleLauncher() {

@Nullable
public InetSocketAddress getSignalServerAddress() {
// System.getProperty is used rather than Config,
// System properties are used rather than Config,
// because system variables can be set after config was initialized
String host =
System.getProperty(
Strings.propertyNameToSystemPropertyName(
CiVisibilityConfig.CIVISIBILITY_SIGNAL_SERVER_HOST));
SystemProperties.get(propertyNameToSystemPropertyName(CIVISIBILITY_SIGNAL_SERVER_HOST));
String port =
System.getProperty(
Strings.propertyNameToSystemPropertyName(
CiVisibilityConfig.CIVISIBILITY_SIGNAL_SERVER_PORT));
SystemProperties.get(propertyNameToSystemPropertyName(CIVISIBILITY_SIGNAL_SERVER_PORT));
if (host != null && port != null) {
return new InetSocketAddress(host, Integer.parseInt(port));
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package datadog.trace.civisibility.ci.env;

import java.util.Collections;
import java.util.Map;

public class CiEnvironmentImpl implements CiEnvironment {
Expand All @@ -10,6 +11,16 @@ public CiEnvironmentImpl(Map<String, String> env) {
this.env = env;
}

public static CiEnvironment local() {
Map<String, String> env;
try {
env = System.getenv();
} catch (SecurityException e) {
env = Collections.emptyMap();
}
return new CiEnvironmentImpl(env);
}

@Override
public String get(String name) {
return env.get(name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,15 +138,18 @@ private Map<String, String> getPropertiesPropagatedToChildProcess(
ExecutionSettings executionSettings,
BuildSessionSettings sessionSettings) {
Map<String, String> propagatedSystemProperties = new HashMap<>();
Properties systemProperties = System.getProperties();
for (Map.Entry<Object, Object> e : systemProperties.entrySet()) {
String propertyName = (String) e.getKey();
Object propertyValue = e.getValue();
if ((propertyName.startsWith(Config.PREFIX)
|| propertyName.startsWith("datadog.slf4j.simpleLogger.defaultLogLevel"))
&& propertyValue != null) {
propagatedSystemProperties.put(propertyName, propertyValue.toString());
try {
Properties systemProperties = System.getProperties();
for (Map.Entry<Object, Object> e : systemProperties.entrySet()) {
String propertyName = (String) e.getKey();
Object propertyValue = e.getValue();
if ((propertyName.startsWith(Config.PREFIX)
|| propertyName.startsWith("datadog.slf4j.simpleLogger.defaultLogLevel"))
&& propertyValue != null) {
propagatedSystemProperties.put(propertyName, propertyValue.toString());
}
}
} catch (SecurityException ignored) {
}

propagatedSystemProperties.put(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package datadog.trace.civisibility.utils;

import datadog.environment.SystemProperties;
import de.thetaphi.forbiddenapis.SuppressForbidden;
import java.io.IOException;
import java.nio.file.FileVisitResult;
Expand Down Expand Up @@ -77,7 +78,7 @@ public static String expandTilde(final String path) {
return path;
}

return path.replaceFirst("^~", System.getProperty("user.home"));
return path.replaceFirst("^~", SystemProperties.getOrDefault("user.home", ""));
}

public static String toRealPath(String path) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import datadog.common.version.VersionInfo;
import datadog.communication.http.OkHttpUtils;
import datadog.crashtracking.dto.CrashLog;
import datadog.environment.SystemProperties;
import datadog.trace.api.Config;
import datadog.trace.api.DDTags;
import datadog.trace.bootstrap.config.provider.ConfigProvider;
Expand Down Expand Up @@ -302,7 +303,9 @@ private RequestBody makeTelemetryRequestBody(@Nonnull String content) throws IOE
writer.beginObject();
writer.name("env").value(config.getEnv());
writer.name("language_name").value("jvm");
writer.name("language_version").value(System.getProperty("java.version", "unknown"));
writer
.name("language_version")
.value(SystemProperties.getOrDefault("java.version", "unknown"));
writer.name("service_name").value(config.getServiceName());
writer.name("service_version").value(config.getVersion());
writer.name("tracer_version").value(VersionInfo.VERSION);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import static java.nio.file.attribute.PosixFilePermissions.fromString;
import static java.util.Locale.ROOT;

import datadog.environment.SystemProperties;
import datadog.trace.util.PidHelper;
import datadog.trace.util.Strings;
import java.io.BufferedReader;
Expand All @@ -36,7 +37,7 @@ static void initialize(String onErrorVal, String onErrorFile) {
return;
}
if (onErrorFile == null || onErrorFile.isEmpty()) {
onErrorFile = System.getProperty("user.dir") + "/hs_err_pid" + PidHelper.getPid() + ".log";
onErrorFile = SystemProperties.get("user.dir") + "/hs_err_pid" + PidHelper.getPid() + ".log";
LOG.debug("No -XX:ErrorFile value, defaulting to {}", onErrorFile);
} else {
onErrorFile = Strings.replace(onErrorFile, "%p", PidHelper.getPid());
Expand Down Expand Up @@ -120,7 +121,7 @@ private static void writeCrashUploaderScript(

private static String template(String line, String execClass, String crashFile) {
line = Strings.replace(line, "!AGENT_JAR!", execClass);
line = Strings.replace(line, "!JAVA_HOME!", System.getProperty("java.home"));
line = Strings.replace(line, "!JAVA_HOME!", SystemProperties.get("java.home"));
if (crashFile != null) {
line = Strings.replace(line, "!JAVA_ERROR_FILE!", crashFile);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.datadoghq.profiler.JVMAccess;
import com.sun.management.HotSpotDiagnosticMXBean;
import datadog.environment.OperatingSystem;
import datadog.environment.SystemProperties;
import datadog.libs.ddprof.DdprofLibraryLoader;
import datadog.trace.util.PidHelper;
import datadog.trace.util.TempLocationManager;
Expand Down Expand Up @@ -162,7 +163,7 @@ static void writeConfig(Path scriptPath, String... entries) {
bw.write(entries[i + 1]);
bw.newLine();
}
bw.write("java_home=" + System.getProperty("java.home"));
bw.write("java_home=" + SystemProperties.get("java.home"));
bw.newLine();

Runtime.getRuntime()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import datadog.crashtracking.dto.SemanticVersion;
import datadog.crashtracking.dto.StackFrame;
import datadog.crashtracking.dto.StackTrace;
import datadog.environment.SystemProperties;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
Expand Down Expand Up @@ -214,10 +215,10 @@ public CrashLog parse(String crashLog) {
Metadata metadata = new Metadata("dd-trace-java", VersionInfo.VERSION, "java", null);
OSInfo osInfo =
new OSInfo(
System.getProperty("os.arch"),
System.getProperty("sun.arch.data.model"),
System.getProperty("os.name"),
SemanticVersion.of(System.getProperty("os.version")));
SystemProperties.get("os.arch"),
SystemProperties.get("sun.arch.data.model"),
SystemProperties.get("os.name"),
SemanticVersion.of(SystemProperties.get("os.version")));
ProcInfo procInfo = pid != null ? new ProcInfo(pid) : null;
return new CrashLog(false, datetime, error, metadata, osInfo, procInfo);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import datadog.common.version.VersionInfo;
import datadog.crashtracking.dto.CrashLog;
import datadog.environment.SystemProperties;
import datadog.trace.api.Config;
import datadog.trace.bootstrap.config.provider.ConfigProvider;
import java.io.BufferedReader;
Expand Down Expand Up @@ -184,7 +185,7 @@ public void testTelemetryHappyPath(String log) throws Exception {
assertEquals(ENV, event.get("application").get("env").asText());
assertEquals("jvm", event.get("application").get("language_name").asText());
assertEquals(
System.getProperty("java.version", "unknown"),
SystemProperties.getOrDefault("java.version", "unknown"),
event.get("application").get("language_version").asText());
assertEquals(SERVICE, event.get("application").get("service_name").asText());
assertEquals(VERSION, event.get("application").get("service_version").asText());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.datadog.debugger.util.ClassFileLines;
import com.datadog.debugger.util.DebuggerMetrics;
import com.datadog.debugger.util.ExceptionHelper;
import datadog.environment.SystemProperties;
import datadog.trace.agent.tooling.AgentStrategies;
import datadog.trace.api.Config;
import datadog.trace.bootstrap.debugger.MethodLocation;
Expand Down Expand Up @@ -89,7 +90,7 @@ public class DebuggerTransformer implements ClassFileTransformer {
SpanProbe.class);
private static final String JAVA_IO_TMPDIR = "java.io.tmpdir";

public static Path DUMP_PATH = Paths.get(System.getProperty(JAVA_IO_TMPDIR), "debugger");
public static Path DUMP_PATH = Paths.get(SystemProperties.get(JAVA_IO_TMPDIR), "debugger");

private final Config config;
private final TransformerDefinitionMatcher definitionMatcher;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static datadog.trace.util.AgentThreadFactory.newAgentThread;
import static org.datadog.jmxfetch.AppConfig.ACTION_COLLECT;

import datadog.environment.SystemProperties;
import datadog.trace.api.Config;
import datadog.trace.api.GlobalTracer;
import datadog.trace.api.StatsDClient;
Expand Down Expand Up @@ -47,9 +48,9 @@ private static void run(final StatsDClientManager statsDClientManager, final Con
}

if (!log.isDebugEnabled()
&& System.getProperty("org.slf4j.simpleLogger.log.org.datadog.jmxfetch") == null) {
&& SystemProperties.get("org.slf4j.simpleLogger.log.org.datadog.jmxfetch") == null) {
// Reduce noisiness of jmxfetch logging.
System.setProperty("org.slf4j.simpleLogger.log.org.datadog.jmxfetch", "warn");
SystemProperties.set("org.slf4j.simpleLogger.log.org.datadog.jmxfetch", "warn");
}

final String jmxFetchConfigDir = config.getJmxFetchConfigDir();
Expand Down Expand Up @@ -217,10 +218,11 @@ private static List<String> getInternalMetricFiles() {
}

private static String getLogLocation() {
return System.getProperty("org.slf4j.simpleLogger.logFile", "System.err");
return SystemProperties.getOrDefault("org.slf4j.simpleLogger.logFile", "System.err");
}

private static String getLogLevel() {
return System.getProperty("org.slf4j.simpleLogger.defaultLogLevel", "info").toUpperCase();
return SystemProperties.getOrDefault("org.slf4j.simpleLogger.defaultLogLevel", "info")
.toUpperCase();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static java.nio.file.Files.readAllBytes;

import datadog.environment.SystemProperties;
import datadog.trace.api.Config;
import datadog.trace.api.flare.TracerFlare;
import java.io.File;
Expand Down Expand Up @@ -45,7 +46,7 @@ public void prepareForFlare() {
String captureFilename =
"tracer" + "-" + Config.get().getRuntimeId() + "-" + endMillis + ".log";
try {
Path tempPath = Paths.get(System.getProperty("java.io.tmpdir"), captureFilename);
Path tempPath = Paths.get(SystemProperties.get("java.io.tmpdir"), captureFilename);
Path parentPath = tempPath.getParent();
if (parentPath != null && !Files.isDirectory(parentPath)) {
Files.createDirectories(parentPath);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.datadog.profiling.ddprof;

import datadog.environment.SystemProperties;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashSet;
Expand Down Expand Up @@ -29,6 +30,6 @@ public static Arch of(String identifier) {
}

public static Arch current() {
return Arch.of(System.getProperty("os.arch"));
return Arch.of(SystemProperties.get("os.arch"));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.datadog.profiling.ddprof;

import datadog.environment.SystemProperties;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashSet;
Expand Down Expand Up @@ -27,6 +28,6 @@ public static OperatingSystem of(String identifier) {
}

public static OperatingSystem current() {
return OperatingSystem.of(System.getProperty("os.name"));
return OperatingSystem.of(SystemProperties.get("os.name"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static datadog.trace.util.AgentThreadFactory.AgentThread.PROFILER_HTTP_DISPATCHER;

import datadog.environment.JavaVirtualMachine;
import datadog.environment.SystemProperties;
import datadog.trace.api.profiling.RecordingData;
import datadog.trace.relocate.api.IOLogger;
import datadog.trace.util.AgentThreadFactory;
Expand Down Expand Up @@ -44,7 +45,7 @@ public class JfrCliHelper {
public static void invokeOn(final RecordingData data, final IOLogger ioLogger) {
File tmp = null;
try {
Path jfr = Paths.get(System.getProperty("java.home"), "bin", "jfr");
Path jfr = Paths.get(SystemProperties.get("java.home"), "bin", "jfr");
if (JavaVirtualMachine.isJ9() || !Files.exists(jfr)) {
ioLogger.error("Failed to gather information on recording, can't find `jfr`");
return;
Expand Down
Loading