From b91074c79a80992f5aa52651cdc4d0180d08c516 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Mon, 22 Sep 2025 15:50:39 -0400 Subject: [PATCH 01/41] Reference to scheduled action should be inside task to avoid race condition. (#9585) --- gradle/dump_hanging_test.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/dump_hanging_test.gradle b/gradle/dump_hanging_test.gradle index 3a322463ed2..d10ea461b44 100644 --- a/gradle/dump_hanging_test.gradle +++ b/gradle/dump_hanging_test.gradle @@ -68,16 +68,16 @@ tasks.withType(Test).configureEach { testTask -> }, delayMinutes, TimeUnit.MINUTES) // Store handles for cancellation in doLast. - ext.dumpFuture = future - ext.dumpScheduler = scheduler + testTask.ext.dumpFuture = future + testTask.ext.dumpScheduler = scheduler } doLast { // Cancel if the task finished before the scheduled dump. try { - ext.dumpFuture?.cancel(false) + testTask.ext.dumpFuture?.cancel(false) } finally { - ext.dumpScheduler?.shutdownNow() + testTask.ext.dumpScheduler?.shutdownNow() } } } From 7b1d89d38454263593c5e8415dac9a50bb1558df Mon Sep 17 00:00:00 2001 From: Zhengyu Gu Date: Mon, 22 Sep 2025 16:06:26 -0400 Subject: [PATCH 02/41] Bump ddprof to 1.32.0 (#9584) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 601824d525b..929bb806573 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,7 +29,7 @@ moshi = '1.11.0' testcontainers = '1.20.1' jmc = "8.1.0" autoservice = "1.1.1" -ddprof = "1.31.0" +ddprof = "1.32.0" asm = "9.8" cafe_crypto = "0.1.0" lz4 = "1.7.1" From a519ee2013851ee125ead9b48f64facfd12acc1b Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Mon, 22 Sep 2025 17:51:51 -0400 Subject: [PATCH 03/41] Enable process tags collection by default (#9510) --- .../smoketest/TracerDebuggerIntegrationTest.java | 6 +----- .../src/main/java/datadog/trace/api/Config.java | 3 +-- .../datadog/trace/api/ProcessTagsForkedTest.groovy | 14 ++++++-------- .../remoteconfig/PollerRequestFactoryTest.groovy | 6 +----- 4 files changed, 9 insertions(+), 20 deletions(-) diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java index 36e798bfb45..6300b376f7a 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java @@ -9,7 +9,6 @@ import com.datadog.debugger.probe.LogProbe; import com.datadog.debugger.sink.Snapshot; -import datadog.environment.JavaVirtualMachine; import datadog.trace.agent.test.utils.PortUtils; import datadog.trace.bootstrap.debugger.MethodLocation; import datadog.trace.bootstrap.debugger.ProbeId; @@ -214,10 +213,7 @@ private void doTestTracer(LogProbe logProbe, boolean enableProcessTags) throws E setCurrentConfiguration(createConfig(logProbe)); String httpPort = String.valueOf(PortUtils.randomOpenPort()); ProcessBuilder processBuilder = createProcessBuilder(logFilePath, "--server.port=" + httpPort); - if (enableProcessTags) { - processBuilder.environment().put("DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED", "true"); - } else if (JavaVirtualMachine.isJavaVersion(21)) { - // disable explicitly since enable by default on 21 + if (!enableProcessTags) { processBuilder.environment().put("DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED", "false"); } targetProcess = processBuilder.start(); diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index b67b565a8c0..9903cdd92fd 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -1527,8 +1527,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins removeIntegrationServiceNamesEnabled = configProvider.getBoolean(TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED, false); experimentalPropagateProcessTagsEnabled = - configProvider.getBoolean( - EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, JavaVirtualMachine.isJavaVersion(21)); + configProvider.getBoolean(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, true); peerServiceMapping = configProvider.getMergedMap(TRACE_PEER_SERVICE_MAPPING); diff --git a/internal-api/src/test/groovy/datadog/trace/api/ProcessTagsForkedTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ProcessTagsForkedTest.groovy index 52b3ffd2f3a..4bae682a9f0 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ProcessTagsForkedTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ProcessTagsForkedTest.groovy @@ -1,6 +1,5 @@ package datadog.trace.api -import datadog.environment.JavaVirtualMachine import datadog.trace.api.env.CapturedEnvironment import datadog.trace.test.util.DDSpecification @@ -89,20 +88,19 @@ class ProcessTagsForkedTest extends DDSpecification { null | "server1" | "^((?!cluster.name|server.name|server.type).)*\$" } - def 'should not calculate process tags by default except for java 21'() { - final boolean shouldBeEnabled = JavaVirtualMachine.isJavaVersion(21) + def 'calculate process tags by default'() { when: ProcessTags.reset() def processTags = ProcessTags.tagsForSerialization then: - assert ProcessTags.enabled == shouldBeEnabled - assert (processTags != null) == shouldBeEnabled + assert ProcessTags.enabled + assert (processTags != null) when: ProcessTags.addTag("test", "value") then: - assert (ProcessTags.tagsForSerialization != null) == shouldBeEnabled - assert (ProcessTags.tagsAsStringList != null) == shouldBeEnabled - assert (ProcessTags.tagsAsUTF8ByteStringList != null) == shouldBeEnabled + assert (ProcessTags.tagsForSerialization != null) + assert (ProcessTags.tagsAsStringList != null) + assert (ProcessTags.tagsAsUTF8ByteStringList != null) } def 'should lazily recalculate when a tag is added'() { diff --git a/remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/PollerRequestFactoryTest.groovy b/remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/PollerRequestFactoryTest.groovy index 7a01e446f32..128baa0da24 100644 --- a/remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/PollerRequestFactoryTest.groovy +++ b/remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/PollerRequestFactoryTest.groovy @@ -1,7 +1,6 @@ package datadog.remoteconfig import com.squareup.moshi.Moshi -import datadog.environment.JavaVirtualMachine import datadog.remoteconfig.tuf.RemoteConfigRequest import datadog.trace.api.ProcessTags import datadog.trace.bootstrap.instrumentation.api.Tags @@ -59,10 +58,7 @@ class PollerRequestFactoryTest extends DDSpecification { void 'remote config provides process tags when enabled = #enabled'() { setup: - // to be changed when activated by default - if (enabled) { - injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "true") - } else if (JavaVirtualMachine.isJavaVersion(21)) { + if (!enabled) { injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "false") } ProcessTags.reset() From 0094a60a8063b8c192371d22ea37fefbbe9fe501 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Tue, 23 Sep 2025 10:24:33 +0200 Subject: [PATCH 04/41] Defer metrics aggregator classloading to save startup time (#9590) * Revert "Lazily obtain feature discovery when starting client metrics (#9548)" This reverts commit 561eb5e7affa9c961722c915ec42f3f7b3534e18. * Defer metrics aggregator classloading to save startup time --- .../benchmark/StaticEventLogger.java | 2 +- .../ConflatingMetricsAggregatorBenchmark.java | 30 +++++------ .../metrics/ConflatingMetricsAggregator.java | 54 ++++++++----------- .../common/metrics/NoOpMetricsAggregator.java | 2 +- .../java/datadog/trace/core/CoreTracer.java | 27 +++++++--- .../ConflatingMetricAggregatorTest.groovy | 43 +++++++-------- .../common/metrics/FootprintForkedTest.groovy | 5 +- .../metrics/MetricsReliabilityTest.groovy | 8 --- 8 files changed, 75 insertions(+), 96 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/benchmark/StaticEventLogger.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/benchmark/StaticEventLogger.java index d8e05b5e1cc..c61c3e0c8ac 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/benchmark/StaticEventLogger.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/benchmark/StaticEventLogger.java @@ -97,7 +97,7 @@ private static String getAgentVersion() { for (int c = reader.read(); c != -1; c = reader.read()) { sb.append((char) c); } - } catch (IOException e) { + } catch (Throwable ignored) { // swallow exception return null; } diff --git a/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorBenchmark.java b/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorBenchmark.java index 4f5911ebc69..3ae8a050f32 100644 --- a/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorBenchmark.java +++ b/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorBenchmark.java @@ -4,7 +4,6 @@ import static java.util.concurrent.TimeUnit.SECONDS; import datadog.communication.ddagent.DDAgentFeaturesDiscovery; -import datadog.communication.ddagent.SharedCommunicationObjects; import datadog.communication.monitor.Monitoring; import datadog.trace.api.WellKnownTags; import datadog.trace.core.CoreSpan; @@ -33,25 +32,20 @@ @OutputTimeUnit(MICROSECONDS) @Fork(value = 1) public class ConflatingMetricsAggregatorBenchmark { - private final SharedCommunicationObjects sco = new SharedCommunicationObjects(); - private final ConflatingMetricsAggregator aggregator; + private final DDAgentFeaturesDiscovery featuresDiscovery = + new FixedAgentFeaturesDiscovery( + Collections.singleton("peer.hostname"), Collections.emptySet()); + private final ConflatingMetricsAggregator aggregator = + new ConflatingMetricsAggregator( + new WellKnownTags("", "", "", "", "", ""), + Collections.emptySet(), + featuresDiscovery, + HealthMetrics.NO_OP, + new NullSink(), + 2048, + 2048); private final List> spans = generateTrace(64); - public ConflatingMetricsAggregatorBenchmark() { - sco.setFeaturesDiscovery( - new FixedAgentFeaturesDiscovery( - Collections.singleton("peer.hostname"), Collections.emptySet())); - aggregator = - new ConflatingMetricsAggregator( - new WellKnownTags("", "", "", "", "", ""), - Collections.emptySet(), - sco, - HealthMetrics.NO_OP, - new NullSink(), - 2048, - 2048); - } - static List> generateTrace(int len) { final List> trace = new ArrayList<>(); for (int i = 0; i < len; i++) { diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java index 04f60a78fa1..d2fd5e12a93 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java @@ -98,8 +98,7 @@ public final class ConflatingMetricsAggregator implements MetricsAggregator, Eve private final Aggregator aggregator; private final long reportingInterval; private final TimeUnit reportingIntervalTimeUnit; - private final SharedCommunicationObjects sharedCommunicationObjects; - private volatile DDAgentFeaturesDiscovery features; + private final DDAgentFeaturesDiscovery features; private final HealthMetrics healthMetrics; private volatile AgentTaskScheduler.Scheduled cancellation; @@ -111,7 +110,7 @@ public ConflatingMetricsAggregator( this( config.getWellKnownTags(), config.getMetricsIgnoredResources(), - sharedCommunicationObjects, + sharedCommunicationObjects.featuresDiscovery(config), healthMetrics, new OkHttpSink( sharedCommunicationObjects.okHttpClient, @@ -127,7 +126,7 @@ public ConflatingMetricsAggregator( ConflatingMetricsAggregator( WellKnownTags wellKnownTags, Set ignoredResources, - SharedCommunicationObjects sharedCommunicationObjects, + DDAgentFeaturesDiscovery features, HealthMetrics healthMetric, Sink sink, int maxAggregates, @@ -135,7 +134,7 @@ public ConflatingMetricsAggregator( this( wellKnownTags, ignoredResources, - sharedCommunicationObjects, + features, healthMetric, sink, maxAggregates, @@ -147,7 +146,7 @@ public ConflatingMetricsAggregator( ConflatingMetricsAggregator( WellKnownTags wellKnownTags, Set ignoredResources, - SharedCommunicationObjects sharedCommunicationObjects, + DDAgentFeaturesDiscovery features, HealthMetrics healthMetric, Sink sink, int maxAggregates, @@ -156,7 +155,7 @@ public ConflatingMetricsAggregator( TimeUnit timeUnit) { this( ignoredResources, - sharedCommunicationObjects, + features, healthMetric, sink, new SerializingMetricWriter(wellKnownTags, sink), @@ -168,7 +167,7 @@ public ConflatingMetricsAggregator( ConflatingMetricsAggregator( Set ignoredResources, - SharedCommunicationObjects sharedCommunicationObjects, + DDAgentFeaturesDiscovery features, HealthMetrics healthMetric, Sink sink, MetricWriter metricWriter, @@ -181,7 +180,7 @@ public ConflatingMetricsAggregator( this.batchPool = new SpmcArrayQueue<>(maxAggregates); this.pending = new NonBlockingHashMap<>(maxAggregates * 4 / 3); this.keys = new NonBlockingHashMap<>(); - this.sharedCommunicationObjects = sharedCommunicationObjects; + this.features = features; this.healthMetrics = healthMetric; this.sink = sink; this.aggregator = @@ -199,18 +198,6 @@ public ConflatingMetricsAggregator( this.reportingIntervalTimeUnit = timeUnit; } - private DDAgentFeaturesDiscovery featuresDiscovery() { - DDAgentFeaturesDiscovery ret = features; - if (ret != null) { - return ret; - } - // no need to synchronise here since it's already done in sharedCommunicationObject. - // At worst, we'll assign multiple time the variable but it will be the same object - ret = sharedCommunicationObjects.featuresDiscovery(Config.get()); - features = ret; - return ret; - } - @Override public void start() { sink.register(this); @@ -226,6 +213,13 @@ public void start() { log.debug("started metrics aggregator"); } + private boolean isMetricsEnabled() { + if (features.getMetricsEndpoint() == null) { + features.discoverIfOutdated(); + } + return features.supportsMetrics(); + } + @Override public boolean report() { boolean published; @@ -242,7 +236,8 @@ public boolean report() { @Override public Future forceReport() { - if (!featuresDiscovery().supportsMetrics()) { + // Ensure the feature is enabled + if (!isMetricsEnabled()) { return CompletableFuture.completedFuture(false); } // Wait for the thread to start @@ -278,7 +273,6 @@ public Future forceReport() { public boolean publish(List> trace) { boolean forceKeep = false; int counted = 0; - final DDAgentFeaturesDiscovery features = featuresDiscovery(); if (features.supportsMetrics()) { for (CoreSpan span : trace) { boolean isTopLevel = span.isTopLevel(); @@ -289,7 +283,7 @@ public boolean publish(List> trace) { break; } counted++; - forceKeep |= publish(span, isTopLevel, features); + forceKeep |= publish(span, isTopLevel); } } healthMetrics.onClientStatTraceComputed( @@ -311,7 +305,7 @@ private boolean spanKindEligible(CoreSpan span) { return spanKind != null && ELIGIBLE_SPAN_KINDS_FOR_METRICS.contains(spanKind.toString()); } - private boolean publish(CoreSpan span, boolean isTopLevel, DDAgentFeaturesDiscovery features) { + private boolean publish(CoreSpan span, boolean isTopLevel) { final CharSequence spanKind = span.getTag(SPAN_KIND, ""); MetricKey newKey = new MetricKey( @@ -324,7 +318,7 @@ private boolean publish(CoreSpan span, boolean isTopLevel, DDAgentFeaturesDis span.getParentId() == 0, SPAN_KINDS.computeIfAbsent( spanKind, UTF8BytesString::create), // save repeated utf8 conversions - getPeerTags(span, spanKind.toString(), features)); + getPeerTags(span, spanKind.toString())); boolean isNewKey = false; MetricKey key = keys.putIfAbsent(newKey, newKey); if (null == key) { @@ -359,8 +353,7 @@ private boolean publish(CoreSpan span, boolean isTopLevel, DDAgentFeaturesDis return isNewKey || span.getError() > 0; } - private List getPeerTags( - CoreSpan span, String spanKind, DDAgentFeaturesDiscovery features) { + private List getPeerTags(CoreSpan span, String spanKind) { if (ELIGIBLE_SPAN_KINDS_FOR_PEER_AGGREGATION.contains(spanKind)) { List peerTags = new ArrayList<>(); for (String peerTag : features.peerTags()) { @@ -424,7 +417,8 @@ public void onEvent(EventType eventType, String message) { switch (eventType) { case DOWNGRADED: log.debug("Agent downgrade was detected"); - AgentTaskScheduler.get().execute(this::disable); + disable(); + healthMetrics.onClientStatDowngraded(); break; case BAD_PAYLOAD: log.debug("bad metrics payload sent to trace agent: {}", message); @@ -440,11 +434,9 @@ public void onEvent(EventType eventType, String message) { } private void disable() { - final DDAgentFeaturesDiscovery features = featuresDiscovery(); features.discover(); if (!features.supportsMetrics()) { log.debug("Disabling metric reporting because an agent downgrade was detected"); - healthMetrics.onClientStatDowngraded(); this.pending.clear(); this.batchPool.clear(); this.inbox.clear(); diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/NoOpMetricsAggregator.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/NoOpMetricsAggregator.java index 733d77d3fac..a15c008e109 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/NoOpMetricsAggregator.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/NoOpMetricsAggregator.java @@ -9,7 +9,7 @@ public final class NoOpMetricsAggregator implements MetricsAggregator { - static final NoOpMetricsAggregator INSTANCE = new NoOpMetricsAggregator(); + public static final NoOpMetricsAggregator INSTANCE = new NoOpMetricsAggregator(); @Override public void start() {} diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index d9832549867..5f64f71cbf1 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -72,6 +72,7 @@ import datadog.trace.civisibility.interceptor.CiVisibilityTraceInterceptor; import datadog.trace.common.GitMetadataTraceInterceptor; import datadog.trace.common.metrics.MetricsAggregator; +import datadog.trace.common.metrics.NoOpMetricsAggregator; import datadog.trace.common.sampling.Sampler; import datadog.trace.common.sampling.SingleSpanSampler; import datadog.trace.common.sampling.SpanSamplingRules; @@ -182,7 +183,7 @@ public static CoreTracerBuilder builder() { /** Scope manager is in charge of managing the scopes from which spans are created */ final ContinuableScopeManager scopeManager; - final MetricsAggregator metricsAggregator; + volatile MetricsAggregator metricsAggregator; /** Initial static configuration associated with the tracer. */ final Config initialConfig; @@ -783,16 +784,26 @@ private CoreTracer( pendingTraceBuffer.start(); sharedCommunicationObjects.whenReady(this.writer::start); - - metricsAggregator = - createMetricsAggregator(config, sharedCommunicationObjects, this.healthMetrics); - // Schedule the metrics aggregator to begin reporting after a random delay of 1 to 10 seconds - // (using milliseconds granularity.) This avoids a fleet of traced applications starting at the - // same time from sending metrics in sync. + // temporary assign a no-op instance. The final one will be resolved when the discovery will be + // allowed + metricsAggregator = NoOpMetricsAggregator.INSTANCE; + final SharedCommunicationObjects sco = sharedCommunicationObjects; + // asynchronously create the aggregator to avoid triggering expensive classloading during the + // tracer initialisation. sharedCommunicationObjects.whenReady( () -> AgentTaskScheduler.get() - .scheduleWithJitter(MetricsAggregator::start, metricsAggregator, 1, SECONDS)); + .execute( + () -> { + metricsAggregator = createMetricsAggregator(config, sco, this.healthMetrics); + // Schedule the metrics aggregator to begin reporting after a random delay of + // 1 to 10 seconds (using milliseconds granularity.) + // This avoids a fleet of traced applications starting at the same time from + // sending metrics in sync. + AgentTaskScheduler.get() + .scheduleWithJitter( + MetricsAggregator::start, metricsAggregator, 1, SECONDS); + })); if (dataStreamsMonitoring == null) { this.dataStreamsMonitoring = diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy index 747cb33e7e3..52c1bb34de1 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy @@ -1,7 +1,6 @@ package datadog.trace.common.metrics import datadog.communication.ddagent.DDAgentFeaturesDiscovery -import datadog.communication.ddagent.SharedCommunicationObjects import datadog.trace.api.WellKnownTags import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString import datadog.trace.core.CoreSpan @@ -39,7 +38,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator( wellKnownTags, empty, - sharedCommunicationObjects(features), + features, HealthMetrics.NO_OP, sink, 10, @@ -69,7 +68,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator( wellKnownTags, [ignoredResourceName].toSet(), - sharedCommunicationObjects(features), + features, HealthMetrics.NO_OP, sink, 10, @@ -105,7 +104,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) aggregator.start() when: @@ -147,7 +146,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) aggregator.start() when: @@ -198,7 +197,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >>> [["country"], ["country", "georegion"],] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) aggregator.start() when: @@ -257,7 +256,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> ["peer.hostname", "_dd.base_service"] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) aggregator.start() when: @@ -305,7 +304,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { DDAgentFeaturesDiscovery features = Mock(DDAgentFeaturesDiscovery) features.supportsMetrics() >> true features.peerTags() >> [] - ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, sharedCommunicationObjects(features), HealthMetrics.NO_OP, + ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) aggregator.start() @@ -354,7 +353,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) long duration = 100 List trace = [ new SimpleSpan("service", "operation", "resource", "type", true, false, false, 0, duration, HTTP_OK).setTag(SPAN_KIND, "baz"), @@ -419,7 +418,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, reportingInterval, SECONDS) long duration = 100 aggregator.start() @@ -478,7 +477,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, reportingInterval, SECONDS) long duration = 100 aggregator.start() @@ -568,7 +567,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, reportingInterval, SECONDS) long duration = 100 aggregator.start() @@ -624,7 +623,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) long duration = 100 aggregator.start() @@ -671,7 +670,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) long duration = 100 aggregator.start() @@ -710,7 +709,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> true features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) long duration = 100 aggregator.start() @@ -741,7 +740,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { Sink sink = Stub(Sink) DDAgentFeaturesDiscovery features = Mock(DDAgentFeaturesDiscovery) ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) aggregator.start() when: @@ -763,7 +762,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { features.supportsMetrics() >> false features.peerTags() >> [] ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, 10, queueSize, 200, MILLISECONDS) + features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, 200, MILLISECONDS) final spans = [ new SimpleSpan("service", "operation", "resource", "type", false, true, false, 0, 10, HTTP_OK) ] @@ -795,7 +794,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { DDAgentFeaturesDiscovery features = Mock(DDAgentFeaturesDiscovery) features.supportsMetrics() >> true ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, maxAggregates, queueSize, 1, SECONDS) when: def async = CompletableFuture.supplyAsync(new Supplier() { @@ -828,7 +827,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification { DDAgentFeaturesDiscovery features = Mock(DDAgentFeaturesDiscovery) features.supportsMetrics() >> true ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, - sharedCommunicationObjects(features), HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) + features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) aggregator.start() when: @@ -876,10 +875,4 @@ class ConflatingMetricAggregatorTest extends DDSpecification { Thread.sleep(10) } } - - def sharedCommunicationObjects(features) { - def ret = new SharedCommunicationObjects() - ret.setFeaturesDiscovery(features) - ret - } } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/FootprintForkedTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/FootprintForkedTest.groovy index da5fe6a26c4..4a96460d604 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/FootprintForkedTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/FootprintForkedTest.groovy @@ -1,7 +1,6 @@ package datadog.trace.common.metrics import datadog.communication.ddagent.DDAgentFeaturesDiscovery -import datadog.communication.ddagent.SharedCommunicationObjects import datadog.trace.api.WellKnownTags import datadog.trace.core.monitor.HealthMetrics import datadog.trace.test.util.DDSpecification @@ -27,16 +26,14 @@ class FootprintForkedTest extends DDSpecification { setup: CountDownLatch latch = new CountDownLatch(1) ValidatingSink sink = new ValidatingSink(latch) - SharedCommunicationObjects sco = new SharedCommunicationObjects() DDAgentFeaturesDiscovery features = Stub(DDAgentFeaturesDiscovery) { it.supportsMetrics() >> true it.peerTags() >> [] } - sco.setFeaturesDiscovery(features) ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator( new WellKnownTags("runtimeid","hostname", "env", "service", "version","language"), [].toSet() as Set, - sco, + features, HealthMetrics.NO_OP, sink, 1000, diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/MetricsReliabilityTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/MetricsReliabilityTest.groovy index 26103f11bed..8c7c64a275b 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/MetricsReliabilityTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/MetricsReliabilityTest.groovy @@ -12,8 +12,6 @@ import java.util.concurrent.CountDownLatch import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer -import java.util.concurrent.TimeUnit - class MetricsReliabilityTest extends DDCoreSpecification { static class State { @@ -89,7 +87,6 @@ class MetricsReliabilityTest extends DDCoreSpecification { when: "simulate an agent downgrade" - def discoveryState = featuresDiscovery.discoveryState state.reset(false, 404) tracer.startSpan("test", "test").finish() tracer.flush() @@ -97,11 +94,6 @@ class MetricsReliabilityTest extends DDCoreSpecification { then: "a discovery should have done - we do not support anymore stats calculation" state.latch.await() - // wait at least 5 seconds. the discovery is done asynchronously so we should wait for the internal state flip - def start = System.nanoTime() - while (discoveryState == featuresDiscovery.discoveryState && TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - start) < 5) { - Thread.yield() - } assert !featuresDiscovery.supportsMetrics() // 2 traces processed. 1 p0 dropped. 2 requests and 1 downgrade no errors assertMetrics(healthMetrics, 2, 1, 2, 0, 1) From aadd47174a6699535f12452aee59059e9f580593 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Tue, 23 Sep 2025 15:06:32 +0200 Subject: [PATCH 05/41] Add support for JUnit 6.0.0-RC3 (#9592) --- .../instrumentation/junit-5.3/gradle.lockfile | 18 ++++---- .../junit-5.3/junit-5.8/gradle.lockfile | 18 ++++---- .../junit5/ExecutionRequestFactory.java | 42 +++++++++++++++++++ 3 files changed, 60 insertions(+), 18 deletions(-) diff --git a/dd-java-agent/instrumentation/junit-5.3/gradle.lockfile b/dd-java-agent/instrumentation/junit-5.3/gradle.lockfile index 7f34530bc9c..32e8f83379c 100644 --- a/dd-java-agent/instrumentation/junit-5.3/gradle.lockfile +++ b/dd-java-agent/instrumentation/junit-5.3/gradle.lockfile @@ -132,39 +132,39 @@ org.jspecify:jspecify:1.0.0=latestDepTestCompileClasspath org.junit.jupiter:junit-jupiter-api:5.12.2=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.13.4=latest5TestCompileClasspath,latest5TestRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.3.0=compileClasspath -org.junit.jupiter:junit-jupiter-api:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.12.2=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.13.4=latest5TestCompileClasspath,latest5TestRuntimeClasspath -org.junit.jupiter:junit-jupiter-engine:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.12.2=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.13.4=latest5TestCompileClasspath,latest5TestRuntimeClasspath -org.junit.jupiter:junit-jupiter-params:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.jupiter:junit-jupiter:5.12.2=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter:5.13.4=latest5TestCompileClasspath,latest5TestRuntimeClasspath -org.junit.jupiter:junit-jupiter:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.jupiter:junit-jupiter:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.platform:junit-platform-commons:1.12.2=testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=latest5TestCompileClasspath,latest5TestRuntimeClasspath org.junit.platform:junit-platform-commons:1.3.0=compileClasspath -org.junit.platform:junit-platform-commons:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.platform:junit-platform-commons:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.platform:junit-platform-engine:1.12.2=testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=latest5TestCompileClasspath,latest5TestRuntimeClasspath org.junit.platform:junit-platform-engine:1.3.0=compileClasspath -org.junit.platform:junit-platform-engine:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.platform:junit-platform-engine:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.platform:junit-platform-launcher:1.12.2=testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=latest5TestCompileClasspath,latest5TestRuntimeClasspath org.junit.platform:junit-platform-launcher:1.3.0=compileClasspath -org.junit.platform:junit-platform-launcher:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.platform:junit-platform-launcher:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.platform:junit-platform-runner:1.12.2=latestDepTestRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-runner:1.13.4=latest5TestRuntimeClasspath org.junit.platform:junit-platform-suite-api:1.12.2=testRuntimeClasspath org.junit.platform:junit-platform-suite-api:1.13.4=latest5TestRuntimeClasspath -org.junit.platform:junit-platform-suite-api:6.0.0-RC2=latestDepTestRuntimeClasspath +org.junit.platform:junit-platform-suite-api:6.0.0-RC3=latestDepTestRuntimeClasspath org.junit.platform:junit-platform-suite-commons:1.12.2=latestDepTestRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-suite-commons:1.13.4=latest5TestRuntimeClasspath org.junit:junit-bom:5.12.2=testCompileClasspath,testRuntimeClasspath org.junit:junit-bom:5.13.4=latest5TestCompileClasspath,latest5TestRuntimeClasspath org.junit:junit-bom:5.9.1=spotbugs -org.junit:junit-bom:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit:junit-bom:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.mockito:mockito-core:4.4.0=latest5TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.msgpack:jackson-dataformat-msgpack:0.9.6=latest5TestCompileClasspath,latest5TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.6=latest5TestCompileClasspath,latest5TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/junit-5.3/junit-5.8/gradle.lockfile b/dd-java-agent/instrumentation/junit-5.3/junit-5.8/gradle.lockfile index b7862e23f69..2c03c6c54a4 100644 --- a/dd-java-agent/instrumentation/junit-5.3/junit-5.8/gradle.lockfile +++ b/dd-java-agent/instrumentation/junit-5.3/junit-5.8/gradle.lockfile @@ -130,31 +130,31 @@ org.jctools:jctools-core:3.3.0=instrumentPluginClasspath,latestDepTestRuntimeCla org.jspecify:jspecify:1.0.0=latestDepTestCompileClasspath org.junit.jupiter:junit-jupiter-api:5.12.2=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.8.0=compileClasspath -org.junit.jupiter:junit-jupiter-api:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.12.2=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.8.0=compileClasspath -org.junit.jupiter:junit-jupiter-engine:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.12.2=testCompileClasspath,testRuntimeClasspath -org.junit.jupiter:junit-jupiter-params:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.jupiter:junit-jupiter:5.12.2=testCompileClasspath,testRuntimeClasspath -org.junit.jupiter:junit-jupiter:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.jupiter:junit-jupiter:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.platform:junit-platform-commons:1.12.2=testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.8.0=compileClasspath -org.junit.platform:junit-platform-commons:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.platform:junit-platform-commons:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.platform:junit-platform-engine:1.12.2=testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.8.0=compileClasspath -org.junit.platform:junit-platform-engine:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.platform:junit-platform-engine:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.platform:junit-platform-launcher:1.12.2=testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.8.0=compileClasspath -org.junit.platform:junit-platform-launcher:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit.platform:junit-platform-launcher:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.junit.platform:junit-platform-runner:1.12.2=latestDepTestRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-suite-api:1.12.2=testRuntimeClasspath -org.junit.platform:junit-platform-suite-api:6.0.0-RC2=latestDepTestRuntimeClasspath +org.junit.platform:junit-platform-suite-api:6.0.0-RC3=latestDepTestRuntimeClasspath org.junit.platform:junit-platform-suite-commons:1.12.2=latestDepTestRuntimeClasspath,testRuntimeClasspath org.junit:junit-bom:5.12.2=testCompileClasspath,testRuntimeClasspath org.junit:junit-bom:5.8.0=compileClasspath org.junit:junit-bom:5.9.1=spotbugs -org.junit:junit-bom:6.0.0-RC2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.junit:junit-bom:6.0.0-RC3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.mockito:mockito-core:4.4.0=latestDepTestRuntimeClasspath,testRuntimeClasspath org.msgpack:jackson-dataformat-msgpack:0.9.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/ExecutionRequestFactory.java b/dd-java-agent/instrumentation/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/ExecutionRequestFactory.java index 6193122c11f..1048932cf82 100644 --- a/dd-java-agent/instrumentation/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/ExecutionRequestFactory.java +++ b/dd-java-agent/instrumentation/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/ExecutionRequestFactory.java @@ -29,6 +29,11 @@ public class ExecutionRequestFactory { */ private static final MethodHandle GET_CANCELLATION_TOKEN = METHOD_HANDLES.method(ExecutionRequest.class, "getCancellationToken"); + /* + * From 6.0.0-RC3 onwards OutputDirectoryProvider is deprecated in favor of OutputDirectoryCreator + */ + private static final MethodHandle GET_OUTPUT_DIRECTORY_CREATOR = + METHOD_HANDLES.method(ExecutionRequest.class, "getOutputDirectoryCreator"); private static final String[] CREATE_PARAMETER_TYPES = new String[] { @@ -40,11 +45,48 @@ public class ExecutionRequestFactory { "org.junit.platform.engine.CancellationToken" }; + private static final String[] CREATE_PARAMETER_TYPES_WITH_CREATOR = + new String[] { + "org.junit.platform.engine.TestDescriptor", + "org.junit.platform.engine.EngineExecutionListener", + "org.junit.platform.engine.ConfigurationParameters", + "org.junit.platform.engine.OutputDirectoryCreator", + "org.junit.platform.engine.support.store.NamespacedHierarchicalStore", + "org.junit.platform.engine.CancellationToken" + }; + private static final BiFunction EXECUTION_REQUEST_CREATE = createExecutionRequestHandle(); private static BiFunction createExecutionRequestHandle() { + // 6.0.0-RC3 and later + if (GET_OUTPUT_DIRECTORY_CREATOR != null) { + MethodHandle createMethod = + METHOD_HANDLES.method( + ExecutionRequest.class, + m -> + "create".equals(m.getName()) + && m.getParameterCount() == 6 + && Arrays.equals( + Arrays.stream(m.getParameterTypes()).map(Class::getName).toArray(), + CREATE_PARAMETER_TYPES_WITH_CREATOR)); + + return (request, listener) -> { + Object creator = METHOD_HANDLES.invoke(GET_OUTPUT_DIRECTORY_CREATOR, request); + Object store = METHOD_HANDLES.invoke(GET_STORE, request); + Object cancellationToken = METHOD_HANDLES.invoke(GET_CANCELLATION_TOKEN, request); + return METHOD_HANDLES.invoke( + createMethod, + request.getRootTestDescriptor(), + listener, + request.getConfigurationParameters(), + creator, + store, + cancellationToken); + }; + } + // 6.0.0-M2 and later if (GET_CANCELLATION_TOKEN != null) { MethodHandle createMethod = From 6ee44ddde4c7982d9ccc18182f467be2667d935e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Bempel Date: Tue, 23 Sep 2025 15:55:13 +0200 Subject: [PATCH 06/41] Allow pre-Java 6 classes to be transformed in the debugger (#9591) Allow pre-Java 6 classes to be transformed in the debugger Pre-Java 6 classes can contain JSR/RET instructions which are not supported by ASM when the COMPUTE_FRAMES is used. This leads to exceptions like this: 13:34:29.407 [Test worker] ERROR com.datadog.debugger.agent.DebuggerTransformer - Cannot write classfile for class: org.apache.felix.gogo.runtime.Pipe Exception: java.lang.IllegalArgumentException: JSR/RET are not supported with computeFrames option at org.objectweb.asm.Frame.execute(Frame.java:1028) at org.objectweb.asm.MethodWriter.visitJumpInsn(MethodWriter.java:1147) at org.objectweb.asm.tree.JumpInsnNode.accept(JumpInsnNode.java:79) at org.objectweb.asm.tree.InsnList.accept(InsnList.java:144) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:749) at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:647) at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:468) at com.datadog.debugger.agent.DebuggerTransformer.writeClassFile(DebuggerTransformer.java:492) ... This uses ASM's JSRInlinerAdapter to rewrite the problematic JSR/RET instructions as the class file is written. --------- Co-authored-by: DJ Gregor --- .../debugger/agent/DebuggerTransformer.java | 26 ++++++++++++++++++- .../debugger/agent/CapturedSnapshotTest.java | 18 +++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java index 121f2a553ad..5182f7cda17 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java @@ -59,8 +59,11 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.pool.TypePool; import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.commons.JSRInlinerAdapter; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.analysis.Analyzer; @@ -487,9 +490,10 @@ private byte[] writeClassFile( classNode.version = Opcodes.V1_8; } ClassWriter writer = new SafeClassWriter(loader); + ClassVisitor visitor = new JsrInliningClassVisitor(writer); LOGGER.debug("Generating bytecode for class: {}", Strings.getClassName(classFilePath)); try { - classNode.accept(writer); + classNode.accept(visitor); } catch (Throwable t) { LOGGER.error("Cannot write classfile for class: {} Exception: ", classFilePath, t); reportInstrumentationFails(definitions, Strings.getClassName(classFilePath)); @@ -929,6 +933,26 @@ private static Path dumpClassFile(String className, byte[] classfileBuffer) { } } + /** + * A {@link org.objectweb.asm.ClassVisitor} that uses {@link + * org.objectweb.asm.commons.JSRInlinerAdapter} to remove JSR instructions and inlines the + * referenced subroutines. This allows pre-Java 6 classes with finally blocks to be successfully + * transformed. Without this an IllegalArgumentException for "JSR/RET are not supported with + * computeFrames option" would be thrown when writing the transformed class. + */ + static class JsrInliningClassVisitor extends ClassVisitor { + protected JsrInliningClassVisitor(ClassVisitor parent) { + super(Opcodes.ASM9, parent); + } + + @Override + public MethodVisitor visitMethod( + int access, String name, String descriptor, String signature, String[] exceptions) { + MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions); + return new JSRInlinerAdapter(mv, access, name, descriptor, signature, exceptions); + } + } + static class SafeClassWriter extends ClassWriter { private final ClassLoader classLoader; 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 5a30018ccf0..f9b022f0c44 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 @@ -275,6 +275,24 @@ public void veryOldClassFile() throws Exception { assertOneSnapshot(listener); } + /** + * Ensure older pre-Java 6 class files with JSR/RET can be rewritten without "JSR/RET are not + * supported with computeFrames option" exceptions being thrown. + */ + @Test + public void veryOldClassFileWithJsrRet() throws Exception { + final String CLASS_NAME = "antlr.Tool"; // compiled with jdk 1.2 + TestSnapshotListener listener = installMethodProbe(CLASS_NAME, "copyFile", null); + Class testClass = Class.forName(CLASS_NAME); + assertNotNull(testClass); + try { + Reflect.onClass(testClass).create().call("copyFile", null, null); + } catch (Throwable t) { + // ignore + } + assertOneSnapshot(listener); + } + @Test public void oldClass1_1() throws Exception { final String CLASS_NAME = "org.apache.commons.lang.BooleanUtils"; // compiled with jdk 1.1 From e992b65c80384ac50ae3370d28a5fba6e7076593 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Tue, 23 Sep 2025 15:46:06 +0100 Subject: [PATCH 07/41] Exclude config-utils from shadowed sub-projects (avoids duplicate jar entries) (#9595) --- dd-java-agent/build.gradle | 1 + gradle/dependencies.gradle | 1 + 2 files changed, 2 insertions(+) diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index 891e58fc79c..6b86d0ba802 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -184,6 +184,7 @@ def sharedShadowJar = tasks.register('sharedShadowJar', ShadowJar) { exclude(project(':dd-trace-api')) exclude(project(':internal-api')) exclude(project(':components:context')) + exclude(project(':utils:config-utils')) exclude(project(':utils:time-utils')) exclude(dependency('org.slf4j::')) } diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 73a71bdbffa..f4c8bd35b08 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -23,6 +23,7 @@ final class CachedData { exclude(project(':remote-config:remote-config-api')) exclude(project(':remote-config:remote-config-core')) exclude(project(':telemetry')) + exclude(project(':utils:config-utils')) exclude(project(':utils:container-utils')) exclude(project(':utils:socket-utils')) exclude(project(':utils:time-utils')) From 27641dbc539b5046aa33467e5b6b7c6e4be6b85b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Bempel Date: Tue, 23 Sep 2025 19:13:51 +0200 Subject: [PATCH 08/41] Fix symbol extraction for interface static method (#9597) not all methods with code in interface are default, only the non-static ones --- .../java/com/datadog/debugger/symbol/SymbolExtractor.java | 6 ++++-- .../debugger/symbol/SymbolExtractionTransformerTest.java | 8 ++++++++ .../datadog/debugger/symboltest/SymbolExtraction14.java | 3 +++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolExtractor.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolExtractor.java index 88abfadde0f..5a65d220dcb 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolExtractor.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolExtractor.java @@ -237,8 +237,10 @@ private static Collection extractMethodModifiers( "Invalid access modifiers method[" + methodNode.name + methodNode.desc + "]: " + bit); } } - // if class is an interface && method as code this is a default method - if ((classNode.access & Opcodes.ACC_INTERFACE) > 0 && methodNode.instructions.size() > 0) { + // if class is an interface && method has code && non-static this is a default method + if ((classNode.access & Opcodes.ACC_INTERFACE) > 0 + && methodNode.instructions.size() > 0 + && (methodNode.access & Opcodes.ACC_STATIC) == 0) { results.add("default"); } return results; 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 7f576c39aa5..b6c92ab6e00 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 @@ -829,6 +829,14 @@ public void symbolExtraction14() throws IOException, URISyntaxException { null, null, Void.TYPE.getTypeName()); + Scope m4MethodScope = i1ClassScope.getScopes().get(1); + assertLangSpecifics( + m4MethodScope.getLanguageSpecifics(), + asList("public", "static"), + null, + null, + null, + String.class.getTypeName()); Scope myEnumClassScope = symbolSinkMock.jarScopes.get(3).getScopes().get(0); assertLangSpecifics( myEnumClassScope.getLanguageSpecifics(), diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/symboltest/SymbolExtraction14.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/symboltest/SymbolExtraction14.java index 45b89d01215..b2d6617921d 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/symboltest/SymbolExtraction14.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/symboltest/SymbolExtraction14.java @@ -23,6 +23,9 @@ private strictfp synchronized final String m2(String... strVarArgs) { interface I1 { default void m3(){} + static String m4(String arg){ + return arg; + } } interface I2 { From 5c66a150ff3b16ebf9626c0f0170fc9715461a6b Mon Sep 17 00:00:00 2001 From: Mikayla Toffler <46911781+mtoffl01@users.noreply.github.com> Date: Tue, 23 Sep 2025 14:22:05 -0400 Subject: [PATCH 09/41] ConfigProvider iterates over all sources and reports all non-null values to telemetry (#9404) * apply all changes from PR #9327, accomodated to master * nits: add configId in ConfigProvider methods where it was missing; fix configId test to accommodate new ConfigCollector data structure * Fix 'test config id exists in ConfigCollector when using StableConfigSource' * introduce reportDefault * Call collect in BaseApplication.getLogInjectionEnabled; make getAppliedConfigSetting static function that takes in a map * Fix call to getAppliedConfigSetting in ConfigCollector test * Introduce ConfigValueResolver and ConfigMergeResolver * getString methods only report non-null values to telemetry * remove dependency on collectConfig for reReportToCollector and reReportFinalResult * updating config collector to not override existing configs * Adding putDefault and adding unit tests * relaxing reReportToCollector restraint and adding unit test * cleanup * updating failing unit test * abstracing ConfigCollector * adding support for proper seqId with Remote Config * abstracting away getString * Update internal-api/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java * Update internal-api/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java * Update internal-api/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java * nit: fix javadoc comments * Modify getEnum, getList, getIntegerRange and getSet to report defaults before calling getString. And modify putDefault to treat null entries as a valid value * remove remoteConfig methods from ConfigCollector + highestSeqId * remove serializenulls comment in TelemetryRequestBody * remove 'no usages' comment above unused ConfigCollector put method * Simplify javadoc for putAll * remove javadoc for ABSENT_SEQ_ID * revert getStringInternal changes * Introduce new getStringInternal, for getting string from non-default sources * Deprecate ConfigCollector constructor without sequence ID * putRemote: ConfigCollector method for 'putting' from Remote Config origin; migrate AppSecConfigServiceImpl to use this API * ConfigSetting.NON_DEFAULT_SEQ_ID: introduce new constant, migrate all calls to 'DEFAULT_SEQ_ID + 1' to use new constant; move constants to top of ConfigSetting class * ConfigCollector.put: Delete unused function * Update internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy Co-authored-by: Stuart McCulloch * replace 'def origin' assignment in ConfigCollectorTest with in-line use * ConfigCollector.put: Remove deprecated function with zero uses * NEW_SUB_MAP: Define reusable lambda function as static field in ConfigCollector, used by putDefault and put * updateAll: rename putAll to updateAll, and scope to Remote origin, only * Fix updateAll * Align naming of methods that report remote config to the ConfigCollector * Avoid need to peek into ConfigCollector internals * Restore atomic reporting of updates from remote-config * Update utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java Co-authored-by: Stuart McCulloch * Update utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java Co-authored-by: Stuart McCulloch * Update utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java Co-authored-by: Stuart McCulloch * Fix bug in reReportFinalResult that incorrectly reported CALCULATED for all non-default values --------- Co-authored-by: Matthew Li Co-authored-by: Stuart McCulloch --- .../config/AppSecConfigServiceImpl.java | 3 +- .../loginjection/BaseApplication.java | 24 +- .../main/java/datadog/trace/api/Config.java | 7 +- .../java/datadog/trace/api/DynamicConfig.java | 2 +- .../trace/api/ConfigCollectorTest.groovy | 126 ++++- .../config/provider/ConfigProviderTest.groovy | 528 ++++++++++++++++++ .../provider/StableConfigSourceTest.groovy | 2 +- .../telemetry/TelemetryRequestBody.java | 1 + .../datadog/telemetry/TelemetryRunnable.java | 3 +- .../datadog/telemetry/TelemetryService.java | 13 +- .../TelemetryRequestBodySpecification.groovy | 14 +- .../TelemetryServiceSpecification.groovy | 10 +- .../telemetry/TestTelemetryRouter.groovy | 3 +- .../datadog/trace/api/ConfigCollector.java | 75 ++- .../java/datadog/trace/api/ConfigSetting.java | 28 +- .../config/provider/ConfigProvider.java | 385 +++++++++---- 16 files changed, 1023 insertions(+), 201 deletions(-) diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/config/AppSecConfigServiceImpl.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/config/AppSecConfigServiceImpl.java index d76096deeca..4cdefeb85c2 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/config/AppSecConfigServiceImpl.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/config/AppSecConfigServiceImpl.java @@ -50,7 +50,6 @@ import datadog.remoteconfig.state.ProductListener; import datadog.trace.api.Config; import datadog.trace.api.ConfigCollector; -import datadog.trace.api.ConfigOrigin; import datadog.trace.api.ProductActivation; import datadog.trace.api.UserIdCollectionMode; import datadog.trace.api.telemetry.LogCollector; @@ -589,7 +588,7 @@ private void setAppSecActivation(final AppSecFeatures.Asm asm) { } else { newState = asm.enabled; // Report AppSec activation change via telemetry when modified via remote config - ConfigCollector.get().put(APPSEC_ENABLED, asm.enabled, ConfigOrigin.REMOTE); + ConfigCollector.get().putRemote(APPSEC_ENABLED, asm.enabled); } if (AppSecSystem.isActive() != newState) { log.info("AppSec {} (runtime)", newState ? "enabled" : "disabled"); diff --git a/dd-smoke-tests/log-injection/src/main/java/datadog/smoketest/loginjection/BaseApplication.java b/dd-smoke-tests/log-injection/src/main/java/datadog/smoketest/loginjection/BaseApplication.java index a2edae29ac3..4e6b261d213 100644 --- a/dd-smoke-tests/log-injection/src/main/java/datadog/smoketest/loginjection/BaseApplication.java +++ b/dd-smoke-tests/log-injection/src/main/java/datadog/smoketest/loginjection/BaseApplication.java @@ -1,11 +1,11 @@ package datadog.smoketest.loginjection; -import static datadog.trace.api.config.TraceInstrumentationConfig.LOGS_INJECTION_ENABLED; - -import datadog.trace.api.ConfigCollector; -import datadog.trace.api.ConfigSetting; import datadog.trace.api.CorrelationIdentifier; +import datadog.trace.api.GlobalTracer; import datadog.trace.api.Trace; +import datadog.trace.api.TraceConfig; +import datadog.trace.api.Tracer; +import java.lang.reflect.Method; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; @@ -23,13 +23,13 @@ public void run() throws InterruptedException { secondTracedMethod(); - if (!waitForCondition(() -> Boolean.FALSE.equals(getLogInjectionEnabled()))) { + if (!waitForCondition(() -> !getLogInjectionEnabled())) { throw new RuntimeException("Logs injection config was never updated"); } thirdTracedMethod(); - if (!waitForCondition(() -> Boolean.TRUE.equals(getLogInjectionEnabled()))) { + if (!waitForCondition(() -> getLogInjectionEnabled())) { throw new RuntimeException("Logs injection config was never updated a second time"); } @@ -43,12 +43,14 @@ public void run() throws InterruptedException { Thread.sleep(400); } - private static Object getLogInjectionEnabled() { - ConfigSetting configSetting = ConfigCollector.get().collect().get(LOGS_INJECTION_ENABLED); - if (configSetting == null) { - return null; + private static boolean getLogInjectionEnabled() { + try { + Tracer tracer = GlobalTracer.get(); + Method captureTraceConfig = tracer.getClass().getMethod("captureTraceConfig"); + return ((TraceConfig) captureTraceConfig.invoke(tracer)).isLogsInjectionEnabled(); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); } - return configSetting.value; } @Trace diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 9903cdd92fd..aef84a8c58e 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -170,6 +170,7 @@ import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_MESSAGES_SEPARATE_TRACES; import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_TAG_SESSION_ID; import static datadog.trace.api.ConfigDefaults.DEFAULT_WRITER_BAGGAGE_INJECT; +import static datadog.trace.api.ConfigSetting.NON_DEFAULT_SEQ_ID; import static datadog.trace.api.DDTags.APM_ENABLED; import static datadog.trace.api.DDTags.HOST_TAG; import static datadog.trace.api.DDTags.INTERNAL_HOST_NAME; @@ -5300,7 +5301,8 @@ private static boolean isWindowsOS() { private static String getEnv(String name) { String value = EnvironmentVariables.get(name); if (value != null) { - ConfigCollector.get().put(name, value, ConfigOrigin.ENV); + // Report non-default sequence id for consistency + ConfigCollector.get().put(name, value, ConfigOrigin.ENV, NON_DEFAULT_SEQ_ID); } return value; } @@ -5323,7 +5325,8 @@ private static String getProp(String name) { private static String getProp(String name, String def) { String value = SystemProperties.getOrDefault(name, def); if (value != null) { - ConfigCollector.get().put(name, value, ConfigOrigin.JVM_PROP); + // Report non-default sequence id for consistency + ConfigCollector.get().put(name, value, ConfigOrigin.JVM_PROP, NON_DEFAULT_SEQ_ID); } return value; } diff --git a/internal-api/src/main/java/datadog/trace/api/DynamicConfig.java b/internal-api/src/main/java/datadog/trace/api/DynamicConfig.java index ce886edefc1..fb14e8370aa 100644 --- a/internal-api/src/main/java/datadog/trace/api/DynamicConfig.java +++ b/internal-api/src/main/java/datadog/trace/api/DynamicConfig.java @@ -294,7 +294,7 @@ static void reportConfigChange(Snapshot newSnapshot) { update.put(TRACE_SAMPLING_RULES, newSnapshot.traceSamplingRulesJson); maybePut(update, TRACE_SAMPLE_RATE, newSnapshot.traceSampleRate); - ConfigCollector.get().putAll(update, ConfigOrigin.REMOTE); + ConfigCollector.get().putRemote(update); } @SuppressWarnings("SameParameterValue") diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy index 3927e1dbc2d..77b68ff9dd7 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy @@ -15,6 +15,7 @@ import datadog.trace.util.ConfigStrings import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_WEAK_HASH_ALGORITHMS import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_HEARTBEAT_INTERVAL +import static datadog.trace.api.ConfigSetting.ABSENT_SEQ_ID class ConfigCollectorTest extends DDSpecification { @@ -23,9 +24,10 @@ class ConfigCollectorTest extends DDSpecification { injectEnvConfig(ConfigStrings.toEnvVar(configKey), configValue) expect: - def setting = ConfigCollector.get().collect().get(configKey) - setting.stringValue() == configValue - setting.origin == ConfigOrigin.ENV + def envConfigByKey = ConfigCollector.get().collect().get(ConfigOrigin.ENV) + def config = envConfigByKey.get(configKey) + config.stringValue() == configValue + config.origin == ConfigOrigin.ENV where: configKey | configValue @@ -65,18 +67,31 @@ class ConfigCollectorTest extends DDSpecification { def "should collect merged data from multiple sources"() { setup: - injectEnvConfig(ConfigStrings.toEnvVar(configKey), envValue) - if (jvmValue != null) { - injectSysConfig(configKey, jvmValue) + injectEnvConfig(ConfigStrings.toEnvVar(configKey), envConfigValue) + if (jvmConfigValue != null) { + injectSysConfig(configKey, jvmConfigValue) + } + + when: + def collected = ConfigCollector.get().collect() + + then: + def envSetting = collected.get(ConfigOrigin.ENV) + def envConfig = envSetting.get(configKey) + envConfig.stringValue() == envConfigValue + envConfig.origin == ConfigOrigin.ENV + if (jvmConfigValue != null ) { + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP) + def jvmConfig = jvmSetting.get(configKey) + jvmConfig.stringValue().split(',') as Set == jvmConfigValue.split(',') as Set + jvmConfig.origin == ConfigOrigin.JVM_PROP } - expect: - def setting = ConfigCollector.get().collect().get(configKey) - setting.stringValue() == expectedValue - setting.origin == expectedOrigin + + // TODO: Add a check for which setting the collector recognizes as highest precedence where: - configKey | envValue | jvmValue | expectedValue | expectedOrigin + configKey | envConfigValue | jvmConfigValue | expectedValue | expectedOrigin // ConfigProvider.getMergedMap TracerConfig.TRACE_PEER_SERVICE_MAPPING | "service1:best_service,userService:my_service" | "service2:backup_service" | "service2:backup_service,service1:best_service,userService:my_service" | ConfigOrigin.CALCULATED // ConfigProvider.getOrderedMap @@ -89,7 +104,8 @@ class ConfigCollectorTest extends DDSpecification { def "default not-null config settings are collected"() { expect: - def setting = ConfigCollector.get().collect().get(configKey) + def defaultConfigByKey = ConfigCollector.get().collect().get(ConfigOrigin.DEFAULT) + def setting = defaultConfigByKey.get(configKey) setting.origin == ConfigOrigin.DEFAULT setting.stringValue() == defaultValue @@ -105,7 +121,8 @@ class ConfigCollectorTest extends DDSpecification { def "default null config settings are also collected"() { when: - ConfigSetting cs = ConfigCollector.get().collect().get(configKey) + def defaultConfigByKey = ConfigCollector.get().collect().get(ConfigOrigin.DEFAULT) + ConfigSetting cs = defaultConfigByKey.get(configKey) then: cs.key == configKey @@ -126,7 +143,8 @@ class ConfigCollectorTest extends DDSpecification { def "default empty maps and list config settings are collected as empty strings"() { when: - ConfigSetting cs = ConfigCollector.get().collect().get(configKey) + def defaultConfigByKey = ConfigCollector.get().collect().get(ConfigOrigin.DEFAULT) + ConfigSetting cs = defaultConfigByKey.get(configKey) then: cs.key == configKey @@ -146,17 +164,17 @@ class ConfigCollectorTest extends DDSpecification { ConfigCollector.get().collect() when: - ConfigCollector.get().put('key1', 'value1', ConfigOrigin.DEFAULT) - ConfigCollector.get().put('key2', 'value2', ConfigOrigin.ENV) - ConfigCollector.get().put('key1', 'replaced', ConfigOrigin.REMOTE) - ConfigCollector.get().put('key3', 'value3', ConfigOrigin.JVM_PROP) + ConfigCollector.get().put('key1', 'value1', ConfigOrigin.DEFAULT, ABSENT_SEQ_ID) + ConfigCollector.get().put('key2', 'value2', ConfigOrigin.ENV, ABSENT_SEQ_ID) + ConfigCollector.get().put('key1', 'value4', ConfigOrigin.REMOTE, ABSENT_SEQ_ID) + ConfigCollector.get().put('key3', 'value3', ConfigOrigin.JVM_PROP, ABSENT_SEQ_ID) then: - ConfigCollector.get().collect().values().toSet() == [ - ConfigSetting.of('key1', 'replaced', ConfigOrigin.REMOTE), - ConfigSetting.of('key2', 'value2', ConfigOrigin.ENV), - ConfigSetting.of('key3', 'value3', ConfigOrigin.JVM_PROP) - ] as Set + def collected = ConfigCollector.get().collect() + collected.get(ConfigOrigin.REMOTE).get('key1') == ConfigSetting.of('key1', 'value4', ConfigOrigin.REMOTE) + collected.get(ConfigOrigin.ENV).get('key2') == ConfigSetting.of('key2', 'value2', ConfigOrigin.ENV) + collected.get(ConfigOrigin.JVM_PROP).get('key3') == ConfigSetting.of('key3', 'value3', ConfigOrigin.JVM_PROP) + collected.get(ConfigOrigin.DEFAULT).get('key1') == ConfigSetting.of('key1', 'value1', ConfigOrigin.DEFAULT) } @@ -165,18 +183,19 @@ class ConfigCollectorTest extends DDSpecification { ConfigCollector.get().collect() when: - ConfigCollector.get().put('DD_API_KEY', 'sensitive data', ConfigOrigin.ENV) + ConfigCollector.get().put('DD_API_KEY', 'sensitive data', ConfigOrigin.ENV, ABSENT_SEQ_ID) then: - ConfigCollector.get().collect().get('DD_API_KEY').stringValue() == '' + def collected = ConfigCollector.get().collect() + collected.get(ConfigOrigin.ENV).get('DD_API_KEY').stringValue() == '' } def "collects common setting default values"() { when: - def settings = ConfigCollector.get().collect() + def defaultConfigByKey = ConfigCollector.get().collect().get(ConfigOrigin.DEFAULT) then: - def setting = settings.get(key) + def setting = defaultConfigByKey.get(key) setting.key == key setting.stringValue() == value @@ -207,10 +226,10 @@ class ConfigCollectorTest extends DDSpecification { injectEnvConfig("DD_TRACE_SAMPLE_RATE", "0.3") when: - def settings = ConfigCollector.get().collect() + def envConfigByKey = ConfigCollector.get().collect().get(ConfigOrigin.ENV) then: - def setting = settings.get(key) + def setting = envConfigByKey.get(key) setting.key == key setting.stringValue() == value @@ -230,6 +249,31 @@ class ConfigCollectorTest extends DDSpecification { "trace.sample.rate" | "0.3" } + def "config collector creates ConfigSettings with correct seqId"() { + setup: + ConfigCollector.get().collect() // clear previous state + + when: + // Simulate sources with increasing precedence and a default + ConfigCollector.get().put("test.key", "default", ConfigOrigin.DEFAULT, ConfigSetting.DEFAULT_SEQ_ID) + ConfigCollector.get().put("test.key", "env", ConfigOrigin.ENV, 2) + ConfigCollector.get().put("test.key", "jvm", ConfigOrigin.JVM_PROP, 3) + ConfigCollector.get().put("test.key", "remote", ConfigOrigin.REMOTE, 4) + + then: + def collected = ConfigCollector.get().collect() + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get("test.key") + def envSetting = collected.get(ConfigOrigin.ENV).get("test.key") + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get("test.key") + def remoteSetting = collected.get(ConfigOrigin.REMOTE).get("test.key") + + defaultSetting.seqId == ConfigSetting.DEFAULT_SEQ_ID + // Higher precedence = higher seqId + defaultSetting.seqId < envSetting.seqId + envSetting.seqId < jvmSetting.seqId + jvmSetting.seqId < remoteSetting.seqId + } + def "config id is null for non-StableConfigSource"() { setup: def key = "test.key" @@ -243,10 +287,32 @@ class ConfigCollectorTest extends DDSpecification { then: // Verify the config was collected but without a config ID - def setting = settings.get(key) + def setting = settings.get(ConfigOrigin.JVM_PROP).get(key) setting != null setting.configId == null setting.value == value setting.origin == ConfigOrigin.JVM_PROP } + + def "default sources cannot be overridden"() { + setup: + def key = "test.key" + def value = "test-value" + def overrideVal = "override-value" + def defaultConfigByKey + ConfigSetting cs + + when: + // Need to make 2 calls in a row because collect() will empty the map + ConfigCollector.get().putDefault(key, value) + ConfigCollector.get().putDefault(key, overrideVal) + defaultConfigByKey = ConfigCollector.get().collect().get(ConfigOrigin.DEFAULT) + cs = defaultConfigByKey.get(key) + + then: + cs.key == key + cs.stringValue() == value + cs.origin == ConfigOrigin.DEFAULT + cs.seqId == ConfigSetting.DEFAULT_SEQ_ID + } } diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy index b9783ec59c1..060472be426 100644 --- a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy @@ -2,6 +2,9 @@ package datadog.trace.bootstrap.config.provider import datadog.trace.test.util.DDSpecification import spock.lang.Shared +import datadog.trace.api.ConfigCollector +import datadog.trace.api.ConfigOrigin +import datadog.trace.api.ConfigSetting import static datadog.trace.api.config.TracerConfig.TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING @@ -45,4 +48,529 @@ class ConfigProviderTest extends DDSpecification { "default" | null | "alias2" | "default" null | "alias1" | "alias2" | "alias1" } + + def "ConfigProvider assigns correct seqId, origin, and value for each source and default"() { + setup: + ConfigCollector.get().collect() // clear previous state + + injectEnvConfig("DD_TEST_KEY", "envValue") + injectSysConfig("test.key", "jvmValue") + // Default ConfigProvider includes ENV and JVM_PROP + def provider = ConfigProvider.createDefault() + + when: + def value = provider.getString("test.key", "defaultValue") + def collected = ConfigCollector.get().collect() + + then: + // Check the default + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get("test.key") + defaultSetting.key == "test.key" + defaultSetting.stringValue() == "defaultValue" + defaultSetting.origin == ConfigOrigin.DEFAULT + defaultSetting.seqId == ConfigSetting.DEFAULT_SEQ_ID + + def envSetting = collected.get(ConfigOrigin.ENV).get("test.key") + envSetting.key == "test.key" + envSetting.stringValue() == "envValue" + envSetting.origin == ConfigOrigin.ENV + + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get("test.key") + jvmSetting.key == "test.key" + jvmSetting.stringValue() == "jvmValue" + jvmSetting.origin == ConfigOrigin.JVM_PROP + + // It doesn't matter what the seqId values are, so long as they increase with source precedence + jvmSetting.seqId > envSetting.seqId + envSetting.seqId > defaultSetting.seqId + + // The value returned by ConfigProvider should be the highest precedence value + value == jvmSetting.stringValue() + } + + def "ConfigProvider reports highest seqId for chosen value and origin regardless of conversion errors for #methodType"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up: default, env (valid), jvm (invalid for the specific type) + injectEnvConfig(envKey, validValue) + injectSysConfig(configKey, invalidValue) + def provider = ConfigProvider.createDefault() + + when: + def value = methodCall(provider, configKey, defaultValue) + def collected = ConfigCollector.get().collect() + + then: + // Default + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get(configKey) + defaultSetting.key == configKey + defaultSetting.stringValue() == String.valueOf(defaultValue) + defaultSetting.origin == ConfigOrigin.DEFAULT + defaultSetting.seqId == ConfigSetting.DEFAULT_SEQ_ID + + // ENV (valid) + def envSetting = collected.get(ConfigOrigin.ENV).get(configKey) + envSetting.key == configKey + envSetting.stringValue() == validValue + envSetting.origin == ConfigOrigin.ENV + + // JVM_PROP (invalid, should still be reported) + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get(configKey) + jvmSetting.key == configKey + jvmSetting.stringValue() == invalidValue + jvmSetting.origin == ConfigOrigin.JVM_PROP + + // The chosen value (from ENV) should have been re-reported with the highest seqId + def maxSeqId = [defaultSetting.seqId, envSetting.seqId, jvmSetting.seqId].max() + def chosenSetting = [defaultSetting, envSetting, jvmSetting].find { it.seqId == maxSeqId } + chosenSetting.stringValue() == validValue + chosenSetting.origin == ConfigOrigin.ENV + + // The value returned by provider should be the valid one + value == expectedResult + + where: + // getBoolean is purposefully excluded; see getBoolean test below + methodType | configKey | envKey | validValue | invalidValue | defaultValue | expectedResult | methodCall + "getInteger" | "test.int" | "DD_TEST_INT" | "42" | "notAnInt" | 7 | 42 | { configProvider, key, defVal -> configProvider.getInteger(key, defVal) } + "getLong" | "test.long" | "DD_TEST_LONG" | "123" | "notALong" | 5L | 123L | { configProvider, key, defVal -> configProvider.getLong(key, defVal) } + "getFloat" | "test.float" | "DD_TEST_FLOAT" | "42.5" | "notAFloat" | 3.14f | 42.5f | { configProvider, key, defVal -> configProvider.getFloat(key, defVal) } + "getDouble" | "test.double" | "DD_TEST_DOUBLE"| "42.75" | "notADouble" | 2.71 | 42.75 | { configProvider, key, defVal -> configProvider.getDouble(key, defVal) } + } + + def "ConfigProvider transforms invalid values for getBoolean to false with CALCULATED origin"() { + // Booleans are a special case; we currently treat all invalid boolean configurations as false rather than falling back to a lower precedence setting. + setup: + ConfigCollector.get().collect() // clear previous state + + def envKey = "DD_TEST_BOOL" + def envValue = "true" + def configKey = "test.bool" + def propValue = "notABool" + def defaultValue = true + + injectEnvConfig(envKey, envValue) + injectSysConfig(configKey, propValue) + def provider = ConfigProvider.createDefault() + + when: + def value = provider.getBoolean(configKey, defaultValue) + def collected = ConfigCollector.get().collect() + + then: + // Default + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get(configKey) + defaultSetting.key == configKey + defaultSetting.stringValue() == String.valueOf(defaultValue) + defaultSetting.origin == ConfigOrigin.DEFAULT + defaultSetting.seqId == ConfigSetting.DEFAULT_SEQ_ID + + // ENV (valid) + def envSetting = collected.get(ConfigOrigin.ENV).get(configKey) + envSetting.key == configKey + envSetting.stringValue() == envValue + envSetting.origin == ConfigOrigin.ENV + + // JVM_PROP (invalid, should still be reported) + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get(configKey) + jvmSetting.key == configKey + jvmSetting.stringValue() == propValue + jvmSetting.origin == ConfigOrigin.JVM_PROP + + // Config was evaluated to false and reported with CALCULATED origin + def calcSetting = collected.get(ConfigOrigin.CALCULATED).get(configKey) + calcSetting.key == configKey + calcSetting.stringValue() == "false" + calcSetting.origin == ConfigOrigin.CALCULATED + + // The highest seqId should be the CALCULATED origin + def maxSeqId = [defaultSetting.seqId, envSetting.seqId, jvmSetting.seqId, calcSetting.seqId].max() + def chosenSetting = [defaultSetting, envSetting, jvmSetting, calcSetting].find { it.seqId == maxSeqId } + chosenSetting.origin == ConfigOrigin.CALCULATED + chosenSetting.stringValue() == "false" + + // The value returned by provider should be false + value == false + } + + def "ConfigProvider getEnum returns default when conversion fails"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up: only invalid enum values from all sources + injectEnvConfig("DD_TEST_ENUM2", "NOT_A_VALID_ENUM") + injectSysConfig("test.enum2", "ALSO_INVALID") + def provider = ConfigProvider.createDefault() + + when: + def value = provider.getEnum("test.enum2", ConfigOrigin, ConfigOrigin.CODE) + def collected = ConfigCollector.get().collect() + + then: + // Should have attempted to use the highest precedence value (JVM_PROP) + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get("test.enum2") + jvmSetting.stringValue() == "ALSO_INVALID" + + // But since conversion failed, should return the default + value == ConfigOrigin.CODE + } + + def "ConfigProvider getString reports all sources and respects precedence"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up: default, env, jvm (all valid strings) + injectEnvConfig("DD_TEST_STRING", "envValue") + injectSysConfig("test.string", "jvmValue") + def provider = ConfigProvider.createDefault() + + when: + def value = provider.getString("test.string", "defaultValue") + def collected = ConfigCollector.get().collect() + + then: + // Default + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get("test.string") + defaultSetting.key == "test.string" + defaultSetting.stringValue() == "defaultValue" + defaultSetting.origin == ConfigOrigin.DEFAULT + defaultSetting.seqId == ConfigSetting.DEFAULT_SEQ_ID + + // ENV + def envSetting = collected.get(ConfigOrigin.ENV).get("test.string") + envSetting.key == "test.string" + envSetting.stringValue() == "envValue" + envSetting.origin == ConfigOrigin.ENV + + // JVM_PROP (highest precedence) + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get("test.string") + jvmSetting.key == "test.string" + jvmSetting.stringValue() == "jvmValue" + jvmSetting.origin == ConfigOrigin.JVM_PROP + + // JVM should have highest seqId and be the returned value + jvmSetting.seqId > envSetting.seqId + envSetting.seqId > defaultSetting.seqId + value == "jvmValue" + } + + def "ConfigProvider getStringNotEmpty reports all values even if they are empty, but returns the non-empty value"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up: env (empty/blank), jvm (valid but with whitespace) + injectEnvConfig("DD_TEST_STRING_NOT_EMPTY", " ") // blank string + injectSysConfig("test.string.not.empty", " jvmValue ") // valid but with whitespace + def provider = ConfigProvider.createDefault() + + when: + def value = provider.getStringNotEmpty("test.string.not.empty", "defaultValue") + def collected = ConfigCollector.get().collect() + + then: + // Default + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get("test.string.not.empty") + defaultSetting.stringValue() == "defaultValue" + + // ENV (blank, should be skipped for return value but still reported) + def envSetting = collected.get(ConfigOrigin.ENV).get("test.string.not.empty") + envSetting.stringValue() == " " + envSetting.origin == ConfigOrigin.ENV + + // JVM_PROP setting - should have highest seqId + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get("test.string.not.empty") + jvmSetting.stringValue() == " jvmValue " + jvmSetting.origin == ConfigOrigin.JVM_PROP + + def maxSeqId = [defaultSetting.seqId, envSetting.seqId, jvmSetting.seqId].max() + jvmSetting.seqId == maxSeqId + + value == " jvmValue " + } + + def "ConfigProvider getStringExcludingSource excludes specified source type"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up: env, jvm (both valid) + injectEnvConfig("DD_TEST_STRING_EXCLUDE", "envValue") + injectSysConfig("test.string.exclude", "jvmValue") + def provider = ConfigProvider.createDefault() + + when: + // Exclude JVM_PROP source, should fall back to ENV + def value = provider.getStringExcludingSource("test.string.exclude", "defaultValue", + SystemPropertiesConfigSource) + def collected = ConfigCollector.get().collect() + + then: + // Default + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get("test.string.exclude") + defaultSetting.stringValue() == "defaultValue" + + // ENV (should be used since JVM is excluded) + def envSetting = collected.get(ConfigOrigin.ENV).get("test.string.exclude") + envSetting.stringValue() == "envValue" + envSetting.origin == ConfigOrigin.ENV + + // Should return ENV value since JVM source was excluded + value == "envValue" + } + + def "ConfigProvider getMergedMap merges maps from multiple sources with correct precedence"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up: env (partial map), jvm (partial map with overlap) + injectEnvConfig("DD_TEST_MAP", "env_key:env_value,shared:from_env") + injectSysConfig("test.map", "jvm_key:jvm_value,shared:from_jvm") + def provider = ConfigProvider.createDefault() + + when: + def result = provider.getMergedMap("test.map") + def collected = ConfigCollector.get().collect() + + then: + // Result should be merged with JVM taking precedence + result == [ + "env_key": "env_value", // from ENV + "jvm_key": "jvm_value", // from JVM + "shared": "from_jvm" // JVM overrides ENV + ] + + // Default should be reported as empty + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get("test.map") + defaultSetting.value == [:] + defaultSetting.origin == ConfigOrigin.DEFAULT + + // ENV map should be reported + def envSetting = collected.get(ConfigOrigin.ENV).get("test.map") + envSetting.value == ["env_key": "env_value", "shared": "from_env"] + envSetting.origin == ConfigOrigin.ENV + + // JVM map should be reported + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get("test.map") + jvmSetting.value == ["jvm_key": "jvm_value", "shared": "from_jvm"] + jvmSetting.origin == ConfigOrigin.JVM_PROP + + // Final calculated result should be reported with highest seqId + def calculatedSetting = collected.get(ConfigOrigin.CALCULATED).get("test.map") + calculatedSetting.value == result + calculatedSetting.origin == ConfigOrigin.CALCULATED + + // Calculated should have highest seqId + def maxSeqId = [defaultSetting.seqId, envSetting.seqId, jvmSetting.seqId, calculatedSetting.seqId].max() + calculatedSetting.seqId == maxSeqId + } + + def "ConfigProvider getMergedTagsMap handles trace tags format"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up trace tags format (can use comma or space separators) + injectEnvConfig("DD_TEST_TAGS", "service:web,version:1.0") + injectSysConfig("test.tags", "env:prod team:backend") + def provider = ConfigProvider.createDefault() + + when: + def result = provider.getMergedTagsMap("test.tags") + def collected = ConfigCollector.get().collect() + + then: + // Should merge both tag formats + result == [ + "service": "web", // from ENV + "version": "1.0", // from ENV + "env": "prod", // from JVM + "team": "backend" // from JVM + ] + + // Should report individual sources and calculated result + def envSetting = collected.get(ConfigOrigin.ENV).get("test.tags") + envSetting.value == ["service": "web", "version": "1.0"] + + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get("test.tags") + jvmSetting.value == ["env": "prod", "team": "backend"] + + def calculatedSetting = collected.get(ConfigOrigin.CALCULATED).get("test.tags") + calculatedSetting.value == result + } + + def "ConfigProvider getMergedMapWithOptionalMappings handles multiple keys and transformations"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up multiple keys with optional mappings + injectEnvConfig("DD_HEADER_1", "X-Custom-Header:custom.tag") + injectSysConfig("header.1", "X-Auth:auth.tag") + injectEnvConfig("DD_HEADER_2", "X-Request-ID") // key only, should get prefix + def provider = ConfigProvider.createDefault() + + when: + def result = provider.getMergedMapWithOptionalMappings("trace.http", true, "header.1", "header.2") + def collected = ConfigCollector.get().collect() + + then: + // Should merge with transformations + result.size() >= 2 + result["x-custom-header"] == "custom.tag" // from ENV header.1 + result["x-auth"] == "auth.tag" // from JVM header.1 + result["x-request-id"] != null // from ENV header.2, should get prefix + + // Should report sources and calculated result + def calculatedSetting = collected.get(ConfigOrigin.CALCULATED).get("header.2") // Last key processed + calculatedSetting != null + calculatedSetting.origin == ConfigOrigin.CALCULATED + } + + def "ConfigProvider getOrderedMap preserves insertion order and merges sources"() { + setup: + ConfigCollector.get().collect() // clear previous state + + // Set up ordered maps from multiple sources + injectEnvConfig("DD_TEST_ORDERED_MAP", "first:env_first,second:env_second,third:env_third") + injectSysConfig("test.ordered.map", "second:jvm_second,fourth:jvm_fourth,first:jvm_first") + def provider = ConfigProvider.createDefault() + + when: + def result = provider.getOrderedMap("test.ordered.map") + def collected = ConfigCollector.get().collect() + + then: + // Result should be a LinkedHashMap with preserved order and JVM precedence + result instanceof LinkedHashMap + result == [ + "first": "jvm_first", // JVM overrides ENV, appears first due to ENV order + "second": "jvm_second", // JVM overrides ENV, appears second due to ENV order + "third": "env_third", // only in ENV, appears third due to ENV order + "fourth": "jvm_fourth" // only in JVM, appears last due to JVM addition + ] + + // Verify order is preserved (LinkedHashMap maintains insertion order) + def keys = result.keySet() as List + keys == ["first", "second", "third", "fourth"] + + // Default should be reported as empty + def defaultSetting = collected.get(ConfigOrigin.DEFAULT).get("test.ordered.map") + defaultSetting.value == [:] + defaultSetting.origin == ConfigOrigin.DEFAULT + + // ENV ordered map should be reported + def envSetting = collected.get(ConfigOrigin.ENV).get("test.ordered.map") + envSetting.value == ["first": "env_first", "second": "env_second", "third": "env_third"] + envSetting.origin == ConfigOrigin.ENV + + // JVM ordered map should be reported + def jvmSetting = collected.get(ConfigOrigin.JVM_PROP).get("test.ordered.map") + jvmSetting.value == ["second": "jvm_second", "fourth": "jvm_fourth", "first": "jvm_first"] + jvmSetting.origin == ConfigOrigin.JVM_PROP + + // Final calculated result should be reported with highest seqId + def calculatedSetting = collected.get(ConfigOrigin.CALCULATED).get("test.ordered.map") + calculatedSetting.value == result + calculatedSetting.origin == ConfigOrigin.CALCULATED + + // Calculated should have highest seqId + def maxSeqId = [defaultSetting.seqId, envSetting.seqId, jvmSetting.seqId, calculatedSetting.seqId].max() + calculatedSetting.seqId == maxSeqId + } + + def "ConfigProvider methods that call getString internally report their own defaults before getString's null default"() { + setup: + ConfigCollector.get().collect() // clear previous state + // No environment or system property values set, so methods should fall back to their defaults + def provider = ConfigProvider.createDefault() + + when: + def enumResult = provider.getEnum("test.enum", ConfigOrigin, ConfigOrigin.CODE) + def listResult = provider.getList("test.list", ["default", "list"]) + def setResult = provider.getSet("test.set", ["default", "set"] as Set) + def rangeResult = provider.getIntegerRange("test.range", new BitSet()) + def collected = ConfigCollector.get().collect() + + then: + // Each method should have reported its own default, not getString's null default + + def enumDefault = collected.get(ConfigOrigin.DEFAULT).get("test.enum") + enumDefault.stringValue() == "CODE" // ConfigOrigin.CODE.name() + enumDefault.origin == ConfigOrigin.DEFAULT + enumDefault.seqId == ConfigSetting.DEFAULT_SEQ_ID + + def listDefault = collected.get(ConfigOrigin.DEFAULT).get("test.list") + listDefault.value == ["default", "list"] + listDefault.origin == ConfigOrigin.DEFAULT + listDefault.seqId == ConfigSetting.DEFAULT_SEQ_ID + + def setDefault = collected.get(ConfigOrigin.DEFAULT).get("test.set") + setDefault.value == ["default", "set"] as Set + setDefault.origin == ConfigOrigin.DEFAULT + setDefault.seqId == ConfigSetting.DEFAULT_SEQ_ID + + def rangeDefault = collected.get(ConfigOrigin.DEFAULT).get("test.range") + rangeDefault.value == new BitSet() + rangeDefault.origin == ConfigOrigin.DEFAULT + rangeDefault.seqId == ConfigSetting.DEFAULT_SEQ_ID + + // Verify the methods returned their default values (not null) + enumResult == ConfigOrigin.CODE + listResult == ["default", "list"] + setResult == ["default", "set"] as Set + rangeResult == new BitSet() + } + + // NOTE: This is a case that SHOULD never occur. #reReportToCollector(String, int) should only be called with valid origins + def "ConfigValueResolver reReportToCollector handles null origin gracefully"() { + setup: + ConfigCollector.get().collect() // clear previous state + ConfigProvider.ConfigValueResolver resolver = ConfigProvider.ConfigValueResolver.of("1") + + when: + resolver.reReportToCollector("test.key", 5) + + then: + 0 * ConfigCollector.get().put(_, _, _, _, _) + } + + def "ConfigMergeResolver reports correct origin for single vs multiple source contributions"() { + setup: + ConfigCollector.get().collect() // clear previous state + def provider = ConfigProvider.createDefault() + + when: "Only ENV source contributes to merged map" + injectEnvConfig("DD_SINGLE_SOURCE_MAP", "key1:value1,key2:value2") + // No JVM prop set, so only ENV contributes + def singleSourceResult = provider.getMergedMap("single.source.map") + def singleSourceCollected = ConfigCollector.get().collect() + + then: "Should report with ENV origin, not CALCULATED" + singleSourceResult == ["key1": "value1", "key2": "value2"] + + // Should have DEFAULT for default value + def singleDefault = singleSourceCollected.get(ConfigOrigin.DEFAULT)?.get("single.source.map") + singleDefault?.value == [:] + + // Should have ENV for the actual value (not CALCULATED) + def singleEnv = singleSourceCollected.get(ConfigOrigin.ENV)?.get("single.source.map") + singleEnv?.value == ["key1": "value1", "key2": "value2"] + singleEnv?.origin == ConfigOrigin.ENV + + // Should NOT have CALCULATED entry since only one source contributed + singleSourceCollected.get(ConfigOrigin.CALCULATED)?.get("single.source.map") == null + + when: "Multiple sources contribute to merged map" + ConfigCollector.get().collect() // clear for next test + injectEnvConfig("DD_MULTI_SOURCE_MAP", "env_key:env_value,shared:from_env") + injectSysConfig("multi.source.map", "jvm_key:jvm_value,shared:from_jvm") + def multiSourceResult = provider.getMergedMap("multi.source.map") + def multiSourceCollected = ConfigCollector.get().collect() + + then: "Should report with CALCULATED origin when multiple sources contribute" + multiSourceResult == ["env_key": "env_value", "jvm_key": "jvm_value", "shared": "from_jvm"] + + // Should have CALCULATED for the final merged result + def multiCalculated = multiSourceCollected.get(ConfigOrigin.CALCULATED)?.get("multi.source.map") + multiCalculated?.value == multiSourceResult + multiCalculated?.origin == ConfigOrigin.CALCULATED + } } diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy index 08352da0dcc..84aeda8ebb0 100644 --- a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy @@ -305,7 +305,7 @@ apm_configuration_default: then: def collectedConfigs = ConfigCollector.get().collect() - def serviceSetting = collectedConfigs.get("SERVICE") + def serviceSetting = collectedConfigs.get(ConfigOrigin.LOCAL_STABLE_CONFIG).("SERVICE") serviceSetting.configId == expectedConfigId serviceSetting.value == "test-service" serviceSetting.origin == ConfigOrigin.LOCAL_STABLE_CONFIG diff --git a/telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java b/telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java index f84a4331fd7..b242b7d365e 100644 --- a/telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java +++ b/telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java @@ -230,6 +230,7 @@ public void writeConfiguration(ConfigSetting configSetting) throws IOException { bodyWriter.name("value").value(configSetting.stringValue()); bodyWriter.setSerializeNulls(false); bodyWriter.name("origin").value(configSetting.origin.value); + bodyWriter.name("seq_id").value(configSetting.seqId); if (configSetting.configId != null) { bodyWriter.name("config_id").value(configSetting.configId); } diff --git a/telemetry/src/main/java/datadog/telemetry/TelemetryRunnable.java b/telemetry/src/main/java/datadog/telemetry/TelemetryRunnable.java index e807bc0cd82..e991ee5ee52 100644 --- a/telemetry/src/main/java/datadog/telemetry/TelemetryRunnable.java +++ b/telemetry/src/main/java/datadog/telemetry/TelemetryRunnable.java @@ -3,6 +3,7 @@ import datadog.telemetry.metric.MetricPeriodicAction; import datadog.trace.api.Config; import datadog.trace.api.ConfigCollector; +import datadog.trace.api.ConfigOrigin; import datadog.trace.api.ConfigSetting; import datadog.trace.api.time.SystemTimeSource; import datadog.trace.api.time.TimeSource; @@ -141,7 +142,7 @@ private void mainLoopIteration() throws InterruptedException { } private void collectConfigChanges() { - Map collectedConfig = ConfigCollector.get().collect(); + Map> collectedConfig = ConfigCollector.get().collect(); if (!collectedConfig.isEmpty()) { telemetryService.addConfiguration(collectedConfig); } diff --git a/telemetry/src/main/java/datadog/telemetry/TelemetryService.java b/telemetry/src/main/java/datadog/telemetry/TelemetryService.java index 1160c27223a..e017dcbe676 100644 --- a/telemetry/src/main/java/datadog/telemetry/TelemetryService.java +++ b/telemetry/src/main/java/datadog/telemetry/TelemetryService.java @@ -7,6 +7,7 @@ import datadog.telemetry.api.Metric; import datadog.telemetry.api.RequestType; import datadog.telemetry.dependency.Dependency; +import datadog.trace.api.ConfigOrigin; import datadog.trace.api.ConfigSetting; import datadog.trace.api.telemetry.Endpoint; import datadog.trace.api.telemetry.ProductChange; @@ -84,11 +85,13 @@ public static TelemetryService build( this.debug = debug; } - public boolean addConfiguration(Map configuration) { - for (ConfigSetting cs : configuration.values()) { - extendedHeartbeatData.pushConfigSetting(cs); - if (!this.configurations.offer(cs)) { - return false; + public boolean addConfiguration(Map> configuration) { + for (Map settings : configuration.values()) { + for (ConfigSetting cs : settings.values()) { + extendedHeartbeatData.pushConfigSetting(cs); + if (!this.configurations.offer(cs)) { + return false; + } } } return true; diff --git a/telemetry/src/test/groovy/datadog/telemetry/TelemetryRequestBodySpecification.groovy b/telemetry/src/test/groovy/datadog/telemetry/TelemetryRequestBodySpecification.groovy index d0f7832da20..25341c82e4b 100644 --- a/telemetry/src/test/groovy/datadog/telemetry/TelemetryRequestBodySpecification.groovy +++ b/telemetry/src/test/groovy/datadog/telemetry/TelemetryRequestBodySpecification.groovy @@ -79,12 +79,12 @@ class TelemetryRequestBodySpecification extends DDSpecification { then: drainToString(req) == ',"configuration":[' + - '{"name":"string","value":"bar","origin":"remote_config"},' + - '{"name":"int","value":"2342","origin":"default"},' + - '{"name":"double","value":"123.456","origin":"env_var"},' + - '{"name":"map","value":"key1:value1,key2:432.32,key3:324","origin":"jvm_prop"},' + - '{"name":"list","value":"1,2,3","origin":"default"},' + - '{"name":"null","value":null,"origin":"default"}]' + '{"name":"string","value":"bar","origin":"remote_config","seq_id":0},' + + '{"name":"int","value":"2342","origin":"default","seq_id":0},' + + '{"name":"double","value":"123.456","origin":"env_var","seq_id":0},' + + '{"name":"map","value":"key1:value1,key2:432.32,key3:324","origin":"jvm_prop","seq_id":0},' + + '{"name":"list","value":"1,2,3","origin":"default","seq_id":0},' + + '{"name":"null","value":null,"origin":"default","seq_id":0}]' } def 'use snake_case for setting keys'() { @@ -102,7 +102,7 @@ class TelemetryRequestBodySpecification extends DDSpecification { req.endConfiguration() then: - drainToString(req) == ',"configuration":[{"name":"this_is_a_key","value":"value","origin":"remote_config"}]' + drainToString(req) == ',"configuration":[{"name":"this_is_a_key","value":"value","origin":"remote_config","seq_id":0}]' } def 'add debug flag'() { diff --git a/telemetry/src/test/groovy/datadog/telemetry/TelemetryServiceSpecification.groovy b/telemetry/src/test/groovy/datadog/telemetry/TelemetryServiceSpecification.groovy index 556d22eba83..c9addb6a253 100644 --- a/telemetry/src/test/groovy/datadog/telemetry/TelemetryServiceSpecification.groovy +++ b/telemetry/src/test/groovy/datadog/telemetry/TelemetryServiceSpecification.groovy @@ -18,8 +18,9 @@ import datadog.trace.test.util.DDSpecification import datadog.trace.util.ConfigStrings class TelemetryServiceSpecification extends DDSpecification { - def confKeyValue = ConfigSetting.of("confkey", "confvalue", ConfigOrigin.DEFAULT) - def configuration = [confkey: confKeyValue] + def confKeyOrigin = ConfigOrigin.DEFAULT + def confKeyValue = ConfigSetting.of("confkey", "confvalue", confKeyOrigin) + def configuration = [confKeyOrigin: [confkey: confKeyValue]] def integration = new Integration("integration", true) def dependency = new Dependency("dependency", "1.0.0", "src", "hash") def metric = new Metric().namespace("tracers").metric("metric").points([[1, 2]]).tags(["tag1", "tag2"]) @@ -317,7 +318,7 @@ class TelemetryServiceSpecification extends DDSpecification { bodySize > 0 when: 'sending first part of data' - telemetryService = new TelemetryService(testHttpClient, bodySize + 500, false) + telemetryService = new TelemetryService(testHttpClient, bodySize + 510, false) telemetryService.addConfiguration(configuration) telemetryService.addIntegration(integration) @@ -437,7 +438,8 @@ class TelemetryServiceSpecification extends DDSpecification { String instrKey = 'instrumentation_config_id' TestTelemetryRouter testHttpClient = new TestTelemetryRouter() TelemetryService telemetryService = new TelemetryService(testHttpClient, 10000, false) - telemetryService.addConfiguration(['${instrKey}': ConfigSetting.of(instrKey, id, ConfigOrigin.ENV)]) + def configMap = [(instrKey): ConfigSetting.of(instrKey, id, ConfigOrigin.ENV)] + telemetryService.addConfiguration([(ConfigOrigin.ENV): configMap]) when: 'first iteration' testHttpClient.expectRequest(TelemetryClient.Result.SUCCESS) diff --git a/telemetry/src/test/groovy/datadog/telemetry/TestTelemetryRouter.groovy b/telemetry/src/test/groovy/datadog/telemetry/TestTelemetryRouter.groovy index d1b29549bf1..0729b44a121 100644 --- a/telemetry/src/test/groovy/datadog/telemetry/TestTelemetryRouter.groovy +++ b/telemetry/src/test/groovy/datadog/telemetry/TestTelemetryRouter.groovy @@ -237,7 +237,8 @@ class TestTelemetryRouter extends TelemetryRouter { def expected = configuration == null ? null : [] if (configuration != null) { for (ConfigSetting cs : configuration) { - expected.add([name: cs.normalizedKey(), value: cs.stringValue(), origin: cs.origin.value]) + def item = [name: cs.normalizedKey(), value: cs.stringValue(), origin: cs.origin.value, 'seq_id': cs.seqId] + expected.add(item) } } assert this.payload['configuration'] == expected diff --git a/utils/config-utils/src/main/java/datadog/trace/api/ConfigCollector.java b/utils/config-utils/src/main/java/datadog/trace/api/ConfigCollector.java index 6e4ebc0969c..4cbaf5acf6b 100644 --- a/utils/config-utils/src/main/java/datadog/trace/api/ConfigCollector.java +++ b/utils/config-utils/src/main/java/datadog/trace/api/ConfigCollector.java @@ -1,9 +1,15 @@ package datadog.trace.api; +import static datadog.trace.api.ConfigOrigin.DEFAULT; +import static datadog.trace.api.ConfigOrigin.REMOTE; +import static datadog.trace.api.ConfigSetting.ABSENT_SEQ_ID; +import static datadog.trace.api.ConfigSetting.DEFAULT_SEQ_ID; + import java.util.Collections; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; +import java.util.function.Function; /** * Collects system properties and environment variables set by the user and used by the tracer. Puts @@ -16,43 +22,78 @@ public class ConfigCollector { private static final AtomicReferenceFieldUpdater COLLECTED_UPDATER = AtomicReferenceFieldUpdater.newUpdater(ConfigCollector.class, Map.class, "collected"); - private volatile Map collected = new ConcurrentHashMap<>(); + private static final Function> NEW_SUB_MAP = + k -> new ConcurrentHashMap<>(); + + private volatile Map> collected = + new ConcurrentHashMap<>(); public static ConfigCollector get() { return INSTANCE; } - public void put(String key, Object value, ConfigOrigin origin) { - ConfigSetting setting = ConfigSetting.of(key, value, origin); - collected.put(key, setting); + public void put(String key, Object value, ConfigOrigin origin, int seqId) { + put(key, value, origin, seqId, null); } - public void put(String key, Object value, ConfigOrigin origin, String configId) { - ConfigSetting setting = ConfigSetting.of(key, value, origin, configId); - collected.put(key, setting); + public void put(String key, Object value, ConfigOrigin origin, int seqId, String configId) { + ConfigSetting setting = ConfigSetting.of(key, value, origin, seqId, configId); + Map configMap = collected.computeIfAbsent(origin, NEW_SUB_MAP); + configMap.put(key, setting); // replaces any previous value for this key at origin } - public void putAll(Map keysAndValues, ConfigOrigin origin) { + // put method specifically for DEFAULT origins. We don't allow overrides for configs from DEFAULT + // origins + public void putDefault(String key, Object value) { + ConfigSetting setting = ConfigSetting.of(key, value, DEFAULT, DEFAULT_SEQ_ID); + Map configMap = collected.computeIfAbsent(DEFAULT, NEW_SUB_MAP); + configMap.putIfAbsent(key, setting); // don't replace previous default for this key + } + + /** + * Report single configuration setting with REMOTE origin. + * + * @param key configuration key to report + * @param value configuration value to report + */ + public void putRemote(String key, Object value) { + put(key, value, REMOTE, ABSENT_SEQ_ID); + } + + /** + * Report multiple configuration settings with REMOTE origin. + * + * @param configMap map of configuration key-value pairs to report + */ + public void putRemote(Map configMap) { // attempt merge+replace to avoid collector seeing partial update - Map merged = - new ConcurrentHashMap<>(keysAndValues.size() + collected.size()); - for (Map.Entry entry : keysAndValues.entrySet()) { - ConfigSetting setting = ConfigSetting.of(entry.getKey(), entry.getValue(), origin); + Map merged = new ConcurrentHashMap<>(); + + // prepare update + for (Map.Entry entry : configMap.entrySet()) { + ConfigSetting setting = + ConfigSetting.of(entry.getKey(), entry.getValue(), REMOTE, ABSENT_SEQ_ID); merged.put(entry.getKey(), setting); } + while (true) { - Map current = collected; + // first try adding our update to the map + Map current = collected.putIfAbsent(REMOTE, merged); + if (current == null) { + break; // success, no merging required + } + // merge existing entries with updated entries current.forEach(merged::putIfAbsent); - if (COLLECTED_UPDATER.compareAndSet(this, current, merged)) { - break; // success + if (collected.replace(REMOTE, current, merged)) { + break; // success, atomically swapped in merged map } // roll back to original update before next attempt - merged.keySet().retainAll(keysAndValues.keySet()); + merged.keySet().retainAll(configMap.keySet()); } } @SuppressWarnings("unchecked") - public Map collect() { + public Map> collect() { if (!collected.isEmpty()) { return COLLECTED_UPDATER.getAndSet(this, new ConcurrentHashMap<>()); } else { diff --git a/utils/config-utils/src/main/java/datadog/trace/api/ConfigSetting.java b/utils/config-utils/src/main/java/datadog/trace/api/ConfigSetting.java index 9b94b444a02..45e434751b5 100644 --- a/utils/config-utils/src/main/java/datadog/trace/api/ConfigSetting.java +++ b/utils/config-utils/src/main/java/datadog/trace/api/ConfigSetting.java @@ -8,9 +8,15 @@ import java.util.Set; public final class ConfigSetting { + public static final int DEFAULT_SEQ_ID = 1; + public static final int NON_DEFAULT_SEQ_ID = DEFAULT_SEQ_ID + 1; + public static final int ABSENT_SEQ_ID = 0; + public final String key; public final Object value; public final ConfigOrigin origin; + public final int seqId; + /** The config ID associated with this setting, or {@code null} if not applicable. */ public final String configId; @@ -19,17 +25,28 @@ public final class ConfigSetting { Arrays.asList("DD_API_KEY", "dd.api-key", "dd.profiling.api-key", "dd.profiling.apikey")); public static ConfigSetting of(String key, Object value, ConfigOrigin origin) { - return new ConfigSetting(key, value, origin, null); + return new ConfigSetting(key, value, origin, ABSENT_SEQ_ID, null); + } + + public static ConfigSetting of(String key, Object value, ConfigOrigin origin, int seqId) { + return new ConfigSetting(key, value, origin, seqId, null); } + // No usages of this function public static ConfigSetting of(String key, Object value, ConfigOrigin origin, String configId) { - return new ConfigSetting(key, value, origin, configId); + return new ConfigSetting(key, value, origin, ABSENT_SEQ_ID, configId); + } + + public static ConfigSetting of( + String key, Object value, ConfigOrigin origin, int seqId, String configId) { + return new ConfigSetting(key, value, origin, seqId, configId); } - private ConfigSetting(String key, Object value, ConfigOrigin origin, String configId) { + private ConfigSetting(String key, Object value, ConfigOrigin origin, int seqId, String configId) { this.key = key; this.value = CONFIG_FILTER_LIST.contains(key) ? "" : value; this.origin = origin; + this.seqId = seqId; this.configId = configId; } @@ -109,12 +126,13 @@ public boolean equals(Object o) { return key.equals(that.key) && Objects.equals(value, that.value) && origin == that.origin + && seqId == that.seqId && Objects.equals(configId, that.configId); } @Override public int hashCode() { - return Objects.hash(key, value, origin, configId); + return Objects.hash(key, value, origin, seqId, configId); } @Override @@ -127,6 +145,8 @@ public String toString() { + stringValue() + ", origin=" + origin + + ", seqId=" + + seqId + ", configId=" + configId + '}'; diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java index 173d717fa43..ade045011db 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java @@ -1,5 +1,7 @@ package datadog.trace.bootstrap.config.provider; +import static datadog.trace.api.ConfigSetting.ABSENT_SEQ_ID; +import static datadog.trace.api.ConfigSetting.NON_DEFAULT_SEQ_ID; import static datadog.trace.api.config.GeneralConfig.CONFIGURATION_FILE; import datadog.environment.SystemProperties; @@ -12,6 +14,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.BitSet; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -54,38 +57,61 @@ public String getConfigFileStatus() { return "no config file present"; } + // Gets a string value when there is no default value. public String getString(String key) { return getString(key, null); } - public > T getEnum(String key, Class enumType, T defaultValue) { - String value = getString(key); - if (null != value) { - try { - return Enum.valueOf(enumType, value); - } catch (Exception ignoreAndUseDefault) { - log.debug("failed to parse {} for {}, defaulting to {}", value, key, defaultValue); - } - } + /** + * Gets a string value with a default fallback and optional aliases. Use for configs with + * meaningful defaults. Reports default to telemetry. + */ + public String getString(String key, String defaultValue, String... aliases) { if (collectConfig) { - String valueStr = defaultValue == null ? null : defaultValue.name(); - ConfigCollector.get().put(key, valueStr, ConfigOrigin.DEFAULT); + reportDefault(key, defaultValue); } - return defaultValue; + String value = getStringInternal(key, aliases); + + return value != null ? value : defaultValue; } - public String getString(String key, String defaultValue, String... aliases) { - for (ConfigProvider.Source source : sources) { - String value = source.get(key, aliases); - if (value != null) { + // Internal helper that performs configuration source lookup and reports values from non-default + // sources to telemetry. + private String getStringInternal(String key, String... aliases) { + ConfigValueResolver resolver = null; + int seqId = NON_DEFAULT_SEQ_ID; + + for (int i = sources.length - 1; i >= 0; i--) { + ConfigProvider.Source source = sources[i]; + String candidate = source.get(key, aliases); + // Create resolver if we have a valid candidate + if (candidate != null) { + resolver = ConfigValueResolver.of(candidate); + // And report to telemetry if (collectConfig) { - ConfigCollector.get().put(key, value, source.origin(), getConfigIdFromSource(source)); + ConfigCollector.get() + .put(key, candidate, source.origin(), seqId, getConfigIdFromSource(source)); } - return value; } + + seqId++; } + + return resolver != null ? resolver.value : null; + } + + public > T getEnum(String key, Class enumType, T defaultValue) { if (collectConfig) { - ConfigCollector.get().put(key, defaultValue, ConfigOrigin.DEFAULT); + String defaultValueString = defaultValue == null ? null : defaultValue.name(); + reportDefault(key, defaultValueString); + } + String value = getStringInternal(key); + if (null != value) { + try { + return Enum.valueOf(enumType, value); + } catch (Exception ignoreAndUseDefault) { + log.debug("failed to parse {} for {}, defaulting to {}", value, key, defaultValue); + } } return defaultValue; } @@ -95,19 +121,40 @@ public String getString(String key, String defaultValue, String... aliases) { * an empty or blank string. */ public String getStringNotEmpty(String key, String defaultValue, String... aliases) { - for (ConfigProvider.Source source : sources) { - String value = source.get(key, aliases); - if (value != null && !value.trim().isEmpty()) { + if (collectConfig) { + reportDefault(key, defaultValue); + } + + ConfigValueResolver resolver = null; + int seqId = NON_DEFAULT_SEQ_ID; + + for (int i = sources.length - 1; i >= 0; i--) { + ConfigProvider.Source source = sources[i]; + String candidateValue = source.get(key, aliases); + + // Report any non-null values to telemetry + if (candidateValue != null) { if (collectConfig) { - ConfigCollector.get().put(key, value, source.origin()); + ConfigCollector.get() + .put(key, candidateValue, source.origin(), seqId, getConfigIdFromSource(source)); + } + // Create resolver only if candidate is not empty or blank + if (!candidateValue.trim().isEmpty()) { + resolver = + ConfigValueResolver.of( + candidateValue, source.origin(), seqId, getConfigIdFromSource(source)); } - return value; } + + seqId++; } - if (collectConfig) { - ConfigCollector.get().put(key, defaultValue, ConfigOrigin.DEFAULT); + + // Re-report the chosen value with the highest seqId + if (resolver != null && collectConfig) { + resolver.reReportToCollector(key, seqId + 1); } - return defaultValue; + + return resolver != null ? resolver.value : defaultValue; } public String getStringExcludingSource( @@ -115,23 +162,30 @@ public String getStringExcludingSource( String defaultValue, Class excludedSource, String... aliases) { - for (ConfigProvider.Source source : sources) { + if (collectConfig) { + reportDefault(key, defaultValue); + } + ConfigValueResolver resolver = null; + int seqId = NON_DEFAULT_SEQ_ID; + for (int i = sources.length - 1; i >= 0; i--) { + ConfigProvider.Source source = sources[i]; + String candidate = source.get(key, aliases); + + // Skip excluded source types if (excludedSource.isAssignableFrom(source.getClass())) { + seqId++; continue; } - - String value = source.get(key, aliases); - if (value != null) { + if (candidate != null) { + resolver = ConfigValueResolver.of(candidate); if (collectConfig) { - ConfigCollector.get().put(key, value, source.origin()); + ConfigCollector.get() + .put(key, candidate, source.origin(), seqId, getConfigIdFromSource(source)); } - return value; } + seqId++; } - if (collectConfig) { - ConfigCollector.get().put(key, defaultValue, ConfigOrigin.DEFAULT); - } - return defaultValue; + return resolver != null ? resolver.value : defaultValue; } public boolean isSet(String key) { @@ -192,35 +246,48 @@ public double getDouble(String key, double defaultValue) { } private T get(String key, T defaultValue, Class type, String... aliases) { - for (ConfigProvider.Source source : sources) { - String sourceValue = source.get(key, aliases); + if (collectConfig) { + reportDefault(key, defaultValue); + } + + ConfigValueResolver resolver = null; + int seqId = NON_DEFAULT_SEQ_ID; + + for (int i = sources.length - 1; i >= 0; i--) { + String sourceValue = sources[i].get(key, aliases); + String configId = getConfigIdFromSource(sources[i]); + + // Always report raw value to telemetry + if (sourceValue != null && collectConfig) { + ConfigCollector.get().put(key, sourceValue, sources[i].origin(), seqId, configId); + } + try { - T value = ConfigConverter.valueOf(sourceValue, type); - if (value != null) { - if (collectConfig) { - ConfigCollector.get() - .put(key, sourceValue, source.origin(), getConfigIdFromSource(source)); - } - return value; + T candidate = ConfigConverter.valueOf(sourceValue, type); + if (candidate != null) { + resolver = ConfigValueResolver.of(candidate, sources[i].origin(), seqId, configId); } } catch (ConfigConverter.InvalidBooleanValueException ex) { // For backward compatibility: invalid boolean values should return false, not default - // Store the invalid sourceValue for telemetry, but return false for the application + // Store the invalid sourceValue for telemetry, but return false if (Boolean.class.equals(type)) { - if (collectConfig) { - ConfigCollector.get().put(key, sourceValue, source.origin()); - } - return (T) Boolean.FALSE; + resolver = + ConfigValueResolver.of((T) Boolean.FALSE, ConfigOrigin.CALCULATED, seqId, configId); } // For non-boolean types, continue to next source } catch (IllegalArgumentException ex) { // continue - covers both NumberFormatException and other IllegalArgumentException } + + seqId++; } - if (collectConfig) { - ConfigCollector.get().put(key, defaultValue, ConfigOrigin.DEFAULT); + + // Re-report the chosen value and origin to ensure its seqId is higher than any error configs + if (resolver != null && collectConfig) { + resolver.reReportToCollector(key, seqId + 1); } - return defaultValue; + + return resolver != null ? resolver.value : defaultValue; } public List getList(String key) { @@ -228,11 +295,12 @@ public List getList(String key) { } public List getList(String key, List defaultValue) { - String list = getString(key); + // Ensure the first item at DEFAULT is the accurate one + if (collectConfig) { + reportDefault(key, defaultValue); + } + String list = getStringInternal(key); if (null == list) { - if (collectConfig) { - ConfigCollector.get().put(key, defaultValue, ConfigOrigin.DEFAULT); - } return defaultValue; } else { return ConfigConverter.parseList(list); @@ -240,11 +308,12 @@ public List getList(String key, List defaultValue) { } public Set getSet(String key, Set defaultValue) { - String list = getString(key); + // Ensure the first item at DEFAULT is the most accurate one + if (collectConfig) { + reportDefault(key, defaultValue); + } + String list = getStringInternal(key); if (null == list) { - if (collectConfig) { - ConfigCollector.get().put(key, defaultValue, ConfigOrigin.DEFAULT); - } return defaultValue; } else { return new HashSet(ConfigConverter.parseList(list)); @@ -256,9 +325,9 @@ public List getSpacedList(String key) { } public Map getMergedMap(String key, String... aliases) { - Map merged = new HashMap<>(); - ConfigOrigin origin = ConfigOrigin.DEFAULT; - String configId = null; + ConfigMergeResolver mergeResolver = new ConfigMergeResolver(new HashMap<>()); + int seqId = NON_DEFAULT_SEQ_ID; + // System properties take precedence over env // prior art: // https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/html/boot-features-external-config.html @@ -266,27 +335,29 @@ public Map getMergedMap(String key, String... aliases) { for (int i = sources.length - 1; 0 <= i; i--) { String value = sources[i].get(key, aliases); Map parsedMap = ConfigConverter.parseMap(value, key); + if (!parsedMap.isEmpty()) { - configId = getConfigIdFromSource(sources[i]); - if (origin != ConfigOrigin.DEFAULT) { - // if we already have a non-default origin, the value is calculated from multiple sources - origin = ConfigOrigin.CALCULATED; - } else { - origin = sources[i].origin(); + if (collectConfig) { + seqId++; + ConfigCollector.get() + .put(key, parsedMap, sources[i].origin(), seqId, getConfigIdFromSource(sources[i])); } + mergeResolver.addContribution(parsedMap, sources[i].origin()); } - merged.putAll(parsedMap); } + if (collectConfig) { - ConfigCollector.get().put(key, merged, origin, configId); + reportDefault(key, Collections.emptyMap()); + mergeResolver.reReportFinalResult(key, seqId); } - return merged; + + return mergeResolver.getMergedValue(); } public Map getMergedTagsMap(String key, String... aliases) { - Map merged = new HashMap<>(); - ConfigOrigin origin = ConfigOrigin.DEFAULT; - String configId = null; + ConfigMergeResolver mergeResolver = new ConfigMergeResolver(new HashMap<>()); + int seqId = NON_DEFAULT_SEQ_ID; + // System properties take precedence over env // prior art: // https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/html/boot-features-external-config.html @@ -295,27 +366,30 @@ public Map getMergedTagsMap(String key, String... aliases) { String value = sources[i].get(key, aliases); Map parsedMap = ConfigConverter.parseTraceTagsMap(value, ':', Arrays.asList(',', ' ')); + if (!parsedMap.isEmpty()) { - configId = getConfigIdFromSource(sources[i]); - if (origin != ConfigOrigin.DEFAULT) { - // if we already have a non-default origin, the value is calculated from multiple sources - origin = ConfigOrigin.CALCULATED; - } else { - origin = sources[i].origin(); + if (collectConfig) { + seqId++; + ConfigCollector.get() + .put(key, parsedMap, sources[i].origin(), seqId, getConfigIdFromSource(sources[i])); } + mergeResolver.addContribution(parsedMap, sources[i].origin()); } - merged.putAll(parsedMap); } + if (collectConfig) { - ConfigCollector.get().put(key, merged, origin, configId); + reportDefault(key, Collections.emptyMap()); + mergeResolver.reReportFinalResult(key, seqId); } - return merged; + + return mergeResolver.getMergedValue(); } public Map getOrderedMap(String key) { - LinkedHashMap merged = new LinkedHashMap<>(); - ConfigOrigin origin = ConfigOrigin.DEFAULT; - String configId = null; + // Use LinkedHashMap to preserve insertion order of map entries + ConfigMergeResolver mergeResolver = new ConfigMergeResolver(new LinkedHashMap<>()); + int seqId = NON_DEFAULT_SEQ_ID; + // System properties take precedence over env // prior art: // https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/html/boot-features-external-config.html @@ -323,28 +397,30 @@ public Map getOrderedMap(String key) { for (int i = sources.length - 1; 0 <= i; i--) { String value = sources[i].get(key); Map parsedMap = ConfigConverter.parseOrderedMap(value, key); + if (!parsedMap.isEmpty()) { - configId = getConfigIdFromSource(sources[i]); - if (origin != ConfigOrigin.DEFAULT) { - // if we already have a non-default origin, the value is calculated from multiple sources - origin = ConfigOrigin.CALCULATED; - } else { - origin = sources[i].origin(); + if (collectConfig) { + seqId++; + ConfigCollector.get() + .put(key, parsedMap, sources[i].origin(), seqId, getConfigIdFromSource(sources[i])); } + mergeResolver.addContribution(parsedMap, sources[i].origin()); } - merged.putAll(parsedMap); } + if (collectConfig) { - ConfigCollector.get().put(key, merged, origin, configId); + reportDefault(key, Collections.emptyMap()); + mergeResolver.reReportFinalResult(key, seqId); } - return merged; + + return mergeResolver.getMergedValue(); } public Map getMergedMapWithOptionalMappings( String defaultPrefix, boolean lowercaseKeys, String... keys) { - Map merged = new HashMap<>(); - ConfigOrigin origin = ConfigOrigin.DEFAULT; - String configId = null; + ConfigMergeResolver mergeResolver = new ConfigMergeResolver(new HashMap<>()); + int seqId = NON_DEFAULT_SEQ_ID; + // System properties take precedence over env // prior art: // https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/html/boot-features-external-config.html @@ -354,27 +430,32 @@ public Map getMergedMapWithOptionalMappings( String value = sources[i].get(key); Map parsedMap = ConfigConverter.parseMapWithOptionalMappings(value, key, defaultPrefix, lowercaseKeys); + if (!parsedMap.isEmpty()) { - configId = getConfigIdFromSource(sources[i]); - if (origin != ConfigOrigin.DEFAULT) { - // if we already have a non-default origin, the value is calculated from multiple - // sources - origin = ConfigOrigin.CALCULATED; - } else { - origin = sources[i].origin(); + if (collectConfig) { + seqId++; + ConfigCollector.get() + .put(key, parsedMap, sources[i].origin(), seqId, getConfigIdFromSource(sources[i])); } + mergeResolver.addContribution(parsedMap, sources[i].origin()); } - merged.putAll(parsedMap); } + if (collectConfig) { - ConfigCollector.get().put(key, merged, origin, configId); + reportDefault(key, Collections.emptyMap()); + mergeResolver.reReportFinalResult(key, seqId); } } - return merged; + + return mergeResolver.getMergedValue(); } public BitSet getIntegerRange(final String key, final BitSet defaultValue, String... aliases) { - final String value = getString(key, null, aliases); + // Ensure the first item at DEFAULT is the most accurate one + if (collectConfig) { + reportDefault(key, defaultValue); + } + final String value = getStringInternal(key, aliases); try { if (value != null) { return ConfigConverter.parseIntegerRangeSet(value, key); @@ -382,9 +463,6 @@ public BitSet getIntegerRange(final String key, final BitSet defaultValue, Strin } catch (final NumberFormatException e) { log.warn("Invalid configuration for {}", key, e); } - if (collectConfig) { - ConfigCollector.get().put(key, defaultValue, ConfigOrigin.DEFAULT); - } return defaultValue; } @@ -546,6 +624,83 @@ private static String getConfigIdFromSource(Source source) { return null; } + private static void reportDefault(String key, T defaultValue) { + ConfigCollector.get().putDefault(key, defaultValue); + } + + /** Helper class to store resolved configuration values with their metadata */ + static final class ConfigValueResolver { + final T value; + final ConfigOrigin origin; + final int seqId; + final String configId; + + // Single constructor that takes all fields + private ConfigValueResolver(T value, ConfigOrigin origin, int seqId, String configId) { + this.value = value; + this.origin = origin; + this.seqId = seqId; + this.configId = configId; + } + + // Factory method for cases where we only care about the value (e.g., getString) + static ConfigValueResolver of(T value) { + return new ConfigValueResolver<>(value, null, ABSENT_SEQ_ID, null); + } + + // Factory method for cases where we need to re-report (e.g., getStringNotEmpty, get) + static ConfigValueResolver of(T value, ConfigOrigin origin, int seqId, String configId) { + return new ConfigValueResolver<>(value, origin, seqId, configId); + } + + /** Re-reports this resolved value to ConfigCollector with the specified seqId */ + void reReportToCollector(String key, int finalSeqId) { + // Value should never be null if there is an initialized ConfigValueResolver + if (origin != null) { + ConfigCollector.get().put(key, value, origin, finalSeqId, configId); + } + } + } + + /** Helper class for methods that merge map values from multiple sources (e.g., getMergedMap) */ + private static final class ConfigMergeResolver { + private final Map mergedValue; + private ConfigOrigin currentOrigin; + + ConfigMergeResolver(Map initialValue) { + this.mergedValue = initialValue; + this.currentOrigin = ConfigOrigin.DEFAULT; + } + + /** Adds a contribution from a source and updates the origin tracking */ + void addContribution(Map contribution, ConfigOrigin sourceOrigin) { + mergedValue.putAll(contribution); + + // Update origin: DEFAULT -> source origin -> CALCULATED if multiple sources + if (currentOrigin != ConfigOrigin.DEFAULT) { + // if we already have a non-default origin, the value is calculated from multiple sources + currentOrigin = ConfigOrigin.CALCULATED; + } else { + currentOrigin = sourceOrigin; + } + } + + /** + * Re-reports the final merged result to ConfigCollector if it has actual contributions. Does + * NOT re-report when no contributions were made since defaults are reported separately. + */ + void reReportFinalResult(String key, int finalSeqId) { + if (currentOrigin != ConfigOrigin.DEFAULT && !mergedValue.isEmpty()) { + ConfigCollector.get().put(key, mergedValue, currentOrigin, finalSeqId); + } + } + + /** Gets the final merged value */ + Map getMergedValue() { + return mergedValue; + } + } + public abstract static class Source { public final String get(String key, String... aliases) { String value = get(key); From 70cfa2da36be66bddf9a9a4021fbf2a3c1afdf62 Mon Sep 17 00:00:00 2001 From: mhlidd Date: Tue, 23 Sep 2025 11:31:33 -0700 Subject: [PATCH 10/41] Adding Gradle Plugins for Config Inversion (#9565) * adding supported-configurations.json file * adding gradle plugins for config inversion * hooking parsing json in config-utils * excluding json from shadowjar * restricting config inversion files from being duplicated in shadow jars * attempting to fix published_artifacts job * moving supported-configurations.json to metadata * updating gradle files * updating plugin to account for file being in metadata * PR comments * chore: Tweak comment * updating gradle to not exclude config inversion --------- Co-authored-by: Brice Dutheil --- buildSrc/build.gradle.kts | 13 ++ .../plugin/config/ConfigInversionLinter.kt | 128 ++++++++++++++ .../ParseSupportedConfigurationsTask.kt | 157 ++++++++++++++++++ .../plugin/config/SupportedConfigPlugin.kt | 27 +++ .../config/SupportedTracerConfigurations.kt | 15 ++ dd-java-agent/build.gradle | 1 + utils/config-utils/build.gradle.kts | 1 + 7 files changed, 342 insertions(+) create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ParseSupportedConfigurationsTask.kt create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedConfigPlugin.kt create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedTracerConfigurations.kt diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index fc37a6b8ccb..9ec83bbb1be 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -30,6 +30,14 @@ gradlePlugin { id = "tracer-version" implementationClass = "datadog.gradle.plugin.version.TracerVersionPlugin" } + create("supported-config-generation") { + id = "supported-config-generator" + implementationClass = "datadog.gradle.plugin.config.SupportedConfigPlugin" + } + create("supported-config-linter") { + id = "config-inversion-linter" + implementationClass = "datadog.gradle.plugin.config.ConfigInversionLinter" + } } } @@ -52,6 +60,11 @@ dependencies { implementation("com.google.guava", "guava", "20.0") implementation("org.ow2.asm", "asm", "9.8") implementation("org.ow2.asm", "asm-tree", "9.8") + + implementation(platform("com.fasterxml.jackson:jackson-bom:2.17.2")) + implementation("com.fasterxml.jackson.core:jackson-databind") + implementation("com.fasterxml.jackson.core:jackson-annotations") + implementation("com.fasterxml.jackson.core:jackson-core") } tasks.compileKotlin { diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt new file mode 100644 index 00000000000..3b78bc6ebae --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt @@ -0,0 +1,128 @@ +package datadog.gradle.plugin.config + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.GradleException +import org.gradle.api.tasks.SourceSet +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.internal.impldep.kotlinx.metadata.impl.extensions.KmExtension +import org.gradle.kotlin.dsl.accessors.runtime.externalModuleDependencyFor +import org.gradle.kotlin.dsl.getByType +import java.net.URLClassLoader +import java.nio.file.Path + +class ConfigInversionLinter : Plugin { + override fun apply(target: Project) { + val extension = target.extensions.create("supportedTracerConfigurations", SupportedTracerConfigurations::class.java) + registerLogEnvVarUsages(target, extension) + registerCheckEnvironmentVariablesUsage(target) + } +} + +/** Registers `logEnvVarUsages` (scan for DD_/OTEL_ tokens and fail if unsupported). */ +private fun registerLogEnvVarUsages(target: Project, extension: SupportedTracerConfigurations) { + val ownerPath = extension.configOwnerPath + val generatedFile = extension.className + + // token check that uses the generated class instead of JSON + target.tasks.register("logEnvVarUsages") { + group = "verification" + description = "Scan Java files for DD_/OTEL_ tokens and fail if unsupported (using generated constants)" + + val mainSourceSetOutput = ownerPath.map { + target.project(it) + .extensions.getByType() + .named(SourceSet.MAIN_SOURCE_SET_NAME) + .map { main -> main.output } + } + inputs.files(mainSourceSetOutput) + + // inputs for incrementality (your own source files, not the owner’s) + val javaFiles = target.fileTree(target.projectDir) { + include("**/src/main/java/**/*.java") + exclude("**/build/**", "**/dd-smoke-tests/**") + } + inputs.files(javaFiles) + outputs.upToDateWhen { true } + doLast { + // 1) Build classloader from the owner project’s runtime classpath + val urls = mainSourceSetOutput.get().get().files.map { it.toURI().toURL() }.toTypedArray() + val supported: Set = URLClassLoader(urls, javaClass.classLoader).use { cl -> + // 2) Load the generated class + read static field + val clazz = Class.forName(generatedFile.get(), true, cl) + @Suppress("UNCHECKED_CAST") + clazz.getField("SUPPORTED").get(null) as Set + } + + // 3) Scan our sources and compare + val repoRoot = target.projectDir.toPath() + val tokenRegex = Regex("\"(?:DD_|OTEL_)[A-Za-z0-9_]+\"") + + val violations = buildList { + javaFiles.files.forEach { f -> + val rel = repoRoot.relativize(f.toPath()).toString() + var inBlock = false + f.readLines().forEachIndexed { i, raw -> + val trimmed = raw.trim() + if (trimmed.startsWith("//")) return@forEachIndexed + if (!inBlock && trimmed.contains("/*")) inBlock = true + if (inBlock) { + if (trimmed.contains("*/")) inBlock = false + return@forEachIndexed + } + tokenRegex.findAll(raw).forEach { m -> + val token = m.value.trim('"') + if (token !in supported) add("$rel:${i + 1} -> Unsupported token'$token'") + } + } + } + } + + if (violations.isNotEmpty()) { + violations.forEach { target.logger.error(it) } + throw GradleException("Unsupported DD_/OTEL_ tokens found! See errors above.") + } else { + target.logger.info("All DD_/OTEL_ tokens are supported.") + } + } + } +} + +/** Registers `checkEnvironmentVariablesUsage` (forbid EnvironmentVariables.get(...)). */ +private fun registerCheckEnvironmentVariablesUsage(project: Project) { + project.tasks.register("checkEnvironmentVariablesUsage") { + group = "verification" + description = "Scans src/main/java for direct usages of EnvironmentVariables.get(...)" + + doLast { + val repoRoot: Path = project.projectDir.toPath() + val javaFiles = project.fileTree(project.projectDir) { + include("**/src/main/java/**/*.java") + exclude("**/build/**") + exclude("internal-api/src/main/java/datadog/trace/api/ConfigHelper.java") + exclude("dd-java-agent/agent-bootstrap/**") + exclude("dd-java-agent/src/main/java/datadog/trace/bootstrap/BootstrapInitializationTelemetry.java") + } + + val pattern = Regex("""EnvironmentVariables\.get\s*\(""") + val matches = buildList { + javaFiles.forEach { f -> + val relative = repoRoot.relativize(f.toPath()) + f.readLines().forEachIndexed { idx, line -> + if (pattern.containsMatchIn(line)) { + add("$relative:${idx + 1} -> ${line.trim()}") + } + } + } + } + + if (matches.isNotEmpty()) { + project.logger.lifecycle("\nFound forbidden usages of EnvironmentVariables.get(...):") + matches.forEach { project.logger.lifecycle(it) } + throw GradleException("Forbidden usage of EnvironmentVariables.get(...) found in Java files.") + } else { + project.logger.info("No forbidden EnvironmentVariables.get(...) usages found in src/main/java.") + } + } + } +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ParseSupportedConfigurationsTask.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ParseSupportedConfigurationsTask.kt new file mode 100644 index 00000000000..0864efbcbdc --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ParseSupportedConfigurationsTask.kt @@ -0,0 +1,157 @@ +package datadog.gradle.plugin.config + +import org.gradle.api.DefaultTask +import org.gradle.api.model.ObjectFactory +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction +import com.fasterxml.jackson.core.type.TypeReference +import com.fasterxml.jackson.databind.ObjectMapper +import org.gradle.api.tasks.CacheableTask +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import java.io.File +import java.io.FileInputStream +import java.io.PrintWriter +import javax.inject.Inject + +@CacheableTask +abstract class ParseSupportedConfigurationsTask @Inject constructor( + private val objects: ObjectFactory +) : DefaultTask() { + @InputFile + @PathSensitive(PathSensitivity.NONE) + val jsonFile = objects.fileProperty() + + @get:OutputDirectory + val destinationDirectory = objects.directoryProperty() + + @Input + val className = objects.property(String::class.java) + + @TaskAction + fun generate() { + val input = jsonFile.get().asFile + val outputDir = destinationDirectory.get().asFile + val finalClassName = className.get() + outputDir.mkdirs() + + // Read JSON (directly from the file, not classpath) + val mapper = ObjectMapper() + val fileData: Map = FileInputStream(input).use { inStream -> + mapper.readValue(inStream, object : TypeReference>() {}) + } + + @Suppress("UNCHECKED_CAST") + val supported = fileData["supportedConfigurations"] as Map> + @Suppress("UNCHECKED_CAST") + val aliases = fileData["aliases"] as Map> + @Suppress("UNCHECKED_CAST") + val deprecated = (fileData["deprecations"] as? Map) ?: emptyMap() + + val aliasMapping = mutableMapOf() + for ((canonical, alist) in aliases) { + for (alias in alist) aliasMapping[alias] = canonical + } + + // Build the output .java path from the fully-qualified class name + val pkgName = finalClassName.substringBeforeLast('.', "") + val pkgPath = pkgName.replace('.', File.separatorChar) + val simpleName = finalClassName.substringAfterLast('.') + val pkgDir = if (pkgPath.isEmpty()) outputDir else File(outputDir, pkgPath).also { it.mkdirs() } + val generatedFile = File(pkgDir, "$simpleName.java").absolutePath + + // Call your existing generator (same signature as in your Java code) + generateJavaFile( + generatedFile, + simpleName, + pkgName, + supported.keys, + aliases, + aliasMapping, + deprecated + ) + } + + private fun generateJavaFile( + outputPath: String, + className: String, + packageName: String, + supportedKeys: Set, + aliases: Map>, + aliasMapping: Map, + deprecated: Map + ) { + val outFile = File(outputPath) + outFile.parentFile?.mkdirs() + + PrintWriter(outFile).use { out -> + // NOTE: adjust these if you want to match task's className + out.println("package $packageName;") + out.println() + out.println("import java.util.*;") + out.println() + out.println("public final class $className {") + out.println() + out.println(" public static final Set SUPPORTED;") + out.println() + out.println(" public static final Map> ALIASES;") + out.println() + out.println(" public static final Map ALIAS_MAPPING;") + out.println() + out.println(" public static final Map DEPRECATED;") + out.println() + out.println(" static {") + out.println() + + // SUPPORTED + out.print(" Set supportedSet = new HashSet<>(Arrays.asList(") + val supportedIter = supportedKeys.toSortedSet().iterator() + while (supportedIter.hasNext()) { + val key = supportedIter.next() + out.print("\"${esc(key)}\"") + if (supportedIter.hasNext()) out.print(", ") + } + out.println("));") + out.println(" SUPPORTED = Collections.unmodifiableSet(supportedSet);") + out.println() + + // ALIASES + out.println(" Map> aliasesMap = new HashMap<>();") + for ((canonical, list) in aliases.toSortedMap()) { + out.printf( + " aliasesMap.put(\"%s\", Collections.unmodifiableList(Arrays.asList(%s)));\n", + esc(canonical), + quoteList(list) + ) + } + out.println(" ALIASES = Collections.unmodifiableMap(aliasesMap);") + out.println() + + // ALIAS_MAPPING + out.println(" Map aliasMappingMap = new HashMap<>();") + for ((alias, target) in aliasMapping.toSortedMap()) { + out.printf(" aliasMappingMap.put(\"%s\", \"%s\");\n", esc(alias), esc(target)) + } + out.println(" ALIAS_MAPPING = Collections.unmodifiableMap(aliasMappingMap);") + out.println() + + // DEPRECATED + out.println(" Map deprecatedMap = new HashMap<>();") + for ((oldKey, note) in deprecated.toSortedMap()) { + out.printf(" deprecatedMap.put(\"%s\", \"%s\");\n", esc(oldKey), esc(note)) + } + out.println(" DEPRECATED = Collections.unmodifiableMap(deprecatedMap);") + out.println() + out.println(" }") + out.println("}") + } + } + + private fun quoteList(list: List): String = + list.joinToString(", ") { "\"${esc(it)}\"" } + + private fun esc(s: String): String = + s.replace("\\", "\\\\").replace("\"", "\\\"") +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedConfigPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedConfigPlugin.kt new file mode 100644 index 00000000000..598d566bdf0 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedConfigPlugin.kt @@ -0,0 +1,27 @@ +package datadog.gradle.plugin.config + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.tasks.SourceSet +import org.gradle.api.tasks.SourceSetContainer + +class SupportedConfigPlugin : Plugin { + override fun apply(targetProject: Project) { + val extension = targetProject.extensions.create("supportedTracerConfigurations", SupportedTracerConfigurations::class.java) + generateSupportedConfigurations(targetProject, extension) + } + + private fun generateSupportedConfigurations(targetProject: Project, extension: SupportedTracerConfigurations) { + val generateTask = + targetProject.tasks.register("generateSupportedConfigurations", ParseSupportedConfigurationsTask::class.java) { + jsonFile.set(extension.jsonFile) + destinationDirectory.set(extension.destinationDirectory) + className.set(extension.className) + } + + val sourceset = targetProject.extensions.getByType(SourceSetContainer::class.java).named(SourceSet.MAIN_SOURCE_SET_NAME) + sourceset.configure { + java.srcDir(generateTask) + } + } +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedTracerConfigurations.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedTracerConfigurations.kt new file mode 100644 index 00000000000..cb93cb1b84e --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/config/SupportedTracerConfigurations.kt @@ -0,0 +1,15 @@ +package datadog.gradle.plugin.config + +import org.gradle.api.Project +import org.gradle.api.file.ProjectLayout +import org.gradle.api.model.ObjectFactory +import javax.inject.Inject + +open class SupportedTracerConfigurations @Inject constructor(objects: ObjectFactory, layout: ProjectLayout, project: Project) { + val configOwnerPath = objects.property(String::class.java).convention(":utils:config-utils") + val className = objects.property(String::class.java).convention("datadog.trace.config.inversion.GeneratedSupportedConfigurations") + + val jsonFile = objects.fileProperty().convention(project.rootProject.layout.projectDirectory.file("metadata/supported-configurations.json")) + + val destinationDirectory = objects.directoryProperty().convention(layout.buildDirectory.dir("generated/supportedConfigurations")) +} diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index 6b86d0ba802..babf0678b41 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -302,6 +302,7 @@ dependencies { sharedShadowInclude project(':remote-config:remote-config-core'), { transitive = false } + sharedShadowInclude project(':utils:container-utils'), { transitive = false } diff --git a/utils/config-utils/build.gradle.kts b/utils/config-utils/build.gradle.kts index 9ead8f2137b..ccf2e03f6fb 100644 --- a/utils/config-utils/build.gradle.kts +++ b/utils/config-utils/build.gradle.kts @@ -1,5 +1,6 @@ plugins { `java-library` + id("supported-config-generator") } apply(from = "$rootDir/gradle/java.gradle") From 11e677e2396713ff696d57642e423e6696a6dfb1 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Tue, 23 Sep 2025 16:06:01 -0400 Subject: [PATCH 11/41] Raised `relativeAccuracy` to `0.2` since `0.1` causes `~16%` random failures at `n=10,000` due to expected fluctuations. (#9588) --- .../groovy/datadog/trace/core/histogram/HistogramsTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/histogram/HistogramsTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/histogram/HistogramsTest.groovy index 70a275964d7..43b48a73f7b 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/histogram/HistogramsTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/histogram/HistogramsTest.groovy @@ -94,7 +94,7 @@ class HistogramsTest extends DDSpecification { uniform | 100000 | [1D, 200D] | 0.03 uniform | 10000 | [1000D, 2000D] | 0.04 uniform | 100000 | [1000D, 2000D] | 0.05 - normal | 10000 | [1000D, 10D] | 0.01 + normal | 10000 | [1000D, 10D] | 0.02 normal | 100000 | [1000D, 10D] | 0.02 normal | 10000 | [10000D, 100D] | 0.03 normal | 100000 | [10000D, 100D] | 0.04 From 274d1448c251f13a88b72e7438dfb8a2c8474213 Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Wed, 24 Sep 2025 14:26:46 +0200 Subject: [PATCH 12/41] feat(tooling): Add community contribution PR mirroring (#9602) --- tooling/mirror-community-pull-request.sh | 200 +++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100755 tooling/mirror-community-pull-request.sh diff --git a/tooling/mirror-community-pull-request.sh b/tooling/mirror-community-pull-request.sh new file mode 100755 index 00000000000..fc9977151cb --- /dev/null +++ b/tooling/mirror-community-pull-request.sh @@ -0,0 +1,200 @@ +#!/bin/bash +set -e + +# +# Handling community pull requests. +# +# The main way to handle community contributions is to contribute directly on the contributor's pull request. +# If not enabled, please ask the contributor to enable the option "Allow edits by maintainers". +# This allows maintainers to push commits to the contributor's branch. +# Then, use this script to mirror the PR to a new branch in the main repository. +# This allows running CI with the maintainer's permissions. +# +# Few hints: +# - Avoid merge commits with master and rebase the contributor's branch instead. +# - Avoid pushing changes to the mirror branch as it will be overwritten when rerunning the script. +# +# Usage: mirror-community-pull-request.sh [] + +REPO="DataDog/dd-trace-java" +PR_NUMBER=$1 +TARGET_BRANCH=${2:-master} +MIRROR_BRANCH="community-pr-$PR_NUMBER" + +# +# Check arguments. +# +# Check if no arguments are provided +if [ $# -eq 0 ]; then + echo "Usage: $0 []" + echo ": PR number to mirror" + echo ": Target branch for the mirror (default: master)" + echo "" + echo "This script mirrors a community PR to allow running CI with your own account." + echo "It creates a new branch 'community-pr-' and pushes the PR changes." + exit 1 +fi +# Check PR number is provided +if [ -z "$PR_NUMBER" ]; then + echo "❌ PR number is not provided" + exit 1 +fi +# Validate PR number is numeric +if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then + echo "❌ PR number must be numeric" + exit 1 +fi + +# +# Check requirements. +# +echo "- Checking requirements" +# Check gh is installed +gh --version 1>/dev/null 2>&1 || { echo "❌ gh is not installed. Please install GitHub CLI."; exit 1; } +# Check jq is installed +jq --version 1>/dev/null 2>&1 || { echo "❌ jq is not installed. Please install jq."; exit 1; } +# Check there are no local changes +git diff --exit-code || { echo "❌ There are local changes. Please commit or stash them."; exit 1; } + +# +# Fetch PR information. +# +echo "- Fetching PR #$PR_NUMBER details" +# Check if PR exists and get details +PR_DATA=$(gh pr view "$PR_NUMBER" --json headRepository,headRepositoryOwner,headRefName,title,number,state,author 2>/dev/null || echo "") +if [ -z "$PR_DATA" ]; then + echo "❌ PR #$PR_NUMBER not found" + exit 1 +fi +# Parse PR details +FORK_REPO=$(echo "$PR_DATA" | jq -r '(.headRepository.nameWithOwner // (.headRepositoryOwner.login + "/" + .headRepository.name)) // empty') +FORK_BRANCH=$(echo "$PR_DATA" | jq -r '.headRefName // empty') +PR_TITLE=$(echo "$PR_DATA" | jq -r '.title // empty') +PR_AUTHOR=$(echo "$PR_DATA" | jq -r '.author.login // empty') +PR_LABELS=$(gh pr view "$PR_NUMBER" --json labels --jq '[.labels[].name] | join(",")') +if [ -z "$FORK_REPO" ] || [ -z "$FORK_BRANCH" ]; then + echo "❌ Could not determine fork repository or branch for PR #$PR_NUMBER" + exit 1 +fi + +# +# Create mirror branch. +# +echo "- Mirroring PR #$PR_NUMBER from $FORK_REPO:$FORK_BRANCH to $REPO:$MIRROR_BRANCH" +# Check if mirror branch already exists +echo "- Checking if mirror branch $MIRROR_BRANCH already exists locally" +if git show-ref --verify --quiet "refs/heads/$MIRROR_BRANCH" 2>/dev/null; then + echo -n "Branch $MIRROR_BRANCH already exists locally. Delete it to recreate? (y/n)" + read -r ANSWER + if [ "$ANSWER" = "y" ]; then + git branch -D "$MIRROR_BRANCH" + else + echo "Aborting." + exit 1 + fi +fi +# Check if mirror branch exists on remote +echo "- Checking if mirror branch $MIRROR_BRANCH already exists on remote" +if git show-ref --verify --quiet "refs/remotes/origin/$MIRROR_BRANCH" 2>/dev/null; then + echo -n "Branch $MIRROR_BRANCH already exists on remote. Force push over it? (y/n)" + read -r ANSWER + if [ "$ANSWER" != "y" ]; then + echo "Aborting." + exit 1 + fi +fi +# Fetch the PR branch from the fork directly (no remote needed) +git fetch --quiet "https://github.com/$FORK_REPO.git" "$FORK_BRANCH" +# Get list of commits from the PR to re-sign them +echo "- Getting list of commits from PR" +PR_COMMITS=$(gh pr view "$PR_NUMBER" --json commits --jq '.commits[].oid') +if [ -z "$PR_COMMITS" ]; then + echo "❌ No commits found in PR #$PR_NUMBER" + exit 1 +fi +# Get current git branch for cleanup +CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) +# Create the mirror branch from target branch (we'll cherry-pick commits) +echo "- Creating mirror branch $MIRROR_BRANCH from $TARGET_BRANCH" +git fetch --quiet origin "$TARGET_BRANCH" +git checkout -b "$MIRROR_BRANCH" "origin/$TARGET_BRANCH" + +# +# Mirror commits. +# +# Cherry-pick each commit with signature to ensure all commits are signed +echo "- Cherry-picking and signing commits from PR" +for COMMIT in $PR_COMMITS; do + echo " - Cherry-picking $COMMIT" + # Check if this is a merge commit + CHERRY_PICK_ARGS="-S" + PARENT_COUNT=$(git rev-list --parents -n 1 "$COMMIT" 2>/dev/null | wc -w) + if [ "$PARENT_COUNT" -gt 2 ]; then + CHERRY_PICK_ARGS="$CHERRY_PICK_ARGS -m 1" + fi + if ! git cherry-pick "$CHERRY_PICK_ARGS" "$COMMIT"; then + # Check if it's an empty commit + if ! git diff --cached --quiet || ! git diff --quiet; then + echo "❌ Failed to cherry-pick merge commit $COMMIT" + echo "You may need to resolve conflicts manually" + exit 1 + else + echo " (empty commit, skipping)" + git cherry-pick --skip + fi + fi +done +# Push the mirror branch to origin +echo "- Pushing $MIRROR_BRANCH to origin" +git push -u origin "$MIRROR_BRANCH" --no-verify --force-with-lease + +# +# Create PR if it doesn't exist. +# +echo "- Checking if PR already exists for branch $MIRROR_BRANCH" +EXISTING_PR=$(gh pr list --head "$MIRROR_BRANCH" --json number --jq '.[0].number // empty' 2>/dev/null) +if [ -n "$EXISTING_PR" ]; then + MIRROR_PR_URL="https://github.com/$REPO/pull/$EXISTING_PR" +else + echo "- Creating new PR for mirror branch $MIRROR_BRANCH" + # Create PR body with reference to original + MIRROR_PR_BODY="This PR mirrors the changes from the original community contribution to enable CI testing with maintainer privileges. + +**Original PR:** https://github.com/$REPO/pull/$PR_NUMBER +**Original Author:** @$PR_AUTHOR +**Original Branch:** $FORK_REPO:$FORK_BRANCH + +Closes #$PR_NUMBER + +--- + +*This is an automated mirror created to run CI checks. See tooling/mirror-community-pull-request.sh for details.*" + + # Create the PR + CREATE_ARGS=(--base "$TARGET_BRANCH" --head "$MIRROR_BRANCH" --title "🪞 $PR_NUMBER - $PR_TITLE" --body "$MIRROR_PR_BODY") + if [ -n "$PR_LABELS" ]; then + CREATE_ARGS+=(--label "$PR_LABELS") + fi + MIRROR_PR_NUMBER=$(gh pr create "${CREATE_ARGS[@]}" 2>/dev/null | grep -o '[0-9]*$') + if [ -n "$MIRROR_PR_NUMBER" ]; then + echo "- Created mirror PR: #$MIRROR_PR_NUMBER" + MIRROR_PR_URL="https://github.com/$REPO/pull/$MIRROR_PR_NUMBER" + else + echo "- Failed to create PR automatically" + MIRROR_PR_URL="https://github.com/$REPO/compare/$TARGET_BRANCH...$MIRROR_BRANCH" + fi +fi + +echo "" +echo "✅ Successfully mirrored PR #$PR_NUMBER" +echo " Original: https://github.com/$REPO/pull/$PR_NUMBER (@$PR_AUTHOR)" +echo " Mirror: $MIRROR_PR_URL" +echo " Branch: $REPO:$MIRROR_BRANCH" + +# +# Clean up. +# +echo "- Restoring original branch" +git checkout "$CURRENT_BRANCH" + +echo "Done." From d76b984a7f051bc504be6dd5de63adf87580d2ec Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Wed, 24 Sep 2025 11:00:13 -0400 Subject: [PATCH 13/41] Remove extra jersey smoke test module (#9599) --- settings.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 0db78b03163..f757df286c2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -165,7 +165,6 @@ include( ":dd-smoke-tests:gradle", ":dd-smoke-tests:grpc-1.5", ":dd-smoke-tests:java9-modules", - ":dd-smoke-tests:jersey", ":dd-smoke-tests:jersey-2", ":dd-smoke-tests:jersey-3", ":dd-smoke-tests:jboss-modules", From 46f4b133f8253e96098220428ca157b2bd1d43ea Mon Sep 17 00:00:00 2001 From: Charles Yu Date: Wed, 24 Sep 2025 11:58:57 -0400 Subject: [PATCH 14/41] [DJM-964] Add Spark physical plan with spark.sql spans (#9600) --- .../instrumentation/spark/AbstractDatadogSparkListener.java | 1 + 1 file changed, 1 insertion(+) diff --git a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java index 98a08a6ef80..07e9eba8019 100644 --- a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java +++ b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java @@ -411,6 +411,7 @@ private AgentSpan getOrCreateSqlSpan( .withTag("query_id", sqlExecutionId) .withTag("description", queryStart.description()) .withTag("details", queryStart.details()) + .withTag("_dd.spark.physical_plan", queryStart.physicalPlanDescription()) .withTag(DDTags.RESOURCE_NAME, queryStart.description()); if (batchKey != null) { From 1450a11e5d562b6d35f9d90802f10212d96a5d45 Mon Sep 17 00:00:00 2001 From: mhlidd Date: Wed, 24 Sep 2025 09:05:07 -0700 Subject: [PATCH 15/41] Fix Gradle Dependencies with Javadoc task (#9604) --- utils/config-utils/build.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/utils/config-utils/build.gradle.kts b/utils/config-utils/build.gradle.kts index ccf2e03f6fb..bb3598f5587 100644 --- a/utils/config-utils/build.gradle.kts +++ b/utils/config-utils/build.gradle.kts @@ -13,3 +13,7 @@ dependencies { testImplementation(project(":utils:test-utils")) } + +tasks.named("javadoc") { + dependsOn("generateSupportedConfigurations") +} From 9f07fa1a06c4a1c11796cb9e40c0bf67cd1bb335 Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Wed, 24 Sep 2025 15:00:45 -0400 Subject: [PATCH 16/41] Convert configurations syntax to use lazy API (#9606) * Convert configurations.all to configurations.configureEach to use lazy API * Convert stray .all --- dd-java-agent/agent-profiling/profiling-ddprof/build.gradle | 2 +- dd-java-agent/instrumentation/axis2-1.3/build.gradle | 2 +- dd-java-agent/instrumentation/javax-xml/build.gradle | 2 +- dd-java-agent/instrumentation/mule-4.5/build.gradle | 2 +- dd-java-agent/instrumentation/owasp-esapi-2/build.gradle | 2 +- dd-java-agent/instrumentation/resteasy-appsec/build.gradle | 2 +- dd-java-agent/instrumentation/spark/build.gradle | 2 +- dd-java-agent/instrumentation/spark/spark_2.12/build.gradle | 2 +- dd-java-agent/instrumentation/spark/spark_2.13/build.gradle | 2 +- dd-java-agent/instrumentation/sslsocket/build.gradle | 2 +- dd-java-agent/instrumentation/synapse-3.0/build.gradle | 2 +- dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle | 2 +- .../tomcat/tomcat-appsec/tomcat-appsec-5.5/build.gradle | 2 +- dd-java-agent/instrumentation/tomcat/tomcat-common/build.gradle | 2 +- .../websocket/jetty-websocket/jetty-websocket-10/build.gradle | 2 +- .../websocket/jetty-websocket/jetty-websocket-11/build.gradle | 2 +- .../websocket/jetty-websocket/jetty-websocket-12/build.gradle | 2 +- dd-trace-ot/build.gradle.kts | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/dd-java-agent/agent-profiling/profiling-ddprof/build.gradle b/dd-java-agent/agent-profiling/profiling-ddprof/build.gradle index b60a1d5035b..44c1e9fc9ca 100644 --- a/dd-java-agent/agent-profiling/profiling-ddprof/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-ddprof/build.gradle @@ -41,7 +41,7 @@ dependencies { } -configurations.all { +configurations.configureEach { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' } diff --git a/dd-java-agent/instrumentation/axis2-1.3/build.gradle b/dd-java-agent/instrumentation/axis2-1.3/build.gradle index 7cd4d775420..eeb498f73f8 100644 --- a/dd-java-agent/instrumentation/axis2-1.3/build.gradle +++ b/dd-java-agent/instrumentation/axis2-1.3/build.gradle @@ -14,7 +14,7 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('latestDepForkedTest', 'test') -configurations.all { +configurations.configureEach { // the version used by axis2 isn't available in a public repository - we don't need it, so exclude it exclude group: 'org.apache.woden', module: 'woden' // shut up about broken xml-api pom relocation diff --git a/dd-java-agent/instrumentation/javax-xml/build.gradle b/dd-java-agent/instrumentation/javax-xml/build.gradle index 5a91a4582a6..b83bde3596d 100644 --- a/dd-java-agent/instrumentation/javax-xml/build.gradle +++ b/dd-java-agent/instrumentation/javax-xml/build.gradle @@ -14,7 +14,7 @@ repositories { } } -configurations.all { +configurations.configureEach { // shut up about broken xml-api pom relocation resolutionStrategy { force 'xml-apis:xml-apis:1.4.01' diff --git a/dd-java-agent/instrumentation/mule-4.5/build.gradle b/dd-java-agent/instrumentation/mule-4.5/build.gradle index f1a6cb184a9..b2b85e57720 100644 --- a/dd-java-agent/instrumentation/mule-4.5/build.gradle +++ b/dd-java-agent/instrumentation/mule-4.5/build.gradle @@ -71,7 +71,7 @@ configurations { latestMuleServices } -configurations.all { +configurations.configureEach { exclude group: 'pull-parser', module: 'pull-parser' resolutionStrategy { diff --git a/dd-java-agent/instrumentation/owasp-esapi-2/build.gradle b/dd-java-agent/instrumentation/owasp-esapi-2/build.gradle index 219dfaa0923..a1804517668 100644 --- a/dd-java-agent/instrumentation/owasp-esapi-2/build.gradle +++ b/dd-java-agent/instrumentation/owasp-esapi-2/build.gradle @@ -7,7 +7,7 @@ muzzle { } } -configurations.all { +configurations.configureEach { // shut up about broken xml-api pom relocation resolutionStrategy { force 'xml-apis:xml-apis:1.4.01' diff --git a/dd-java-agent/instrumentation/resteasy-appsec/build.gradle b/dd-java-agent/instrumentation/resteasy-appsec/build.gradle index 2cf0449164c..7d80a9e81f7 100644 --- a/dd-java-agent/instrumentation/resteasy-appsec/build.gradle +++ b/dd-java-agent/instrumentation/resteasy-appsec/build.gradle @@ -22,7 +22,7 @@ addTestSuite('jettyAsyncTest') //check.dependsOn nettyTest, jettyAsyncTest // CI invocations are only for test/latestDepTest test.finalizedBy nettyTest, jettyAsyncTest -configurations.all { +configurations.configureEach { resolutionStrategy.deactivateDependencyLocking() } dependencies { diff --git a/dd-java-agent/instrumentation/spark/build.gradle b/dd-java-agent/instrumentation/spark/build.gradle index 806f480fbe5..b3b9965c9d0 100644 --- a/dd-java-agent/instrumentation/spark/build.gradle +++ b/dd-java-agent/instrumentation/spark/build.gradle @@ -3,7 +3,7 @@ plugins { } apply from: "$rootDir/gradle/java.gradle" -configurations.all { +configurations.configureEach { resolutionStrategy.deactivateDependencyLocking() } dependencies { diff --git a/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle b/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle index a9a87a99ef1..07519ca9f52 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle +++ b/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle @@ -13,7 +13,7 @@ muzzle { assertInverse = true } } -configurations.all { +configurations.configureEach { resolutionStrategy.deactivateDependencyLocking() } apply from: "$rootDir/gradle/java.gradle" diff --git a/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle b/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle index a5de69adf09..b17f1757b48 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle +++ b/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle @@ -33,7 +33,7 @@ ext { // Spark does not support Java > 11 until 3.3.0 https://issues.apache.org/jira/browse/SPARK-33772 maxJavaVersionForTests = JavaVersion.VERSION_11 } -configurations.all { +configurations.configureEach { resolutionStrategy.deactivateDependencyLocking() } dependencies { diff --git a/dd-java-agent/instrumentation/sslsocket/build.gradle b/dd-java-agent/instrumentation/sslsocket/build.gradle index efd8e548ec1..91a9151d7d0 100644 --- a/dd-java-agent/instrumentation/sslsocket/build.gradle +++ b/dd-java-agent/instrumentation/sslsocket/build.gradle @@ -8,7 +8,7 @@ apply from: "$rootDir/gradle/java.gradle" // IBM8 is having troubles with TLS set up by jetty 9.4. // As a temporary workaround we used a lower jetty version for ssl socket tests -configurations.all { +configurations.configureEach { resolutionStrategy { force group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.2.30.v20200428' } diff --git a/dd-java-agent/instrumentation/synapse-3.0/build.gradle b/dd-java-agent/instrumentation/synapse-3.0/build.gradle index afbba97b99c..a8c0c4dd48c 100644 --- a/dd-java-agent/instrumentation/synapse-3.0/build.gradle +++ b/dd-java-agent/instrumentation/synapse-3.0/build.gradle @@ -9,7 +9,7 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') -configurations.all { +configurations.configureEach { // the version used by Synapse isn't available in a public repository - we don't need it, so exclude it exclude group: 'org.snmp4j', module: 'snmp4j' exclude group: 'org.snmp4j', module: 'snmp4j-agent' diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle index 0033491b85e..594c05cfb57 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle @@ -65,7 +65,7 @@ addTestSuiteExtendingForDir('latest10ForkedTest', 'latest10Test', 'latestDepTest def tomcatVersion = '5.5.12' // earliest 5.5.x available in maven central (with all needed dependencies). -configurations.all { +configurations.configureEach { // shut up about broken xml-api pom relocation resolutionStrategy { force 'xml-apis:xml-apis:1.4.01' diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-5.5/build.gradle b/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-5.5/build.gradle index 74f62c1c6cc..5239d2d3148 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-5.5/build.gradle +++ b/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-5.5/build.gradle @@ -55,7 +55,7 @@ dependencies { implementation project(':dd-java-agent:instrumentation:tomcat:tomcat-common') } -configurations.all { +configurations.configureEach { // shut up about broken xml-api pom relocation resolutionStrategy { force 'xml-apis:xml-apis:1.4.01' diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-common/build.gradle b/dd-java-agent/instrumentation/tomcat/tomcat-common/build.gradle index 6181c44a608..bcc417844be 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-common/build.gradle +++ b/dd-java-agent/instrumentation/tomcat/tomcat-common/build.gradle @@ -1,6 +1,6 @@ apply from: "$rootDir/gradle/java.gradle" -configurations.all { +configurations.configureEach { // shut up about broken xml-api pom relocation resolutionStrategy { force 'xml-apis:xml-apis:1.4.01' diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle index da1d669a662..1b4488d5b3e 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle @@ -34,7 +34,7 @@ dependencies { latestDepTestImplementation group: 'org.eclipse.jetty.websocket', name: 'websocket-javax-server', version: '10.+' testRuntimeOnly project(":dd-java-agent:instrumentation:websocket:javax-websocket-1.0") - configurations.all { + configurations.configureEach { it.resolutionStrategy { force libs.slf4j } diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle index b77f99a12c0..e1b6775832d 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle @@ -29,7 +29,7 @@ dependencies { testRuntimeOnly project(":dd-java-agent:instrumentation:websocket:jetty-websocket:jetty-websocket-10") testRuntimeOnly project(":dd-java-agent:instrumentation:websocket:jakarta-websocket-2.0") - configurations.all { + configurations.configureEach { it.resolutionStrategy { force libs.slf4j } diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle index c3dbc7e52b1..248b14e4549 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle @@ -50,7 +50,7 @@ dependencies { testRuntimeOnly project(":dd-java-agent:instrumentation:websocket:javax-websocket-1.0") testRuntimeOnly project(":dd-java-agent:instrumentation:websocket:jakarta-websocket-2.0") - configurations.all { + configurations.configureEach { it.resolutionStrategy { force libs.slf4j } diff --git a/dd-trace-ot/build.gradle.kts b/dd-trace-ot/build.gradle.kts index d7f9f8a8aff..f4c4273e30b 100644 --- a/dd-trace-ot/build.gradle.kts +++ b/dd-trace-ot/build.gradle.kts @@ -86,7 +86,7 @@ dependencies { } // gradle can't downgrade the opentracing dependencies with `strictly` -configurations.matching { it.name.startsWith("ot31") }.all { +configurations.matching { it.name.startsWith("ot31") }.configureEach { resolutionStrategy { force("io.opentracing:opentracing-api:0.31.0") force("io.opentracing:opentracing-util:0.31.0") From 9ac9a56d112d029473606adf8a4bbffe5e956524 Mon Sep 17 00:00:00 2001 From: mhlidd Date: Wed, 24 Sep 2025 12:31:58 -0700 Subject: [PATCH 17/41] Migrate tests and `ConfigInversionMetricCollector` to `config-utils` module (#9566) * adding supported-configurations.json file * migrating config-utils tests and ConfigInversionMetric telemetry * updating coverage and native image test * removing extra supported-configurations.json * adding dependency * updating excluded class coverage --- ...veImageGeneratorRunnerInstrumentation.java | 1 + internal-api/build.gradle.kts | 7 --- .../main/java/datadog/trace/api/Config.java | 4 ++ ...> ConfigInversionMetricCollectorImpl.java} | 25 ++++++----- ...igInversionMetricCollectorImplTest.groovy} | 8 ++-- ...figInversionMetricCollectorTestHelper.java | 4 +- .../ConfigInversionMetricPeriodicAction.java | 4 +- utils/config-utils/build.gradle.kts | 43 +++++++++++++++++++ .../ConfigInversionMetricCollector.java | 5 +++ ...onfigInversionMetricCollectorProvider.java | 19 ++++++++ .../trace/api/ConfigSettingTest.groovy | 0 .../api/env/CapturedEnvironmentTest.groovy | 0 .../provider/AgentArgsInjectorTest.groovy | 0 .../provider/AgentArgsParserTest.groovy | 0 .../provider/ConfigConverterTest.groovy | 0 .../PropertiesConfigSourceTest.groovy | 0 .../StableConfigMappingExceptionTest.groovy | 0 .../provider/StableConfigSourceTest.groovy | 0 18 files changed, 94 insertions(+), 26 deletions(-) rename internal-api/src/main/java/datadog/trace/api/telemetry/{ConfigInversionMetricCollector.java => ConfigInversionMetricCollectorImpl.java} (65%) rename internal-api/src/test/groovy/datadog/trace/api/telemetry/{ConfigInversionMetricCollectorTest.groovy => ConfigInversionMetricCollectorImplTest.groovy} (74%) create mode 100644 utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollector.java create mode 100644 utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorProvider.java rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/api/ConfigSettingTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsInjectorTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsParserTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigConverterTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/PropertiesConfigSourceTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigMappingExceptionTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy (100%) diff --git a/dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java b/dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java index b61ab5e7531..2ccf55418ec 100644 --- a/dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java +++ b/dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java @@ -101,6 +101,7 @@ public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String[ + "datadog.trace.api.TracePropagationStyle:build_time," + "datadog.trace.api.TracePropagationBehaviorExtract:build_time," + "datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl:build_time," + + "datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl:build_time," + "datadog.trace.api.profiling.ProfilingEnablement:build_time," + "datadog.trace.bootstrap.config.provider.ConfigConverter:build_time," + "datadog.trace.bootstrap.config.provider.ConfigConverter$ValueOfLookup:build_time," diff --git a/internal-api/build.gradle.kts b/internal-api/build.gradle.kts index c4f0dfd019f..c0f3f4bd2d7 100644 --- a/internal-api/build.gradle.kts +++ b/internal-api/build.gradle.kts @@ -78,7 +78,6 @@ val excludedClassesCoverage by extra( // Bootstrap API "datadog.trace.bootstrap.ActiveSubsystems", "datadog.trace.bootstrap.ContextStore.Factory", - "datadog.trace.bootstrap.config.provider.ConfigProvider.Singleton", "datadog.trace.bootstrap.instrumentation.api.java.lang.ProcessImplInstrumentationHelpers", "datadog.trace.bootstrap.instrumentation.api.Tags", "datadog.trace.bootstrap.instrumentation.api.CommonTagValues", @@ -167,7 +166,6 @@ val excludedClassesCoverage by extra( "datadog.trace.api.Config", "datadog.trace.api.Config.HostNameHolder", "datadog.trace.api.Config.RuntimeIdHolder", - "datadog.trace.api.ConfigCollector", "datadog.trace.api.DynamicConfig", "datadog.trace.api.DynamicConfig.Builder", "datadog.trace.api.DynamicConfig.Snapshot", @@ -249,9 +247,6 @@ val excludedClassesBranchCoverage by extra( "datadog.trace.api.ClassloaderConfigurationOverrides.Lazy", "datadog.trace.util.stacktrace.HotSpotStackWalker", "datadog.trace.util.stacktrace.StackWalkerFactory", - // Tested using forked process - "datadog.trace.api.env.CapturedEnvironment", - "datadog.trace.api.env.CapturedEnvironment.ProcessInfo", "datadog.trace.util.TempLocationManager", "datadog.trace.util.TempLocationManager.*", // Branches depend on RUM injector state that cannot be reliably controlled in unit tests @@ -261,8 +256,6 @@ val excludedClassesBranchCoverage by extra( val excludedClassesInstructionCoverage by extra( listOf( - "datadog.trace.bootstrap.config.provider.EnvironmentConfigSource", - "datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource", "datadog.trace.util.stacktrace.StackWalkerFactory" ) ) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index aef84a8c58e..175b6cd9f23 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -654,6 +654,8 @@ import datadog.trace.api.profiling.ProfilingEnablement; import datadog.trace.api.rum.RumInjectorConfig; import datadog.trace.api.rum.RumInjectorConfig.PrivacyLevel; +import datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl; +import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider; import datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl; import datadog.trace.api.telemetry.OtelEnvMetricCollectorProvider; import datadog.trace.bootstrap.config.provider.CapturedEnvironmentConfigSource; @@ -1248,6 +1250,8 @@ public static String getHostName() { static { // Bind telemetry collector to config module before initializing ConfigProvider OtelEnvMetricCollectorProvider.register(OtelEnvMetricCollectorImpl.getInstance()); + ConfigInversionMetricCollectorProvider.register( + ConfigInversionMetricCollectorImpl.getInstance()); } // Read order: System Properties -> Env Variables, [-> properties file], [-> default value] diff --git a/internal-api/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollector.java b/internal-api/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorImpl.java similarity index 65% rename from internal-api/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollector.java rename to internal-api/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorImpl.java index cdd781c78d6..6a956388256 100644 --- a/internal-api/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollector.java +++ b/internal-api/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorImpl.java @@ -9,22 +9,25 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ConfigInversionMetricCollector - implements MetricCollector { - private static final Logger log = LoggerFactory.getLogger(ConfigInversionMetricCollector.class); +public class ConfigInversionMetricCollectorImpl + implements MetricCollector, + ConfigInversionMetricCollector { + private static final Logger log = + LoggerFactory.getLogger(ConfigInversionMetricCollectorImpl.class); private static final String CONFIG_INVERSION_KEY_TAG = "config_name:"; private static final String CONFIG_INVERSION_METRIC_NAME = "untracked.config.detected"; private static final String NAMESPACE = "tracers"; - private static final ConfigInversionMetricCollector INSTANCE = - new ConfigInversionMetricCollector(); + private static final ConfigInversionMetricCollectorImpl INSTANCE = + new ConfigInversionMetricCollectorImpl(); - private final BlockingQueue metricsQueue; + private final BlockingQueue + metricsQueue; - private ConfigInversionMetricCollector() { + private ConfigInversionMetricCollectorImpl() { this.metricsQueue = new ArrayBlockingQueue<>(RAW_QUEUE_SIZE); } - public static ConfigInversionMetricCollector getInstance() { + public static ConfigInversionMetricCollectorImpl getInstance() { return INSTANCE; } @@ -34,7 +37,7 @@ public void setUndocumentedEnvVarMetric(String configName) { private void setMetricConfigInversionMetric(final String... tags) { if (!metricsQueue.offer( - new ConfigInversionMetricCollector.ConfigInversionMetric( + new ConfigInversionMetricCollectorImpl.ConfigInversionMetric( NAMESPACE, true, CONFIG_INVERSION_METRIC_NAME, "count", 1, tags))) { log.debug("Unable to add telemetry metric {} for {}", CONFIG_INVERSION_METRIC_NAME, tags[0]); } @@ -46,11 +49,11 @@ public void prepareMetrics() { } @Override - public Collection drain() { + public Collection drain() { if (this.metricsQueue.isEmpty()) { return Collections.emptyList(); } - List drained = + List drained = new ArrayList<>(this.metricsQueue.size()); this.metricsQueue.drainTo(drained); return drained; diff --git a/internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorImplTest.groovy similarity index 74% rename from internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorTest.groovy rename to internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorImplTest.groovy index 7f63048eb27..b6a4607ac9c 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorImplTest.groovy @@ -2,13 +2,13 @@ package datadog.trace.api.telemetry import datadog.trace.test.util.DDSpecification -import static datadog.trace.api.telemetry.ConfigInversionMetricCollector.CONFIG_INVERSION_METRIC_NAME +import static ConfigInversionMetricCollectorImpl.CONFIG_INVERSION_METRIC_NAME -class ConfigInversionMetricCollectorTest extends DDSpecification { +class ConfigInversionMetricCollectorImplTest extends DDSpecification { def "should emit metric when unsupported env var is used"() { setup: - def collector = ConfigInversionMetricCollector.getInstance() + def collector = ConfigInversionMetricCollectorImpl.getInstance() when: ConfigInversionMetricCollectorTestHelper.checkAndEmitUnsupported("DD_UNKNOWN_FEATURE") @@ -28,7 +28,7 @@ class ConfigInversionMetricCollectorTest extends DDSpecification { def "should not emit metric when supported env var is used"() { setup: - def collector = ConfigInversionMetricCollector.getInstance() + def collector = ConfigInversionMetricCollectorImpl.getInstance() when: ConfigInversionMetricCollectorTestHelper.checkAndEmitUnsupported("DD_ENV") diff --git a/internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorTestHelper.java b/internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorTestHelper.java index 9cb70dd68b5..841ca68e26b 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorTestHelper.java +++ b/internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorTestHelper.java @@ -10,8 +10,8 @@ public class ConfigInversionMetricCollectorTestHelper { private static final Set SUPPORTED_ENV_VARS = new HashSet<>(Arrays.asList("DD_ENV", "DD_SERVICE")); - private static final ConfigInversionMetricCollector configInversionMetricCollector = - ConfigInversionMetricCollector.getInstance(); + private static final ConfigInversionMetricCollectorImpl configInversionMetricCollector = + ConfigInversionMetricCollectorImpl.getInstance(); public static void checkAndEmitUnsupported(String envVarName) { if (!SUPPORTED_ENV_VARS.contains(envVarName)) { diff --git a/telemetry/src/main/java/datadog/telemetry/metric/ConfigInversionMetricPeriodicAction.java b/telemetry/src/main/java/datadog/telemetry/metric/ConfigInversionMetricPeriodicAction.java index e7eb7dfab48..d1d526fb2e9 100644 --- a/telemetry/src/main/java/datadog/telemetry/metric/ConfigInversionMetricPeriodicAction.java +++ b/telemetry/src/main/java/datadog/telemetry/metric/ConfigInversionMetricPeriodicAction.java @@ -1,6 +1,6 @@ package datadog.telemetry.metric; -import datadog.trace.api.telemetry.ConfigInversionMetricCollector; +import datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl; import datadog.trace.api.telemetry.MetricCollector; import edu.umd.cs.findbugs.annotations.NonNull; @@ -8,6 +8,6 @@ public class ConfigInversionMetricPeriodicAction extends MetricPeriodicAction { @Override @NonNull public MetricCollector collector() { - return ConfigInversionMetricCollector.getInstance(); + return ConfigInversionMetricCollectorImpl.getInstance(); } } diff --git a/utils/config-utils/build.gradle.kts b/utils/config-utils/build.gradle.kts index bb3598f5587..e77af1d50d0 100644 --- a/utils/config-utils/build.gradle.kts +++ b/utils/config-utils/build.gradle.kts @@ -5,6 +5,48 @@ plugins { apply(from = "$rootDir/gradle/java.gradle") +val minimumBranchCoverage by extra(0.7) +val minimumInstructionCoverage by extra(0.7) + +val excludedClassesCoverage by extra( + listOf( + "datadog.trace.api.ConfigCollector", + "datadog.trace.api.env.CapturedEnvironment", + "datadog.trace.api.env.CapturedEnvironment.ProcessInfo", + // tested in internal-api + "datadog.trace.api.telemetry.OtelEnvMetricCollectorProvider", + "datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider", + "datadog.trace.bootstrap.config.provider.CapturedEnvironmentConfigSource", + "datadog.trace.bootstrap.config.provider.ConfigConverter.ValueOfLookup", + // tested in internal-api + "datadog.trace.bootstrap.config.provider.ConfigProvider", + "datadog.trace.bootstrap.config.provider.ConfigProvider.ConfigMergeResolver", + "datadog.trace.bootstrap.config.provider.ConfigProvider.ConfigValueResolver", + "datadog.trace.bootstrap.config.provider.ConfigProvider.Singleton", + "datadog.trace.bootstrap.config.provider.ConfigProvider.Source", + "datadog.trace.bootstrap.config.provider.EnvironmentConfigSource", + // tested in internal-api + "datadog.trace.bootstrap.config.provider.OtelEnvironmentConfigSource", + "datadog.trace.bootstrap.config.provider.stableconfig.Selector", + // tested in internal-api + "datadog.trace.bootstrap.config.provider.StableConfigParser", + "datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource", + ) +) + +val excludedClassesBranchCoverage by extra( + listOf( + "datadog.trace.bootstrap.config.provider.AgentArgsInjector", + "datadog.trace.util.ConfigStrings" + ) +) + +val excludedClassesInstructionCoverage by extra( + listOf( + "datadog.trace.config.inversion.GeneratedSupportedConfigurations" + ) +) + dependencies { implementation(project(":components:environment")) implementation(project(":components:yaml")) @@ -12,6 +54,7 @@ dependencies { implementation(libs.slf4j) testImplementation(project(":utils:test-utils")) + testImplementation("org.snakeyaml:snakeyaml-engine:2.9") } tasks.named("javadoc") { diff --git a/utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollector.java b/utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollector.java new file mode 100644 index 00000000000..e36045d7836 --- /dev/null +++ b/utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollector.java @@ -0,0 +1,5 @@ +package datadog.trace.api.telemetry; + +public interface ConfigInversionMetricCollector { + void setUndocumentedEnvVarMetric(String configName); +} diff --git a/utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorProvider.java b/utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorProvider.java new file mode 100644 index 00000000000..cecc104a36f --- /dev/null +++ b/utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorProvider.java @@ -0,0 +1,19 @@ +package datadog.trace.api.telemetry; + +public final class ConfigInversionMetricCollectorProvider { + private static ConfigInversionMetricCollector INSTANCE = null; + + private ConfigInversionMetricCollectorProvider() {} + + public static ConfigInversionMetricCollector get() { + if (INSTANCE == null) { + throw new IllegalStateException( + "ConfigInversionMetricCollectorService has not been registered."); + } + return INSTANCE; + } + + public static void register(ConfigInversionMetricCollector instance) { + INSTANCE = instance; + } +} diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigSettingTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/api/ConfigSettingTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/api/ConfigSettingTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/api/ConfigSettingTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsInjectorTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsInjectorTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsInjectorTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsInjectorTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsParserTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsParserTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsParserTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/AgentArgsParserTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigConverterTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigConverterTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigConverterTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigConverterTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/PropertiesConfigSourceTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/PropertiesConfigSourceTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/PropertiesConfigSourceTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/PropertiesConfigSourceTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigMappingExceptionTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigMappingExceptionTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigMappingExceptionTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigMappingExceptionTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigSourceTest.groovy From b09dcc584a0b7b59ef7495592a378f5904ecbf3f Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Wed, 24 Sep 2025 16:49:30 -0400 Subject: [PATCH 18/41] Remove extra `.configure` method (#9609) * First batch * Second batch * Third batch --- .../plugin/CallSiteInstrumentationPlugin.kt | 2 +- .../profiling-controller-jfr/build.gradle | 2 +- dd-java-agent/benchmark/build.gradle | 2 +- dd-java-agent/build.gradle | 6 +++--- .../akka/akka-actor-2.5/build.gradle | 6 +++--- .../aws-java/aws-java-sdk-1.11/build.gradle | 4 ++-- dd-java-agent/instrumentation/build.gradle | 2 +- .../enable-wallclock-profiling/build.gradle | 2 +- .../instrumentation/finatra-2.9/build.gradle | 6 +++--- .../jakarta-rs-annotations-3/build.gradle | 6 +++--- .../java-concurrent-21/build.gradle | 2 +- .../instrumentation/java-http-client/build.gradle | 2 +- .../jax-rs-annotations-2/build.gradle | 2 +- dd-java-agent/instrumentation/jdbc/build.gradle | 4 ++-- .../instrumentation/jdbc/scalikejdbc/build.gradle | 4 ++-- .../jetty-server/jetty-server-9.0/build.gradle | 6 +++--- .../instrumentation/junit-4.10/build.gradle | 2 +- .../instrumentation/junit-5.3/build.gradle | 2 +- .../junit-5.3/junit-5.8/build.gradle | 2 +- dd-java-agent/instrumentation/karate/build.gradle | 2 +- .../kotlin-coroutines/build.gradle | 6 +++--- .../instrumentation/mule-4.5/build.gradle | 8 ++++---- .../netty/netty-buffer-4.0/build.gradle | 2 +- .../netty/netty-concurrent-4.0/build.gradle | 2 +- .../netty/netty-promise-4.0/build.gradle | 2 +- .../instrumentation/pekko-concurrent/build.gradle | 2 +- .../instrumentation/pekko-http-1.0/build.gradle | 4 ++-- .../instrumentation/play/play-2.6/build.gradle | 2 +- .../rabbitmq-amqp-2.7/build.gradle | 2 +- .../instrumentation/restlet-2.2/build.gradle | 2 +- dd-java-agent/instrumentation/rmi/build.gradle | 2 +- .../instrumentation/scala-concurrent/build.gradle | 10 +++++----- .../instrumentation/scala-promise/build.gradle | 2 +- .../scala-promise/scala-promise-2.10/build.gradle | 6 +++--- .../scala-promise/scala-promise-2.13/build.gradle | 6 +++--- dd-java-agent/instrumentation/scala/build.gradle | 2 +- .../instrumentation/selenium/build.gradle | 2 +- dd-java-agent/instrumentation/slick/build.gradle | 4 ++-- .../instrumentation/spark/spark_2.12/build.gradle | 2 +- .../instrumentation/spark/spark_2.13/build.gradle | 2 +- .../spring-webflux-5.0/build.gradle | 2 +- .../instrumentation/wildfly-9.0/build.gradle | 15 ++++++++------- .../instrumentation/zio/zio-2.0/build.gradle | 2 +- dd-smoke-tests/armeria-grpc/build.gradle | 2 +- dd-smoke-tests/concurrent/java-21/build.gradle | 2 +- dd-smoke-tests/concurrent/java-25/build.gradle | 6 +++--- .../iast-util/iast-util-11/build.gradle | 2 +- .../iast-util/iast-util-17/build.gradle | 2 +- dd-smoke-tests/kafka-3/build.gradle | 2 +- dd-smoke-tests/log-injection/build.gradle | 4 ++-- dd-smoke-tests/play-2.4/build.gradle | 2 +- dd-smoke-tests/play-2.5/build.gradle | 2 +- dd-smoke-tests/play-2.6/build.gradle | 2 +- dd-smoke-tests/play-2.7/build.gradle | 2 +- dd-smoke-tests/play-2.8-otel/build.gradle | 2 +- dd-smoke-tests/play-2.8-split-routes/build.gradle | 2 +- dd-smoke-tests/play-2.8/build.gradle | 2 +- dd-smoke-tests/quarkus-native/build.gradle | 2 +- dd-smoke-tests/quarkus/build.gradle | 2 +- dd-smoke-tests/rum/wildfly-15/build.gradle | 2 +- .../spring-boot-2.7-webflux/build.gradle | 2 +- .../spring-boot-3.0-native/build.gradle | 2 +- .../spring-boot-3.0-webflux/build.gradle | 2 +- .../spring-boot-3.0-webmvc/build.gradle | 2 +- .../spring-boot-3.3-webmvc/build.gradle | 2 +- dd-smoke-tests/springboot-java-11/build.gradle | 2 +- dd-smoke-tests/springboot-java-17/build.gradle | 2 +- .../springboot-openliberty-20/build.gradle | 2 +- .../springboot-openliberty-23/build.gradle | 2 +- dd-smoke-tests/vertx-3.4/build.gradle | 2 +- dd-smoke-tests/vertx-3.9-resteasy/build.gradle | 2 +- dd-smoke-tests/vertx-3.9/build.gradle | 2 +- dd-smoke-tests/vertx-4.2/build.gradle | 2 +- dd-smoke-tests/wildfly/build.gradle | 2 +- gradle/jacoco.gradle | 6 +++--- gradle/java_no_deps.gradle | 4 ++-- gradle/test-with-kotlin.gradle | 2 +- gradle/test-with-scala.gradle | 2 +- .../ot-is-shaded/build.gradle | 2 +- utils/socket-utils/build.gradle.kts | 2 +- 80 files changed, 121 insertions(+), 120 deletions(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/CallSiteInstrumentationPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/CallSiteInstrumentationPlugin.kt index fcec4cdaf9e..40e1270dd54 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/CallSiteInstrumentationPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/CallSiteInstrumentationPlugin.kt @@ -98,7 +98,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin{ extendsFrom(project.configurations.named(mainSourceSet.compileClasspathConfigurationName).get()) } - project.tasks.named(csiSourceSet.getCompileTaskName("java"), AbstractCompile::class.java).configure { + project.tasks.named(csiSourceSet.getCompileTaskName("java"), AbstractCompile::class.java) { sourceCompatibility = JavaVersion.VERSION_1_8.toString() targetCompatibility = JavaVersion.VERSION_1_8.toString() } diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle index 6075335d867..a82f51b2529 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle @@ -32,7 +32,7 @@ excludedClassesCoverage += ['com.datadog.profiling.controller.jfr.JdkTypeIDs'] // Shared JFR implementation. The earliest Java version JFR is working on is Java 8 -tasks.named("compileTestJava").configure { +tasks.named("compileTestJava") { setJavaVersion(it, 11) // tests should be compiled in Java 8 compatible way sourceCompatibility = JavaVersion.VERSION_1_8 diff --git a/dd-java-agent/benchmark/build.gradle b/dd-java-agent/benchmark/build.gradle index 8bb9e2f6def..41e30eca7c3 100644 --- a/dd-java-agent/benchmark/build.gradle +++ b/dd-java-agent/benchmark/build.gradle @@ -38,7 +38,7 @@ jmh { jmhVersion = libs.versions.jmh.get() } -tasks.named('jmh').configure { +tasks.named('jmh') { dependsOn ':dd-java-agent:shadowJar' } diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index babf0678b41..e1376aae333 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -147,7 +147,7 @@ def includeShadowJar(TaskProvider shadowJarTask, String jarname) { } } - project.tasks.named("processResources").configure { + project.tasks.named("processResources") { dependsOn shadowJarTask } shadowJarTask.configure generalShadowJarConfig @@ -344,7 +344,7 @@ tasks.withType(Test).configureEach { dependsOn "shadowJar" } -tasks.register('checkAgentJarSize').configure { +tasks.register('checkAgentJarSize') { doLast { // Arbitrary limit to prevent unintentional increases to the agent jar size // Raise or lower as required @@ -354,6 +354,6 @@ tasks.register('checkAgentJarSize').configure { dependsOn "shadowJar" } -tasks.named('check').configure { +tasks.named('check') { dependsOn 'checkAgentJarSize' } diff --git a/dd-java-agent/instrumentation/akka/akka-actor-2.5/build.gradle b/dd-java-agent/instrumentation/akka/akka-actor-2.5/build.gradle index 8e040908eae..10bbc03bc92 100644 --- a/dd-java-agent/instrumentation/akka/akka-actor-2.5/build.gradle +++ b/dd-java-agent/instrumentation/akka/akka-actor-2.5/build.gradle @@ -18,7 +18,7 @@ apply from: "$rootDir/gradle/test-with-scala.gradle" addTestSuite('akka23Test') addTestSuiteForDir('latestDepTest', 'test') -tasks.named("compileAkka23TestGroovy").configure { +tasks.named("compileAkka23TestGroovy") { classpath += files(sourceSets.akka23Test.scala.classesDirectory) } @@ -41,7 +41,7 @@ sourceSets { } } } -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { classpath += files(sourceSets.latestDepTest.scala.classesDirectory) } @@ -68,6 +68,6 @@ configurations.matching({ it.name.startsWith('akka23') }).each({ // Run 2.3 tests along with the rest of unit tests -tasks.named("test").configure { +tasks.named("test") { dependsOn "akka23Test" } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-1.11/build.gradle b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-1.11/build.gradle index a1c3c823d2f..eb2b4ba11c7 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-1.11/build.gradle +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-1.11/build.gradle @@ -103,10 +103,10 @@ dependencies { latestDepTestImplementation group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '+' } -tasks.named("test").configure { +tasks.named("test") { dependsOn "test_before_1_11_106" } -tasks.named("forkedTest").configure { +tasks.named("forkedTest") { dependsOn "test_before_1_11_106ForkedTest" } diff --git a/dd-java-agent/instrumentation/build.gradle b/dd-java-agent/instrumentation/build.gradle index 0be3452d7bb..38e238d9bab 100644 --- a/dd-java-agent/instrumentation/build.gradle +++ b/dd-java-agent/instrumentation/build.gradle @@ -128,7 +128,7 @@ if (project.gradle.startParameter.taskNames.any { it.endsWith("generateMuzzleRep } -tasks.named('shadowJar').configure { +tasks.named('shadowJar') { duplicatesStrategy = DuplicatesStrategy.FAIL dependencies { // the tracer is now in a separate shadow jar diff --git a/dd-java-agent/instrumentation/enable-wallclock-profiling/build.gradle b/dd-java-agent/instrumentation/enable-wallclock-profiling/build.gradle index 631cfef35ee..c053f0b80b5 100644 --- a/dd-java-agent/instrumentation/enable-wallclock-profiling/build.gradle +++ b/dd-java-agent/instrumentation/enable-wallclock-profiling/build.gradle @@ -31,7 +31,7 @@ dependencies { latestDepTestImplementation group: 'io.netty', name: 'netty-transport', version: '+' } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { dependsOn "latestDep4Test" } diff --git a/dd-java-agent/instrumentation/finatra-2.9/build.gradle b/dd-java-agent/instrumentation/finatra-2.9/build.gradle index a863777080c..971fcf8e604 100644 --- a/dd-java-agent/instrumentation/finatra-2.9/build.gradle +++ b/dd-java-agent/instrumentation/finatra-2.9/build.gradle @@ -35,16 +35,16 @@ dependencies { latestDepTestImplementation group: 'com.twitter', name: 'finatra-http_2.11', version: '+' } -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { classpath = classpath.plus(files(compileLatestDepTestScala.destinationDirectory)) dependsOn "compileLatestDepTestScala" } -tasks.named("compileLatestPre207TestGroovy").configure { +tasks.named("compileLatestPre207TestGroovy") { classpath = classpath.plus(files(compileLatestPre207TestScala.destinationDirectory)) dependsOn "compileLatestPre207TestScala" } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { finalizedBy latestPre207Test } diff --git a/dd-java-agent/instrumentation/jakarta-rs-annotations-3/build.gradle b/dd-java-agent/instrumentation/jakarta-rs-annotations-3/build.gradle index 555b8ba60d5..692894c79d0 100644 --- a/dd-java-agent/instrumentation/jakarta-rs-annotations-3/build.gradle +++ b/dd-java-agent/instrumentation/jakarta-rs-annotations-3/build.gradle @@ -12,13 +12,13 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepJava11Test', 'latestDepTest', 'test') -tasks.named("compileLatestDepJava11TestJava").configure { +tasks.named("compileLatestDepJava11TestJava") { setJavaVersion(it, 11) } -tasks.named("compileLatestDepJava11TestGroovy").configure { +tasks.named("compileLatestDepJava11TestGroovy") { javaLauncher = getJavaLauncherFor(11) } -tasks.named("latestDepJava11Test").configure { +tasks.named("latestDepJava11Test") { javaLauncher = getJavaLauncherFor(11) } diff --git a/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/build.gradle b/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/build.gradle index 6c1b1ff4afc..ab1366820e2 100644 --- a/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/build.gradle +++ b/dd-java-agent/instrumentation/java-concurrent/java-concurrent-21/build.gradle @@ -42,7 +42,7 @@ previewTest.configure { jvmArgs = ['--enable-preview'] } // Require the preview test suite to run as part of module check -tasks.named("check").configure { +tasks.named("check") { dependsOn "previewTest" } diff --git a/dd-java-agent/instrumentation/java-http-client/build.gradle b/dd-java-agent/instrumentation/java-http-client/build.gradle index 096bb210e3c..881c76e68c8 100644 --- a/dd-java-agent/instrumentation/java-http-client/build.gradle +++ b/dd-java-agent/instrumentation/java-http-client/build.gradle @@ -12,7 +12,7 @@ apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" -tasks.named("compileMain_java11Java").configure { +tasks.named("compileMain_java11Java") { it.sourceCompatibility = JavaVersion.VERSION_11 it.targetCompatibility = JavaVersion.VERSION_11 setJavaVersion(it, 11) diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-2/build.gradle b/dd-java-agent/instrumentation/jax-rs-annotations-2/build.gradle index 50c9a86c164..012d4e239bd 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-2/build.gradle +++ b/dd-java-agent/instrumentation/jax-rs-annotations-2/build.gradle @@ -54,7 +54,7 @@ dependencies { latestDepTestImplementation group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '+' } -tasks.named("test").configure { +tasks.named("test") { dependsOn "resteasy31Test" dependsOn "nestedTest" } diff --git a/dd-java-agent/instrumentation/jdbc/build.gradle b/dd-java-agent/instrumentation/jdbc/build.gradle index dd9225c9ae1..c39dee6fc03 100644 --- a/dd-java-agent/instrumentation/jdbc/build.gradle +++ b/dd-java-agent/instrumentation/jdbc/build.gradle @@ -77,12 +77,12 @@ dependencies { latestDepJava11TestImplementation group: 'com.zaxxer', name: 'HikariCP', version: '+' } -tasks.named("check").configure { +tasks.named("check") { dependsOn "oldH2Test" dependsOn "oldPostgresTest" } -tasks.named("latestDepJava11Test").configure { +tasks.named("latestDepJava11Test") { javaLauncher = getJavaLauncherFor(11) } diff --git a/dd-java-agent/instrumentation/jdbc/scalikejdbc/build.gradle b/dd-java-agent/instrumentation/jdbc/scalikejdbc/build.gradle index 39a8cc8a5c5..01258ed92f2 100644 --- a/dd-java-agent/instrumentation/jdbc/scalikejdbc/build.gradle +++ b/dd-java-agent/instrumentation/jdbc/scalikejdbc/build.gradle @@ -10,12 +10,12 @@ apply plugin: 'scala' addTestSuiteForDir('latestDepTest', 'test') -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn "compileTestScala" classpath += files(compileTestScala.destinationDirectory) } -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { dependsOn "compileLatestDepTestScala" classpath += files(compileLatestDepTestScala.destinationDirectory) } diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/build.gradle index 34722f534a2..58505b89386 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/build.gradle @@ -105,7 +105,7 @@ instrument { ] } -tasks['compileMain_jetty10Java'].configure { +tasks.named("compileMain_jetty10Java") { setJavaVersion(it, 11) } @@ -114,10 +114,10 @@ addTestSuiteForDir('jetty94ForkedTest', 'test') addTestSuiteForDir('latestDepJetty9ForkedTest', 'test') addTestSuiteForDir('latestDepForkedTest', 'test') -tasks.named("latestDepForkedTest").configure { +tasks.named("latestDepForkedTest") { javaLauncher = getJavaLauncherFor(11) } -tasks.named("compileLatestDepForkedTestGroovy").configure { +tasks.named("compileLatestDepForkedTestGroovy") { setJavaVersion(it, 11) } diff --git a/dd-java-agent/instrumentation/junit-4.10/build.gradle b/dd-java-agent/instrumentation/junit-4.10/build.gradle index 8a6c4ffc0e1..8e9fc779083 100644 --- a/dd-java-agent/instrumentation/junit-4.10/build.gradle +++ b/dd-java-agent/instrumentation/junit-4.10/build.gradle @@ -12,7 +12,7 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { classpath += files(compileLatestDepTestKotlin.destinationDirectory) } diff --git a/dd-java-agent/instrumentation/junit-5.3/build.gradle b/dd-java-agent/instrumentation/junit-5.3/build.gradle index bd69cc5424a..d4315f94839 100644 --- a/dd-java-agent/instrumentation/junit-5.3/build.gradle +++ b/dd-java-agent/instrumentation/junit-5.3/build.gradle @@ -58,7 +58,7 @@ configurations.matching({ it.name.startsWith('test') }).each({ } }) -tasks.named("compileLatestDepTestJava").configure { +tasks.named("compileLatestDepTestJava") { setJavaVersion(it, 17) sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/dd-java-agent/instrumentation/junit-5.3/junit-5.8/build.gradle b/dd-java-agent/instrumentation/junit-5.3/junit-5.8/build.gradle index e1990a38589..65aa7bf93f0 100644 --- a/dd-java-agent/instrumentation/junit-5.3/junit-5.8/build.gradle +++ b/dd-java-agent/instrumentation/junit-5.3/junit-5.8/build.gradle @@ -57,7 +57,7 @@ configurations.matching({ it.name.startsWith('test') }).each({ } }) -tasks.named("compileLatestDepTestJava").configure { +tasks.named("compileLatestDepTestJava") { setJavaVersion(it, 17) sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/dd-java-agent/instrumentation/karate/build.gradle b/dd-java-agent/instrumentation/karate/build.gradle index 3db28f83d34..085aa516f7e 100644 --- a/dd-java-agent/instrumentation/karate/build.gradle +++ b/dd-java-agent/instrumentation/karate/build.gradle @@ -81,7 +81,7 @@ sourceSets { } } -tasks.named("compileLatestDepTestJava").configure { +tasks.named("compileLatestDepTestJava") { setJavaVersion(it, 11) sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle b/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle index 9f723812ebc..f68ac87ad53 100644 --- a/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle +++ b/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle @@ -26,15 +26,15 @@ apply from: "$rootDir/gradle/test-with-kotlin.gradle" addTestSuite('latestDepTest') -tasks.named("compileTestFixturesGroovy").configure { +tasks.named("compileTestFixturesGroovy") { classpath += files(compileTestFixturesKotlin.destinationDirectory) } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { classpath += files(compileTestKotlin.destinationDirectory) } -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { classpath += files(compileLatestDepTestKotlin.destinationDirectory) } diff --git a/dd-java-agent/instrumentation/mule-4.5/build.gradle b/dd-java-agent/instrumentation/mule-4.5/build.gradle index b2b85e57720..7612c1c9a40 100644 --- a/dd-java-agent/instrumentation/mule-4.5/build.gradle +++ b/dd-java-agent/instrumentation/mule-4.5/build.gradle @@ -114,20 +114,20 @@ forbiddenApisMain_java11 { failOnMissingClasses = false } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'mvnPackage', 'extractMuleServices' } -tasks.named("compileMule46ForkedTestGroovy").configure { +tasks.named("compileMule46ForkedTestGroovy") { dependsOn 'mvnPackage', 'extractMule46Services' } -tasks.named("compileLatestDepForkedTestGroovy").configure { +tasks.named("compileLatestDepForkedTestGroovy") { dependsOn 'mvnPackage', 'extractLatestMuleServices' setJavaVersion(it, 17) } -tasks.named("compileLatestDepForkedTestJava").configure { +tasks.named("compileLatestDepForkedTestJava") { setJavaVersion(it, 17) } diff --git a/dd-java-agent/instrumentation/netty/netty-buffer-4.0/build.gradle b/dd-java-agent/instrumentation/netty/netty-buffer-4.0/build.gradle index 67f7353e5c7..890373d9e39 100644 --- a/dd-java-agent/instrumentation/netty/netty-buffer-4.0/build.gradle +++ b/dd-java-agent/instrumentation/netty/netty-buffer-4.0/build.gradle @@ -21,6 +21,6 @@ dependencies { latestDepTestImplementation group: 'io.netty', name: 'netty-buffer', version: '+' } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { dependsOn "latestDep4Test" } diff --git a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/build.gradle b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/build.gradle index c54eb3a7072..a6119373137 100644 --- a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/build.gradle +++ b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/build.gradle @@ -21,7 +21,7 @@ dependencies { latestDepTestImplementation group: 'io.netty', name: 'netty-common', version: '+' } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { dependsOn "latestDep4Test" } diff --git a/dd-java-agent/instrumentation/netty/netty-promise-4.0/build.gradle b/dd-java-agent/instrumentation/netty/netty-promise-4.0/build.gradle index 056e691a1ff..35a01fa44bc 100644 --- a/dd-java-agent/instrumentation/netty/netty-promise-4.0/build.gradle +++ b/dd-java-agent/instrumentation/netty/netty-promise-4.0/build.gradle @@ -21,6 +21,6 @@ dependencies { latestDepTestImplementation group: 'io.netty', name: 'netty-common', version: '+' } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { dependsOn "latestDep4Test" } diff --git a/dd-java-agent/instrumentation/pekko-concurrent/build.gradle b/dd-java-agent/instrumentation/pekko-concurrent/build.gradle index 18c17bd7322..0fa5c2e2ae7 100644 --- a/dd-java-agent/instrumentation/pekko-concurrent/build.gradle +++ b/dd-java-agent/instrumentation/pekko-concurrent/build.gradle @@ -23,7 +23,7 @@ apply from: "$rootDir/gradle/test-with-scala.gradle" addTestSuiteForDir('latestDepTest', 'test') -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { classpath += files(sourceSets.latestDepTest.scala.classesDirectory) } diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/build.gradle b/dd-java-agent/instrumentation/pekko-http-1.0/build.gradle index e5e0540b8ae..7d84437efc6 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/build.gradle +++ b/dd-java-agent/instrumentation/pekko-http-1.0/build.gradle @@ -108,12 +108,12 @@ latestDepIastTest { } } -tasks.named("test").configure { +tasks.named("test") { dependsOn "baseTest" dependsOn "iastTest" } -tasks.named('latestDepTest').configure { +tasks.named('latestDepTest') { dependsOn "latestDepIastTest" } diff --git a/dd-java-agent/instrumentation/play/play-2.6/build.gradle b/dd-java-agent/instrumentation/play/play-2.6/build.gradle index 34019a078c5..a38297784bd 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/build.gradle +++ b/dd-java-agent/instrumentation/play/play-2.6/build.gradle @@ -126,7 +126,7 @@ configurations.matching({ it.name.startsWith('latestDepTest') }).each({ force group: 'ch.qos.logback', name: 'logback-classic', version: '1.4.5' } }) -tasks.named("compileLatestDepTestJava").configure { +tasks.named("compileLatestDepTestJava") { it.sourceCompatibility = JavaVersion.VERSION_11 it.targetCompatibility = JavaVersion.VERSION_11 setJavaVersion(it, 11) diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/build.gradle b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/build.gradle index 311bec0f5d4..3228d059063 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/build.gradle +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/build.gradle @@ -40,6 +40,6 @@ tasks.withType(Test).configureEach { usesService(testcontainersLimit) } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { finalizedBy latestReactorTest } diff --git a/dd-java-agent/instrumentation/restlet-2.2/build.gradle b/dd-java-agent/instrumentation/restlet-2.2/build.gradle index 94905609227..67a30626a17 100644 --- a/dd-java-agent/instrumentation/restlet-2.2/build.gradle +++ b/dd-java-agent/instrumentation/restlet-2.2/build.gradle @@ -23,7 +23,7 @@ repositories { addTestSuiteForDir('baseForkedTest', 'baseTest') addTestSuite('latestDepTest') -tasks.named("test").configure { +tasks.named("test") { dependsOn "baseForkedTest" } diff --git a/dd-java-agent/instrumentation/rmi/build.gradle b/dd-java-agent/instrumentation/rmi/build.gradle index 55ef269020b..7e1280fda59 100644 --- a/dd-java-agent/instrumentation/rmi/build.gradle +++ b/dd-java-agent/instrumentation/rmi/build.gradle @@ -30,6 +30,6 @@ def rmic = tasks.register('rmic', Exec) { ) } -tasks.named("test").configure { +tasks.named("test") { dependsOn rmic } diff --git a/dd-java-agent/instrumentation/scala-concurrent/build.gradle b/dd-java-agent/instrumentation/scala-concurrent/build.gradle index 5dfaadc6ee4..a5ebd5968c0 100644 --- a/dd-java-agent/instrumentation/scala-concurrent/build.gradle +++ b/dd-java-agent/instrumentation/scala-concurrent/build.gradle @@ -19,16 +19,16 @@ addTestSuite('latestDepTest') addTestSuiteForDir('latest12Test', 'latestDepTest') addTestSuiteForDir('latest11Test', 'test') -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { classpath += files(sourceSets.test.scala.classesDirectory) } -tasks.named("compileLatest12TestGroovy").configure { +tasks.named("compileLatest12TestGroovy") { classpath += files(sourceSets.latest12Test.scala.classesDirectory) } -tasks.named("compileLatest11TestGroovy").configure { +tasks.named("compileLatest11TestGroovy") { classpath += files(sourceSets.latest11Test.scala.classesDirectory) } -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { classpath += files(sourceSets.latestDepTest.scala.classesDirectory) } @@ -45,7 +45,7 @@ dependencies { latestDepTestImplementation project(':dd-java-agent:instrumentation:scala-promise:scala-promise-2.13') } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { dependsOn "latest11Test" dependsOn "latest12Test" } diff --git a/dd-java-agent/instrumentation/scala-promise/build.gradle b/dd-java-agent/instrumentation/scala-promise/build.gradle index 284d6247c3e..25fa5520996 100644 --- a/dd-java-agent/instrumentation/scala-promise/build.gradle +++ b/dd-java-agent/instrumentation/scala-promise/build.gradle @@ -13,7 +13,7 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { classpath += files(sourceSets.test.scala.classesDirectory) } diff --git a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle index 4312452e285..baa9b68315a 100644 --- a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle +++ b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle @@ -45,17 +45,17 @@ sourceSets { latestDepForkedTest.scala.srcDir project(':dd-java-agent:instrumentation:scala-promise').sourceSets.test.scala } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { classpath += files(sourceSets.test.scala.classesDirectory) dependsOn "compileTestScala" } -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { classpath += files(sourceSets.latestDepTest.scala.classesDirectory) dependsOn "compileLatestDepTestScala" } -tasks.named("compileLatestDepForkedTestGroovy").configure { +tasks.named("compileLatestDepForkedTestGroovy") { classpath += files(sourceSets.latestDepForkedTest.scala.classesDirectory) dependsOn "compileLatestDepForkedTestScala" } diff --git a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle index 4331e993105..59b062db1f8 100644 --- a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle +++ b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle @@ -45,15 +45,15 @@ sourceSets { latestDepForkedTest.scala.srcDir project(':dd-java-agent:instrumentation:scala-promise').sourceSets.test.scala } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { classpath += files(sourceSets.test.scala.classesDirectory) } -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { classpath += files(sourceSets.latestDepTest.scala.classesDirectory) } -tasks.named("compileLatestDepForkedTestGroovy").configure { +tasks.named("compileLatestDepForkedTestGroovy") { classpath += files(sourceSets.latestDepForkedTest.scala.classesDirectory) } diff --git a/dd-java-agent/instrumentation/scala/build.gradle b/dd-java-agent/instrumentation/scala/build.gradle index 9247a8d070d..299f09eef6b 100644 --- a/dd-java-agent/instrumentation/scala/build.gradle +++ b/dd-java-agent/instrumentation/scala/build.gradle @@ -66,7 +66,7 @@ final testTasks = scalaVersions.collect { scalaLibrary -> } } -tasks.named('test', Test).configure { +tasks.named('test', Test) { systemProperty('uses.java.concat', false) // version 2.10.7 does not use java concatenation finalizedBy(testTasks) } diff --git a/dd-java-agent/instrumentation/selenium/build.gradle b/dd-java-agent/instrumentation/selenium/build.gradle index 80f45dcf91e..1e600435062 100644 --- a/dd-java-agent/instrumentation/selenium/build.gradle +++ b/dd-java-agent/instrumentation/selenium/build.gradle @@ -42,7 +42,7 @@ configurations.matching({ it.name.startsWith('test') || it.name.startsWith('late } }) -tasks.named("compileLatestDepTestJava").configure { +tasks.named("compileLatestDepTestJava") { setJavaVersion(it, 11) sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/dd-java-agent/instrumentation/slick/build.gradle b/dd-java-agent/instrumentation/slick/build.gradle index 7fbc4135fb8..37171291dea 100644 --- a/dd-java-agent/instrumentation/slick/build.gradle +++ b/dd-java-agent/instrumentation/slick/build.gradle @@ -10,12 +10,12 @@ apply plugin: 'scala' addTestSuiteForDir('latestDepTest', 'test') -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn "compileTestScala" classpath += files(compileTestScala.destinationDirectory) } -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { dependsOn "compileLatestDepTestScala" classpath += files(compileLatestDepTestScala.destinationDirectory) } diff --git a/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle b/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle index 07519ca9f52..62b38438696 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle +++ b/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle @@ -58,7 +58,7 @@ dependencies { latestDepTestImplementation group: 'org.apache.spark', name: "spark-yarn_$scalaVersion", version: '+' } -tasks.named("test").configure { +tasks.named("test") { dependsOn "test_spark24" dependsOn "test_spark32" } diff --git a/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle b/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle index b17f1757b48..d092bca8f48 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle +++ b/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle @@ -57,6 +57,6 @@ dependencies { latestDepTestImplementation group: 'org.apache.spark', name: "spark-yarn_$scalaVersion", version: '3.+' } -tasks.named("test").configure { +tasks.named("test") { dependsOn "test_spark32" } diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/build.gradle index b065d7fa620..17c5a2291ae 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/build.gradle @@ -130,7 +130,7 @@ dependencies { latestIastTestImplementation project(':dd-java-agent:instrumentation:jackson-core:jackson-core-2.12') } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { dependsOn "latestBoot20Test" dependsOn "latestBoot24Test" dependsOn "latestBoot2LatestTest" diff --git a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle index 4e9ed4cdb28..e37c0cc74c3 100644 --- a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle +++ b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle @@ -67,7 +67,6 @@ dependencies { latestDepTestRuntimeOnly project(':dd-java-agent:instrumentation:servlet:request-5') } - def extractWildfly(config, zipFileNamePrefix, sync) { delete(fileTree(buildDir).include("wildfly-*/standalone/deployments/**")) @@ -85,7 +84,6 @@ def extractWildfly(config, zipFileNamePrefix, sync) { } } - tasks.register("extractWildfly", Copy) { dependsOn configurations.wildflyTest mustRunAfter tasks.compileTestGroovy @@ -107,21 +105,22 @@ tasks.register("extractLatestWildfly", Copy) { onlyIf { !project.rootProject.hasProperty("skipTests") } } - -tasks.named("test").configure { +tasks.named("test") { dependsOn 'extractWildfly' } -tasks.named("forkedTest").configure { +tasks.named("forkedTest") { dependsOn 'extractWildfly' } -tasks.named("latestDepForkedTest").configure { + +tasks.named("latestDepForkedTest") { dependsOn 'extractLatestWildfly' } -tasks.named("latestDepTest").configure { +tasks.named("latestDepTest") { dependsOn 'extractLatestWildfly' } + compileTestGroovy.configure { javaLauncher = getJavaLauncherFor(11) } @@ -131,6 +130,7 @@ compileTestGroovy.configure { javaLauncher = getJavaLauncherFor(17) } } + compileTestJava.configure { it.configure { setJavaVersion(it, 11) @@ -154,6 +154,7 @@ processTestResources { ) } } + [processLatestDepTestResources, processLatestDepForkedTestResources].each { it.filesMatching('**/WEB-INF/web.xml') { expand( diff --git a/dd-java-agent/instrumentation/zio/zio-2.0/build.gradle b/dd-java-agent/instrumentation/zio/zio-2.0/build.gradle index b5f15fc8782..c4e1b6f3f5e 100644 --- a/dd-java-agent/instrumentation/zio/zio-2.0/build.gradle +++ b/dd-java-agent/instrumentation/zio/zio-2.0/build.gradle @@ -29,7 +29,7 @@ apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/gradle/test-with-scala.gradle" addTestSuiteForDir('latestDepTest', 'test') -tasks.named("compileLatestDepTestGroovy").configure { +tasks.named("compileLatestDepTestGroovy") { dependsOn "compileLatestDepTestScala" classpath += files(compileLatestDepTestScala.destinationDirectory) } diff --git a/dd-smoke-tests/armeria-grpc/build.gradle b/dd-smoke-tests/armeria-grpc/build.gradle index 34269915845..3e49a23b935 100644 --- a/dd-smoke-tests/armeria-grpc/build.gradle +++ b/dd-smoke-tests/armeria-grpc/build.gradle @@ -79,7 +79,7 @@ armeriaBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'armeriaBuild' outputs.upToDateWhen { !armeriaBuild.didWork diff --git a/dd-smoke-tests/concurrent/java-21/build.gradle b/dd-smoke-tests/concurrent/java-21/build.gradle index 9bfdf330189..01eb4506ad7 100644 --- a/dd-smoke-tests/concurrent/java-21/build.gradle +++ b/dd-smoke-tests/concurrent/java-21/build.gradle @@ -31,7 +31,7 @@ forbiddenApisMain { failOnMissingClasses = false } ['spotlessApply', 'spotlessCheck', 'spotlessJava', 'spotbugsMain'].each { - tasks.named(it).configure { enabled = false } + tasks.named(it) { enabled = false } } application { diff --git a/dd-smoke-tests/concurrent/java-25/build.gradle b/dd-smoke-tests/concurrent/java-25/build.gradle index 46dd9472c94..d39a482e6a6 100644 --- a/dd-smoke-tests/concurrent/java-25/build.gradle +++ b/dd-smoke-tests/concurrent/java-25/build.gradle @@ -18,7 +18,7 @@ apply from: "$rootDir/gradle/java.gradle" description = 'JDK 25 Concurrent Integration Tests' -tasks.named('compileJava').configure { +tasks.named('compileJava') { setJavaVersion(it, 25) sourceCompatibility = JavaVersion.VERSION_25 targetCompatibility = JavaVersion.VERSION_25 @@ -32,7 +32,7 @@ tasks.named('compileJava').configure { } } -tasks.named('compileTestGroovy').configure { +tasks.named('compileTestGroovy') { setJavaVersion(it, 8) sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 @@ -46,7 +46,7 @@ forbiddenApisMain { failOnMissingClasses = false } ['spotlessApply', 'spotlessCheck', 'spotlessJava', 'spotbugsMain'].each { - tasks.named(it).configure { enabled = false } + tasks.named(it) { enabled = false } } application { diff --git a/dd-smoke-tests/iast-util/iast-util-11/build.gradle b/dd-smoke-tests/iast-util/iast-util-11/build.gradle index 1f16631579b..997d048cf59 100644 --- a/dd-smoke-tests/iast-util/iast-util-11/build.gradle +++ b/dd-smoke-tests/iast-util/iast-util-11/build.gradle @@ -21,7 +21,7 @@ dependencies { testFixturesImplementation testFixtures(project(":dd-smoke-tests:iast-util")) } -tasks.named("compileJava", JavaCompile).configure { +tasks.named("compileJava", JavaCompile) { setJavaVersion(it, 11) sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 diff --git a/dd-smoke-tests/iast-util/iast-util-17/build.gradle b/dd-smoke-tests/iast-util/iast-util-17/build.gradle index cc931fd2797..6011501f26b 100644 --- a/dd-smoke-tests/iast-util/iast-util-17/build.gradle +++ b/dd-smoke-tests/iast-util/iast-util-17/build.gradle @@ -21,7 +21,7 @@ dependencies { testFixturesImplementation testFixtures(project(":dd-smoke-tests:iast-util")) } -tasks.named("compileJava", JavaCompile).configure { +tasks.named("compileJava", JavaCompile) { setJavaVersion(it, 17) sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 diff --git a/dd-smoke-tests/kafka-3/build.gradle b/dd-smoke-tests/kafka-3/build.gradle index 7fa33782393..0d593aa2006 100644 --- a/dd-smoke-tests/kafka-3/build.gradle +++ b/dd-smoke-tests/kafka-3/build.gradle @@ -41,7 +41,7 @@ tasks.register('bootJar', Exec) { group('build') } -tasks.named('compileTestGroovy').configure { +tasks.named('compileTestGroovy') { dependsOn 'bootJar' outputs.upToDateWhen { !bootJar.didWork diff --git a/dd-smoke-tests/log-injection/build.gradle b/dd-smoke-tests/log-injection/build.gradle index e8778574f5f..afc19fb8a14 100644 --- a/dd-smoke-tests/log-injection/build.gradle +++ b/dd-smoke-tests/log-injection/build.gradle @@ -56,7 +56,7 @@ sourceSets { } -tasks.named('processLoggingResources').configure { +tasks.named('processLoggingResources') { // Don't know why this tries to copy the logback.xml file twice, but only accept it once duplicatesStrategy = DuplicatesStrategy.EXCLUDE } @@ -128,7 +128,7 @@ dependencies { def generateTestingJar(String interfaceName, String backend, List configurationsList) { def name = interfaceName + "Interface" + backend + "Backend" - tasks.register(name, ShadowJar).configure { + tasks.register(name, ShadowJar) { from sourceSets.main.output from sourceSets.logging.output diff --git a/dd-smoke-tests/play-2.4/build.gradle b/dd-smoke-tests/play-2.4/build.gradle index 5a72a7d5694..74817b3824e 100644 --- a/dd-smoke-tests/play-2.4/build.gradle +++ b/dd-smoke-tests/play-2.4/build.gradle @@ -72,7 +72,7 @@ configurations.testImplementation { exclude group:'com.typesafe.play', module:"play-test_$scalaVer" } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'stageMainDist' outputs.upToDateWhen { !stageMainDist.didWork diff --git a/dd-smoke-tests/play-2.5/build.gradle b/dd-smoke-tests/play-2.5/build.gradle index ec06319d23c..0ac6814028d 100644 --- a/dd-smoke-tests/play-2.5/build.gradle +++ b/dd-smoke-tests/play-2.5/build.gradle @@ -74,7 +74,7 @@ configurations.testImplementation { exclude group:'com.typesafe.play', module:"play-test_$scalaVer" } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'stageMainDist' outputs.upToDateWhen { !stageMainDist.didWork diff --git a/dd-smoke-tests/play-2.6/build.gradle b/dd-smoke-tests/play-2.6/build.gradle index 0366379aade..f677ab717e5 100644 --- a/dd-smoke-tests/play-2.6/build.gradle +++ b/dd-smoke-tests/play-2.6/build.gradle @@ -74,7 +74,7 @@ configurations.testImplementation { exclude group:'com.typesafe.play', module:"play-test_$scalaVer" } -tasks.named('compileTestGroovy').configure { +tasks.named('compileTestGroovy') { dependsOn 'stageMainDist' outputs.upToDateWhen { !stageMainDist.didWork diff --git a/dd-smoke-tests/play-2.7/build.gradle b/dd-smoke-tests/play-2.7/build.gradle index e563538fd09..8a83461f56d 100644 --- a/dd-smoke-tests/play-2.7/build.gradle +++ b/dd-smoke-tests/play-2.7/build.gradle @@ -74,7 +74,7 @@ configurations.testImplementation { exclude group:'com.typesafe.play', module:"play-test_$scalaVer" } -tasks.named('compileTestGroovy').configure { +tasks.named('compileTestGroovy') { dependsOn 'stageMainDist' outputs.upToDateWhen { !stageMainDist.didWork diff --git a/dd-smoke-tests/play-2.8-otel/build.gradle b/dd-smoke-tests/play-2.8-otel/build.gradle index 1dba9aae90a..b5c0925b3d2 100644 --- a/dd-smoke-tests/play-2.8-otel/build.gradle +++ b/dd-smoke-tests/play-2.8-otel/build.gradle @@ -70,7 +70,7 @@ configurations.testImplementation { exclude group:'com.typesafe.play', module:"play-test_$scalaVer" } -tasks.named('compileTestGroovy').configure { +tasks.named('compileTestGroovy') { dependsOn 'stageMainDist' outputs.upToDateWhen { !stageMainDist.didWork diff --git a/dd-smoke-tests/play-2.8-split-routes/build.gradle b/dd-smoke-tests/play-2.8-split-routes/build.gradle index 73b4eea520e..c7693b7fea3 100644 --- a/dd-smoke-tests/play-2.8-split-routes/build.gradle +++ b/dd-smoke-tests/play-2.8-split-routes/build.gradle @@ -70,7 +70,7 @@ configurations.testImplementation { exclude group: 'com.typesafe.play', module: "play-test_$scalaVer" } -tasks.named('compileTestGroovy').configure { +tasks.named('compileTestGroovy') { dependsOn 'stageMainDist' outputs.upToDateWhen { !stageMainDist.didWork diff --git a/dd-smoke-tests/play-2.8/build.gradle b/dd-smoke-tests/play-2.8/build.gradle index 2d031b727f4..88cfbae8f53 100644 --- a/dd-smoke-tests/play-2.8/build.gradle +++ b/dd-smoke-tests/play-2.8/build.gradle @@ -73,7 +73,7 @@ configurations.testImplementation { exclude group: 'com.typesafe.play', module: "play-test_$scalaVer" } -tasks.named('compileTestGroovy').configure { +tasks.named('compileTestGroovy') { dependsOn 'stageMainDist' outputs.upToDateWhen { !stageMainDist.didWork diff --git a/dd-smoke-tests/quarkus-native/build.gradle b/dd-smoke-tests/quarkus-native/build.gradle index 8c36724cfef..922a8f30d40 100644 --- a/dd-smoke-tests/quarkus-native/build.gradle +++ b/dd-smoke-tests/quarkus-native/build.gradle @@ -60,7 +60,7 @@ if (version >= 17) { dependsOn project(':dd-java-agent').tasks.named('shadowJar') // Use dev agent } - tasks.named('compileTestGroovy').configure { + tasks.named('compileTestGroovy') { dependsOn 'quarkusNativeBuild' outputs.upToDateWhen { !quarkusNativeBuild.didWork diff --git a/dd-smoke-tests/quarkus/build.gradle b/dd-smoke-tests/quarkus/build.gradle index 777b5fdc342..fb966261009 100644 --- a/dd-smoke-tests/quarkus/build.gradle +++ b/dd-smoke-tests/quarkus/build.gradle @@ -38,7 +38,7 @@ quarkusBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'quarkusBuild' outputs.upToDateWhen { !quarkusBuild.didWork diff --git a/dd-smoke-tests/rum/wildfly-15/build.gradle b/dd-smoke-tests/rum/wildfly-15/build.gradle index 039afefb819..903e263021f 100644 --- a/dd-smoke-tests/rum/wildfly-15/build.gradle +++ b/dd-smoke-tests/rum/wildfly-15/build.gradle @@ -67,7 +67,7 @@ earBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn tasks.earBuild outputs.upToDateWhen { !earBuild.didWork diff --git a/dd-smoke-tests/spring-boot-2.7-webflux/build.gradle b/dd-smoke-tests/spring-boot-2.7-webflux/build.gradle index 97d01b18b90..22fe8873879 100644 --- a/dd-smoke-tests/spring-boot-2.7-webflux/build.gradle +++ b/dd-smoke-tests/spring-boot-2.7-webflux/build.gradle @@ -35,7 +35,7 @@ webfluxBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'webfluxBuild' outputs.upToDateWhen { !webfluxBuild.didWork diff --git a/dd-smoke-tests/spring-boot-3.0-native/build.gradle b/dd-smoke-tests/spring-boot-3.0-native/build.gradle index 2057567574b..921ffd5cb0e 100644 --- a/dd-smoke-tests/spring-boot-3.0-native/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-native/build.gradle @@ -64,7 +64,7 @@ if (version >= 17) { dependsOn project(':dd-java-agent').tasks.named('shadowJar') // Use dev agent } - tasks.named('compileTestGroovy').configure { + tasks.named('compileTestGroovy') { dependsOn 'springNativeBuild' outputs.upToDateWhen { !springNativeBuild.didWork diff --git a/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle b/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle index ea753afd912..d3754b09ded 100644 --- a/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle @@ -39,7 +39,7 @@ webfluxBuild30 { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'webfluxBuild30' outputs.upToDateWhen { !webfluxBuild30.didWork diff --git a/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle b/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle index 34c71aac72b..3749cf99617 100644 --- a/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle @@ -39,7 +39,7 @@ compileTestGroovy { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'webmvcBuild30' outputs.upToDateWhen { !webmvcBuild30.didWork diff --git a/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle b/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle index 92514f784b5..5e503bc1e30 100644 --- a/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle +++ b/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle @@ -39,7 +39,7 @@ compileTestGroovy { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'webmvcBuild3' outputs.upToDateWhen { !webmvcBuild3.didWork diff --git a/dd-smoke-tests/springboot-java-11/build.gradle b/dd-smoke-tests/springboot-java-11/build.gradle index a9594cd7c2e..e3392d30329 100644 --- a/dd-smoke-tests/springboot-java-11/build.gradle +++ b/dd-smoke-tests/springboot-java-11/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation project(':dd-smoke-tests:iast-util:iast-util-11') } -tasks.named("compileJava", JavaCompile).configure { +tasks.named("compileJava", JavaCompile) { setJavaVersion(it, 11) sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 diff --git a/dd-smoke-tests/springboot-java-17/build.gradle b/dd-smoke-tests/springboot-java-17/build.gradle index 3ab20c20da4..93003529d30 100644 --- a/dd-smoke-tests/springboot-java-17/build.gradle +++ b/dd-smoke-tests/springboot-java-17/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation project(':dd-smoke-tests:iast-util:iast-util-17') } -tasks.named("compileJava", JavaCompile).configure { +tasks.named("compileJava", JavaCompile) { setJavaVersion(it, 17) sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 diff --git a/dd-smoke-tests/springboot-openliberty-20/build.gradle b/dd-smoke-tests/springboot-openliberty-20/build.gradle index 6716a0ffe46..01b95f1dc50 100644 --- a/dd-smoke-tests/springboot-openliberty-20/build.gradle +++ b/dd-smoke-tests/springboot-openliberty-20/build.gradle @@ -21,7 +21,7 @@ tasks.register('mvnStage', Exec) { outputs.file jarPath } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'mvnStage' outputs.upToDateWhen { !mvnStage.didWork diff --git a/dd-smoke-tests/springboot-openliberty-23/build.gradle b/dd-smoke-tests/springboot-openliberty-23/build.gradle index e0cbfe891ba..68c7a7e6747 100644 --- a/dd-smoke-tests/springboot-openliberty-23/build.gradle +++ b/dd-smoke-tests/springboot-openliberty-23/build.gradle @@ -21,7 +21,7 @@ tasks.register('mvnStage', Exec) { outputs.file jarPath } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'mvnStage' outputs.upToDateWhen { !mvnStage.didWork diff --git a/dd-smoke-tests/vertx-3.4/build.gradle b/dd-smoke-tests/vertx-3.4/build.gradle index 2d23603b9f1..5f3d381b4f2 100644 --- a/dd-smoke-tests/vertx-3.4/build.gradle +++ b/dd-smoke-tests/vertx-3.4/build.gradle @@ -38,7 +38,7 @@ vertxBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'vertxBuild' outputs.upToDateWhen { !vertxBuild.didWork diff --git a/dd-smoke-tests/vertx-3.9-resteasy/build.gradle b/dd-smoke-tests/vertx-3.9-resteasy/build.gradle index 718d07745e8..68b619f369d 100644 --- a/dd-smoke-tests/vertx-3.9-resteasy/build.gradle +++ b/dd-smoke-tests/vertx-3.9-resteasy/build.gradle @@ -35,7 +35,7 @@ vertxBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'vertxBuild' outputs.upToDateWhen { !vertxBuild.didWork diff --git a/dd-smoke-tests/vertx-3.9/build.gradle b/dd-smoke-tests/vertx-3.9/build.gradle index 70161bba855..d442b7ec98d 100644 --- a/dd-smoke-tests/vertx-3.9/build.gradle +++ b/dd-smoke-tests/vertx-3.9/build.gradle @@ -36,7 +36,7 @@ vertxBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'vertxBuild' outputs.upToDateWhen { !vertxBuild.didWork diff --git a/dd-smoke-tests/vertx-4.2/build.gradle b/dd-smoke-tests/vertx-4.2/build.gradle index 0d1ca0cd001..960764e53f0 100644 --- a/dd-smoke-tests/vertx-4.2/build.gradle +++ b/dd-smoke-tests/vertx-4.2/build.gradle @@ -37,7 +37,7 @@ vertxBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn 'vertxBuild' outputs.upToDateWhen { !vertxBuild.didWork diff --git a/dd-smoke-tests/wildfly/build.gradle b/dd-smoke-tests/wildfly/build.gradle index 24a6ac242a4..4e0ec9d2ae4 100644 --- a/dd-smoke-tests/wildfly/build.gradle +++ b/dd-smoke-tests/wildfly/build.gradle @@ -67,7 +67,7 @@ earBuild { dependsOn project(':dd-trace-api').tasks.named("jar") } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { dependsOn tasks.earBuild outputs.upToDateWhen { !earBuild.didWork diff --git a/gradle/jacoco.gradle b/gradle/jacoco.gradle index b2c3d53ab4b..bc0299f3feb 100644 --- a/gradle/jacoco.gradle +++ b/gradle/jacoco.gradle @@ -19,7 +19,7 @@ tasks.register('forkedTestJacocoData') { } } -tasks.named('jacocoTestReport').configure { +tasks.named('jacocoTestReport') { dependsOn('test', 'forkedTestJacocoData') reports { xml.required = true @@ -77,10 +77,10 @@ afterEvaluate { onlyIf { !project.rootProject.hasProperty('skipTests') } } - tasks.named('jacocoTestCoverageVerification').configure { + tasks.named('jacocoTestCoverageVerification') { dependsOn('jacocoTestReport') } - tasks.named('check').configure { + tasks.named('check') { dependsOn('jacocoTestCoverageVerification') } } diff --git a/gradle/java_no_deps.gradle b/gradle/java_no_deps.gradle index b00fbc1d37c..c7c32810ff7 100644 --- a/gradle/java_no_deps.gradle +++ b/gradle/java_no_deps.gradle @@ -21,7 +21,7 @@ ext.testcontainersLimit = gradle.sharedServices.registerIfAbsent("testcontainers // Task for tests that want to run forked in their own separate JVM if (tasks.matching({ it.name == 'forkedTest' }).empty) { - tasks.register('forkedTest', Test).configure { + tasks.register('forkedTest', Test) { useJUnitPlatform() } } @@ -252,7 +252,7 @@ project.afterEvaluate { if (project.plugins.hasPlugin('kotlin')) { ['compileKotlin', 'compileTestKotlin'].each { type -> - tasks.named(type).configure { + tasks.named(type) { kotlinDaemonJvmArguments = ["-Xmx256m", "-XX:+UseParallelGC"] } } diff --git a/gradle/test-with-kotlin.gradle b/gradle/test-with-kotlin.gradle index f4de18e697c..b124878c1aa 100644 --- a/gradle/test-with-kotlin.gradle +++ b/gradle/test-with-kotlin.gradle @@ -2,7 +2,7 @@ apply plugin: 'kotlin' apply from: "$rootDir/gradle/spotless/spotless-kotlin.gradle" -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { //Note: look like it should be `classpath += files(sourceSets.test.kotlin.classesDirectory)` //instead, but kotlin plugin doesn't support it (yet?) classpath += files(compileTestKotlin.destinationDirectory) diff --git a/gradle/test-with-scala.gradle b/gradle/test-with-scala.gradle index 2a8475c5d45..d25891cc7d8 100644 --- a/gradle/test-with-scala.gradle +++ b/gradle/test-with-scala.gradle @@ -7,6 +7,6 @@ dependencies { testImplementation libs.scala } -tasks.named("compileTestGroovy").configure { +tasks.named("compileTestGroovy") { classpath += files(sourceSets.test.scala.classesDirectory) } diff --git a/test-published-dependencies/ot-is-shaded/build.gradle b/test-published-dependencies/ot-is-shaded/build.gradle index 1342c8e24d0..7dc441997a2 100644 --- a/test-published-dependencies/ot-is-shaded/build.gradle +++ b/test-published-dependencies/ot-is-shaded/build.gradle @@ -115,7 +115,7 @@ tasks.register('checkJarSize') { } } -tasks.named('check').configure { +tasks.named('check') { dependsOn 'checkJarContents' dependsOn 'checkJarSize' } diff --git a/utils/socket-utils/build.gradle.kts b/utils/socket-utils/build.gradle.kts index d26dffe6e32..2fc7d820460 100644 --- a/utils/socket-utils/build.gradle.kts +++ b/utils/socket-utils/build.gradle.kts @@ -27,7 +27,7 @@ fun AbstractCompile.setJavaVersion(javaVersionInteger: Int) { } listOf("compileMain_java17Java", "compileTestJava").forEach { - tasks.named(it).configure { + tasks.named(it) { setJavaVersion(17) sourceCompatibility = JavaVersion.VERSION_1_8.toString() targetCompatibility = JavaVersion.VERSION_1_8.toString() From 140e25d89b116f7593c6ca30dadc22e5dd4851d6 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Fri, 19 Sep 2025 21:58:32 -0400 Subject: [PATCH 19/41] Refactored EnvironmentVariables to be testable. --- .../environment/EnvironmentVariables.java | 17 +++++- .../test/DefaultInstrumenterForkedTest.groovy | 4 +- .../CiVisibilityInstrumentationTest.groovy | 3 +- .../civisibility/CiVisibilitySmokeTest.groovy | 11 ++-- .../civisibility/CiVisibilityTestUtils.groovy | 3 +- .../ci/CIProviderInfoFactoryTest.groovy | 21 ++----- .../civisibility/ci/CITagsProviderTest.groovy | 44 ++++++--------- .../ci/GithubActionsInfoTest.groovy | 6 +- .../civisibility/ci/UnknownCIInfoTest.groovy | 6 +- .../git/CIProviderGitInfoBuilderTest.groovy | 16 ++---- .../debugger/agent/DebuggerAgentTest.java | 13 +++-- .../src/test/java/utils/TestHelper.java | 16 ------ .../uploader/ProfileUploaderTest.java | 18 ++---- .../src/test/groovy/ConfigResetTest.groovy | 19 ++++--- .../aws-java-lambda-handler-1.2/build.gradle | 15 ++++- .../AbstractStructuredConcurrencyTest.groovy | 3 +- .../KafkaProducerWithSchemaRegistry.java | 2 +- .../datadog/smoketest/CodeHotspotsTest.java | 3 +- .../datadog/trace/api/ConfigTest.groovy | 56 +++++++++---------- .../api/env/FixedCapturedEnvironment.java | 21 +------ .../git/UserSuppliedGitInfoBuilderTest.groovy | 6 -- .../trace/api/env/CapturedEnvironment.java | 5 +- utils/test-utils/build.gradle.kts | 2 +- .../ControllableEnvironmentVariables.groovy | 51 +++++++++++++++++ .../trace/test/util/DDSpecification.groovy | 24 ++++---- ...setControllableEnvironmentVariables.groovy | 24 -------- 26 files changed, 195 insertions(+), 214 deletions(-) create mode 100644 utils/test-utils/src/main/groovy/datadog/trace/test/util/ControllableEnvironmentVariables.groovy delete mode 100644 utils/test-utils/src/main/groovy/datadog/trace/test/util/ResetControllableEnvironmentVariables.groovy diff --git a/components/environment/src/main/java/datadog/environment/EnvironmentVariables.java b/components/environment/src/main/java/datadog/environment/EnvironmentVariables.java index 753ea95acd8..6a7bbca4179 100644 --- a/components/environment/src/main/java/datadog/environment/EnvironmentVariables.java +++ b/components/environment/src/main/java/datadog/environment/EnvironmentVariables.java @@ -16,6 +16,19 @@ public final class EnvironmentVariables { private EnvironmentVariables() {} + public static class EnvironmentVariablesProvider { + public String get(String name) { + return System.getenv(name); + } + + public Map getAll() { + return System.getenv(); + } + } + + // Make it accessible from tests. + public static volatile EnvironmentVariablesProvider provider = new EnvironmentVariablesProvider(); + /** * Gets an environment variable value. * @@ -41,7 +54,7 @@ public static String getOrDefault(String name, String defaultValue) { return defaultValue; } try { - String value = System.getenv(name); + String value = provider.get(name); return value == null ? defaultValue : value; } catch (SecurityException e) { return defaultValue; @@ -56,7 +69,7 @@ public static String getOrDefault(String name, String defaultValue) { */ public static Map getAll() { try { - return unmodifiableMap(new HashMap<>(System.getenv())); + return unmodifiableMap(new HashMap<>(provider.getAll())); } catch (SecurityException e) { return emptyMap(); } diff --git a/dd-java-agent/agent-builder/src/test/groovy/datadog/trace/agent/test/DefaultInstrumenterForkedTest.groovy b/dd-java-agent/agent-builder/src/test/groovy/datadog/trace/agent/test/DefaultInstrumenterForkedTest.groovy index eb448819bd2..9be765964fe 100644 --- a/dd-java-agent/agent-builder/src/test/groovy/datadog/trace/agent/test/DefaultInstrumenterForkedTest.groovy +++ b/dd-java-agent/agent-builder/src/test/groovy/datadog/trace/agent/test/DefaultInstrumenterForkedTest.groovy @@ -1,6 +1,6 @@ package datadog.trace.agent.test - +import datadog.environment.EnvironmentVariables import datadog.trace.agent.tooling.InstrumenterModule import datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers import datadog.trace.agent.tooling.bytebuddy.outline.TypePoolFacade @@ -118,7 +118,7 @@ class DefaultInstrumenterForkedTest extends DDSpecification { def target = new TestDefaultInstrumenter(name, altName) then: - System.getenv("DD_INTEGRATION_${value}_ENABLED") == "true" + EnvironmentVariables.get("DD_INTEGRATION_${value}_ENABLED") == "true" target.enabled == enabled where: diff --git a/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy b/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy index 4697abe5549..cf429717113 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy +++ b/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy @@ -3,6 +3,7 @@ package datadog.trace.civisibility import com.fasterxml.jackson.databind.ObjectMapper import datadog.communication.serialization.GrowableBuffer import datadog.communication.serialization.msgpack.MsgPackWriter +import datadog.environment.EnvironmentVariables import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.agent.test.asserts.ListWriterAssert import datadog.trace.api.Config @@ -367,7 +368,7 @@ abstract class CiVisibilityInstrumentationTest extends InstrumentationSpecificat def additionalIgnoredTags = CiVisibilityTestUtils.IGNORED_TAGS + ignoredTags - if (System.getenv().get("GENERATE_TEST_FIXTURES") != null) { + if (EnvironmentVariables.get("GENERATE_TEST_FIXTURES") != null) { return generateTestFixtures(testcaseName, events, coverages, additionalReplacements, additionalIgnoredTags) } diff --git a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy index d434360d14c..9b73213ac77 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy +++ b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy @@ -1,5 +1,6 @@ package datadog.trace.civisibility +import datadog.environment.EnvironmentVariables import datadog.trace.api.Config import datadog.trace.api.civisibility.config.TestFQN import datadog.trace.api.config.CiVisibilityConfig @@ -21,9 +22,9 @@ abstract class CiVisibilitySmokeTest extends Specification { protected static String buildJavaHome() { if (Jvm.current.isJava8()) { - return System.getenv("JAVA_8_HOME") + return EnvironmentVariables.get("JAVA_8_HOME") } - return System.getenv("JAVA_" + Jvm.current.getJavaSpecificationVersion() + "_HOME") + return EnvironmentVariables.get("JAVA_" + Jvm.current.getJavaSpecificationVersion() + "_HOME") } protected static String javaPath() { @@ -67,10 +68,10 @@ abstract class CiVisibilitySmokeTest extends Specification { Map argMap = buildJvmArgMap(mockBackendIntakeUrl, serviceName, additionalArgs) // for convenience when debugging locally - if (System.getenv("DD_CIVISIBILITY_SMOKETEST_DEBUG_PARENT") != null) { + if (EnvironmentVariables.get("DD_CIVISIBILITY_SMOKETEST_DEBUG_PARENT") != null) { arguments += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" } - if (System.getenv("DD_CIVISIBILITY_SMOKETEST_DEBUG_CHILD") != null) { + if (EnvironmentVariables.get("DD_CIVISIBILITY_SMOKETEST_DEBUG_CHILD") != null) { argMap.put(CiVisibilityConfig.CIVISIBILITY_DEBUG_PORT, "5055") } @@ -83,7 +84,7 @@ abstract class CiVisibilitySmokeTest extends Specification { protected verifyEventsAndCoverages(String projectName, String toolchain, String toolchainVersion, List> events, List> coverages, List additionalDynamicTags = []) { def additionalReplacements = ["content.meta.['test.toolchain']": "$toolchain:$toolchainVersion"] - if (System.getenv().get("GENERATE_TEST_FIXTURES") != null) { + if (EnvironmentVariables.get("GENERATE_TEST_FIXTURES") != null) { def baseTemplatesPath = CiVisibilitySmokeTest.classLoader.getResource(projectName).toURI().schemeSpecificPart.replace('build/resources/test', 'src/test/resources') CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements.keySet() + additionalDynamicTags, SMOKE_IGNORED_TAGS) } else { diff --git a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy index a77570a2721..c83d5cbcdeb 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy +++ b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy @@ -7,6 +7,7 @@ import com.jayway.jsonpath.JsonPath import com.jayway.jsonpath.Option import com.jayway.jsonpath.ReadContext import com.jayway.jsonpath.WriteContext +import datadog.environment.EnvironmentVariables import datadog.trace.api.DDSpanTypes import datadog.trace.api.civisibility.config.LibraryCapability import datadog.trace.api.civisibility.config.TestFQN @@ -162,7 +163,7 @@ abstract class CiVisibilityTestUtils { } private static void compareJson(String expectedJson, String actualJson) { - def environment = System.getenv() + def environment = EnvironmentVariables.getAll() def ciRun = environment.get("GITHUB_ACTION") != null || environment.get("GITLAB_CI") != null def comparisonMode = ciRun ? JSONCompareMode.LENIENT : JSONCompareMode.NON_EXTENSIBLE diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CIProviderInfoFactoryTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CIProviderInfoFactoryTest.groovy index 08b21a8d318..77efbd800b6 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CIProviderInfoFactoryTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CIProviderInfoFactoryTest.groovy @@ -2,9 +2,7 @@ package datadog.trace.civisibility.ci import datadog.trace.api.Config import datadog.trace.civisibility.ci.env.CiEnvironmentImpl -import org.junit.Rule -import org.junit.contrib.java.lang.system.EnvironmentVariables -import org.junit.contrib.java.lang.system.RestoreSystemProperties +import datadog.trace.test.util.ControllableEnvironmentVariables import spock.lang.Specification import java.nio.file.Paths @@ -21,25 +19,18 @@ import static datadog.trace.civisibility.ci.JenkinsInfo.JENKINS import static datadog.trace.civisibility.ci.TravisInfo.TRAVIS class CIProviderInfoFactoryTest extends Specification { - @Rule - public final EnvironmentVariables environmentVariables = new EnvironmentVariables() + protected ControllableEnvironmentVariables env = ControllableEnvironmentVariables.setup() - @Rule - public final RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties() - - def setup() { - // Clear all environment variables to avoid clashes between - // real CI/Git environment variables and the spec CI/Git - // environment variables. - environmentVariables.clear(System.getenv().keySet() as String[]) + void cleanup() { + env.clear() } def "test correct info is selected"() { setup: - environmentVariables.set(ciKeySelector, "true") + env.set(ciKeySelector, "true") when: - def ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), new CiEnvironmentImpl(System.getenv())) + def ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), new CiEnvironmentImpl(env.getAll())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(Paths.get("").toAbsolutePath()) then: diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy index 6939a087692..f8c95d78b74 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/CITagsProviderTest.groovy @@ -8,9 +8,7 @@ import datadog.trace.civisibility.ci.env.CiEnvironmentImpl import datadog.trace.civisibility.git.CILocalGitInfoBuilder import datadog.trace.civisibility.git.CIProviderGitInfoBuilder import datadog.trace.civisibility.git.tree.GitClient -import org.junit.Rule -import org.junit.contrib.java.lang.system.EnvironmentVariables -import org.junit.contrib.java.lang.system.RestoreSystemProperties +import datadog.trace.test.util.ControllableEnvironmentVariables import spock.lang.Specification import java.nio.file.Path @@ -19,36 +17,28 @@ import java.nio.file.Paths import static datadog.trace.util.ConfigStrings.propertyNameToEnvironmentVariableName abstract class CITagsProviderTest extends Specification { - static final CI_WORKSPACE_PATH_FOR_TESTS = "ci/ci_workspace_for_tests" static final GIT_FOLDER_FOR_TESTS = "git_folder_for_tests" - @Rule - public final EnvironmentVariables environmentVariables = new EnvironmentVariables() - - @Rule - public final RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties() + protected ControllableEnvironmentVariables env = ControllableEnvironmentVariables.setup() protected final String localFSGitWorkspace = resolve(CI_WORKSPACE_PATH_FOR_TESTS) - def setup() { - // Clear all environment variables to avoid clashes between - // real CI/Git environment variables and the spec CI/Git - // environment variables. - environmentVariables.clear(System.getenv().keySet() as String[]) + void cleanup() { + env.clear() } def "test ci provider info is set properly: #ciSpec.providerName #ciSpec.idx #ciSpec.testCaseName"() { setup: ciSpec.env.each { - environmentVariables.set(it.key, it.value.toString()) + env.set(it.key, it.value.toString()) if (it.key == "HOME") { System.setProperty("user.home", it.value) } } when: - CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv())) + CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(env.getAll())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(getWorkspacePath()) def ciInfo = ciProviderInfo.buildCIInfo() def prInfo = ciProviderInfo.buildPullRequestInfo() @@ -68,13 +58,13 @@ abstract class CITagsProviderTest extends Specification { def "test user supplied commit hash takes precedence over auto-detected git info"() { setup: buildRemoteGitInfoEmpty().each { - environmentVariables.set(it.key, it.value) + env.set(it.key, it.value) } - environmentVariables.set(propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_SHA), "1234567890123456789012345678901234567890") + env.set(propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_COMMIT_SHA), "1234567890123456789012345678901234567890") when: - CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv())) + CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(env.getAll())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(getWorkspacePath()) def ciInfo = ciProviderInfo.buildCIInfo() def ciTagsProvider = ciTagsProvider() @@ -87,13 +77,13 @@ abstract class CITagsProviderTest extends Specification { def "test user supplied repo url takes precedence over auto-detected git info"() { setup: buildRemoteGitInfoEmpty().each { - environmentVariables.set(it.key, it.value) + env.set(it.key, it.value) } - environmentVariables.set(propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_REPOSITORY_URL), "local supplied repo url") + env.set(propertyNameToEnvironmentVariableName(UserSuppliedGitInfoBuilder.DD_GIT_REPOSITORY_URL), "local supplied repo url") when: - CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv())) + CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(env.getAll())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(getWorkspacePath()) def ciInfo = ciProviderInfo.buildCIInfo() def ciTagsProvider = ciTagsProvider() @@ -106,11 +96,11 @@ abstract class CITagsProviderTest extends Specification { def "test set local git info if remote git info is not present"() { setup: buildRemoteGitInfoEmpty().each { - environmentVariables.set(it.key, it.value) + env.set(it.key, it.value) } when: - CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv())) + CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(env.getAll())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(getWorkspacePath()) def ciInfo = ciProviderInfo.buildCIInfo() def ciTagsProvider = ciTagsProvider() @@ -134,7 +124,7 @@ abstract class CITagsProviderTest extends Specification { def "test avoid setting local git info if remote commit does not match"() { setup: buildRemoteGitInfoMismatchLocalGit().each { - environmentVariables.set(it.key, it.value) + env.set(it.key, it.value) } when: @@ -142,7 +132,7 @@ abstract class CITagsProviderTest extends Specification { then: if (isCi()) { - CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv())) + CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(env.getAll())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(getWorkspacePath()) def ciInfo = ciProviderInfo.buildCIInfo() def tags = ciTagsProvider.getCiTags(ciInfo, PullRequestInfo.EMPTY) @@ -176,7 +166,7 @@ abstract class CITagsProviderTest extends Specification { GitInfoProvider gitInfoProvider = new GitInfoProvider() gitInfoProvider.registerGitInfoBuilder(new UserSuppliedGitInfoBuilder()) - gitInfoProvider.registerGitInfoBuilder(new CIProviderGitInfoBuilder(Config.get(), new CiEnvironmentImpl(System.getenv()))) + gitInfoProvider.registerGitInfoBuilder(new CIProviderGitInfoBuilder(Config.get(), new CiEnvironmentImpl(env.getAll()))) gitInfoProvider.registerGitInfoBuilder(new CILocalGitInfoBuilder(gitClientFactory, GIT_FOLDER_FOR_TESTS)) return new CITagsProvider(gitInfoProvider) } diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/GithubActionsInfoTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/GithubActionsInfoTest.groovy index 5475829870b..912b5201040 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/GithubActionsInfoTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/GithubActionsInfoTest.groovy @@ -33,11 +33,11 @@ class GithubActionsInfoTest extends CITagsProviderTest { def githubEvent = GithubActionsInfoTest.getResource("/ci/github-event.json") def githubEventPath = Paths.get(githubEvent.toURI()) - environmentVariables.set(GithubActionsInfo.GITHUB_BASE_REF, "base-ref") - environmentVariables.set(GithubActionsInfo.GITHUB_EVENT_PATH, githubEventPath.toString()) + env.set(GithubActionsInfo.GITHUB_BASE_REF, "base-ref") + env.set(GithubActionsInfo.GITHUB_EVENT_PATH, githubEventPath.toString()) when: - def pullRequestInfo = new GithubActionsInfo(new CiEnvironmentImpl(System.getenv())).buildPullRequestInfo() + def pullRequestInfo = new GithubActionsInfo(new CiEnvironmentImpl(env.getAll())).buildPullRequestInfo() then: pullRequestInfo.getBaseBranch() == "base-ref" diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/UnknownCIInfoTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/UnknownCIInfoTest.groovy index 22a7ce54825..652fecd470e 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/UnknownCIInfoTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/ci/UnknownCIInfoTest.groovy @@ -45,7 +45,7 @@ class UnknownCIInfoTest extends CITagsProviderTest { ] when: - CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(System.getenv())) + CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), GIT_FOLDER_FOR_TESTS, new CiEnvironmentImpl(env.getAll())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(workspaceForTests) def ciInfo = ciProviderInfo.buildCIInfo() def ciTagsProvider = ciTagsProvider() @@ -62,9 +62,9 @@ class UnknownCIInfoTest extends CITagsProviderTest { GitInfoProvider gitInfoProvider = new GitInfoProvider() gitInfoProvider.registerGitInfoBuilder(new UserSuppliedGitInfoBuilder()) - gitInfoProvider.registerGitInfoBuilder(new CIProviderGitInfoBuilder(Config.get(), new CiEnvironmentImpl(System.getenv()))) + gitInfoProvider.registerGitInfoBuilder(new CIProviderGitInfoBuilder(Config.get(), new CiEnvironmentImpl(env.getAll()))) gitInfoProvider.registerGitInfoBuilder(new CILocalGitInfoBuilder(gitClientFactory, "this-target-folder-does-not-exist")) - CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), "this-target-folder-does-not-exist", new CiEnvironmentImpl(System.getenv())) + CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(Config.get(), "this-target-folder-does-not-exist", new CiEnvironmentImpl(env.getAll())) def ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(workspaceForTests) def ciInfo = ciProviderInfo.buildCIInfo() diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/CIProviderGitInfoBuilderTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/CIProviderGitInfoBuilderTest.groovy index 1177e64183b..5e561c37cbb 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/CIProviderGitInfoBuilderTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/git/CIProviderGitInfoBuilderTest.groovy @@ -2,25 +2,19 @@ package datadog.trace.civisibility.git import datadog.trace.api.Config import datadog.trace.civisibility.ci.env.CiEnvironmentImpl -import org.junit.Rule -import org.junit.contrib.java.lang.system.EnvironmentVariables +import datadog.trace.test.util.ControllableEnvironmentVariables import spock.lang.Specification class CIProviderGitInfoBuilderTest extends Specification { + protected ControllableEnvironmentVariables env = ControllableEnvironmentVariables.setup() - @Rule - public final EnvironmentVariables environmentVariables = new EnvironmentVariables() - - def setup() { - // Clear all environment variables to avoid clashes between - // real CI/Git environment variables and the spec CI/Git - // environment variables. - environmentVariables.clear(System.getenv().keySet() as String[]) + void cleanup() { + env.clear() } def "test builds empty git info in an unknown repository"() { setup: - def builder = new CIProviderGitInfoBuilder(Config.get(), new CiEnvironmentImpl(System.getenv())) + def builder = new CIProviderGitInfoBuilder(Config.get(), new CiEnvironmentImpl(env.getAll())) when: def gitInfo = builder.build(null) diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerAgentTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerAgentTest.java index 24c29cb7bd6..d45fa5362ab 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerAgentTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/DebuggerAgentTest.java @@ -12,7 +12,6 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static utils.TestHelper.setEnvVar; import static utils.TestHelper.setFieldInConfig; import com.datadog.debugger.util.RemoteConfigHelper; @@ -22,6 +21,7 @@ import datadog.trace.api.Config; import datadog.trace.api.git.GitInfoProvider; import datadog.trace.bootstrap.instrumentation.api.Tags; +import datadog.trace.test.util.ControllableEnvironmentVariables; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -54,6 +54,8 @@ public class DebuggerAgentTest { final MockWebServer server = new MockWebServer(); HttpUrl url; + private ControllableEnvironmentVariables env = ControllableEnvironmentVariables.setup(); + private static void setFieldInContainerInfo( ContainerInfo containerInfo, String fieldName, Object value) { try { @@ -67,6 +69,7 @@ private static void setFieldInContainerInfo( @BeforeEach public void setUp() { + env.clear(); url = server.url(URL_PATH); } @@ -175,14 +178,14 @@ public void tags() { when(config.getGlobalTags()).thenReturn(globalTags); // set env vars now to be cached by GitInfoProvider GitInfoProvider.INSTANCE.invalidateCache(); - setEnvVar("DD_GIT_COMMIT_SHA", "sha1"); - setEnvVar("DD_GIT_REPOSITORY_URL", "http://github.com"); + env.set("DD_GIT_COMMIT_SHA", "sha1"); + env.set("DD_GIT_REPOSITORY_URL", "http://github.com"); String tags; try { tags = DebuggerAgent.getDefaultTagsMergedWithGlobalTags(config); } finally { - setEnvVar("DD_GIT_COMMIT_SHA", null); - setEnvVar("DD_GIT_REPOSITORY_URL", null); + env.set("DD_GIT_COMMIT_SHA", null); + env.set("DD_GIT_REPOSITORY_URL", null); GitInfoProvider.INSTANCE.invalidateCache(); } Map resultTags = new HashMap<>(); diff --git a/dd-java-agent/agent-debugger/src/test/java/utils/TestHelper.java b/dd-java-agent/agent-debugger/src/test/java/utils/TestHelper.java index 364bf4b10c9..2ee8b170cc6 100644 --- a/dd-java-agent/agent-debugger/src/test/java/utils/TestHelper.java +++ b/dd-java-agent/agent-debugger/src/test/java/utils/TestHelper.java @@ -9,7 +9,6 @@ import java.nio.file.Paths; import java.time.Duration; import java.util.List; -import java.util.Map; import java.util.function.BooleanSupplier; public class TestHelper { @@ -47,19 +46,4 @@ public static void assertWithTimeout(BooleanSupplier predicate, Duration timeout } assertTrue(predicate.getAsBoolean()); } - - public static void setEnvVar(String envName, String envValue) { - try { - Class classOfMap = System.getenv().getClass(); - Field field = classOfMap.getDeclaredField("m"); - field.setAccessible(true); - if (envValue == null) { - ((Map) field.get(System.getenv())).remove(envName); - } else { - ((Map) field.get(System.getenv())).put(envName, envValue); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } } 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 8e33c190f94..05bf54bb0e8 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 @@ -50,6 +50,7 @@ import datadog.trace.api.profiling.RecordingType; import datadog.trace.bootstrap.config.provider.ConfigProvider; import datadog.trace.relocate.api.IOLogger; +import datadog.trace.test.util.ControllableEnvironmentVariables; import datadog.trace.util.PidHelper; import delight.fileupload.FileUpload; import io.airlift.compress.zstd.ZstdInputStream; @@ -85,7 +86,6 @@ import org.apache.commons.fileupload.FileItem; import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -157,19 +157,9 @@ public class ProfileUploaderTest { private ProfileUploader uploader; - @BeforeAll - static void setUpAll() throws Exception { - Map env = System.getenv(); - - Field field = env.getClass().getDeclaredField("m"); - field.setAccessible(true); - - @SuppressWarnings("unchecked") - Map modifiableEnv = (Map) field.get(env); - // hard-coding the env variable here; we could theoretically make the field from ServerlessInfo - // public instead - modifiableEnv.put("AWS_LAMBDA_FUNCTION_NAME", FUNCTION_NAME); - } + @SuppressWarnings("unused") + private static final ControllableEnvironmentVariables ENV = + ControllableEnvironmentVariables.setup("AWS_LAMBDA_FUNCTION_NAME", FUNCTION_NAME); @BeforeEach public void setup() throws IOException { diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/ConfigResetTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/ConfigResetTest.groovy index 065c5c0a2d3..d0649db5008 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/ConfigResetTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/ConfigResetTest.groovy @@ -1,3 +1,4 @@ +import datadog.environment.EnvironmentVariables import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.Config import spock.lang.Shared @@ -19,7 +20,7 @@ class ConfigResetTest extends InstrumentationSpecification { static Object checkStaticAssertions() { assert System.getProperty("dd.trace.enabled") == null - assert System.getenv("DD_TRACE_ENABLED") == null + assert EnvironmentVariables.get("DD_TRACE_ENABLED") == null assert Config.get().isTraceEnabled() // Returning a new object so this can be used in field initializations @@ -152,14 +153,14 @@ class ConfigResetTest extends InstrumentationSpecification { injectEnvConfig("DD_TRACE_ENABLED", "true") then: - System.getenv("DD_TRACE_ENABLED") == "true" + EnvironmentVariables.get("DD_TRACE_ENABLED") == "true" Config.get().isTraceEnabled() when: injectEnvConfig("DD_TRACE_ENABLED", "false") then: - System.getenv("DD_TRACE_ENABLED") == "false" + EnvironmentVariables.get("DD_TRACE_ENABLED") == "false" !Config.get().isTraceEnabled() } @@ -171,14 +172,14 @@ class ConfigResetTest extends InstrumentationSpecification { injectEnvConfig("TRACE_ENABLED", "true") then: - System.getenv("DD_TRACE_ENABLED") == "true" + EnvironmentVariables.get("DD_TRACE_ENABLED") == "true" Config.get().isTraceEnabled() when: injectEnvConfig("TRACE_ENABLED", "false") then: - System.getenv("DD_TRACE_ENABLED") == "false" + EnvironmentVariables.get("DD_TRACE_ENABLED") == "false" !Config.get().isTraceEnabled() } @@ -190,28 +191,28 @@ class ConfigResetTest extends InstrumentationSpecification { injectEnvConfig("DD_TRACE_ENABLED", "false") then: - System.getenv("DD_TRACE_ENABLED") == "false" + EnvironmentVariables.get("DD_TRACE_ENABLED") == "false" !Config.get().isTraceEnabled() when: removeEnvConfig("DD_TRACE_ENABLED") then: - System.getenv("DD_TRACE_ENABLED") == null + EnvironmentVariables.get("DD_TRACE_ENABLED") == null Config.get().isTraceEnabled() when: injectEnvConfig("DD_TRACE_ENABLED", "false") then: - System.getenv("DD_TRACE_ENABLED") == "false" + EnvironmentVariables.get("DD_TRACE_ENABLED") == "false" !Config.get().isTraceEnabled() when: removeEnvConfig("TRACE_ENABLED") then: - System.getenv("DD_TRACE_ENABLED") == null + EnvironmentVariables.get("DD_TRACE_ENABLED") == null Config.get().isTraceEnabled() } } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/build.gradle b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/build.gradle index 291eb78aca0..1b6b655d99e 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/build.gradle +++ b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/build.gradle @@ -11,15 +11,24 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') test { - environment "_HANDLER", "Handler" + environment([ + "_HANDLER": "Handler", + "TEST_ENV_PROPAGATE_VARS": "_HANDLER" + ]) } forkedTest { - environment "_HANDLER", "Handler" + environment([ + "_HANDLER": "Handler", + "TEST_ENV_PROPAGATE_VARS": "_HANDLER" + ]) } latestDepTest { - environment "_HANDLER", "Handler" + environment([ + "_HANDLER": "Handler", + "TEST_ENV_PROPAGATE_VARS": "_HANDLER" + ]) } dependencies { diff --git a/dd-smoke-tests/concurrent/java-25/src/test/groovy/datadog/smoketest/concurrent/AbstractStructuredConcurrencyTest.groovy b/dd-smoke-tests/concurrent/java-25/src/test/groovy/datadog/smoketest/concurrent/AbstractStructuredConcurrencyTest.groovy index e1a476678fb..ba99ef0922b 100644 --- a/dd-smoke-tests/concurrent/java-25/src/test/groovy/datadog/smoketest/concurrent/AbstractStructuredConcurrencyTest.groovy +++ b/dd-smoke-tests/concurrent/java-25/src/test/groovy/datadog/smoketest/concurrent/AbstractStructuredConcurrencyTest.groovy @@ -1,5 +1,6 @@ package datadog.smoketest.concurrent +import datadog.environment.EnvironmentVariables import datadog.smoketest.AbstractSmokeTest import datadog.trace.test.agent.decoder.DecodedSpan import datadog.trace.test.agent.decoder.DecodedTrace @@ -17,7 +18,7 @@ abstract class AbstractStructuredConcurrencyTest extends AbstractSmokeTest { ProcessBuilder createProcessBuilder() { def jarPath = System.getProperty("datadog.smoketest.shadowJar.path") def command = new ArrayList() - command.add(Paths.get(System.getenv("JAVA_25_HOME"), "bin", "java").toString()) + command.add(Paths.get(EnvironmentVariables.get("JAVA_25_HOME"), "bin", "java").toString()) command.addAll(defaultJavaProperties) command.add("--enable-preview") command.add("-Ddd.trace.otel.enabled=true") diff --git a/dd-smoke-tests/datastreams/kafkaschemaregistry/src/main/java/datadog/smoketest/datastreams/kafkaschemaregistry/KafkaProducerWithSchemaRegistry.java b/dd-smoke-tests/datastreams/kafkaschemaregistry/src/main/java/datadog/smoketest/datastreams/kafkaschemaregistry/KafkaProducerWithSchemaRegistry.java index 5a9edd105b2..5e1f3859193 100644 --- a/dd-smoke-tests/datastreams/kafkaschemaregistry/src/main/java/datadog/smoketest/datastreams/kafkaschemaregistry/KafkaProducerWithSchemaRegistry.java +++ b/dd-smoke-tests/datastreams/kafkaschemaregistry/src/main/java/datadog/smoketest/datastreams/kafkaschemaregistry/KafkaProducerWithSchemaRegistry.java @@ -57,7 +57,7 @@ public static void produce() { MyMessage.newBuilder().setId("1").setValue("Hello from Protobuf!").build(); ProducerRecord record = - new ProducerRecord(topicName, "testkey", message); + new ProducerRecord<>(topicName, "testkey", message); producer.send(record); Thread.sleep(1500); log.info("produced message"); diff --git a/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/CodeHotspotsTest.java b/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/CodeHotspotsTest.java index e74c92847ad..af996b17dce 100644 --- a/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/CodeHotspotsTest.java +++ b/dd-smoke-tests/profiling-integration-tests/src/test/java/datadog/smoketest/CodeHotspotsTest.java @@ -11,6 +11,7 @@ import static org.openjdk.jmc.common.unit.UnitLookup.NUMBER; import static org.openjdk.jmc.common.unit.UnitLookup.PLAIN_TEXT; +import datadog.environment.EnvironmentVariables; import datadog.environment.OperatingSystem; import datadog.smoketest.profiling.CodeHotspotsApplication; import datadog.smoketest.profiling.GenerativeStackTraces; @@ -65,7 +66,7 @@ public final class CodeHotspotsTest { @BeforeAll static void setupAll() throws Exception { assumeFalse( - OperatingSystem.isMacOs() || System.getenv("TEST_LIBDDPROF") == null, + OperatingSystem.isMacOs() || EnvironmentVariables.get("TEST_LIBDDPROF") == null, "Test skipped. Set TEST_LIBDDPROF env variable to point to MacOS version of libjavaProfiler.so, and rerun."); Files.createDirectories(LOG_FILE_BASE); } diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 9dc9955fb6b..8a868ba5728 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -6,7 +6,6 @@ import datadog.trace.bootstrap.config.provider.ConfigConverter import datadog.trace.bootstrap.config.provider.ConfigProvider import datadog.trace.test.util.DDSpecification import datadog.trace.util.throwable.FatalAgentMisconfigurationError -import org.junit.Rule import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_ERROR_STATUSES import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_ERROR_STATUSES @@ -140,12 +139,7 @@ import static datadog.trace.api.config.TracerConfig.TRACE_X_DATADOG_TAGS_MAX_LEN import static datadog.trace.api.config.TracerConfig.WRITER_TYPE class ConfigTest extends DDSpecification { - - static final String PREFIX = "dd." - - @Rule - public final FixedCapturedEnvironment fixedCapturedEnvironment = new FixedCapturedEnvironment() - + private static final String PREFIX = "dd." private static final DD_API_KEY_ENV = "DD_API_KEY" private static final DD_SERVICE_NAME_ENV = "DD_SERVICE_NAME" private static final DD_TRACE_ENABLED_ENV = "DD_TRACE_ENABLED" @@ -179,6 +173,14 @@ class ConfigTest extends DDSpecification { private static final DD_LLMOBS_ML_APP_ENV = "DD_LLMOBS_ML_APP" private static final DD_LLMOBS_AGENTLESS_ENABLED_ENV = "DD_LLMOBS_AGENTLESS_ENABLED" + def setupSpec() { + ControllableCapturedEnvironment.useFixedEnv([:]) + } + + def setup() { + ControllableCapturedEnvironment.useFixedEnv([:]) + } + def "specify overrides via properties"() { setup: def prop = new Properties() @@ -795,6 +797,9 @@ class ConfigTest extends DDSpecification { } def "override null properties"() { + setup: + FixedCapturedEnvironment.useFixedEnv([:]) + when: def config = Config.get(null) @@ -830,15 +835,14 @@ class ConfigTest extends DDSpecification { def "captured env props override default props"() { setup: - def capturedEnv = new HashMap() - capturedEnv.put(SERVICE_NAME, "automatic service name") - fixedCapturedEnvironment.load(capturedEnv) + def capturedEnv = [(SERVICE_NAME): "test service name"] + FixedCapturedEnvironment.useFixedEnv(capturedEnv) when: def config = new Config() then: - config.serviceName == "automatic service name" + config.serviceName == "test service name" } def "specify props override captured env props"() { @@ -846,9 +850,8 @@ class ConfigTest extends DDSpecification { def prop = new Properties() prop.setProperty(SERVICE_NAME, "what actually wants") - def capturedEnv = new HashMap() - capturedEnv.put(SERVICE_NAME, "something else") - fixedCapturedEnvironment.load(capturedEnv) + def capturedEnv = [(SERVICE_NAME): "something else"] + FixedCapturedEnvironment.useFixedEnv(capturedEnv) when: def config = Config.get(prop) @@ -861,9 +864,8 @@ class ConfigTest extends DDSpecification { setup: System.setProperty(PREFIX + SERVICE_NAME, "what actually wants") - def capturedEnv = new HashMap() - capturedEnv.put(SERVICE_NAME, "something else") - fixedCapturedEnvironment.load(capturedEnv) + def capturedEnv = [(SERVICE_NAME): "something else"] + FixedCapturedEnvironment.useFixedEnv(capturedEnv) when: def config = new Config() @@ -876,9 +878,8 @@ class ConfigTest extends DDSpecification { setup: environmentVariables.set(DD_SERVICE_NAME_ENV, "what actually wants") - def capturedEnv = new HashMap() - capturedEnv.put(SERVICE_NAME, "something else") - fixedCapturedEnvironment.load(capturedEnv) + def capturedEnv = [(SERVICE_NAME): "something else"] + FixedCapturedEnvironment.useFixedEnv(capturedEnv) when: def config = new Config() @@ -1786,8 +1787,8 @@ class ConfigTest extends DDSpecification { then: //check that env wasn't set: - System.getenv(DD_ENV_ENV) == null - System.getenv(DD_VERSION_ENV) == null + environmentVariables.get(DD_ENV_ENV) == null + environmentVariables.get(DD_VERSION_ENV) == null //actual guard: config.mergedSpanTags == ["env": "production"] } @@ -1801,8 +1802,8 @@ class ConfigTest extends DDSpecification { then: //check that env wasn't set: - System.getenv(DD_ENV_ENV) == null - System.getenv(DD_VERSION_ENV) == null + environmentVariables.get(DD_ENV_ENV) == null + environmentVariables.get(DD_VERSION_ENV) == null //actual guard: config.mergedSpanTags == [(VERSION): "42"] } @@ -1815,7 +1816,7 @@ class ConfigTest extends DDSpecification { Config config = new Config() then: - System.getenv(DD_ENV_ENV) == null + environmentVariables.get(DD_ENV_ENV) == null config.mergedSpanTags.get("env") == null config.mergedSpanTags == [(VERSION): "3.2.1"] } @@ -2593,9 +2594,8 @@ class ConfigTest extends DDSpecification { setup: AgentArgsInjector.injectAgentArgsConfig([(PREFIX + SERVICE_NAME): "args service name"]) - def capturedEnv = new HashMap() - capturedEnv.put(SERVICE_NAME, "captured props service name") - fixedCapturedEnvironment.load(capturedEnv) + def capturedEnv = [(SERVICE_NAME): "captured props service name"] + FixedCapturedEnvironment.useFixedEnv(capturedEnv) when: def config = new Config() diff --git a/internal-api/src/test/groovy/datadog/trace/api/env/FixedCapturedEnvironment.java b/internal-api/src/test/groovy/datadog/trace/api/env/FixedCapturedEnvironment.java index 790d509f0e3..ab4f430a181 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/env/FixedCapturedEnvironment.java +++ b/internal-api/src/test/groovy/datadog/trace/api/env/FixedCapturedEnvironment.java @@ -1,26 +1,11 @@ package datadog.trace.api.env; -import java.util.Collections; import java.util.Map; -import org.junit.rules.ExternalResource; - -/** - * The {@code FixedCapturedEnvironment} rule cleans the {@code CapturedEnvironment} instance when - * the test starts. Additionally, this rule can be used to set fixed properties into that {@code - * CapturedEnvironment} instance. This is useful to be deterministic in those tests that are testing - * logic which interacts with {@code CapturedEnvironment} instance, because that object returns - * properties which are platform dependant (JDK, OS, etc...) - */ -public class FixedCapturedEnvironment extends ExternalResource { - - @Override - protected void before() throws Throwable { - // Clean CapturedEnvironment instance when test starts. - CapturedEnvironment.useFixedEnv(Collections.emptyMap()); - } +/** Helper class that has access to {@link CapturedEnvironment} */ +public class FixedCapturedEnvironment { /** Load properties instance into the {@code CapturedEnvironment} instance. */ - public void load(final Map properties) { + public static void useFixedEnv(final Map properties) { CapturedEnvironment.useFixedEnv(properties); } } diff --git a/internal-api/src/test/groovy/datadog/trace/api/git/UserSuppliedGitInfoBuilderTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/git/UserSuppliedGitInfoBuilderTest.groovy index 21ea13d5ed9..50f3be0a301 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/git/UserSuppliedGitInfoBuilderTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/git/UserSuppliedGitInfoBuilderTest.groovy @@ -6,12 +6,6 @@ import datadog.trace.test.util.DDSpecification import datadog.trace.util.ConfigStrings class UserSuppliedGitInfoBuilderTest extends DDSpecification { - - def setup() { - // Clear all environment variables to avoid clashes between - environmentVariables.clear(System.getenv().keySet() as String[]) - } - def "test no user supplied git info"() { when: def gitInfo = new UserSuppliedGitInfoBuilder().build(null) diff --git a/utils/config-utils/src/main/java/datadog/trace/api/env/CapturedEnvironment.java b/utils/config-utils/src/main/java/datadog/trace/api/env/CapturedEnvironment.java index 956db28c2de..7c4c3dcbe29 100644 --- a/utils/config-utils/src/main/java/datadog/trace/api/env/CapturedEnvironment.java +++ b/utils/config-utils/src/main/java/datadog/trace/api/env/CapturedEnvironment.java @@ -58,10 +58,7 @@ public ProcessInfo getProcessInfo() { // Testing purposes static void useFixedEnv(final Map props) { INSTANCE.properties.clear(); - - for (final Map.Entry entry : props.entrySet()) { - INSTANCE.properties.put(entry.getKey(), entry.getValue()); - } + INSTANCE.properties.putAll(props); } /** diff --git a/utils/test-utils/build.gradle.kts b/utils/test-utils/build.gradle.kts index 1299c1b62b3..5ddcf0b8dd1 100644 --- a/utils/test-utils/build.gradle.kts +++ b/utils/test-utils/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { api(libs.bytebuddy) api(libs.bytebuddyagent) - api(group = "com.github.stefanbirkner", name = "system-rules", version = "1.19.0") + api(project(":components:environment")) api(group = "commons-fileupload", name = "commons-fileupload", version = "1.5") compileOnly(libs.logback.core) diff --git a/utils/test-utils/src/main/groovy/datadog/trace/test/util/ControllableEnvironmentVariables.groovy b/utils/test-utils/src/main/groovy/datadog/trace/test/util/ControllableEnvironmentVariables.groovy new file mode 100644 index 00000000000..76487cb07f7 --- /dev/null +++ b/utils/test-utils/src/main/groovy/datadog/trace/test/util/ControllableEnvironmentVariables.groovy @@ -0,0 +1,51 @@ +package datadog.trace.test.util + +import datadog.environment.EnvironmentVariables + +class ControllableEnvironmentVariables extends EnvironmentVariables.EnvironmentVariablesProvider { + private Map env = new HashMap<>() + + ControllableEnvironmentVariables(String... kv) { + if (kv) { + for (int i = 0; i + 1 < kv.length; i += 2) { + env[kv[i]] = kv[i + 1] + } + } + } + + @Override + String get(String name) { + return env.get(name) + } + + @Override + Map getAll() { + return env + } + + void set(String name, String value) { + env.put(name, value) + } + + void removePrefixed(String prefix) { + env.keySet().removeAll { k -> k.startsWith(prefix) } + } + + void clear() { + env.clear() + } + + static ControllableEnvironmentVariables setup(String... kv) { + ControllableEnvironmentVariables provider = new ControllableEnvironmentVariables(kv) + EnvironmentVariables.provider = provider + + // Propagate specified environment variables to test environment. + System.getenv("TEST_ENV_PROPAGATE_VARS") + ?.split(',') + ?.each { envVar -> + provider[envVar] = System.getenv(envVar) + } + + return provider + } +} diff --git a/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy b/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy index 43693470451..1f7253a970c 100644 --- a/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy +++ b/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy @@ -1,7 +1,7 @@ package datadog.trace.test.util +import datadog.environment.EnvironmentVariables import de.thetaphi.forbiddenapis.SuppressForbidden -import org.junit.Rule import spock.lang.Shared import spock.lang.Specification @@ -34,12 +34,10 @@ abstract class DDSpecification extends Specification { private static isConfigInstanceModifiable = false static configModificationFailed = false - @Rule - public final ResetControllableEnvironmentVariables environmentVariables = new ResetControllableEnvironmentVariables() + @Shared + protected ControllableEnvironmentVariables environmentVariables = ControllableEnvironmentVariables.setup() - // Intentionally not using the RestoreSystemProperties @Rule because this needs to save properties - // in the BeforeClass stage instead of Before stage. Even manually calling before()/after - // doesn't work because the properties object is not cloned for each invocation + // Intentionally saving and restoring System properties. private static Properties originalSystemProperties protected boolean assertThreadsEachCleanup = true @@ -104,13 +102,11 @@ abstract class DDSpecification extends Specification { copy.putAll(originalSystemProperties) System.setProperties(copy) } - - environmentVariables?.reset() } void setupSpec() { assert !configModificationFailed: "Config class modification failed. Ensure all test classes extend DDSpecification" - assert System.getenv().findAll { it.key.startsWith("DD_") }.isEmpty() + assert EnvironmentVariables.getAll().findAll { it.key.startsWith("DD_") }.isEmpty() assert systemPropertiesExceptAllowed().findAll { it.key.toString().startsWith("dd.") }.isEmpty() assert contextTestingAllowed: "Context not ready for testing. Ensure all test classes extend DDSpecification" @@ -127,7 +123,7 @@ abstract class DDSpecification extends Specification { void cleanupSpec() { restoreProperties() - assert System.getenv().findAll { it.key.startsWith("DD_") }.isEmpty() + assert EnvironmentVariables.getAll().findAll { it.key.startsWith("DD_") }.isEmpty() assert systemPropertiesExceptAllowed().findAll { it.key.toString().startsWith("dd.") }.isEmpty() if (isConfigInstanceModifiable) { @@ -150,7 +146,7 @@ abstract class DDSpecification extends Specification { void setup() { restoreProperties() - assert System.getenv().findAll { it.key.startsWith("DD_") }.isEmpty() + assert EnvironmentVariables.getAll().findAll { it.key.startsWith("DD_") }.isEmpty() assert systemPropertiesExceptAllowed().findAll { it.key.toString().startsWith("dd.") }.isEmpty() if (isConfigInstanceModifiable) { @@ -159,9 +155,11 @@ abstract class DDSpecification extends Specification { } void cleanup() { + environmentVariables.clear() + restoreProperties() - assert System.getenv().findAll { it.key.startsWith("DD_") }.isEmpty() + assert EnvironmentVariables.getAll().findAll { it.key.startsWith("DD_") }.isEmpty() assert systemPropertiesExceptAllowed().findAll { it.key.toString().startsWith("dd.") }.isEmpty() if (isConfigInstanceModifiable) { @@ -232,7 +230,7 @@ abstract class DDSpecification extends Specification { checkConfigTransformation() String prefixedName = name.startsWith("DD_") || !addPrefix ? name : "DD_" + name - environmentVariables.clear(prefixedName) + environmentVariables.removePrefixed(prefixedName) rebuildConfig() } diff --git a/utils/test-utils/src/main/groovy/datadog/trace/test/util/ResetControllableEnvironmentVariables.groovy b/utils/test-utils/src/main/groovy/datadog/trace/test/util/ResetControllableEnvironmentVariables.groovy deleted file mode 100644 index 7175152664d..00000000000 --- a/utils/test-utils/src/main/groovy/datadog/trace/test/util/ResetControllableEnvironmentVariables.groovy +++ /dev/null @@ -1,24 +0,0 @@ -package datadog.trace.test.util - -import org.junit.contrib.java.lang.system.EnvironmentVariables -import org.junit.runner.Description -import org.junit.runners.model.Statement - -/** - * This rule is needed to surface the reset method. The base class runs after - * DDSpecification.cleanup() not allowing it to rebuild Config with the restored environment - */ -class ResetControllableEnvironmentVariables extends EnvironmentVariables { - def delegate - - @Override - Statement apply(Statement base, Description description) { - delegate = super.apply(base, description) - - return delegate - } - - void reset() { - delegate?.restoreOriginalVariables() - } -} From 2b8305ec6fb17aae57fd4234e572dfd1c0551aff Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Mon, 22 Sep 2025 15:18:04 -0400 Subject: [PATCH 20/41] WIP. --- .../aws-java-lambda-handler-1.2/build.gradle | 21 ------------------- .../LambdaHandlerInstrumentationTest.groovy | 6 ++++++ .../datadog/trace/api/ConfigTest.groovy | 9 +------- .../trace/test/util/DDSpecification.groovy | 2 +- 4 files changed, 8 insertions(+), 30 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/build.gradle b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/build.gradle index 1b6b655d99e..0eea7cd0b7f 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/build.gradle +++ b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/build.gradle @@ -10,27 +10,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') -test { - environment([ - "_HANDLER": "Handler", - "TEST_ENV_PROPAGATE_VARS": "_HANDLER" - ]) -} - -forkedTest { - environment([ - "_HANDLER": "Handler", - "TEST_ENV_PROPAGATE_VARS": "_HANDLER" - ]) -} - -latestDepTest { - environment([ - "_HANDLER": "Handler", - "TEST_ENV_PROPAGATE_VARS": "_HANDLER" - ]) -} - dependencies { compileOnly group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.1' testImplementation group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.1' diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/LambdaHandlerInstrumentationTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/LambdaHandlerInstrumentationTest.groovy index 4efa77ff176..78314ada2da 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/LambdaHandlerInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/LambdaHandlerInstrumentationTest.groovy @@ -5,6 +5,12 @@ import com.amazonaws.services.lambda.runtime.Context abstract class LambdaHandlerInstrumentationTest extends VersionedNamingTestBase { def requestId = "test-request-id" + // Must set this env var before the Datadog integration is initialized. + // If present at load time, the integration auto-enables. + static { + environmentVariables.set("_HANDLER", "Handler") + } + @Override String service() { null diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 8a868ba5728..2d5b1518f99 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -173,12 +173,8 @@ class ConfigTest extends DDSpecification { private static final DD_LLMOBS_ML_APP_ENV = "DD_LLMOBS_ML_APP" private static final DD_LLMOBS_AGENTLESS_ENABLED_ENV = "DD_LLMOBS_AGENTLESS_ENABLED" - def setupSpec() { - ControllableCapturedEnvironment.useFixedEnv([:]) - } - def setup() { - ControllableCapturedEnvironment.useFixedEnv([:]) + FixedCapturedEnvironment.useFixedEnv([:]) } def "specify overrides via properties"() { @@ -797,9 +793,6 @@ class ConfigTest extends DDSpecification { } def "override null properties"() { - setup: - FixedCapturedEnvironment.useFixedEnv([:]) - when: def config = Config.get(null) diff --git a/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy b/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy index 1f7253a970c..7b2ee0f2c27 100644 --- a/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy +++ b/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy @@ -35,7 +35,7 @@ abstract class DDSpecification extends Specification { static configModificationFailed = false @Shared - protected ControllableEnvironmentVariables environmentVariables = ControllableEnvironmentVariables.setup() + protected static ControllableEnvironmentVariables environmentVariables = ControllableEnvironmentVariables.setup() // Intentionally saving and restoring System properties. private static Properties originalSystemProperties From 0969a7dd47616dc6c58b8e1fa0431b47bd6543f4 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 18 Sep 2025 12:12:57 -0700 Subject: [PATCH 21/41] adding supported-configurations.json file --- .../resources/supported-configurations.json | 2050 +++++++++++++++++ 1 file changed, 2050 insertions(+) create mode 100644 utils/config-utils/src/main/resources/supported-configurations.json diff --git a/utils/config-utils/src/main/resources/supported-configurations.json b/utils/config-utils/src/main/resources/supported-configurations.json new file mode 100644 index 00000000000..725fef3703e --- /dev/null +++ b/utils/config-utils/src/main/resources/supported-configurations.json @@ -0,0 +1,2050 @@ +{ + "supportedConfigurations": { + "DD_AAS_JAVA_EXTENSION_VERSION": ["A"], + "DD_ACTION_EXECUTION_ID": ["A"], + "DD_ADD_SPAN_POINTERS": ["A"], + "DD_AGENTLESS_LOG_SUBMISSION_ENABLED": ["A"], + "DD_AGENTLESS_LOG_SUBMISSION_LEVEL": ["A"], + "DD_AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE": ["A"], + "DD_AGENTLESS_LOG_SUBMISSION_URL": ["A"], + "DD_AGENT_HOST": ["A"], + "DD_AGENT_PORT": ["A"], + "DD_API_KEY": ["A"], + "DD_API_KEY_FILE": ["A"], + "DD_API_SECURITY_ENABLED": ["A"], + "DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED": ["A"], + "DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT": ["A"], + "DD_API_SECURITY_SAMPLE_DELAY": ["A"], + "DD_APM_TRACING_ENABLED": ["A"], + "DD_APPLICATION_KEY": ["A"], + "DD_APPLICATION_KEY_FILE": ["A"], + "DD_APP_CUSTOMLOGMANAGER": ["A"], + "DD_APP_CUSTOMJMXBUILDER": ["A"], + "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING": ["A"], + "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE": ["A"], + "DD_APPSEC_COLLECT_ALL_HEADERS": ["A"], + "DD_APPSEC_ENABLED": ["A"], + "DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED": ["A"], + "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML": ["A"], + "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON": ["A"], + "DD_APPSEC_IPHEADER": ["A"], + "DD_APPSEC_MAX_COLLECTED_HEADERS": ["A"], + "DD_APPSEC_MAX_STACKTRACES": ["A"], + "DD_APPSEC_MAX_STACKTRACE_DEPTH": ["A"], + "DD_APPSEC_MAX_STACK_TRACES": ["A"], + "DD_APPSEC_MAX_STACK_TRACE_DEPTH": ["A"], + "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP": ["A"], + "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP": ["A"], + "DD_APPSEC_RASP_COLLECT_REQUEST_BODY": ["A"], + "DD_APPSEC_RASP_ENABLED": ["A"], + "DD_APPSEC_REPORTING_INBAND": ["A"], + "DD_APPSEC_REPORT_TIMEOUT": ["A"], + "DD_APPSEC_RULES": ["A"], + "DD_APPSEC_SCA_ENABLED": ["A"], + "DD_APPSEC_STACKTRACE_ENABLED": ["A"], + "DD_APPSEC_STACK_TRACE_ENABLED": ["A"], + "DD_APPSEC_TRACE_RATE_LIMIT": ["A"], + "DD_APPSEC_WAF_METRICS": ["A"], + "DD_APPSEC_WAF_TIMEOUT": ["A"], + "DD_AWS_PROPAGATION_ENABLED": ["A"], + "DD_AWS_SDK_PROPAGATION_ENABLED": ["A"], + "DD_AZURE_APP_SERVICES": ["A"], + "DD_CIVISIBILITY_ADDITIONAL_CHILD_PROCESS_JVM_ARGS": ["A"], + "DD_CIVISIBILITY_AGENTLESS_ENABLED": ["A"], + "DD_CIVISIBILITY_AGENTLESS_URL": ["A"], + "DD_CIVISIBILITY_AGENT_JAR_URI": ["A"], + "DD_CIVISIBILITY_AUTO_CONFIGURATION_ENABLED": ["A"], + "DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER": ["A"], + "DD_CIVISIBILITY_BACKEND_API_TIMEOUT_MILLIS": ["A"], + "DD_CIVISIBILITY_BUILD_INSTRUMENTATION_ENABLED": ["A"], + "DD_CIVISIBILITY_CIPROVIDER_INTEGRATION_ENABLED": ["A"], + "DD_CIVISIBILITY_CODE_COVERAGE_ENABLED": ["A"], + "DD_CIVISIBILITY_CODE_COVERAGE_EXCLUDES": ["A"], + "DD_CIVISIBILITY_CODE_COVERAGE_INCLUDES": ["A"], + "DD_CIVISIBILITY_CODE_COVERAGE_LINES_ENABLED": ["A"], + "DD_CIVISIBILITY_CODE_COVERAGE_REPORT_DUMP_DIR": ["A"], + "DD_CIVISIBILITY_CODE_COVERAGE_ROOT_PACKAGES_LIMIT": ["A"], + "DD_CIVISIBILITY_COMPILER_PLUGIN_AUTO_CONFIGURATION_ENABLED": ["A"], + "DD_CIVISIBILITY_COMPILER_PLUGIN_VERSION": ["A"], + "DD_CIVISIBILITY_DEBUG_PORT": ["A"], + "DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED": ["A"], + "DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_LOWER_LIMIT": ["A"], + "DD_CIVISIBILITY_ENABLED": ["A"], + "DD_CIVISIBILITY_EXECUTION_SETTINGS_CACHE_SIZE": ["A"], + "DD_CIVISIBILITY_FLAKY_RETRY_COUNT": ["A"], + "DD_CIVISIBILITY_FLAKY_RETRY_ENABLED": ["A"], + "DD_CIVISIBILITY_FLAKY_RETRY_ONLY_KNOWN_FLAKES": ["A"], + "DD_CIVISIBILITY_GIT_CLIENT_ENABLED": ["A"], + "DD_CIVISIBILITY_GIT_COMMAND_TIMEOUT_MILLIS": ["A"], + "DD_CIVISIBILITY_GIT_REMOTE_NAME": ["A"], + "DD_CIVISIBILITY_GIT_UNSHALLOW_DEFER": ["A"], + "DD_CIVISIBILITY_GIT_UNSHALLOW_ENABLED": ["A"], + "DD_CIVISIBILITY_GIT_UPLOAD_ENABLED": ["A"], + "DD_CIVISIBILITY_GIT_UPLOAD_TIMEOUT_MILLIS": ["A"], + "DD_CIVISIBILITY_GRADLE_SOURCESETS": ["A"], + "DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED": ["A"], + "DD_CIVISIBILITY_INJECTED_TRACER_VERSION": ["A"], + "DD_CIVISIBILITY_ITR_ENABLED": ["A"], + "DD_CIVISIBILITY_JACOCO_PLUGIN_VERSION": ["A"], + "DD_CIVISIBILITY_JVM_INFO_CACHE_SIZE": ["A"], + "DD_CIVISIBILITY_KNOWN_TESTS_REQUEST_ENABLED": ["A"], + "DD_CIVISIBILITY_MODULE_NAME": ["A"], + "DD_CIVISIBILITY_REMOTE_ENV_VARS_PROVIDER_KEY": ["A"], + "DD_CIVISIBILITY_REMOTE_ENV_VARS_PROVIDER_URL": ["A"], + "DD_CIVISIBILITY_REPO_INDEX_DUPLICATE_KEY_CHECK_ENABLED": ["A"], + "DD_CIVISIBILITY_REPO_INDEX_FOLLOW_SYMLINKS": ["A"], + "DD_CIVISIBILITY_RESOURCE_FOLDER_NAMES": ["A"], + "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS": ["A"], + "DD_CIVISIBILITY_SCALATEST_FORK_MONITOR_ENABLED": ["A"], + "DD_CIVISIBILITY_SIGNAL_CLIENT_TIMEOUT_MILLIS": ["A"], + "DD_CIVISIBILITY_SIGNAL_SERVER_HOST": ["A"], + "DD_CIVISIBILITY_SIGNAL_SERVER_PORT": ["A"], + "DD_CIVISIBILITY_SOURCE_DATA_ENABLED": ["A"], + "DD_CIVISIBILITY_TELEMETRY_ENABLED": ["A"], + "DD_CIVISIBILITY_TEST_COMMAND": ["A"], + "DD_CIVISIBILITY_TEST_ORDER": ["A"], + "DD_CIVISIBILITY_TEST_SKIPPING_ENABLED": ["A"], + "DD_CIVISIBILITY_TOTAL_FLAKY_RETRY_COUNT": ["A"], + "DD_CIVISIBILITY_TRACE_SANITATION_ENABLED": ["A"], + "DD_CODE_ORIGIN_FOR_SPANS_ENABLED": ["A"], + "DD_CODE_ORIGIN_MAX_USER_FRAMES": ["A"], + "DD_CONFIG_INVERSION_STRICT": ["A"], + "DD_CRASHTRACKING_AGENTLESS": ["A"], + "DD_CRASHTRACKING_DEBUG_AUTOCONFIG_ENABLE": ["A"], + "DD_CRASHTRACKING_DEBUG_START_FORCE_FIRST": ["A"], + "DD_CRASHTRACKING_ENABLED": ["A"], + "DD_CRASHTRACKING_PROXY_HOST": ["A"], + "DD_CRASHTRACKING_PROXY_PASSWORD": ["A"], + "DD_CRASHTRACKING_PROXY_PORT": ["A"], + "DD_CRASHTRACKING_PROXY_USERNAME": ["A"], + "DD_CRASHTRACKING_TAGS": ["A"], + "DD_CRASHTRACKING_UPLOAD_TIMEOUT": ["A"], + "DD_CUSTOM_TRACE_ID": ["A"], + "DD_CWS_ENABLED": ["A"], + "DD_CWS_TLS_REFRESH": ["A"], + "DD_DATA_JOBS_COMMAND_PATTERN": ["A"], + "DD_DATA_JOBS_ENABLED": ["A"], + "DD_DATA_JOBS_OPENLINEAGE_ENABLED": ["A"], + "DD_DATA_STREAMS_BUCKET_DURATION_SECONDS": ["A"], + "DD_DATA_STREAMS_ENABLED": ["A"], + "DD_DBM_PROPAGATION_MODE": ["A"], + "DD_DBM_TRACE_PREPARED_STATEMENTS": ["A"], + "DD_DISTRIBUTED_DEBUGGER_ENABLED": ["A"], + "DD_DOGSTATSD_ARGS": ["A"], + "DD_DOGSTATSD_HOST": ["A"], + "DD_DOGSTATSD_PATH": ["A"], + "DD_DOGSTATSD_PIPE_NAME": ["A"], + "DD_DOGSTATSD_PORT": ["A"], + "DD_DOGSTATSD_START_DELAY": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_CLASSFILE_DUMP_ENABLED": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_DIAGNOSTICS_INTERVAL": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_ENABLED": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_EXCLUDE_FILES": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_INCLUDE_FILES": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_INSTRUMENT_THE_WORLD": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_LOCALVAR_HOISTING_LEVEL": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_MAX_PAYLOAD_SIZE": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_METRICS_ENABLED": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_POLL_INTERVAL": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_REDACTED_TYPES": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_SNAPSHOT_URL": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_SOURCE_FILE_TRACKING_ENABLED": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_BATCH_SIZE": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_TIMEOUT": ["A"], + "DD_DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE": ["A"], + "DD_ENV": ["A"], + "DD_EXCEPTION_DEBUGGING_ENABLED": ["A"], + "DD_EXCEPTION_REPLAY_CAPTURE_INTERMEDIATE_SPANS_ENABLED": ["A"], + "DD_EXCEPTION_REPLAY_CAPTURE_INTERVAL_SECONDS": ["A"], + "DD_EXCEPTION_REPLAY_CAPTURE_MAX_FRAMES": ["A"], + "DD_EXCEPTION_REPLAY_ENABLED": ["A"], + "DD_EXCEPTION_REPLAY_MAX_EXCEPTION_ANALYSIS_LIMIT": ["A"], + "DD_EXCEPTION_REPLAY_MAX_FRAMES_TO_CAPTURE": ["A"], + "DD_EXPERIMENTAL_API_SECURITY_ENABLED": ["A"], + "DD_EXPERIMENTAL_DEFER_INTEGRATIONS_UNTIL": ["A"], + "DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED": ["A"], + "DD_GIT_BRANCH": ["A"], + "DD_GIT_COMMIT_AUTHOR_DATE": ["A"], + "DD_GIT_COMMIT_AUTHOR_EMAIL": ["A"], + "DD_GIT_COMMIT_AUTHOR_NAME": ["A"], + "DD_GIT_COMMIT_COMMITTER_DATE": ["A"], + "DD_GIT_COMMIT_COMMITTER_EMAIL": ["A"], + "DD_GIT_COMMIT_COMMITTER_NAME": ["A"], + "DD_GIT_COMMIT_HEAD_SHA": ["A"], + "DD_GIT_COMMIT_MESSAGE": ["A"], + "DD_GIT_COMMIT_SHA": ["A"], + "DD_GIT_PULL_REQUEST_BASE_BRANCH": ["A"], + "DD_GIT_PULL_REQUEST_BASE_BRANCH_SHA": ["A"], + "DD_GIT_REPOSITORY_URL": ["A"], + "DD_GIT_TAG": ["A"], + "DD_GRPC_CLIENT_ERROR_STATUSES": ["A"], + "DD_GRPC_SERVER_ERROR_STATUSES": ["A"], + "DD_HTTP_CLIENT_ERROR_STATUSES": ["A"], + "DD_HTTP_CLIENT_TAG_HEADERS": ["A"], + "DD_HTTP_CLIENT_TAG_QUERY_STRING": ["A"], + "DD_HTTP_SERVER_DECODED_RESOURCE_PRESERVE_SPACES": ["A"], + "DD_HTTP_SERVER_ERROR_STATUSES": ["A"], + "DD_HTTP_SERVER_RAW_QUERY_STRING": ["A"], + "DD_HTTP_SERVER_RAW_RESOURCE": ["A"], + "DD_HTTP_SERVER_ROUTE_BASED_NAMING": ["A"], + "DD_HTTP_SERVER_TAG_QUERY_STRING": ["A"], + "DD_HYSTRIX_MEASURED_ENABLED": ["A"], + "DD_HYSTRIX_TAGS_ENABLED": ["A"], + "DD_IAST_ANONYMOUS_CLASSES_ENABLED": ["A"], + "DD_IAST_CONTEXT_MODE": ["A"], + "DD_IAST_DB_ROWS_TO_TAINT": ["A"], + "DD_IAST_DEBUG_ENABLED": ["A"], + "DD_IAST_DEDUPLICATION_ENABLED": ["A"], + "DD_IAST_DETECTION_MODE": ["A"], + "DD_IAST_ENABLED": ["A"], + "DD_IAST_EXPERIMENTAL_PROPAGATION_ENABLED": ["A"], + "DD_IAST_HARDCODED_SECRET_ENABLED": ["A"], + "DD_IAST_MAX_CONCURRENT_REQUESTS": ["A"], + "DD_IAST_MAX_RANGE_COUNT": ["A"], + "DD_IAST_REDACTION_ENABLED": ["A"], + "DD_IAST_REDACTION_NAME_PATTERN": ["A"], + "DD_IAST_REDACTION_VALUE_PATTERN": ["A"], + "DD_IAST_REQUEST_SAMPLING": ["A"], + "DD_IAST_SECURITY_CONTROLS_CONFIGURATION": ["A"], + "DD_IAST_SOURCE_MAPPING_ENABLED": ["A"], + "DD_IAST_SOURCE_MAPPING_MAX_SIZE": ["A"], + "DD_IAST_STACKTRACE_ENABLED": ["A"], + "DD_IAST_STACKTRACE_LEAK_SUPPRESS": ["A"], + "DD_IAST_STACK_TRACE_ENABLED": ["A"], + "DD_IAST_STACK_TRACE_LEAK_SUPPRESS": ["A"], + "DD_IAST_TELEMETRY_VERBOSITY": ["A"], + "DD_IAST_TRUNCATION_MAX_VALUE_LENGTH": ["A"], + "DD_IAST_VULNERABILITIES_PER_REQUEST": ["A"], + "DD_IAST_WEAK_CIPHER_ALGORITHMS": ["A"], + "DD_IAST_WEAK_HASH_ALGORITHMS": ["A"], + "DD_ID_GENERATION_STRATEGY": ["A"], + "DD_IGNITE_CACHE_INCLUDE_KEYS": ["A"], + "DD_INJECTION_ENABLED": ["A"], + "DD_INJECT_FORCE": ["A"], + "DD_INSTRUMENTATION_CONFIG_ID": ["A"], + "DD_INSTRUMENTATION_INSTALL_ID": ["A"], + "DD_INSTRUMENTATION_INSTALL_TIME": ["A"], + "DD_INSTRUMENTATION_INSTALL_TYPE": ["A"], + "DD_INSTRUMENTATION_SOURCE": ["A"], + "DD_INSTRUMENTATION_TELEMETRY_ENABLED": ["A"], + "DD_INTEGRATIONS_ENABLED": ["A"], + "DD_INTEGRATION_JUNIT_ENABLED": ["A"], + "DD_INTEGRATION_SYNAPSE_LEGACY_OPERATION_NAME": ["A"], + "DD_INTEGRATION_TESTNG_ENABLED": ["A"], + "DD_INTERNAL_EXCEPTION_REPLAY_ONLY_LOCAL_ROOT": ["A"], + "DD_INTERNAL_FORCE_SYMBOL_DATABASE_UPLOAD": ["A"], + "DD_JDK_SOCKET_ENABLED": ["A"], + "DD_JMS_PROPAGATION_DISABLED_QUEUES": ["A"], + "DD_JMS_PROPAGATION_DISABLED_TOPICS": ["A"], + "DD_JMS_PROPAGATION_ENABLED": ["A"], + "DD_JMS_UNACKNOWLEDGED_MAX_AGE": ["A"], + "DD_JMXFETCH_CHECK_PERIOD": ["A"], + "DD_JMXFETCH_CONFIG": ["A"], + "DD_JMXFETCH_CONFIG_DIR": ["A"], + "DD_JMXFETCH_ENABLED": ["A"], + "DD_JMXFETCH_INITIAL_REFRESH_BEANS_PERIOD": ["A"], + "DD_JMXFETCH_METRICS_CONFIGS": ["A"], + "DD_JMXFETCH_MULTIPLE_RUNTIME_SERVICES_ENABLED": ["A"], + "DD_JMXFETCH_MULTIPLE_RUNTIME_SERVICES_LIMIT": ["A"], + "DD_JMXFETCH_REFRESH_BEANS_PERIOD": ["A"], + "DD_JMXFETCH_START_DELAY": ["A"], + "DD_JMXFETCH_STATSD_HOST": ["A"], + "DD_JMXFETCH_STATSD_PORT": ["A"], + "DD_KAFKA_CLIENT_BASE64_DECODING_ENABLED": ["A"], + "DD_KAFKA_CLIENT_PROPAGATION_DISABLED_TOPICS": ["A"], + "DD_KAFKA_CLIENT_PROPAGATION_ENABLED": ["A"], + "DD_KAFKA_PROPAGATION_ENABLED": ["A"], + "DD_LLMOBS_AGENTLESS_ENABLED": ["A"], + "DD_LLMOBS_ENABLED": ["A"], + "DD_LLMOBS_ML_APP": ["A"], + "DD_LOGS_INJECTION": ["A"], + "DD_LOGS_INJECTION_ENABLED": ["A"], + "DD_LOG_LEVEL": ["A"], + "DD_MEASURE_METHODS": ["A"], + "DD_MESSAGE_BROKER_SPLIT_BY_DESTINATION": ["A"], + "DD_OBFUSCATION_QUERY_STRING_REGEXP": ["A"], + "DD_OPTIMIZED_MAP_ENABLED": ["A"], + "DD_PIPELINE_EXECUTION_ID": ["A"], + "DD_PRIMARY_TAG": ["A"], + "DD_PRIORITIZATION_TYPE": ["A"], + "DD_PRIORITY_SAMPLING": ["A"], + "DD_PRIORITY_SAMPLING_FORCE": ["A"], + "DD_PROFILING_AGENTLESS": ["A"], + "DD_PROFILING_ALLOCATION_ENABLED": ["A"], + "DD_PROFILING_APIKEY": ["A"], + "DD_PROFILING_APIKEY_FILE": ["A"], + "DD_PROFILING_API_KEY": ["A"], + "DD_PROFILING_API_KEY_FILE": ["A"], + "DD_PROFILING_ASYNC_ALLOC_INTERVAL": ["A"], + "DD_PROFILING_ASYNC_CPU_ENABLED": ["A"], + "DD_PROFILING_ASYNC_CPU_INTERVAL_MS": ["A"], + "DD_PROFILING_ASYNC_CSTACK": ["A"], + "DD_PROFILING_ASYNC_DEBUG_LIB": ["A"], + "DD_PROFILING_ASYNC_LINENUMBERS": ["A"], + "DD_PROFILING_ASYNC_LIVEHEAP_CAPACITY": ["A"], + "DD_PROFILING_ASYNC_LIVEHEAP_ENABLED": ["A"], + "DD_PROFILING_ASYNC_LIVEHEAP_INTERVAL": ["A"], + "DD_PROFILING_ASYNC_LIVEHEAP_SAMPLE_PERCENT": ["A"], + "DD_PROFILING_ASYNC_LOGLEVEL": ["A"], + "DD_PROFILING_ASYNC_SAFEMODE": ["A"], + "DD_PROFILING_ASYNC_WALL_COLLAPSING": ["A"], + "DD_PROFILING_ASYNC_WALL_CONTEXT_FILTER": ["A"], + "DD_PROFILING_ASYNC_WALL_ENABLED": ["A"], + "DD_PROFILING_ASYNC_WALL_INTERVAL_MS": ["A"], + "DD_PROFILING_AUXILIARY": ["A"], + "DD_PROFILING_BACKPRESSURE_SAMPLE_LIMIT": ["A"], + "DD_PROFILING_BACKPRESSURE_SAMPLING_ENABLED": ["A"], + "DD_PROFILING_CONTEXT_ATTRIBUTES": ["A"], + "DD_PROFILING_CONTEXT_ATTRIBUTES_RESOURCE_NAME_ENABLED": ["A"], + "DD_PROFILING_CONTEXT_ATTRIBUTES_SPAN_NAME_ENABLED": ["A"], + "DD_PROFILING_DDPROF_ALLOC_ENABLED": ["A"], + "DD_PROFILING_DDPROF_ALLOC_INTERVAL": ["A"], + "DD_PROFILING_DDPROF_CPU_ENABLED": ["A"], + "DD_PROFILING_DDPROF_CPU_INTERVAL_MS": ["A"], + "DD_PROFILING_DDPROF_CSTACK": ["A"], + "DD_PROFILING_DDPROF_DEBUG_LIB": ["A"], + "DD_PROFILING_DDPROF_ENABLED": ["A"], + "DD_PROFILING_DDPROF_LINENUMBERS": ["A"], + "DD_PROFILING_DDPROF_LIVEHEAP_CAPACITY": ["A"], + "DD_PROFILING_DDPROF_LIVEHEAP_ENABLED": ["A"], + "DD_PROFILING_DDPROF_LIVEHEAP_INTERVAL": ["A"], + "DD_PROFILING_DDPROF_LIVEHEAP_SAMPLE_PERCENT": ["A"], + "DD_PROFILING_DDPROF_LIVEHEAP_TRACK_SIZE_ENABLED": ["A"], + "DD_PROFILING_DDPROF_LOGLEVEL": ["A"], + "DD_PROFILING_DDPROF_MEMLEAK_CAPACITY": ["A"], + "DD_PROFILING_DDPROF_MEMLEAK_ENABLED": ["A"], + "DD_PROFILING_DDPROF_MEMLEAK_INTERVAL": ["A"], + "DD_PROFILING_DDPROF_SAFEMODE": ["A"], + "DD_PROFILING_DDPROF_SCRATCH": ["A"], + "DD_PROFILING_DDPROF_STACKDEPTH": ["A"], + "DD_PROFILING_DDPROF_WALL_COLLAPSING": ["A"], + "DD_PROFILING_DDPROF_WALL_CONTEXT_FILTER": ["A"], + "DD_PROFILING_DDPROF_WALL_ENABLED": ["A"], + "DD_PROFILING_DDPROF_WALL_INTERVAL_MS": ["A"], + "DD_PROFILING_DEBUG_DUMP_PATH": ["A"], + "DD_PROFILING_DEBUG_JFR_DISABLED": ["A"], + "DD_PROFILING_DEBUG_UPLOAD_COMPRESSION": ["A"], + "DD_PROFILING_DETAILED_DEBUG_LOGGING": ["A"], + "DD_PROFILING_DIRECTALLOCATION_ENABLED": ["A"], + "DD_PROFILING_DIRECT_ALLOCATION_SAMPLE_LIMIT": ["A"], + "DD_PROFILING_DISABLED_EVENTS": ["A"], + "DD_PROFILING_ENABLED": ["A"], + "DD_PROFILING_ENABLED_EVENTS": ["A"], + "DD_PROFILING_ENDPOINT_COLLECTION_ENABLED": ["A"], + "DD_PROFILING_EXCEPTION_HISTOGRAM_MAX_COLLECTION_SIZE": ["A"], + "DD_PROFILING_EXCEPTION_HISTOGRAM_TOP_ITEMS": ["A"], + "DD_PROFILING_EXCEPTION_RECORD_MESSAGE": ["A"], + "DD_PROFILING_EXCEPTION_SAMPLE_LIMIT": ["A"], + "DD_PROFILING_EXCLUDE_AGENT_THREADS": ["A"], + "DD_PROFILING_EXPERIMENTAL_ASYNC_SCHEDULING_EVENT": ["A"], + "DD_PROFILING_EXPERIMENTAL_ASYNC_SCHEDULING_EVENT_INTERVAL": ["A"], + "DD_PROFILING_EXPERIMENTAL_ASYNC_WALL_JVMTI": ["A"], + "DD_PROFILING_EXPERIMENTAL_DDPROF_SCHEDULING_EVENT": ["A"], + "DD_PROFILING_EXPERIMENTAL_DDPROF_SCHEDULING_EVENT_INTERVAL": ["A"], + "DD_PROFILING_EXPERIMENTAL_DDPROF_WALL_JVMTI": ["A"], + "DD_PROFILING_HEAP_ENABLED": ["A"], + "DD_PROFILING_HEAP_HISTOGRAM_ENABLED": ["A"], + "DD_PROFILING_HEAP_HISTOGRAM_MODE": ["A"], + "DD_PROFILING_HEAP_TRACK_GENERATIONS": ["A"], + "DD_PROFILING_HOTSPOTS_ENABLED": ["A"], + "DD_PROFILING_JFR_REPOSITORY_BASE": ["A"], + "DD_PROFILING_JFR_REPOSITORY_MAXSIZE": ["A"], + "DD_PROFILING_JFR_TEMPLATE_OVERRIDE_FILE": ["A"], + "DD_PROFILING_PROXY_HOST": ["A"], + "DD_PROFILING_PROXY_PASSWORD": ["A"], + "DD_PROFILING_PROXY_PORT": ["A"], + "DD_PROFILING_PROXY_USERNAME": ["A"], + "DD_PROFILING_QUEUEING_TIME_ENABLED": ["A"], + "DD_PROFILING_QUEUEING_TIME_THRESHOLD_MILLIS": ["A"], + "DD_PROFILING_SMAP_AGGREGATION_ENABLED": ["A"], + "DD_PROFILING_SMAP_COLLECTION_ENABLED": ["A"], + "DD_PROFILING_STACKDEPTH": ["A"], + "DD_PROFILING_START_DELAY": ["A"], + "DD_PROFILING_START_FORCE_FIRST": ["A"], + "DD_PROFILING_TAGS": ["A"], + "DD_PROFILING_TEMPDIR": ["A"], + "DD_PROFILING_TIMELINE_EVENTS_ENABLED": ["A"], + "DD_PROFILING_ULTRA_MINIMAL": ["A"], + "DD_PROFILING_UPLOAD_COMPRESSION": ["A"], + "DD_PROFILING_UPLOAD_PERIOD": ["A"], + "DD_PROFILING_UPLOAD_SUMMARY_ON_413": ["A"], + "DD_PROFILING_UPLOAD_TIMEOUT": ["A"], + "DD_PROFILING_URL": ["A"], + "DD_PROPAGATION_EXTRACT_LOG_HEADER_NAMES_ENABLED": ["A"], + "DD_PROPAGATION_STYLE_EXTRACT": ["A"], + "DD_PROPAGATION_STYLE_INJECT": ["A"], + "DD_PROXY_NO_PROXY": ["A"], + "DD_RABBITMQ_PROPAGATION_ENABLED": ["A"], + "DD_RABBIT_INCLUDE_ROUTINGKEY_IN_RESOURCE": ["A"], + "DD_RABBIT_PROPAGATION_DISABLED_EXCHANGES": ["A"], + "DD_RABBIT_PROPAGATION_DISABLED_QUEUES": ["A"], + "DD_RABBIT_PROPAGATION_ENABLED": ["A"], + "DD_RC_TARGETS_KEY": ["A"], + "DD_RC_TARGETS_KEY_ID": ["A"], + "DD_REMOTE_CONFIGURATION_ENABLED": ["A"], + "DD_REMOTE_CONFIG_ENABLED": ["A"], + "DD_REMOTE_CONFIG_INTEGRITY_CHECK_ENABLED": ["A"], + "DD_REMOTE_CONFIG_MAX_EXTRA_SERVICES": ["A"], + "DD_REMOTE_CONFIG_MAX_PAYLOAD_SIZE": ["A"], + "DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS": ["A"], + "DD_REMOTE_CONFIG_URL": ["A"], + "DD_RESOLVER_CACHE_CONFIG": ["A"], + "DD_RESOLVER_CACHE_DIR": ["A"], + "DD_RESOLVER_NAMES_ARE_UNIQUE": ["A"], + "DD_RESOLVER_RESET_INTERVAL": ["A"], + "DD_RESOLVER_SIMPLE_METHOD_GRAPH": ["A"], + "DD_RESOLVER_USE_LOADCLASS": ["A"], + "DD_RESOLVER_USE_URL_CACHES": ["A"], + "DD_RUM_APPLICATION_ID": ["A"], + "DD_RUM_CLIENT_TOKEN": ["A"], + "DD_RUM_DEFAULT_PRIVACY_LEVEL": ["A"], + "DD_RUM_ENABLED": ["A"], + "DD_RUM_ENVIRONMENT": ["A"], + "DD_RUM_MAJOR_VERSION": ["A"], + "DD_RUM_REMOTE_CONFIGURATION_ID": ["A"], + "DD_RUM_SERVICE": ["A"], + "DD_RUM_SESSION_REPLAY_SAMPLE_RATE": ["A"], + "DD_RUM_SESSION_SAMPLE_RATE": ["A"], + "DD_RUM_SITE": ["A"], + "DD_RUM_TRACK_LONG_TASKS": ["A"], + "DD_RUM_TRACK_RESOURCES": ["A"], + "DD_RUM_TRACK_USER_INTERACTION": ["A"], + "DD_RUM_VERSION": ["A"], + "DD_RUNTIME_ID_ENABLED": ["A"], + "DD_RUNTIME_METRICS_ENABLED": ["A"], + "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED": ["A"], + "DD_SERVICE": ["A"], + "DD_SERVICE_MAPPING": ["A"], + "DD_SERVICE_NAME": ["A"], + "DD_SERVICE_NAME_SET_BY_USER": ["A"], + "DD_SITE": ["A"], + "DD_SPAN_SAMPLING_RULES": ["A"], + "DD_SPAN_SAMPLING_RULES_FILE": ["A"], + "DD_SPARK_APP_NAME_AS_SERVICE": ["A"], + "DD_SPARK_TASK_HISTOGRAM_ENABLED": ["A"], + "DD_SPRING_DATA_REPOSITORY_INTERFACE_RESOURCE_NAME": ["A"], + "DD_SQS_PROPAGATION_ENABLED": ["A"], + "DD_STACK_TRACE_LENGTH_LIMIT": ["A"], + "DD_STATSD_CLIENT_QUEUE_SIZE": ["A"], + "DD_STATSD_CLIENT_SOCKET_BUFFER": ["A"], + "DD_STATSD_CLIENT_SOCKET_TIMEOUT": ["A"], + "DD_SYMBOL_DATABASE_COMPRESSED": ["A"], + "DD_SYMBOL_DATABASE_FLUSH_THRESHOLD": ["A"], + "DD_SYMBOL_DATABASE_UPLOAD_ENABLED": ["A"], + "DD_TAGS": ["A"], + "DD_TELEMETRY_DEBUG_REQUESTS_ENABLED": ["A"], + "DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED": ["A"], + "DD_TELEMETRY_DEPENDENCY_RESOLUTION_PERIOD_MILLIS": ["A"], + "DD_TELEMETRY_DEPENDENCY_RESOLUTION_QUEUE_SIZE": ["A"], + "DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL": ["A"], + "DD_TELEMETRY_FORWARDER_MAX_TAGS": ["A"], + "DD_TELEMETRY_FORWARDER_PATH": ["A"], + "DD_TELEMETRY_HEARTBEAT_INTERVAL": ["A"], + "DD_TELEMETRY_LOG_COLLECTION_ENABLED": ["A"], + "DD_TELEMETRY_METRICS_ENABLED": ["A"], + "DD_TELEMETRY_METRICS_INTERVAL": ["A"], + "DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES": ["A"], + "DD_TEST_MANAGEMENT_ENABLED": ["A"], + "DD_TEST_SESSION_NAME": ["A"], + "DD_THIRD_PARTY_EXCLUDES": ["A"], + "DD_THIRD_PARTY_INCLUDES": ["A"], + "DD_THIRD_PARTY_SHADING_IDENTIFIERS": ["A"], + "DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED": ["A"], + "DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED": ["A"], + "DD_TRACE_AEROSPIKE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AEROSPIKE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AEROSPIKE_ENABLED": ["A"], + "DD_TRACE_AGENT_ARGS": ["A"], + "DD_TRACE_AGENT_PATH": ["A"], + "DD_TRACE_AGENT_PORT": ["A"], + "DD_TRACE_AGENT_TIMEOUT": ["A"], + "DD_TRACE_AGENT_UNIX_DOMAIN_SOCKET": ["A"], + "DD_TRACE_AGENT_URL": ["A"], + "DD_TRACE_AGENT_V0_5_ENABLED": ["A"], + "DD_TRACE_AKKA_ACTOR_ENABLED": ["A"], + "DD_TRACE_AKKA_ACTOR_MAILBOX_ENABLED": ["A"], + "DD_TRACE_AKKA_ACTOR_RECEIVE_ENABLED": ["A"], + "DD_TRACE_AKKA_ACTOR_SEND_ENABLED": ["A"], + "DD_TRACE_AKKA_CONCURRENT_ENABLED": ["A"], + "DD_TRACE_AKKA_FORK_JOIN_EXECUTOR_TASK_NAME": ["A"], + "DD_TRACE_AKKA_FORK_JOIN_POOL_NAME": ["A"], + "DD_TRACE_AKKA_FORK_JOIN_TASK_NAME": ["A"], + "DD_TRACE_AKKA_HTTP2_ENABLED": ["A"], + "DD_TRACE_AKKA_HTTP_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AKKA_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AKKA_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AKKA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AKKA_HTTP_CLIENT_ENABLED": ["A"], + "DD_TRACE_AKKA_HTTP_ENABLED": ["A"], + "DD_TRACE_AKKA_HTTP_SERVER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AKKA_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AKKA_HTTP_SERVER_ENABLED": ["A"], + "DD_TRACE_ALLOCATEDIRECT_ENABLED": ["A"], + "DD_TRACE_AMQP_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AMQP_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AMQP_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_AMQP_ENABLED": ["A"], + "DD_TRACE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_ANNOTATIONS": ["A"], + "DD_TRACE_ANNOTATIONS_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_ANNOTATION_ASYNC": ["A"], + "DD_TRACE_APACHE_HTTPASYNCCLIENT5_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_APACHE_HTTPASYNCCLIENT_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTPCLIENT5_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_APACHE_HTTPCLIENT5_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTPCLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_APACHE_HTTPCLIENT_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTPCORE_5_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTPCORE_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTP_CLIENT5_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTP_CLIENT5_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_APACHE_HTTP_CLIENT5_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_APACHE_HTTP_CLIENT_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTP_CORE_5_ENABLED": ["A"], + "DD_TRACE_APACHE_HTTP_CORE_ENABLED": ["A"], + "DD_TRACE_APACHE_SPARK_ENABLED": ["A"], + "DD_TRACE_ARMERIA_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_ARMERIA_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_ARMERIA_ENABLED": ["A"], + "DD_TRACE_ARMERIA_GRPC_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_ARMERIA_GRPC_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_ARMERIA_GRPC_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_ARMERIA_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_ARMERIA_GRPC_CLIENT_ENABLED": ["A"], + "DD_TRACE_ARMERIA_GRPC_ENABLED": ["A"], + "DD_TRACE_ARMERIA_GRPC_MESSAGE_ENABLED": ["A"], + "DD_TRACE_ARMERIA_GRPC_SERVER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_ARMERIA_GRPC_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_ARMERIA_GRPC_SERVER_ENABLED": ["A"], + "DD_TRACE_ARMERIA_JETTY_ENABLED": ["A"], + "DD_TRACE_AUTH0_JWT_ENABLED": ["A"], + "DD_TRACE_AVRO_ENABLED": ["A"], + "DD_TRACE_AWSADD_SPAN_POINTERS": ["A"], + "DD_TRACE_AWS_DYNAMODB_ENABLED": ["A"], + "DD_TRACE_AWS_LAMBDA_ENABLED": ["A"], + "DD_TRACE_AWS_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_AWS_S3_ENABLED": ["A"], + "DD_TRACE_AWS_SDK_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AWS_SDK_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AWS_SDK_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_AWS_SDK_ENABLED": ["A"], + "DD_TRACE_AWS_SDK_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_AWS_SDK_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_AXIS2_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AXIS2_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AXIS2_ENABLED": ["A"], + "DD_TRACE_AXIS2_TRANSPORT_ENABLED": ["A"], + "DD_TRACE_AXIS_PROMOTE_RESOURCE_NAME": ["A"], + "DD_TRACE_AXIS_TRANSPORT_CLASS_NAME": ["A"], + "DD_TRACE_AXWAY_API_ENABLED": ["A"], + "DD_TRACE_AXWAY_HTTP_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AXWAY_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AZURE_FUNCTIONS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_AZURE_FUNCTIONS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_AZURE_FUNCTIONS_ENABLED": ["A"], + "DD_TRACE_BAGGAGE_MAX_BYTES": ["A"], + "DD_TRACE_BAGGAGE_MAX_ITEMS": ["A"], + "DD_TRACE_BAGGAGE_TAG_KEYS": ["A"], + "DD_TRACE_CAFFEINE_ENABLED": ["A"], + "DD_TRACE_CASSANDRA_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_CASSANDRA_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_CASSANDRA_ENABLED": ["A"], + "DD_TRACE_CASSANDRA_KEYSPACE_STATEMENT_EXTRACTION_ENABLED": ["A"], + "DD_TRACE_CI_VISIBILITY_ENABLED": ["A"], + "DD_TRACE_CLASSES_EXCLUDE": ["A"], + "DD_TRACE_CLASSES_EXCLUDE_FILE": ["A"], + "DD_TRACE_CLASSLOADERS_DEFER": ["A"], + "DD_TRACE_CLASSLOADERS_EXCLUDE": ["A"], + "DD_TRACE_CLASSLOADING_ENABLED": ["A"], + "DD_TRACE_CLIENT_IP_ENABLED": ["A"], + "DD_TRACE_CLIENT_IP_HEADER": ["A"], + "DD_TRACE_CLIENT_IP_RESOLVER_ENABLED": ["A"], + "DD_TRACE_CLOCK_SYNC_PERIOD": ["A"], + "DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH": ["A"], + "DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS": ["A"], + "DD_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES": ["A"], + "DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING": ["A"], + "DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING": ["A"], + "DD_TRACE_CODESOURCES_EXCLUDE": ["A"], + "DD_TRACE_COMMONS_FILEUPLOAD_ENABLED": ["A"], + "DD_TRACE_COMMONS_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_COMMONS_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_COMMONS_HTTP_CLIENT_ENABLED": ["A"], + "DD_TRACE_CONFIG": ["A"], + "DD_TRACE_CONSUMER_TASK_ENABLED": ["A"], + "DD_TRACE_COUCHBASE_3_ENABLED": ["A"], + "DD_TRACE_COUCHBASE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_COUCHBASE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_COUCHBASE_ENABLED": ["A"], + "DD_TRACE_COUCHBASE_INTERNAL_SPANS_ENABLED": ["A"], + "DD_TRACE_CUCUMBER_5_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_CUCUMBER_5_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_CUCUMBER_5_ENABLED": ["A"], + "DD_TRACE_CUCUMBER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_CUCUMBER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_CUCUMBER_ENABLED": ["A"], + "DD_TRACE_CXF_ENABLED": ["A"], + "DD_TRACE_CXF_INVOKER_ENABLED": ["A"], + "DD_TRACE_DATANUCLEUS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_DATANUCLEUS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_DATANUCLEUS_ENABLED": ["A"], + "DD_TRACE_DB2_ENABLED": ["A"], + "DD_TRACE_DBM_ENABLED": ["A"], + "DD_TRACE_DBSTATEMENTRULE_ENABLED": ["A"], + "DD_TRACE_DB_CLIENT_SPLIT_BY_HOST": ["A"], + "DD_TRACE_DB_CLIENT_SPLIT_BY_INSTANCE": ["A"], + "DD_TRACE_DB_CLIENT_SPLIT_BY_INSTANCE_TYPE_SUFFIX": ["A"], + "DD_TRACE_DEBUG": ["A"], + "DD_TRACE_DEFINECLASS_ENABLED": ["A"], + "DD_TRACE_DIRECTALLOCATION_ENABLED": ["A"], + "DD_TRACE_DO_NOT_TRACE_ANNOTATION_ENABLED": ["A"], + "DD_TRACE_DROPWIZARD_ENABLED": ["A"], + "DD_TRACE_DROPWIZARD_VIEW_ENABLED": ["A"], + "DD_TRACE_DYNAMODB_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_ELASTICSEARCH_BODY_AND_PARAMS_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_BODY_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_PARAMS_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_REST_5_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_REST_6_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_REST_7_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_REST_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_2_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_5_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_6_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_7_ENABLED": ["A"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_ENABLED": ["A"], + "DD_TRACE_EMR_AWS_SDK_ENABLED": ["A"], + "DD_TRACE_ENABLED": ["A"], + "DD_TRACE_EVENTBRIDGE_ENABLED": ["A"], + "DD_TRACE_EXECUTORS": ["A"], + "DD_TRACE_EXECUTORS_ALL": ["A"], + "DD_TRACE_EXPERIMENTAL_FEATURES_ENABLED": ["A"], + "DD_TRACE_EXPERIMENTAL_JEE_SPLIT_BY_DEPLOYMENT": ["A"], + "DD_TRACE_EXPERIMENTAL_KEEP_LATENCY_THRESHOLD_MS": ["A"], + "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_ENABLED": ["A"], + "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL": ["A"], + "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_INITIAL_FLUSH_INTERVAL": ["A"], + "DD_TRACE_EXTENSIONS_PATH": ["A"], + "DD_TRACE_FILEITEMITERATOR_ENABLED": ["A"], + "DD_TRACE_FILEITEMSTREAM_ENABLED": ["A"], + "DD_TRACE_FILEITEM_ENABLED": ["A"], + "DD_TRACE_FINATRA_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_FINATRA_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_FINATRA_ENABLED": ["A"], + "DD_TRACE_FJP_ENABLED": ["A"], + "DD_TRACE_FJP_WORKQUEUE_ENABLED": ["A"], + "DD_TRACE_FLUSH_INTERVAL": ["A"], + "DD_TRACE_FORCEMANUALDROPTAGINTERCEPTOR_ENABLED": ["A"], + "DD_TRACE_FORCEMANUALKEEPTAGINTERCEPTOR_ENABLED": ["A"], + "DD_TRACE_FORCESAMPLINGPRIORITYTAGINTERCEPTOR_ENABLED": ["A"], + "DD_TRACE_FREEMARKER_ENABLED": ["A"], + "DD_TRACE_GIT_METADATA_ENABLED": ["A"], + "DD_TRACE_GLASSFISH_ENABLED": ["A"], + "DD_TRACE_GLOBAL_TAGS": ["A"], + "DD_TRACE_GOOGLE_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_GOOGLE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_GOOGLE_HTTP_CLIENT_ENABLED": ["A"], + "DD_TRACE_GOOGLE_PUBSUB_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_GOOGLE_PUBSUB_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_GOOGLE_PUBSUB_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_GOOGLE_PUBSUB_ENABLED": ["A"], + "DD_TRACE_GOOGLE_PUBSUB_IGNORED_GRPC_METHODS": ["A"], + "DD_TRACE_GOOGLE_PUBSUB_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_GOOGLE_PUBSUB_PUBLISHER_ENABLED": ["A"], + "DD_TRACE_GOOGLE_PUBSUB_RECEIVER_ENABLED": ["A"], + "DD_TRACE_GRADLE_ENABLED": ["A"], + "DD_TRACE_GRADLE_BUILD_LISTENER_ENABLED": ["A"], + "DD_TRACE_GRADLE_BUILD_SCOPE_SERVICES_ENABLED": ["A"], + "DD_TRACE_GRADLE_DAEMON_LOGGING_ENABLED": ["A"], + "DD_TRACE_GRADLE_DAEMON_JVM_OPTIONS_ENABLED": ["A"], + "DD_TRACE_GRADLE_PLUGIN_INJECTOR_ENABLED": ["A"], + "DD_TRACE_GRAPHQL_JAVA_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_GRAPHQL_JAVA_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_GRAPHQL_JAVA_ENABLED": ["A"], + "DD_TRACE_GRIZZLY_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_GRIZZLY_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_GRIZZLY_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_GRIZZLY_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_GRIZZLY_CLIENT_ENABLED": ["A"], + "DD_TRACE_GRIZZLY_ENABLED": ["A"], + "DD_TRACE_GRIZZLY_FILTERCHAIN_ENABLED": ["A"], + "DD_TRACE_GRPC_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_GRPC_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_GRPC_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_GRPC_CLIENT_ENABLED": ["A"], + "DD_TRACE_GRPC_ENABLED": ["A"], + "DD_TRACE_GRPC_IGNORED_INBOUND_METHODS": ["A"], + "DD_TRACE_GRPC_IGNORED_OUTBOUND_METHODS": ["A"], + "DD_TRACE_GRPC_MESSAGE_ENABLED": ["A"], + "DD_TRACE_GRPC_NETTY_ENABLED": ["A"], + "DD_TRACE_GRPC_SERVER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_GRPC_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_GRPC_SERVER_CODE_ORIGIN_ENABLED": ["A"], + "DD_TRACE_GRPC_SERVER_ENABLED": ["A"], + "DD_TRACE_GRPC_SERVER_TRIM_PACKAGE_RESOURCE": ["A"], + "DD_TRACE_GSON_ENABLED": ["A"], + "DD_TRACE_GUAVA_ENABLED": ["A"], + "DD_TRACE_HAZELCAST_ENABLED": ["A"], + "DD_TRACE_HAZELCAST_LEGACY_ENABLED": ["A"], + "DD_TRACE_HAZELCAST_SDK_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_HAZELCAST_SDK_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_HEADER_BAGGAGE": ["A"], + "DD_TRACE_HEADER_TAGS": ["A"], + "DD_TRACE_HEADER_TAGS_LEGACY_PARSING_ENABLED": ["A"], + "DD_TRACE_HEALTH_METRICS_ENABLED": ["A"], + "DD_TRACE_HEALTH_METRICS_STATSD_HOST": ["A"], + "DD_TRACE_HEALTH_METRICS_STATSD_PORT": ["A"], + "DD_TRACE_HIBERNATE_CORE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_HIBERNATE_CORE_ENABLED": ["A"], + "DD_TRACE_HIBERNATE_ENABLED": ["A"], + "DD_TRACE_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_HTTPASYNCCLIENT5_ENABLED": ["A"], + "DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_HTTPASYNCCLIENT_ENABLED": ["A"], + "DD_TRACE_HTTPCLIENT5_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_HTTPCLIENT5_ENABLED": ["A"], + "DD_TRACE_HTTPCLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_HTTPCLIENT_ENABLED": ["A"], + "DD_TRACE_HTTPCLIENT_REDIRECT_ENABLED": ["A"], + "DD_TRACE_HTTPCORE_5_ENABLED": ["A"], + "DD_TRACE_HTTPCORE_ENABLED": ["A"], + "DD_TRACE_HTTPURLCONNECTION_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_HTTPURLCONNECTION_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_HTTPURLCONNECTION_ENABLED": ["A"], + "DD_TRACE_HTTP_CLIENT_ERROR_STATUSES": ["A"], + "DD_TRACE_HTTP_CLIENT_PATH_RESOURCE_NAME_MAPPING": ["A"], + "DD_TRACE_HTTP_CLIENT_SPLIT_BY_DOMAIN": ["A"], + "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING": ["A"], + "DD_TRACE_HTTP_RESOURCE_REMOVE_TRAILING_SLASH": ["A"], + "DD_TRACE_HTTP_SERVER_ERROR_STATUSES": ["A"], + "DD_TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING": ["A"], + "DD_TRACE_HTTP_URL_CONNECTION_CLASS_NAME": ["A"], + "DD_TRACE_HYSTRIX_ENABLED": ["A"], + "DD_TRACE_IASTINSTRUMENTATION_ENABLED": ["A"], + "DD_TRACE_IAST_RESULTSET_ENABLED": ["A"], + "DD_TRACE_IGNITE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_IGNITE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_IGNITE_ENABLED": ["A"], + "DD_TRACE_INPUTSTREAM_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_DATANUCLEUS_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_DROPWIZARD_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_GRPC_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_HIBERNATE_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_HTTPASYNCCLIENT5_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_HTTPCLIENT5_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_HTTPCLIENT_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_JAVA_CONCURRENT_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTEGRATION_HTTPASYNCCLIENT_MATCHING_SHORTCUT_ENABLED": ["A"], + "DD_TRACE_INTERNAL_EXIT_ON_FAILURE": ["A"], + "DD_TRACE_JACKSON_1_ENABLED": ["A"], + "DD_TRACE_JACKSON_2_12_ENABLED": ["A"], + "DD_TRACE_JACKSON_2_16_ENABLED": ["A"], + "DD_TRACE_JACKSON_2_6_ENABLED": ["A"], + "DD_TRACE_JACKSON_2_8_ENABLED": ["A"], + "DD_TRACE_JACKSON_2_ENABLED": ["A"], + "DD_TRACE_JACKSON_CORE_ENABLED": ["A"], + "DD_TRACE_JACKSON_ENABLED": ["A"], + "DD_TRACE_JACOCO_ENABLED": ["A"], + "DD_TRACE_JAKARTARS_ENABLED": ["A"], + "DD_TRACE_JAKARTA_JMS_ENABLED": ["A"], + "DD_TRACE_JAKARTA_MAIL_BODY_ENABLED": ["A"], + "DD_TRACE_JAKARTA_MAIL_ENABLED": ["A"], + "DD_TRACE_JAKARTA_MAIL_TRANSPORT_ENABLED": ["A"], + "DD_TRACE_JAKARTA_RS_ANNOTATIONS_ENABLED": ["A"], + "DD_TRACE_JAKARTA_RS_ENABLED": ["A"], + "DD_TRACE_JAKARTA_RS_FILTER_ENABLED": ["A"], + "DD_TRACE_JAKARTA_WEBSOCKET_ENABLED": ["A"], + "DD_TRACE_JAKARTA_WS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JAKARTA_WS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JAKARTA_WS_ENABLED": ["A"], + "DD_TRACE_JAVAX_MAIL_BODY_ENABLED": ["A"], + "DD_TRACE_JAVAX_MAIL_ENABLED": ["A"], + "DD_TRACE_JAVAX_MAIL_TRANSPORT_ENABLED": ["A"], + "DD_TRACE_JAVAX_WEBSOCKET_ENABLED": ["A"], + "DD_TRACE_JAVA_COMPLETABLEFUTURE_ENABLED": ["A"], + "DD_TRACE_JAVA_CONCURRENT_ENABLED": ["A"], + "DD_TRACE_JAVA_CONCURRENT_OTHER_ENABLED": ["A"], + "DD_TRACE_JAVA_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JAVA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JAVA_HTTP_CLIENT_ENABLED": ["A"], + "DD_TRACE_JAVA_LANG_APPSEC_ENABLED": ["A"], + "DD_TRACE_JAVA_LANG_MANAGEMENT_ENABLED": ["A"], + "DD_TRACE_JAVA_TIMER_ENABLED": ["A"], + "DD_TRACE_JAXRS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JAXRS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JAXRS_ENABLED": ["A"], + "DD_TRACE_JAX_RS_ADDITIONAL_ANNOTATIONS": ["A"], + "DD_TRACE_JAX_RS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JAX_RS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JAX_RS_ANNOTATIONS_ENABLED": ["A"], + "DD_TRACE_JAX_RS_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JAX_RS_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JAX_RS_CLIENT_ENABLED": ["A"], + "DD_TRACE_JAX_RS_ENABLED": ["A"], + "DD_TRACE_JAX_RS_EXCEPTION_AS_ERROR_ENABLED": ["A"], + "DD_TRACE_JAX_RS_FILTER_ENABLED": ["A"], + "DD_TRACE_JAX_WS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JAX_WS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JAX_WS_ENABLED": ["A"], + "DD_TRACE_JBOSS_LOGMANAGER_ENABLED": ["A"], + "DD_TRACE_JBOSS_MODULES_ENABLED": ["A"], + "DD_TRACE_JDBC_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JDBC_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JDBC_CONNECTION_CLASS_NAME": ["A"], + "DD_TRACE_JDBC_DATASOURCE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JDBC_DATASOURCE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JDBC_DATASOURCE_ENABLED": ["A"], + "DD_TRACE_JDBC_ENABLED": ["A"], + "DD_TRACE_JDBC_PREPARED_STATEMENT_CLASS_NAME": ["A"], + "DD_TRACE_JDBC_RESULTSET_ENABLED": ["A"], + "DD_TRACE_JEDIS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JEDIS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JEDIS_ENABLED": ["A"], + "DD_TRACE_JEE_ENV_ENTRY_ENABLED": ["A"], + "DD_TRACE_JERSEY_ENABLED": ["A"], + "DD_TRACE_JETTY_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JETTY_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JETTY_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JETTY_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JETTY_CLIENT_ENABLED": ["A"], + "DD_TRACE_JETTY_CONCURRENT_ENABLED": ["A"], + "DD_TRACE_JETTY_ENABLED": ["A"], + "DD_TRACE_JETTY_WEBSOCKET_ENABLED": ["A"], + "DD_TRACE_JMS_1_ENABLED": ["A"], + "DD_TRACE_JMS_2_ENABLED": ["A"], + "DD_TRACE_JMS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JMS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JMS_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_JMS_ENABLED": ["A"], + "DD_TRACE_JMS_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_JMS_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_JMS_TIME_IN_QUEUE_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_ACTIVEMQ_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_CASSANDRA_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_CONFLUENT_PLATFORM_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_HAZELCAST_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_HIVEMQ_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_HIVE_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_HUDI_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_IGNITE_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_JBOSS_WILDFLY_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_KAFKA_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_KUBE_APISERVER_METRICS_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_PRESTO_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_SOLR_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_SONARQUBE_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_TOMCAT_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_WEBLOGIC_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_WEBSPHERE_ENABLED": ["A"], + "DD_TRACE_JMXFETCH_{CHECK_NAME}_ENABLED": ["A"], + "DD_TRACE_JMX_TAGS": ["A"], + "DD_TRACE_JNI_ENABLED": ["A"], + "DD_TRACE_JOSE_JWT_ENABLED": ["A"], + "DD_TRACE_JSP_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_JSP_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_JSP_COMPILE_ENABLED": ["A"], + "DD_TRACE_JSP_ENABLED": ["A"], + "DD_TRACE_JSP_RENDER_ENABLED": ["A"], + "DD_TRACE_JUNIT4_ENABLED": ["A"], + "DD_TRACE_JUNIT_38_ENABLED": ["A"], + "DD_TRACE_JUNIT_4_CUCUMBER_ENABLED": ["A"], + "DD_TRACE_JUNIT_4_ENABLED": ["A"], + "DD_TRACE_JUNIT_4_MUNIT_ENABLED": ["A"], + "DD_TRACE_JUNIT_5_CUCUMBER_ENABLED": ["A"], + "DD_TRACE_JUNIT_5_ENABLED": ["A"], + "DD_TRACE_JUNIT_5_SPOCK_ENABLED": ["A"], + "DD_TRACE_JWT_ENABLED": ["A"], + "DD_TRACE_KAFKA_0_11_ENABLED": ["A"], + "DD_TRACE_KAFKA_3_8_ENABLED": ["A"], + "DD_TRACE_KAFKA_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_KAFKA_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_KAFKA_CLIENT_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_KAFKA_CONNECT_ENABLED": ["A"], + "DD_TRACE_KAFKA_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_KAFKA_ENABLED": ["A"], + "DD_TRACE_KAFKA_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_KAFKA_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_KAFKA_STREAMS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_KAFKA_STREAMS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_KAFKA_STREAMS_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_KAFKA_STREAMS_ENABLED": ["A"], + "DD_TRACE_KAFKA_TIME_IN_QUEUE_ENABLED": ["A"], + "DD_TRACE_KARATE_ENABLED": ["A"], + "DD_TRACE_KOTLIN_COROUTINE_ENABLED": ["A"], + "DD_TRACE_LEGACY_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_LETTUCE_4_ASYNC_ENABLED": ["A"], + "DD_TRACE_LETTUCE_4_ENABLED": ["A"], + "DD_TRACE_LETTUCE_5_ASYNC_ENABLED": ["A"], + "DD_TRACE_LETTUCE_5_ENABLED": ["A"], + "DD_TRACE_LETTUCE_5_RX_ENABLED": ["A"], + "DD_TRACE_LETTUCE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_LETTUCE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_LETTUCE_ENABLED": ["A"], + "DD_TRACE_LIBERTY_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_LIBERTY_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_LIBERTY_CLASSLOADING_ENABLED": ["A"], + "DD_TRACE_LIBERTY_ENABLED": ["A"], + "DD_TRACE_LOG4J_1_ENABLED": ["A"], + "DD_TRACE_LOG4J_2_ENABLED": ["A"], + "DD_TRACE_LOG4J_ENABLED": ["A"], + "DD_TRACE_LOGBACK_ENABLED": ["A"], + "DD_TRACE_LOGS_INTAKE_ENABLED": ["A"], + "DD_TRACE_LOGS_INTAKE_LOG4J_2_ENABLED": ["A"], + "DD_TRACE_MAVEN_ENABLED": ["A"], + "DD_TRACE_METHODS": ["A"], + "DD_TRACE_MICRONAUT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_MICRONAUT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_MICRONAUT_ENABLED": ["A"], + "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_2_ENABLED": ["A"], + "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_3_ENABLED": ["A"], + "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_4_ENABLED": ["A"], + "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_ENABLED": ["A"], + "DD_TRACE_MICRONAUT_SPAN_ORIGIN_ENABLED": ["A"], + "DD_TRACE_MMAP_ENABLED": ["A"], + "DD_TRACE_MONGO_3_1_ENABLED": ["A"], + "DD_TRACE_MONGO_3_4_ENABLED": ["A"], + "DD_TRACE_MONGO_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_MONGO_ENABLED": ["A"], + "DD_TRACE_MONGO_REACTIVESTREAMS_ENABLED": ["A"], + "DD_TRACE_MULE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_MULE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_MULE_ENABLED": ["A"], + "DD_TRACE_MULE_JPMS_ENABLED": ["A"], + "DD_TRACE_MULTIPART_ENABLED": ["A"], + "DD_TRACE_NATIVE_IMAGE_ENABLED": ["A"], + "DD_TRACE_NETTY_3_8_ENABLED": ["A"], + "DD_TRACE_NETTY_3_9_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_NETTY_3_9_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_NETTY_4_0_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_NETTY_4_0_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_NETTY_4_0_ENABLED": ["A"], + "DD_TRACE_NETTY_4_1_ENABLED": ["A"], + "DD_TRACE_NETTY_4_1_HTTP2_ENABLED": ["A"], + "DD_TRACE_NETTY_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_NETTY_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_NETTY_CONCURRENT_ENABLED": ["A"], + "DD_TRACE_NETTY_ENABLED": ["A"], + "DD_TRACE_NETTY_EVENT_EXECUTOR_ENABLED": ["A"], + "DD_TRACE_NETTY_PROMISE_ENABLED": ["A"], + "DD_TRACE_NEW_TASK_FOR_ENABLED": ["A"], + "DD_TRACE_NING_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_NING_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_NING_ENABLED": ["A"], + "DD_TRACE_NOT_NOT_TRACE_ENABLED": ["A"], + "DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP": ["A"], + "DD_TRACE_OGNL_ENABLED": ["A"], + "DD_TRACE_OKHTTP_2_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_OKHTTP_2_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_OKHTTP_2_ENABLED": ["A"], + "DD_TRACE_OKHTTP_3_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_OKHTTP_3_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_OKHTTP_3_ENABLED": ["A"], + "DD_TRACE_OKHTTP_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_OKHTTP_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_OKHTTP_ENABLED": ["A"], + "DD_TRACE_OPENSEARCH_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_OPENSEARCH_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_OPENSEARCH_ENABLED": ["A"], + "DD_TRACE_OPENSEARCH_REST_ENABLED": ["A"], + "DD_TRACE_OPENSEARCH_TRANSPORT_ENABLED": ["A"], + "DD_TRACE_OPENTELEMETRY_1_ENABLED": ["A"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_20_ENABLED": ["A"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_26_ENABLED": ["A"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ENABLED": ["A"], + "DD_TRACE_OPENTELEMETRY_BETA_ENABLED": ["A"], + "DD_TRACE_OPENTELEMETRY_EXPERIMENTAL_ENABLED": ["A"], + "DD_TRACE_OPENTRACING_ENABLED": ["A"], + "DD_TRACE_OPENTRACING_GLOBALTRACER_ENABLED": ["A"], + "DD_TRACE_ORG_JSON_ENABLED": ["A"], + "DD_TRACE_OSGI_ENABLED": ["A"], + "DD_TRACE_OTEL_ENABLED": ["A"], + "DD_TRACE_PARTIAL_FLUSH_ENABLED": ["A"], + "DD_TRACE_PARTIAL_FLUSH_MIN_SPANS": ["A"], + "DD_TRACE_PEERSERVICETAGINTERCEPTOR_ENABLED": ["A"], + "DD_TRACE_PEER_HOSTNAME_ENABLED": ["A"], + "DD_TRACE_PEER_SERVICE_COMPONENT_OVERRIDES": ["A"], + "DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED": ["A"], + "DD_TRACE_PEER_SERVICE_MAPPING": ["A"], + "DD_TRACE_PEKKO_ACTOR_ENABLED": ["A"], + "DD_TRACE_PEKKO_ACTOR_MAILBOX_ENABLED": ["A"], + "DD_TRACE_PEKKO_ACTOR_RECEIVE_ENABLED": ["A"], + "DD_TRACE_PEKKO_ACTOR_SEND_ENABLED": ["A"], + "DD_TRACE_PEKKO_CONCURRENT_ENABLED": ["A"], + "DD_TRACE_PEKKO_HTTP2_ENABLED": ["A"], + "DD_TRACE_PEKKO_HTTP_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_PEKKO_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_PEKKO_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_PEKKO_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_PEKKO_HTTP_CLIENT_ENABLED": ["A"], + "DD_TRACE_PEKKO_HTTP_ENABLED": ["A"], + "DD_TRACE_PEKKO_HTTP_SERVER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_PEKKO_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_PEKKO_HTTP_SERVER_ENABLED": ["A"], + "DD_TRACE_PEKKO_SCHEDULER_ENABLED": ["A"], + "DD_TRACE_PERF_METRICS_ENABLED": ["A"], + "DD_TRACE_PIPE_NAME": ["A"], + "DD_TRACE_PLAY_ACTION_ENABLED": ["A"], + "DD_TRACE_PLAY_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_PLAY_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_PLAY_ENABLED": ["A"], + "DD_TRACE_PLAY_REPORT_HTTP_STATUS": ["A"], + "DD_TRACE_PLAY_WS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_PLAY_WS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_PLAY_WS_ENABLED": ["A"], + "DD_TRACE_POST_PROCESSING_TIMEOUT": ["A"], + "DD_TRACE_POWERMOCK_ENABLED": ["A"], + "DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT": ["A"], + "DD_TRACE_PROPAGATION_EXTRACT_FIRST": ["A"], + "DD_TRACE_PROPAGATION_STYLE": ["A"], + "DD_TRACE_PROPAGATION_STYLE_B3_PADDING_ENABLED": ["A"], + "DD_TRACE_PROPAGATION_STYLE_EXTRACT": ["A"], + "DD_TRACE_PROPAGATION_STYLE_INJECT": ["A"], + "DD_TRACE_PROTOBUF_ENABLED": ["A"], + "DD_TRACE_QUARTZ_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_QUARTZ_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_QUARTZ_ENABLED": ["A"], + "DD_TRACE_RABBITMQ_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_RABBITMQ_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_RABBITMQ_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_RABBITMQ_ENABLED": ["A"], + "DD_TRACE_RABBITMQ_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_RABBITMQ_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_RABBITMQ_TIME_IN_QUEUE_ENABLED": ["A"], + "DD_TRACE_RABBIT_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_RABBIT_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_RABBIT_TIME_IN_QUEUE_ENABLED": ["A"], + "DD_TRACE_RATE_LIMIT": ["A"], + "DD_TRACE_RATPACK_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_RATPACK_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_RATPACK_ENABLED": ["A"], + "DD_TRACE_RATPACK_REQUEST_BODY_ENABLED": ["A"], + "DD_TRACE_REACTIVE_STREAMS_1_ENABLED": ["A"], + "DD_TRACE_REACTIVE_STREAMS_ENABLED": ["A"], + "DD_TRACE_REACTOR_CORE_ENABLED": ["A"], + "DD_TRACE_REACTOR_NETTY_1_ENABLED": ["A"], + "DD_TRACE_REACTOR_NETTY_ENABLED": ["A"], + "DD_TRACE_REDISCALA_CONNECTION_ENABLED": ["A"], + "DD_TRACE_REDISCALA_ENABLED": ["A"], + "DD_TRACE_REDISSCALA_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_REDISSCALA_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_REDISSON_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_REDISSON_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_REDISSON_ENABLED": ["A"], + "DD_TRACE_REDIS_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_REDIS_ENABLED": ["A"], + "DD_TRACE_REJECTED_EXECUTION_HANDLER_ENABLED": ["A"], + "DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED": ["A"], + "DD_TRACE_RENAISSANCE_ENABLED": ["A"], + "DD_TRACE_REPORT_HOSTNAME": ["A"], + "DD_TRACE_REQUEST_HEADER_TAGS": ["A"], + "DD_TRACE_REQUEST_HEADER_TAGS_COMMA_ALLOWED": ["A"], + "DD_TRACE_RESOLVER_ENABLED": ["A"], + "DD_TRACE_RESOURCENAMERULE_ENABLED": ["A"], + "DD_TRACE_RESPONSE_ENABLED": ["A"], + "DD_TRACE_RESPONSE_HEADER_TAGS": ["A"], + "DD_TRACE_RESTEASY_ENABLED": ["A"], + "DD_TRACE_RESTLET_HTTP_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_RESTLET_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_RESTLET_HTTP_ENABLED": ["A"], + "DD_TRACE_RESTLET_HTTP_SERVER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_RESTLET_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_RESTLET_HTTP_SERVER_ENABLED": ["A"], + "DD_TRACE_RMI_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_RMI_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_RMI_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_RMI_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_RMI_CLIENT_CONTEXT_PROPAGATOR_ENABLED": ["A"], + "DD_TRACE_RMI_CLIENT_ENABLED": ["A"], + "DD_TRACE_RMI_CONTEXT_PROPAGATOR_ENABLED": ["A"], + "DD_TRACE_RMI_ENABLED": ["A"], + "DD_TRACE_RMI_SERVER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_RMI_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_RMI_SERVER_CONTEXT_PROPAGATOR_ENABLED": ["A"], + "DD_TRACE_RMI_SERVER_ENABLED": ["A"], + "DD_TRACE_RUNNABLE_ENABLED": ["A"], + "DD_TRACE_RUNNABLE_FUTURE_ENABLED": ["A"], + "DD_TRACE_RUNTIME_CONTEXT_FIELD_INJECTION": ["A"], + "DD_TRACE_RXJAVA_ENABLED": ["A"], + "DD_TRACE_S3_ENABLED": ["A"], + "DD_TRACE_SAMPLE_RATE": ["A"], + "DD_TRACE_SAMPLING_MECHANISM_VALIDATION_DISABLED": ["A"], + "DD_TRACE_SAMPLING_OPERATION_RULES": ["A"], + "DD_TRACE_SAMPLING_RULES": ["A"], + "DD_TRACE_SAMPLING_SERVICE_RULES": ["A"], + "DD_TRACE_SCALATEST_ENABLED": ["A"], + "DD_TRACE_SCALA_CONCURRENT_ENABLED": ["A"], + "DD_TRACE_SCALA_FUTURE_OBJECT_ENABLED": ["A"], + "DD_TRACE_SCALA_PROMISE_COMPLETE_ENABLED": ["A"], + "DD_TRACE_SCALA_PROMISE_COMPLETION_PRIORITY_ENABLED": ["A"], + "DD_TRACE_SCALA_PROMISE_RESOLVE_ENABLED": ["A"], + "DD_TRACE_SCOPE_DEPTH_LIMIT": ["A"], + "DD_TRACE_SCOPE_ITERATION_KEEP_ALIVE": ["A"], + "DD_TRACE_SCOPE_STRICT_MODE": ["A"], + "DD_TRACE_SECURE_RANDOM": ["A"], + "DD_TRACE_SELENIUM_ENABLED": ["A"], + "DD_TRACE_SERIALVERSIONUID_FIELD_INJECTION": ["A"], + "DD_TRACE_SERVELET_RESPONSE_ENABLED": ["A"], + "DD_TRACE_SERVICENAMETAGINTERCEPTOR_ENABLED": ["A"], + "DD_TRACE_SERVICETALK_CONCURRENT_ENABLED": ["A"], + "DD_TRACE_SERVICETALK_ENABLED": ["A"], + "DD_TRACE_SERVLETCONTEXTTAGINTERCEPTOR_ENABLED": ["A"], + "DD_TRACE_SERVLET_2_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SERVLET_2_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SERVLET_2_ENABLED": ["A"], + "DD_TRACE_SERVLET_3_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SERVLET_3_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SERVLET_3_ASYNC_CONTEXT_ENABLED": ["A"], + "DD_TRACE_SERVLET_3_ENABLED": ["A"], + "DD_TRACE_SERVLET_5_ASYNC_CONTEXT_ENABLED": ["A"], + "DD_TRACE_SERVLET_5_ENABLED": ["A"], + "DD_TRACE_SERVLET_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SERVLET_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SERVLET_ASYNC_TIMEOUT_ERROR": ["A"], + "DD_TRACE_SERVLET_COOKIE_ENABLED": ["A"], + "DD_TRACE_SERVLET_DISPATCHER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SERVLET_DISPATCHER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SERVLET_DISPATCHER_ENABLED": ["A"], + "DD_TRACE_SERVLET_ENABLED": ["A"], + "DD_TRACE_SERVLET_FILTER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SERVLET_FILTER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SERVLET_FILTER_ENABLED": ["A"], + "DD_TRACE_SERVLET_PRINCIPAL_ENABLED": ["A"], + "DD_TRACE_SERVLET_REQUEST_BODY_ENABLED": ["A"], + "DD_TRACE_SERVLET_REQUEST_ENABLED": ["A"], + "DD_TRACE_SERVLET_RESPONSE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SERVLET_RESPONSE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SERVLET_RESPONSE_ENABLED": ["A"], + "DD_TRACE_SERVLET_ROOT_CONTEXT_SERVICE_NAME": ["A"], + "DD_TRACE_SERVLET_SERVICE_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SERVLET_SERVICE_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SERVLET_SERVICE_ENABLED": ["A"], + "DD_TRACE_SERVLET_SESSION_ENABLED": ["A"], + "DD_TRACE_SETUP_TEARDOWN_ENABLED": ["A"], + "DD_TRACE_SFN_ENABLED": ["A"], + "DD_TRACE_SHUTDOWN_ENABLED": ["A"], + "DD_TRACE_SLICK_ENABLED": ["A"], + "DD_TRACE_SNAKEYAML_ENABLED": ["A"], + "DD_TRACE_SNS_ENABLED": ["A"], + "DD_TRACE_SOCKET_ENABLED": ["A"], + "DD_TRACE_SPAN_ATTRIBUTE_SCHEMA": ["A"], + "DD_TRACE_SPAN_TAGS": ["A"], + "DD_TRACE_SPARKJAVA_2_4_ENABLED": ["A"], + "DD_TRACE_SPARKJAVA_ENABLED": ["A"], + "DD_TRACE_SPARK_ENABLED": ["A"], + "DD_TRACE_SPARK_EXECUTOR_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPARK_EXECUTOR_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPARK_EXECUTOR_ENABLED": ["A"], + "DD_TRACE_SPARK_EXIT_ENABLED": ["A"], + "DD_TRACE_SPARK_OPENLINEAGE_ENABLED": ["A"], + "DD_TRACE_SPLIT_BY_TAGS": ["A"], + "DD_TRACE_SPRAY_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPRAY_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPRAY_HTTP_ENABLED": ["A"], + "DD_TRACE_SPRAY_HTTP_SERVER_ENABLED": ["A"], + "DD_TRACE_SPRING_ASYNC_ENABLED": ["A"], + "DD_TRACE_SPRING_BEANS_ENABLED": ["A"], + "DD_TRACE_SPRING_BOOT_ENABLED": ["A"], + "DD_TRACE_SPRING_BOOT_SPAN_ORIGIN_ENABLED": ["A"], + "DD_TRACE_SPRING_CLOUD_ZUUL_ENABLED": ["A"], + "DD_TRACE_SPRING_CORE_ENABLED": ["A"], + "DD_TRACE_SPRING_DATA_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPRING_DATA_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPRING_DATA_ENABLED": ["A"], + "DD_TRACE_SPRING_JMS_ENABLED": ["A"], + "DD_TRACE_SPRING_MESSAGING_4_ENABLED": ["A"], + "DD_TRACE_SPRING_MESSAGING_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPRING_MESSAGING_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPRING_MESSAGING_E2E_DURATION_ENABLED": ["A"], + "DD_TRACE_SPRING_MESSAGING_ENABLED": ["A"], + "DD_TRACE_SPRING_PATH_FILTER_ENABLED": ["A"], + "DD_TRACE_SPRING_RABBIT_ENABLED": ["A"], + "DD_TRACE_SPRING_SCHEDULING_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPRING_SCHEDULING_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPRING_SCHEDULING_ENABLED": ["A"], + "DD_TRACE_SPRING_SCHEDULING_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_SPRING_SECURITY_ENABLED": ["A"], + "DD_TRACE_SPRING_WEBFLUX_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPRING_WEBFLUX_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPRING_WEBFLUX_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPRING_WEBFLUX_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPRING_WEBFLUX_CLIENT_ENABLED": ["A"], + "DD_TRACE_SPRING_WEBFLUX_ENABLED": ["A"], + "DD_TRACE_SPRING_WEBFLUX_FUNCTIONAL_ENABLED": ["A"], + "DD_TRACE_SPRING_WEB_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPRING_WEB_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPRING_WEB_CODE_ORIGIN_ENABLED": ["A"], + "DD_TRACE_SPRING_WEB_ENABLED": ["A"], + "DD_TRACE_SPRING_WS_2_ENABLED": ["A"], + "DD_TRACE_SPRING_WS_ENABLED": ["A"], + "DD_TRACE_SPYMEMCACHED_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SPYMEMCACHED_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SPYMEMCACHED_ENABLED": ["A"], + "DD_TRACE_SQS_BODY_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_SQS_ENABLED": ["A"], + "DD_TRACE_SQS_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_SQS_PROPAGATION_ENABLED": ["A"], + "DD_TRACE_SQS_TIME_IN_QUEUE_ENABLED": ["A"], + "DD_TRACE_SSLSOCKET_ENABLED": ["A"], + "DD_TRACE_STARTUP_LOGS": ["A"], + "DD_TRACE_STATS_COMPUTATION_ENABLED": ["A"], + "DD_TRACE_STATUS404DECORATOR_ENABLED": ["A"], + "DD_TRACE_STATUS404RULE_ENABLED": ["A"], + "DD_TRACE_STRICT_WRITES_ENABLED": ["A"], + "DD_TRACE_STRUCTURED_TASK_SCOPE_ENABLED": ["A"], + "DD_TRACE_SUREFIRE_ENABLED": ["A"], + "DD_TRACE_SYNAPSE3_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_SYNAPSE3_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_SYNAPSE3_CLIENT_ENABLED": ["A"], + "DD_TRACE_SYNAPSE3_ENABLED": ["A"], + "DD_TRACE_SYNAPSE3_SERVER_ENABLED": ["A"], + "DD_TRACE_TAGS": ["A"], + "DD_TRACE_TASK_RUNNER_ENABLED": ["A"], + "DD_TRACE_TASK_UNWRAPPING_ENABLED": ["A"], + "DD_TRACE_TESTNG_6_ENABLED": ["A"], + "DD_TRACE_TESTNG_7_ENABLED": ["A"], + "DD_TRACE_TESTNG_ENABLED": ["A"], + "DD_TRACE_TESTNG_ITR_ENABLED": ["A"], + "DD_TRACE_TESTS_ENABLED": ["A"], + "DD_TRACE_TEST_ORDER_ENABLED": ["A"], + "DD_TRACE_TEST_RETRY_ENABLED": ["A"], + "DD_TRACE_THREAD_POOL_EXECUTORS_EXCLUDE": ["A"], + "DD_TRACE_THREAD_POOL_EXECUTORS_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_THROWABLES_ENABLED": ["A"], + "DD_TRACE_THYMELEAF_ENABLED": ["A"], + "DD_TRACE_TIBCO_BW_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_TIBCO_BW_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_TIBCO_BW_ENABLED": ["A"], + "DD_TRACE_TIBCO_ENABLED": ["A"], + "DD_TRACE_TINYLOG_ENABLED": ["A"], + "DD_TRACE_TOMCAT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_TOMCAT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_TOMCAT_CLASSLOADING_ENABLED": ["A"], + "DD_TRACE_TOMCAT_ENABLED": ["A"], + "DD_TRACE_TOMCAT_WEBSOCKET_ENABLED": ["A"], + "DD_TRACE_TRACER_METRICS_BUFFERING_ENABLED": ["A"], + "DD_TRACE_TRACER_METRICS_ENABLED": ["A"], + "DD_TRACE_TRACER_METRICS_IGNORED_RESOURCES": ["A"], + "DD_TRACE_TRACER_METRICS_MAX_AGGREGATES": ["A"], + "DD_TRACE_TRACER_METRICS_MAX_PENDING": ["A"], + "DD_TRACE_TRACE_ANNOTATION_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_TRACE_ANNOTATION_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_TRACE_ANNOTATION_ENABLED": ["A"], + "DD_TRACE_TRACE_CONFIG_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_TRACE_CONFIG_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_TRACE_CONFIG_ENABLED": ["A"], + "DD_TRACE_TRACE_ENABLED": ["A"], + "DD_TRACE_TRIAGE": ["A"], + "DD_TRACE_TWILIO_SDK_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_TWILIO_SDK_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_TWILIO_SDK_ENABLED": ["A"], + "DD_TRACE_UNDERTOW_2_0_ENABLED": ["A"], + "DD_TRACE_UNDERTOW_2_2_ENABLED": ["A"], + "DD_TRACE_UNDERTOW_ENABLED": ["A"], + "DD_TRACE_UNDERTOW_HTTP_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_UNDERTOW_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_UNDERTOW_HTTP_SERVER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_UNDERTOW_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_UNDERTOW_LEGACY_TRACING_ENABLED": ["A"], + "DD_TRACE_UNDERTOW_REQUEST_PARSE_ENABLED": ["A"], + "DD_TRACE_URLASRESOURCENAMERULE_ENABLED": ["A"], + "DD_TRACE_URLCONNECTION_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_URLCONNECTION_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_URLCONNECTION_ENABLED": ["A"], + "DD_TRACE_VALKEY_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_VALKEY_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_VALKEY_ENABLED": ["A"], + "DD_TRACE_VELOCITY_ENABLED": ["A"], + "DD_TRACE_VERTX_3_4_ENABLED": ["A"], + "DD_TRACE_VERTX_3_5_ENABLED": ["A"], + "DD_TRACE_VERTX_3_9_ENABLED": ["A"], + "DD_TRACE_VERTX_4_0_ENABLED": ["A"], + "DD_TRACE_VERTX_5_0_ENABLED": ["A"], + "DD_TRACE_VERTX_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_VERTX_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_VERTX_ENABLED": ["A"], + "DD_TRACE_VERTX_REDIS_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_VERTX_REDIS_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_VERTX_REDIS_CLIENT_ENABLED": ["A"], + "DD_TRACE_VERTX_ROUTE_HANDLER_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_VERTX_ROUTE_HANDLER_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_VERTX_SQL_CLIENT_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_VERTX_SQL_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_VERTX_SQL_CLIENT_ENABLED": ["A"], + "DD_TRACE_WALLCLOCK_ENABLED": ["A"], + "DD_TRACE_WEAVER_ENABLED": ["A"], + "DD_TRACE_WEBSOCKET_ANALYTICS_ENABLED": ["A"], + "DD_TRACE_WEBSOCKET_ANALYTICS_SAMPLE_RATE": ["A"], + "DD_TRACE_WEBSOCKET_ENABLED": ["A"], + "DD_TRACE_WEBSOCKET_MESSAGES_ENABLED": ["A"], + "DD_TRACE_WEBSOCKET_MESSAGES_INHERIT_SAMPLING": ["A"], + "DD_TRACE_WEBSOCKET_MESSAGES_SEPARATE_TRACES": ["A"], + "DD_TRACE_WEBSOCKET_TAG_SESSION_ID": ["A"], + "DD_TRACE_WEBSPHERE_JMX_ENABLED": ["A"], + "DD_TRACE_WILDFLY_ENABLED": ["A"], + "DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH": ["A"], + "DD_TRACE_ZIO_EXPERIMENTAL_ENABLED": ["A"], + "DD_TRIAGE_REPORT_DIR": ["A"], + "DD_TRIAGE_REPORT_TRIGGER": ["A"], + "DD_UNDERTOW_CONTINUATION": ["A"], + "DD_USM_ENABLED": ["A"], + "DD_VERSION": ["A"], + "DD_WRITER_BAGGAGE_INJECT": ["A"], + "DD_WRITER_TYPE": ["A"], + "OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_REQUEST_HEADERS": ["A"], + "OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_RESPONSE_HEADERS": ["A"], + "OTEL_INSTRUMENTATION_HTTP_SERVER_CAPTURE_REQUEST_HEADERS": ["A"], + "OTEL_INSTRUMENTATION_HTTP_SERVER_CAPTURE_RESPONSE_HEADERS": ["A"], + "OTEL_JAVAAGENT_CONFIGURATION_FILE": ["A"], + "OTEL_JAVAAGENT_EXTENSIONS": ["A"], + "OTEL_LOGS_EXPORTER": ["A"], + "OTEL_LOG_LEVEL": ["A"], + "OTEL_METRICS_EXPORTER": ["A"], + "OTEL_PROPAGATORS": ["A"], + "OTEL_RESOURCE_ATTRIBUTES": ["A"], + "OTEL_SDK_DISABLED": ["A"], + "OTEL_SERVICE_NAME": ["A"], + "OTEL_TRACES_EXPORTER": ["A"], + "OTEL_TRACES_SAMPLER_ARG": ["A"], + "OTEL_TRACES_SAMPLER": ["A"] + }, + "aliases": { + "DD_PROFILING_ASYNC_LIVEHEAP_CAPACITY": ["DD_PROFILING_DDPROF_MEMLEAK_CAPACITY"], + "DD_PROFILING_ASYNC_LIVEHEAP_INTERVAL": ["DD_PROFILING_DDPROF_MEMLEAK_INTERVAL"], + "DD_PROFILING_STACKDEPTH": ["DD_PROFILING_DDPROF_STACKDEPTH"], + "DD_TRACE_AEROSPIKE_ANALYTICS_SAMPLE_RATE": ["DD_AEROSPIKE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AEROSPIKE_ENABLED": ["DD_TRACE_INTEGRATION_AEROSPIKE_ENABLED","DD_INTEGRATION_AEROSPIKE_ENABLED"], + "DD_TRACE_AKKA_ACTOR_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_ACTOR_ENABLED","DD_INTEGRATION_AKKA_ACTOR_ENABLED"], + "DD_TRACE_AKKA_ACTOR_MAILBOX_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_ACTOR_MAILBOX_ENABLED","DD_INTEGRATION_AKKA_ACTOR_MAILBOX_ENABLED"], + "DD_TRACE_AKKA_ACTOR_RECEIVE_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_ACTOR_RECEIVE_ENABLED","DD_INTEGRATION_AKKA_ACTOR_RECEIVE_ENABLED"], + "DD_TRACE_AKKA_ACTOR_SEND_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_ACTOR_SEND_ENABLED","DD_INTEGRATION_AKKA_ACTOR_SEND_ENABLED"], + "DD_TRACE_AKKA_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_CONCURRENT_ENABLED","DD_INTEGRATION_AKKA_CONCURRENT_ENABLED"], + "DD_TRACE_AKKA_HTTP2_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_HTTP2_ENABLED","DD_INTEGRATION_AKKA_HTTP2_ENABLED"], + "DD_TRACE_AKKA_HTTP_ANALYTICS_ENABLED": ["DD_AKKA_HTTP_ANALYTICS_ENABLED"], + "DD_TRACE_AKKA_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_AKKA_HTTP_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AKKA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_AKKA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AKKA_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_HTTP_CLIENT_ENABLED","DD_INTEGRATION_AKKA_HTTP_CLIENT_ENABLED"], + "DD_TRACE_AKKA_HTTP_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_HTTP_ENABLED","DD_INTEGRATION_AKKA_HTTP_ENABLED"], + "DD_TRACE_AKKA_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_AKKA_HTTP_SERVER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AKKA_HTTP_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_HTTP_SERVER_ENABLED","DD_INTEGRATION_AKKA_HTTP_SERVER_ENABLED"], + "DD_TRACE_ALLOCATEDIRECT_ENABLED": ["DD_TRACE_INTEGRATION_ALLOCATEDIRECT_ENABLED","DD_INTEGRATION_ALLOCATEDIRECT_ENABLED"], + "DD_TRACE_AMQP_ANALYTICS_SAMPLE_RATE": ["DD_AMQP_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AMQP_ENABLED": ["DD_TRACE_INTEGRATION_AMQP_ENABLED","DD_INTEGRATION_AMQP_ENABLED"], + "DD_TRACE_ANNOTATIONS_LEGACY_TRACING_ENABLED": ["DD_ANNOTATIONS_LEGACY_TRACING_ENABLED"], + "DD_TRACE_APACHE_HTTPASYNCCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPASYNCCLIENT5_ENABLED","DD_INTEGRATION_APACHE_HTTPASYNCCLIENT5_ENABLED"], + "DD_TRACE_APACHE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_APACHE_HTTPASYNCCLIENT_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPASYNCCLIENT_ENABLED","DD_INTEGRATION_APACHE_HTTPASYNCCLIENT_ENABLED"], + "DD_TRACE_APACHE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_APACHE_HTTPCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPCLIENT5_ENABLED","DD_INTEGRATION_APACHE_HTTPCLIENT5_ENABLED"], + "DD_TRACE_APACHE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_APACHE_HTTPCLIENT_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPCLIENT_ENABLED","DD_INTEGRATION_APACHE_HTTPCLIENT_ENABLED"], + "DD_TRACE_APACHE_HTTPCORE_5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPCORE_5_ENABLED","DD_INTEGRATION_APACHE_HTTPCORE_5_ENABLED"], + "DD_TRACE_APACHE_HTTPCORE_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPCORE_ENABLED","DD_INTEGRATION_APACHE_HTTPCORE_ENABLED"], + "DD_TRACE_APACHE_HTTP_CLIENT5_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTP_CLIENT5_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_APACHE_HTTP_CLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTP_CLIENT5_ENABLED","DD_INTEGRATION_APACHE_HTTP_CLIENT5_ENABLED"], + "DD_TRACE_APACHE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_APACHE_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTP_CLIENT_ENABLED","DD_INTEGRATION_APACHE_HTTP_CLIENT_ENABLED"], + "DD_TRACE_APACHE_HTTP_CORE_5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTP_CORE_5_ENABLED","DD_INTEGRATION_APACHE_HTTP_CORE_5_ENABLED"], + "DD_TRACE_APACHE_HTTP_CORE_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTP_CORE_ENABLED","DD_INTEGRATION_APACHE_HTTP_CORE_ENABLED"], + "DD_TRACE_APACHE_SPARK_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_SPARK_ENABLED","DD_INTEGRATION_APACHE_SPARK_ENABLED"], + "DD_TRACE_ARMERIA_ANALYTICS_SAMPLE_RATE": ["DD_ARMERIA_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_ARMERIA_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_ENABLED","DD_INTEGRATION_ARMERIA_ENABLED"], + "DD_TRACE_ARMERIA_GRPC_ANALYTICS_SAMPLE_RATE": ["DD_ARMERIA_GRPC_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_ARMERIA_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_ARMERIA_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_ARMERIA_GRPC_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_GRPC_CLIENT_ENABLED","DD_INTEGRATION_ARMERIA_GRPC_CLIENT_ENABLED"], + "DD_TRACE_ARMERIA_GRPC_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_GRPC_ENABLED","DD_INTEGRATION_ARMERIA_GRPC_ENABLED"], + "DD_TRACE_ARMERIA_GRPC_MESSAGE_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_GRPC_MESSAGE_ENABLED","DD_INTEGRATION_ARMERIA_GRPC_MESSAGE_ENABLED"], + "DD_TRACE_ARMERIA_GRPC_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_ARMERIA_GRPC_SERVER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_ARMERIA_GRPC_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_GRPC_SERVER_ENABLED","DD_INTEGRATION_ARMERIA_GRPC_SERVER_ENABLED"], + "DD_TRACE_ARMERIA_JETTY_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_JETTY_ENABLED","DD_INTEGRATION_ARMERIA_JETTY_ENABLED"], + "DD_TRACE_AUTH0_JWT_ENABLED": ["DD_TRACE_INTEGRATION_AUTH0_JWT_ENABLED","DD_INTEGRATION_AUTH0_JWT_ENABLED"], + "DD_TRACE_AVRO_ENABLED": ["DD_TRACE_INTEGRATION_AVRO_ENABLED","DD_INTEGRATION_AVRO_ENABLED"], + "DD_TRACE_AWSADD_SPAN_POINTERS": ["DD_AWSADD_SPAN_POINTERS"], + "DD_TRACE_AWS_DYNAMODB_ENABLED": ["DD_TRACE_INTEGRATION_AWS_DYNAMODB_ENABLED","DD_INTEGRATION_AWS_DYNAMODB_ENABLED"], + "DD_TRACE_AWS_LAMBDA_ENABLED": ["DD_TRACE_INTEGRATION_AWS_LAMBDA_ENABLED","DD_INTEGRATION_AWS_LAMBDA_ENABLED"], + "DD_TRACE_AWS_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_AWS_PROPAGATION_ENABLED","DD_INTEGRATION_AWS_PROPAGATION_ENABLED"], + "DD_TRACE_AWS_S3_ENABLED": ["DD_TRACE_INTEGRATION_AWS_S3_ENABLED","DD_INTEGRATION_AWS_S3_ENABLED"], + "DD_TRACE_AWS_SDK_ANALYTICS_SAMPLE_RATE": ["DD_AWS_SDK_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AWS_SDK_ENABLED": ["DD_TRACE_INTEGRATION_AWS_SDK_ENABLED","DD_INTEGRATION_AWS_SDK_ENABLED"], + "DD_TRACE_AWS_SDK_LEGACY_TRACING_ENABLED": ["DD_AWS_SDK_LEGACY_TRACING_ENABLED"], + "DD_TRACE_AWS_SDK_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_AWS_SDK_PROPAGATION_ENABLED","DD_INTEGRATION_AWS_SDK_PROPAGATION_ENABLED"], + "DD_TRACE_AXIS2_ANALYTICS_SAMPLE_RATE": ["DD_AXIS2_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AXIS2_ENABLED": ["DD_TRACE_INTEGRATION_AXIS2_ENABLED","DD_INTEGRATION_AXIS2_ENABLED"], + "DD_TRACE_AXIS2_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_AXIS2_TRANSPORT_ENABLED","DD_INTEGRATION_AXIS2_TRANSPORT_ENABLED"], + "DD_TRACE_AXWAY_API_ENABLED": ["DD_TRACE_INTEGRATION_AXWAY_API_ENABLED","DD_INTEGRATION_AXWAY_API_ENABLED"], + "DD_TRACE_AXWAY_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_AXWAY_HTTP_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AZURE_FUNCTIONS_ANALYTICS_SAMPLE_RATE": ["DD_AZURE_FUNCTIONS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_AZURE_FUNCTIONS_ENABLED": ["DD_TRACE_INTEGRATION_AZURE_FUNCTIONS_ENABLED","DD_INTEGRATION_AZURE_FUNCTIONS_ENABLED"], + "DD_TRACE_CAFFEINE_ENABLED": ["DD_TRACE_INTEGRATION_CAFFEINE_ENABLED","DD_INTEGRATION_CAFFEINE_ENABLED"], + "DD_TRACE_CASSANDRA_ANALYTICS_SAMPLE_RATE": ["DD_CASSANDRA_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_CASSANDRA_ENABLED": ["DD_TRACE_INTEGRATION_CASSANDRA_ENABLED","DD_INTEGRATION_CASSANDRA_ENABLED"], + "DD_TRACE_CI_VISIBILITY_ENABLED": ["DD_TRACE_INTEGRATION_CI_VISIBILITY_ENABLED","DD_INTEGRATION_CI_VISIBILITY_ENABLED"], + "DD_TRACE_CLASSLOADING_ENABLED": ["DD_TRACE_INTEGRATION_CLASSLOADING_ENABLED","DD_INTEGRATION_CLASSLOADING_ENABLED"], + "DD_TRACE_COMMONS_FILEUPLOAD_ENABLED": ["DD_TRACE_INTEGRATION_COMMONS_FILEUPLOAD_ENABLED","DD_INTEGRATION_COMMONS_FILEUPLOAD_ENABLED"], + "DD_TRACE_COMMONS_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_COMMONS_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_COMMONS_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_COMMONS_HTTP_CLIENT_ENABLED","DD_INTEGRATION_COMMONS_HTTP_CLIENT_ENABLED"], + "DD_TRACE_CONSUMER_TASK_ENABLED": ["DD_TRACE_INTEGRATION_CONSUMER_TASK_ENABLED","DD_INTEGRATION_CONSUMER_TASK_ENABLED"], + "DD_TRACE_COUCHBASE_3_ENABLED": ["DD_TRACE_INTEGRATION_COUCHBASE_3_ENABLED","DD_INTEGRATION_COUCHBASE_3_ENABLED"], + "DD_TRACE_COUCHBASE_ANALYTICS_SAMPLE_RATE": ["DD_COUCHBASE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_COUCHBASE_ENABLED": ["DD_TRACE_INTEGRATION_COUCHBASE_ENABLED","DD_INTEGRATION_COUCHBASE_ENABLED"], + "DD_TRACE_CUCUMBER_5_ANALYTICS_SAMPLE_RATE": ["DD_CUCUMBER_5_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_CUCUMBER_5_ENABLED": ["DD_TRACE_INTEGRATION_CUCUMBER_5_ENABLED","DD_INTEGRATION_CUCUMBER_5_ENABLED"], + "DD_TRACE_CUCUMBER_ANALYTICS_SAMPLE_RATE": ["DD_CUCUMBER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_CUCUMBER_ENABLED": ["DD_TRACE_INTEGRATION_CUCUMBER_ENABLED","DD_INTEGRATION_CUCUMBER_ENABLED"], + "DD_TRACE_CXF_ENABLED": ["DD_TRACE_INTEGRATION_CXF_ENABLED","DD_INTEGRATION_CXF_ENABLED"], + "DD_TRACE_CXF_INVOKER_ENABLED": ["DD_TRACE_INTEGRATION_CXF_INVOKER_ENABLED","DD_INTEGRATION_CXF_INVOKER_ENABLED"], + "DD_TRACE_DATANUCLEUS_ANALYTICS_SAMPLE_RATE": ["DD_DATANUCLEUS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_DATANUCLEUS_ENABLED": ["DD_TRACE_INTEGRATION_DATANUCLEUS_ENABLED","DD_INTEGRATION_DATANUCLEUS_ENABLED"], + "DD_TRACE_DB2_ENABLED": ["DD_TRACE_INTEGRATION_DB2_ENABLED","DD_INTEGRATION_DB2_ENABLED"], + "DD_TRACE_DBM_ENABLED": ["DD_TRACE_INTEGRATION_DBM_ENABLED","DD_INTEGRATION_DBM_ENABLED"], + "DD_TRACE_DEFINECLASS_ENABLED": ["DD_TRACE_INTEGRATION_DEFINECLASS_ENABLED","DD_INTEGRATION_DEFINECLASS_ENABLED"], + "DD_TRACE_DIRECTALLOCATION_ENABLED": ["DD_TRACE_INTEGRATION_DIRECTALLOCATION_ENABLED","DD_INTEGRATION_DIRECTALLOCATION_ENABLED"], + "DD_TRACE_DO_NOT_TRACE_ANNOTATION_ENABLED": ["DD_TRACE_INTEGRATION_DO_NOT_TRACE_ANNOTATION_ENABLED","DD_INTEGRATION_DO_NOT_TRACE_ANNOTATION_ENABLED"], + "DD_TRACE_DROPWIZARD_ENABLED": ["DD_TRACE_INTEGRATION_DROPWIZARD_ENABLED","DD_INTEGRATION_DROPWIZARD_ENABLED"], + "DD_TRACE_DROPWIZARD_VIEW_ENABLED": ["DD_TRACE_INTEGRATION_DROPWIZARD_VIEW_ENABLED","DD_INTEGRATION_DROPWIZARD_VIEW_ENABLED"], + "DD_TRACE_DYNAMODB_ENABLED": ["DD_TRACE_INTEGRATION_DYNAMODB_ENABLED","DD_INTEGRATION_DYNAMODB_ENABLED"], + "DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE": ["DD_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_ELASTICSEARCH_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_ENABLED","DD_INTEGRATION_ELASTICSEARCH_ENABLED"], + "DD_TRACE_ELASTICSEARCH_REST_5_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_REST_5_ENABLED","DD_INTEGRATION_ELASTICSEARCH_REST_5_ENABLED"], + "DD_TRACE_ELASTICSEARCH_REST_6_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_REST_6_ENABLED","DD_INTEGRATION_ELASTICSEARCH_REST_6_ENABLED"], + "DD_TRACE_ELASTICSEARCH_REST_7_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_REST_7_ENABLED","DD_INTEGRATION_ELASTICSEARCH_REST_7_ENABLED"], + "DD_TRACE_ELASTICSEARCH_REST_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_REST_ENABLED","DD_INTEGRATION_ELASTICSEARCH_REST_ENABLED"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_2_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_2_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_2_ENABLED"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_5_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_5_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_5_ENABLED"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_6_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_6_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_6_ENABLED"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_7_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_7_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_7_ENABLED"], + "DD_TRACE_ELASTICSEARCH_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_ENABLED"], + "DD_TRACE_EMR_AWS_SDK_ENABLED": ["DD_TRACE_INTEGRATION_EMR_AWS_SDK_ENABLED","DD_INTEGRATION_EMR_AWS_SDK_ENABLED"], + "DD_TRACE_EVENTBRIDGE_ENABLED": ["DD_TRACE_INTEGRATION_EVENTBRIDGE_ENABLED","DD_INTEGRATION_EVENTBRIDGE_ENABLED"], + "DD_TRACE_FILEITEMITERATOR_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEMITERATOR_ENABLED","DD_INTEGRATION_FILEITEMITERATOR_ENABLED"], + "DD_TRACE_FILEITEMSTREAM_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEMSTREAM_ENABLED","DD_INTEGRATION_FILEITEMSTREAM_ENABLED"], + "DD_TRACE_FILEITEM_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEM_ENABLED","DD_INTEGRATION_FILEITEM_ENABLED"], + "DD_TRACE_FINATRA_ANALYTICS_SAMPLE_RATE": ["DD_FINATRA_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_FINATRA_ENABLED": ["DD_TRACE_INTEGRATION_FINATRA_ENABLED","DD_INTEGRATION_FINATRA_ENABLED"], + "DD_TRACE_FJP_ENABLED": ["DD_TRACE_INTEGRATION_FJP_ENABLED","DD_INTEGRATION_FJP_ENABLED"], + "DD_TRACE_FJP_WORKQUEUE_ENABLED": ["DD_TRACE_INTEGRATION_FJP_WORKQUEUE_ENABLED","DD_INTEGRATION_FJP_WORKQUEUE_ENABLED"], + "DD_TRACE_FREEMARKER_ENABLED": ["DD_TRACE_INTEGRATION_FREEMARKER_ENABLED","DD_INTEGRATION_FREEMARKER_ENABLED"], + "DD_TRACE_GLASSFISH_ENABLED": ["DD_TRACE_INTEGRATION_GLASSFISH_ENABLED","DD_INTEGRATION_GLASSFISH_ENABLED"], + "DD_TRACE_GOOGLE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_GOOGLE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_GOOGLE_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_GOOGLE_HTTP_CLIENT_ENABLED","DD_INTEGRATION_GOOGLE_HTTP_CLIENT_ENABLED"], + "DD_TRACE_GOOGLE_PUBSUB_ANALYTICS_SAMPLE_RATE": ["DD_GOOGLE_PUBSUB_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_GOOGLE_PUBSUB_ENABLED": ["DD_TRACE_INTEGRATION_GOOGLE_PUBSUB_ENABLED","DD_INTEGRATION_GOOGLE_PUBSUB_ENABLED"], + "DD_TRACE_GOOGLE_PUBSUB_LEGACY_TRACING_ENABLED": ["DD_GOOGLE_PUBSUB_LEGACY_TRACING_ENABLED"], + "DD_TRACE_GOOGLE_PUBSUB_PUBLISHER_ENABLED": ["DD_TRACE_INTEGRATION_GOOGLE_PUBSUB_PUBLISHER_ENABLED","DD_INTEGRATION_GOOGLE_PUBSUB_PUBLISHER_ENABLED"], + "DD_TRACE_GOOGLE_PUBSUB_RECEIVER_ENABLED": ["DD_TRACE_INTEGRATION_GOOGLE_PUBSUB_RECEIVER_ENABLED","DD_INTEGRATION_GOOGLE_PUBSUB_RECEIVER_ENABLED"], + "DD_TRACE_GRADLE_BUILD_LISTENER_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_BUILD_LISTENER_ENABLED","DD_INTEGRATION_GRADLE_BUILD_LISTENER_ENABLED"], + "DD_TRACE_GRADLE_BUILD_SCOPE_SERVICES_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_BUILD_SCOPE_SERVICES_ENABLED","DD_INTEGRATION_GRADLE_BUILD_SCOPE_SERVICES_ENABLED"], + "DD_TRACE_GRADLE_DAEMON_JVM_OPTIONS_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_DAEMON_JVM_OPTIONS_ENABLED","DD_INTEGRATION_GRADLE_DAEMON_JVM_OPTIONS_ENABLED"], + "DD_TRACE_GRADLE_DAEMON_LOGGING_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_DAEMON_LOGGING_ENABLED","DD_INTEGRATION_GRADLE_DAEMON_LOGGING_ENABLED"], + "DD_TRACE_GRADLE_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_ENABLED","DD_INTEGRATION_GRADLE_ENABLED"], + "DD_TRACE_GRADLE_PLUGIN_INJECTOR_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_PLUGIN_INJECTOR_ENABLED","DD_INTEGRATION_GRADLE_PLUGIN_INJECTOR_ENABLED"], + "DD_TRACE_GRAPHQL_JAVA_ANALYTICS_SAMPLE_RATE": ["DD_GRAPHQL_JAVA_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_GRAPHQL_JAVA_ENABLED": ["DD_TRACE_INTEGRATION_GRAPHQL_JAVA_ENABLED","DD_INTEGRATION_GRAPHQL_JAVA_ENABLED"], + "DD_TRACE_GRIZZLY_ANALYTICS_ENABLED": ["DD_GRIZZLY_ANALYTICS_ENABLED"], + "DD_TRACE_GRIZZLY_ANALYTICS_SAMPLE_RATE": ["DD_GRIZZLY_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_GRIZZLY_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_GRIZZLY_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_GRIZZLY_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_GRIZZLY_CLIENT_ENABLED","DD_INTEGRATION_GRIZZLY_CLIENT_ENABLED"], + "DD_TRACE_GRIZZLY_ENABLED": ["DD_TRACE_INTEGRATION_GRIZZLY_ENABLED","DD_INTEGRATION_GRIZZLY_ENABLED"], + "DD_TRACE_GRIZZLY_FILTERCHAIN_ENABLED": ["DD_TRACE_INTEGRATION_GRIZZLY_FILTERCHAIN_ENABLED","DD_INTEGRATION_GRIZZLY_FILTERCHAIN_ENABLED"], + "DD_TRACE_GRPC_ANALYTICS_ENABLED": ["DD_GRPC_ANALYTICS_ENABLED"], + "DD_TRACE_GRPC_ANALYTICS_SAMPLE_RATE": ["DD_GRPC_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_GRPC_CLIENT_ANALYTICS_ENABLED": ["DD_GRPC_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_GRPC_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_CLIENT_ENABLED","DD_INTEGRATION_GRPC_CLIENT_ENABLED"], + "DD_TRACE_GRPC_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_ENABLED","DD_INTEGRATION_GRPC_ENABLED"], + "DD_TRACE_GRPC_MESSAGE_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_MESSAGE_ENABLED","DD_INTEGRATION_GRPC_MESSAGE_ENABLED"], + "DD_TRACE_GRPC_NETTY_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_NETTY_ENABLED","DD_INTEGRATION_GRPC_NETTY_ENABLED"], + "DD_TRACE_GRPC_SERVER_ANALYTICS_ENABLED": ["DD_GRPC_SERVER_ANALYTICS_ENABLED"], + "DD_TRACE_GRPC_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_GRPC_SERVER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_GRPC_SERVER_CODE_ORIGIN_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_SERVER_CODE_ORIGIN_ENABLED","DD_INTEGRATION_GRPC_SERVER_CODE_ORIGIN_ENABLED"], + "DD_TRACE_GRPC_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_SERVER_ENABLED","DD_INTEGRATION_GRPC_SERVER_ENABLED"], + "DD_TRACE_GSON_ENABLED": ["DD_TRACE_INTEGRATION_GSON_ENABLED","DD_INTEGRATION_GSON_ENABLED"], + "DD_TRACE_GUAVA_ENABLED": ["DD_TRACE_INTEGRATION_GUAVA_ENABLED","DD_INTEGRATION_GUAVA_ENABLED"], + "DD_TRACE_HAZELCAST_ENABLED": ["DD_TRACE_INTEGRATION_HAZELCAST_ENABLED","DD_INTEGRATION_HAZELCAST_ENABLED"], + "DD_TRACE_HAZELCAST_LEGACY_ENABLED": ["DD_TRACE_INTEGRATION_HAZELCAST_LEGACY_ENABLED","DD_INTEGRATION_HAZELCAST_LEGACY_ENABLED"], + "DD_TRACE_HAZELCAST_SDK_ANALYTICS_SAMPLE_RATE": ["DD_HAZELCAST_SDK_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_HEADER_TAGS_LEGACY_PARSING_ENABLED": ["DD_TRACE_INTEGRATION_HEADER_TAGS_LEGACY_PARSING_ENABLED","DD_INTEGRATION_HEADER_TAGS_LEGACY_PARSING_ENABLED"], + "DD_TRACE_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE": ["DD_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_HIBERNATE_CORE_ENABLED": ["DD_TRACE_INTEGRATION_HIBERNATE_CORE_ENABLED","DD_INTEGRATION_HIBERNATE_CORE_ENABLED"], + "DD_TRACE_HIBERNATE_ENABLED": ["DD_TRACE_INTEGRATION_HIBERNATE_ENABLED","DD_INTEGRATION_HIBERNATE_ENABLED"], + "DD_TRACE_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED": ["DD_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED"], + "DD_TRACE_HTTPASYNCCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_HTTPASYNCCLIENT5_ENABLED","DD_INTEGRATION_HTTPASYNCCLIENT5_ENABLED"], + "DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_HTTPASYNCCLIENT_ENABLED": ["DD_TRACE_INTEGRATION_HTTPASYNCCLIENT_ENABLED","DD_INTEGRATION_HTTPASYNCCLIENT_ENABLED"], + "DD_TRACE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE": ["DD_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_HTTPCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCLIENT5_ENABLED","DD_INTEGRATION_HTTPCLIENT5_ENABLED"], + "DD_TRACE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_HTTPCLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_HTTPCLIENT_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCLIENT_ENABLED","DD_INTEGRATION_HTTPCLIENT_ENABLED"], + "DD_TRACE_HTTPCLIENT_REDIRECT_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCLIENT_REDIRECT_ENABLED","DD_INTEGRATION_HTTPCLIENT_REDIRECT_ENABLED"], + "DD_TRACE_HTTPCORE_5_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCORE_5_ENABLED","DD_INTEGRATION_HTTPCORE_5_ENABLED"], + "DD_TRACE_HTTPCORE_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCORE_ENABLED","DD_INTEGRATION_HTTPCORE_ENABLED"], + "DD_TRACE_HTTPURLCONNECTION_ANALYTICS_ENABLED": ["DD_HTTPURLCONNECTION_ANALYTICS_ENABLED"], + "DD_TRACE_HTTPURLCONNECTION_ANALYTICS_SAMPLE_RATE": ["DD_HTTPURLCONNECTION_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_HTTPURLCONNECTION_ENABLED": ["DD_TRACE_INTEGRATION_HTTPURLCONNECTION_ENABLED","DD_INTEGRATION_HTTPURLCONNECTION_ENABLED"], + "DD_TRACE_HYSTRIX_ENABLED": ["DD_TRACE_INTEGRATION_HYSTRIX_ENABLED","DD_INTEGRATION_HYSTRIX_ENABLED"], + "DD_TRACE_IASTINSTRUMENTATION_ENABLED": ["DD_TRACE_INTEGRATION_IASTINSTRUMENTATION_ENABLED","DD_INTEGRATION_IASTINSTRUMENTATION_ENABLED"], + "DD_TRACE_IAST_RESULTSET_ENABLED": ["DD_TRACE_INTEGRATION_IAST_RESULTSET_ENABLED","DD_INTEGRATION_IAST_RESULTSET_ENABLED"], + "DD_TRACE_IGNITE_ANALYTICS_SAMPLE_RATE": ["DD_IGNITE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_IGNITE_ENABLED": ["DD_TRACE_INTEGRATION_IGNITE_ENABLED","DD_INTEGRATION_IGNITE_ENABLED"], + "DD_TRACE_INPUTSTREAM_ENABLED": ["DD_TRACE_INTEGRATION_INPUTSTREAM_ENABLED","DD_INTEGRATION_INPUTSTREAM_ENABLED"], + "DD_TRACE_INTEGRATION_DATANUCLEUS_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_DATANUCLEUS_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_DROPWIZARD_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_DROPWIZARD_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_GRPC_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_GRPC_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_HIBERNATE_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HIBERNATE_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_HTTPASYNCCLIENT5_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HTTPASYNCCLIENT5_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_HTTPASYNCCLIENT_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HTTPASYNCCLIENT_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_HTTPCLIENT5_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HTTPCLIENT5_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_HTTPCLIENT_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HTTPCLIENT_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_JAVA_CONCURRENT_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_JAVA_CONCURRENT_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_MATCHING_SHORTCUT_ENABLED"], + "DD_TRACE_JACKSON_1_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_1_ENABLED","DD_INTEGRATION_JACKSON_1_ENABLED"], + "DD_TRACE_JACKSON_2_12_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_12_ENABLED","DD_INTEGRATION_JACKSON_2_12_ENABLED"], + "DD_TRACE_JACKSON_2_16_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_16_ENABLED","DD_INTEGRATION_JACKSON_2_16_ENABLED"], + "DD_TRACE_JACKSON_2_6_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_6_ENABLED","DD_INTEGRATION_JACKSON_2_6_ENABLED"], + "DD_TRACE_JACKSON_2_8_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_8_ENABLED","DD_INTEGRATION_JACKSON_2_8_ENABLED"], + "DD_TRACE_JACKSON_2_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_ENABLED","DD_INTEGRATION_JACKSON_2_ENABLED"], + "DD_TRACE_JACKSON_CORE_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_CORE_ENABLED","DD_INTEGRATION_JACKSON_CORE_ENABLED"], + "DD_TRACE_JACKSON_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_ENABLED","DD_INTEGRATION_JACKSON_ENABLED"], + "DD_TRACE_JACOCO_ENABLED": ["DD_TRACE_INTEGRATION_JACOCO_ENABLED","DD_INTEGRATION_JACOCO_ENABLED"], + "DD_TRACE_JAKARTARS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTARS_ENABLED","DD_INTEGRATION_JAKARTARS_ENABLED"], + "DD_TRACE_JAKARTA_JMS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_JMS_ENABLED","DD_INTEGRATION_JAKARTA_JMS_ENABLED"], + "DD_TRACE_JAKARTA_MAIL_BODY_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_MAIL_BODY_ENABLED","DD_INTEGRATION_JAKARTA_MAIL_BODY_ENABLED"], + "DD_TRACE_JAKARTA_MAIL_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_MAIL_ENABLED","DD_INTEGRATION_JAKARTA_MAIL_ENABLED"], + "DD_TRACE_JAKARTA_MAIL_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_MAIL_TRANSPORT_ENABLED","DD_INTEGRATION_JAKARTA_MAIL_TRANSPORT_ENABLED"], + "DD_TRACE_JAKARTA_RS_ANNOTATIONS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_RS_ANNOTATIONS_ENABLED","DD_INTEGRATION_JAKARTA_RS_ANNOTATIONS_ENABLED"], + "DD_TRACE_JAKARTA_RS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_RS_ENABLED","DD_INTEGRATION_JAKARTA_RS_ENABLED"], + "DD_TRACE_JAKARTA_RS_FILTER_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_RS_FILTER_ENABLED","DD_INTEGRATION_JAKARTA_RS_FILTER_ENABLED"], + "DD_TRACE_JAKARTA_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_WEBSOCKET_ENABLED","DD_INTEGRATION_JAKARTA_WEBSOCKET_ENABLED"], + "DD_TRACE_JAKARTA_WS_ANALYTICS_SAMPLE_RATE": ["DD_JAKARTA_WS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JAKARTA_WS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_WS_ENABLED","DD_INTEGRATION_JAKARTA_WS_ENABLED"], + "DD_TRACE_JAVAX_MAIL_BODY_ENABLED": ["DD_TRACE_INTEGRATION_JAVAX_MAIL_BODY_ENABLED","DD_INTEGRATION_JAVAX_MAIL_BODY_ENABLED"], + "DD_TRACE_JAVAX_MAIL_ENABLED": ["DD_TRACE_INTEGRATION_JAVAX_MAIL_ENABLED","DD_INTEGRATION_JAVAX_MAIL_ENABLED"], + "DD_TRACE_JAVAX_MAIL_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_JAVAX_MAIL_TRANSPORT_ENABLED","DD_INTEGRATION_JAVAX_MAIL_TRANSPORT_ENABLED"], + "DD_TRACE_JAVAX_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_JAVAX_WEBSOCKET_ENABLED","DD_INTEGRATION_JAVAX_WEBSOCKET_ENABLED"], + "DD_TRACE_JAVA_COMPLETABLEFUTURE_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_COMPLETABLEFUTURE_ENABLED","DD_INTEGRATION_JAVA_COMPLETABLEFUTURE_ENABLED"], + "DD_TRACE_JAVA_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_CONCURRENT_ENABLED","DD_INTEGRATION_JAVA_CONCURRENT_ENABLED"], + "DD_TRACE_JAVA_CONCURRENT_OTHER_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_CONCURRENT_OTHER_ENABLED","DD_INTEGRATION_JAVA_CONCURRENT_OTHER_ENABLED"], + "DD_TRACE_JAVA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_JAVA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JAVA_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_HTTP_CLIENT_ENABLED","DD_INTEGRATION_JAVA_HTTP_CLIENT_ENABLED"], + "DD_TRACE_JAVA_LANG_APPSEC_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_LANG_APPSEC_ENABLED","DD_INTEGRATION_JAVA_LANG_APPSEC_ENABLED"], + "DD_TRACE_JAVA_LANG_MANAGEMENT_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_LANG_MANAGEMENT_ENABLED","DD_INTEGRATION_JAVA_LANG_MANAGEMENT_ENABLED"], + "DD_TRACE_JAVA_TIMER_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_TIMER_ENABLED","DD_INTEGRATION_JAVA_TIMER_ENABLED"], + "DD_TRACE_JAXRS_ANALYTICS_SAMPLE_RATE": ["DD_JAXRS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JAXRS_ENABLED": ["DD_TRACE_INTEGRATION_JAXRS_ENABLED","DD_INTEGRATION_JAXRS_ENABLED"], + "DD_TRACE_JAX_RS_ANALYTICS_SAMPLE_RATE": ["DD_JAX_RS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JAX_RS_ANNOTATIONS_ENABLED": ["DD_TRACE_INTEGRATION_JAX_RS_ANNOTATIONS_ENABLED","DD_INTEGRATION_JAX_RS_ANNOTATIONS_ENABLED"], + "DD_TRACE_JAX_RS_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_JAX_RS_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JAX_RS_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_JAX_RS_CLIENT_ENABLED","DD_INTEGRATION_JAX_RS_CLIENT_ENABLED"], + "DD_TRACE_JAX_RS_ENABLED": ["DD_TRACE_INTEGRATION_JAX_RS_ENABLED","DD_INTEGRATION_JAX_RS_ENABLED"], + "DD_TRACE_JAX_RS_FILTER_ENABLED": ["DD_TRACE_INTEGRATION_JAX_RS_FILTER_ENABLED","DD_INTEGRATION_JAX_RS_FILTER_ENABLED"], + "DD_TRACE_JAX_WS_ANALYTICS_SAMPLE_RATE": ["DD_JAX_WS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JAX_WS_ENABLED": ["DD_TRACE_INTEGRATION_JAX_WS_ENABLED","DD_INTEGRATION_JAX_WS_ENABLED"], + "DD_TRACE_JBOSS_LOGMANAGER_ENABLED": ["DD_TRACE_INTEGRATION_JBOSS_LOGMANAGER_ENABLED","DD_INTEGRATION_JBOSS_LOGMANAGER_ENABLED"], + "DD_TRACE_JBOSS_MODULES_ENABLED": ["DD_TRACE_INTEGRATION_JBOSS_MODULES_ENABLED","DD_INTEGRATION_JBOSS_MODULES_ENABLED"], + "DD_TRACE_JDBC_ANALYTICS_ENABLED": ["DD_JDBC_ANALYTICS_ENABLED"], + "DD_TRACE_JDBC_ANALYTICS_SAMPLE_RATE": ["DD_JDBC_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JDBC_DATASOURCE_ANALYTICS_SAMPLE_RATE": ["DD_JDBC_DATASOURCE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JDBC_DATASOURCE_ENABLED": ["DD_TRACE_INTEGRATION_JDBC_DATASOURCE_ENABLED","DD_INTEGRATION_JDBC_DATASOURCE_ENABLED"], + "DD_TRACE_JDBC_ENABLED": ["DD_TRACE_INTEGRATION_JDBC_ENABLED","DD_INTEGRATION_JDBC_ENABLED"], + "DD_TRACE_JDBC_RESULTSET_ENABLED": ["DD_TRACE_INTEGRATION_JDBC_RESULTSET_ENABLED","DD_INTEGRATION_JDBC_RESULTSET_ENABLED"], + "DD_TRACE_JEDIS_ANALYTICS_SAMPLE_RATE": ["DD_JEDIS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JEDIS_ENABLED": ["DD_TRACE_INTEGRATION_JEDIS_ENABLED","DD_INTEGRATION_JEDIS_ENABLED"], + "DD_TRACE_JEE_ENV_ENTRY_ENABLED": ["DD_TRACE_INTEGRATION_JEE_ENV_ENTRY_ENABLED","DD_INTEGRATION_JEE_ENV_ENTRY_ENABLED"], + "DD_TRACE_JERSEY_ENABLED": ["DD_TRACE_INTEGRATION_JERSEY_ENABLED","DD_INTEGRATION_JERSEY_ENABLED"], + "DD_TRACE_JETTY_ANALYTICS_ENABLED": ["DD_JETTY_ANALYTICS_ENABLED"], + "DD_TRACE_JETTY_ANALYTICS_SAMPLE_RATE": ["DD_JETTY_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JETTY_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_JETTY_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JETTY_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_JETTY_CLIENT_ENABLED","DD_INTEGRATION_JETTY_CLIENT_ENABLED"], + "DD_TRACE_JETTY_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_JETTY_CONCURRENT_ENABLED","DD_INTEGRATION_JETTY_CONCURRENT_ENABLED"], + "DD_TRACE_JETTY_ENABLED": ["DD_TRACE_INTEGRATION_JETTY_ENABLED","DD_INTEGRATION_JETTY_ENABLED"], + "DD_TRACE_JETTY_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_JETTY_WEBSOCKET_ENABLED","DD_INTEGRATION_JETTY_WEBSOCKET_ENABLED"], + "DD_TRACE_JMS_1_ENABLED": ["DD_TRACE_INTEGRATION_JMS_1_ENABLED","DD_INTEGRATION_JMS_1_ENABLED"], + "DD_TRACE_JMS_2_ENABLED": ["DD_TRACE_INTEGRATION_JMS_2_ENABLED","DD_INTEGRATION_JMS_2_ENABLED"], + "DD_TRACE_JMS_ANALYTICS_SAMPLE_RATE": ["DD_JMS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JMS_ENABLED": ["DD_TRACE_INTEGRATION_JMS_ENABLED","DD_INTEGRATION_JMS_ENABLED"], + "DD_TRACE_JMS_LEGACY_TRACING_ENABLED": ["DD_JMS_LEGACY_TRACING_ENABLED"], + "DD_TRACE_JMS_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_JMS_PROPAGATION_ENABLED","DD_INTEGRATION_JMS_PROPAGATION_ENABLED"], + "DD_TRACE_JMXFETCH_ACTIVEMQ_ENABLED": ["DD_JMXFETCH_ACTIVEMQ_ENABLED"], + "DD_TRACE_JMXFETCH_CASSANDRA_ENABLED": ["DD_JMXFETCH_CASSANDRA_ENABLED"], + "DD_TRACE_JMXFETCH_CONFLUENT_PLATFORM_ENABLED": ["DD_JMXFETCH_CONFLUENT_PLATFORM_ENABLED"], + "DD_TRACE_JMXFETCH_HAZELCAST_ENABLED": ["DD_JMXFETCH_HAZELCAST_ENABLED"], + "DD_TRACE_JMXFETCH_HIVEMQ_ENABLED": ["DD_JMXFETCH_HIVEMQ_ENABLED"], + "DD_TRACE_JMXFETCH_HIVE_ENABLED": ["DD_JMXFETCH_HIVE_ENABLED"], + "DD_TRACE_JMXFETCH_HUDI_ENABLED": ["DD_JMXFETCH_HUDI_ENABLED"], + "DD_TRACE_JMXFETCH_IGNITE_ENABLED": ["DD_JMXFETCH_IGNITE_ENABLED"], + "DD_TRACE_JMXFETCH_JBOSS_WILDFLY_ENABLED": ["DD_JMXFETCH_JBOSS_WILDFLY_ENABLED"], + "DD_TRACE_JMXFETCH_KAFKA_ENABLED": ["DD_JMXFETCH_KAFKA_ENABLED"], + "DD_TRACE_JMXFETCH_KUBE_APISERVER_METRICS_ENABLED": ["DD_JMXFETCH_KUBE_APISERVER_METRICS_ENABLED"], + "DD_TRACE_JMXFETCH_PRESTO_ENABLED": ["DD_JMXFETCH_PRESTO_ENABLED"], + "DD_TRACE_JMXFETCH_SOLR_ENABLED": ["DD_JMXFETCH_SOLR_ENABLED"], + "DD_TRACE_JMXFETCH_SONARQUBE_ENABLED": ["DD_JMXFETCH_SONARQUBE_ENABLED"], + "DD_TRACE_JMXFETCH_TOMCAT_ENABLED": ["DD_JMXFETCH_TOMCAT_ENABLED"], + "DD_TRACE_JMXFETCH_WEBLOGIC_ENABLED": ["DD_JMXFETCH_WEBLOGIC_ENABLED"], + "DD_TRACE_JMXFETCH_WEBSPHERE_ENABLED": ["DD_JMXFETCH_WEBSPHERE_ENABLED"], + "DD_TRACE_JMXFETCH_{CHECK_NAME}_ENABLED": ["DD_JMXFETCH_{CHECK_NAME}_ENABLED"], + "DD_TRACE_JNI_ENABLED": ["DD_TRACE_INTEGRATION_JNI_ENABLED","DD_INTEGRATION_JNI_ENABLED"], + "DD_TRACE_JOSE_JWT_ENABLED": ["DD_TRACE_INTEGRATION_JOSE_JWT_ENABLED","DD_INTEGRATION_JOSE_JWT_ENABLED"], + "DD_TRACE_JSP_ANALYTICS_ENABLED": ["DD_JSP_ANALYTICS_ENABLED"], + "DD_TRACE_JSP_ANALYTICS_SAMPLE_RATE": ["DD_JSP_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_JSP_COMPILE_ENABLED": ["DD_TRACE_INTEGRATION_JSP_COMPILE_ENABLED","DD_INTEGRATION_JSP_COMPILE_ENABLED"], + "DD_TRACE_JSP_ENABLED": ["DD_TRACE_INTEGRATION_JSP_ENABLED","DD_INTEGRATION_JSP_ENABLED"], + "DD_TRACE_JSP_RENDER_ENABLED": ["DD_TRACE_INTEGRATION_JSP_RENDER_ENABLED","DD_INTEGRATION_JSP_RENDER_ENABLED"], + "DD_TRACE_JUNIT4_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT4_ENABLED","DD_INTEGRATION_JUNIT4_ENABLED"], + "DD_TRACE_JUNIT_38_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_38_ENABLED","DD_INTEGRATION_JUNIT_38_ENABLED"], + "DD_TRACE_JUNIT_4_CUCUMBER_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_4_CUCUMBER_ENABLED","DD_INTEGRATION_JUNIT_4_CUCUMBER_ENABLED"], + "DD_TRACE_JUNIT_4_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_4_ENABLED","DD_INTEGRATION_JUNIT_4_ENABLED"], + "DD_TRACE_JUNIT_4_MUNIT_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_4_MUNIT_ENABLED","DD_INTEGRATION_JUNIT_4_MUNIT_ENABLED"], + "DD_TRACE_JUNIT_5_CUCUMBER_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_5_CUCUMBER_ENABLED","DD_INTEGRATION_JUNIT_5_CUCUMBER_ENABLED"], + "DD_TRACE_JUNIT_5_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_5_ENABLED","DD_INTEGRATION_JUNIT_5_ENABLED"], + "DD_TRACE_JUNIT_5_SPOCK_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_5_SPOCK_ENABLED","DD_INTEGRATION_JUNIT_5_SPOCK_ENABLED"], + "DD_TRACE_JWT_ENABLED": ["DD_TRACE_INTEGRATION_JWT_ENABLED","DD_INTEGRATION_JWT_ENABLED"], + "DD_TRACE_KAFKA_0_11_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_0_11_ENABLED","DD_INTEGRATION_KAFKA_0_11_ENABLED"], + "DD_TRACE_KAFKA_3_8_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_3_8_ENABLED","DD_INTEGRATION_KAFKA_3_8_ENABLED"], + "DD_TRACE_KAFKA_ANALYTICS_ENABLED": ["DD_KAFKA_ANALYTICS_ENABLED"], + "DD_TRACE_KAFKA_ANALYTICS_SAMPLE_RATE": ["DD_KAFKA_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_KAFKA_CLIENT_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_CLIENT_PROPAGATION_ENABLED","DD_INTEGRATION_KAFKA_CLIENT_PROPAGATION_ENABLED"], + "DD_TRACE_KAFKA_CONNECT_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_CONNECT_ENABLED","DD_INTEGRATION_KAFKA_CONNECT_ENABLED"], + "DD_TRACE_KAFKA_E2E_DURATION_ENABLED": ["DD_KAFKA_E2E_DURATION_ENABLED"], + "DD_TRACE_KAFKA_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_ENABLED","DD_INTEGRATION_KAFKA_ENABLED"], + "DD_TRACE_KAFKA_LEGACY_TRACING_ENABLED": ["DD_KAFKA_LEGACY_TRACING_ENABLED"], + "DD_TRACE_KAFKA_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_PROPAGATION_ENABLED","DD_INTEGRATION_KAFKA_PROPAGATION_ENABLED"], + "DD_TRACE_KAFKA_STREAMS_ANALYTICS_SAMPLE_RATE": ["DD_KAFKA_STREAMS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_KAFKA_STREAMS_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_STREAMS_ENABLED","DD_INTEGRATION_KAFKA_STREAMS_ENABLED"], + "DD_TRACE_KAFKA_TIME_IN_QUEUE_ENABLED": ["DD_KAFKA_TIME_IN_QUEUE_ENABLED"], + "DD_TRACE_KARATE_ENABLED": ["DD_TRACE_INTEGRATION_KARATE_ENABLED","DD_INTEGRATION_KARATE_ENABLED"], + "DD_TRACE_KOTLIN_COROUTINE_ENABLED": ["DD_TRACE_INTEGRATION_KOTLIN_COROUTINE_ENABLED","DD_INTEGRATION_KOTLIN_COROUTINE_ENABLED"], + "DD_TRACE_LEGACY_E2E_DURATION_ENABLED": ["DD_LEGACY_E2E_DURATION_ENABLED"], + "DD_TRACE_LETTUCE_4_ASYNC_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_4_ASYNC_ENABLED","DD_INTEGRATION_LETTUCE_4_ASYNC_ENABLED"], + "DD_TRACE_LETTUCE_4_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_4_ENABLED","DD_INTEGRATION_LETTUCE_4_ENABLED"], + "DD_TRACE_LETTUCE_5_ASYNC_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_5_ASYNC_ENABLED","DD_INTEGRATION_LETTUCE_5_ASYNC_ENABLED"], + "DD_TRACE_LETTUCE_5_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_5_ENABLED","DD_INTEGRATION_LETTUCE_5_ENABLED"], + "DD_TRACE_LETTUCE_5_RX_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_5_RX_ENABLED","DD_INTEGRATION_LETTUCE_5_RX_ENABLED"], + "DD_TRACE_LETTUCE_ANALYTICS_SAMPLE_RATE": ["DD_LETTUCE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_LETTUCE_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_ENABLED","DD_INTEGRATION_LETTUCE_ENABLED"], + "DD_TRACE_LIBERTY_ANALYTICS_SAMPLE_RATE": ["DD_LIBERTY_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_LIBERTY_CLASSLOADING_ENABLED": ["DD_TRACE_INTEGRATION_LIBERTY_CLASSLOADING_ENABLED","DD_INTEGRATION_LIBERTY_CLASSLOADING_ENABLED"], + "DD_TRACE_LIBERTY_ENABLED": ["DD_TRACE_INTEGRATION_LIBERTY_ENABLED","DD_INTEGRATION_LIBERTY_ENABLED"], + "DD_TRACE_LOG4J_1_ENABLED": ["DD_TRACE_INTEGRATION_LOG4J_1_ENABLED","DD_INTEGRATION_LOG4J_1_ENABLED"], + "DD_TRACE_LOG4J_2_ENABLED": ["DD_TRACE_INTEGRATION_LOG4J_2_ENABLED","DD_INTEGRATION_LOG4J_2_ENABLED"], + "DD_TRACE_LOG4J_ENABLED": ["DD_TRACE_INTEGRATION_LOG4J_ENABLED","DD_INTEGRATION_LOG4J_ENABLED"], + "DD_TRACE_LOGBACK_ENABLED": ["DD_TRACE_INTEGRATION_LOGBACK_ENABLED","DD_INTEGRATION_LOGBACK_ENABLED"], + "DD_TRACE_LOGS_INTAKE_ENABLED": ["DD_TRACE_INTEGRATION_LOGS_INTAKE_ENABLED","DD_INTEGRATION_LOGS_INTAKE_ENABLED"], + "DD_TRACE_LOGS_INTAKE_LOG4J_2_ENABLED": ["DD_TRACE_INTEGRATION_LOGS_INTAKE_LOG4J_2_ENABLED","DD_INTEGRATION_LOGS_INTAKE_LOG4J_2_ENABLED"], + "DD_TRACE_MAVEN_ENABLED": ["DD_TRACE_INTEGRATION_MAVEN_ENABLED","DD_INTEGRATION_MAVEN_ENABLED"], + "DD_TRACE_MICRONAUT_ANALYTICS_SAMPLE_RATE": ["DD_MICRONAUT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_MICRONAUT_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_ENABLED","DD_INTEGRATION_MICRONAUT_ENABLED"], + "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_2_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_2_ENABLED","DD_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_2_ENABLED"], + "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_3_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_3_ENABLED","DD_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_3_ENABLED"], + "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_4_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_4_ENABLED","DD_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_4_ENABLED"], + "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_ENABLED","DD_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_ENABLED"], + "DD_TRACE_MICRONAUT_SPAN_ORIGIN_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_SPAN_ORIGIN_ENABLED","DD_INTEGRATION_MICRONAUT_SPAN_ORIGIN_ENABLED"], + "DD_TRACE_MMAP_ENABLED": ["DD_TRACE_INTEGRATION_MMAP_ENABLED","DD_INTEGRATION_MMAP_ENABLED"], + "DD_TRACE_MONGO_3_1_ENABLED": ["DD_TRACE_INTEGRATION_MONGO_3_1_ENABLED","DD_INTEGRATION_MONGO_3_1_ENABLED"], + "DD_TRACE_MONGO_3_4_ENABLED": ["DD_TRACE_INTEGRATION_MONGO_3_4_ENABLED","DD_INTEGRATION_MONGO_3_4_ENABLED"], + "DD_TRACE_MONGO_ANALYTICS_ENABLED": ["DD_MONGO_ANALYTICS_ENABLED"], + "DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE": ["DD_MONGO_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_MONGO_ENABLED": ["DD_TRACE_INTEGRATION_MONGO_ENABLED","DD_INTEGRATION_MONGO_ENABLED"], + "DD_TRACE_MONGO_REACTIVESTREAMS_ENABLED": ["DD_TRACE_INTEGRATION_MONGO_REACTIVESTREAMS_ENABLED","DD_INTEGRATION_MONGO_REACTIVESTREAMS_ENABLED"], + "DD_TRACE_MULE_ANALYTICS_SAMPLE_RATE": ["DD_MULE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_MULE_ENABLED": ["DD_TRACE_INTEGRATION_MULE_ENABLED","DD_INTEGRATION_MULE_ENABLED"], + "DD_TRACE_MULE_JPMS_ENABLED": ["DD_TRACE_INTEGRATION_MULE_JPMS_ENABLED","DD_INTEGRATION_MULE_JPMS_ENABLED"], + "DD_TRACE_MULTIPART_ENABLED": ["DD_TRACE_INTEGRATION_MULTIPART_ENABLED","DD_INTEGRATION_MULTIPART_ENABLED"], + "DD_TRACE_NATIVE_IMAGE_ENABLED": ["DD_TRACE_INTEGRATION_NATIVE_IMAGE_ENABLED","DD_INTEGRATION_NATIVE_IMAGE_ENABLED"], + "DD_TRACE_NETTY_3_8_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_3_8_ENABLED","DD_INTEGRATION_NETTY_3_8_ENABLED"], + "DD_TRACE_NETTY_3_9_ANALYTICS_ENABLED": ["DD_NETTY_3_9_ANALYTICS_ENABLED"], + "DD_TRACE_NETTY_3_9_ANALYTICS_SAMPLE_RATE": ["DD_NETTY_3_9_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_NETTY_4_0_ANALYTICS_ENABLED": ["DD_NETTY_4_0_ANALYTICS_ENABLED"], + "DD_TRACE_NETTY_4_0_ANALYTICS_SAMPLE_RATE": ["DD_NETTY_4_0_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_NETTY_4_0_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_4_0_ENABLED","DD_INTEGRATION_NETTY_4_0_ENABLED"], + "DD_TRACE_NETTY_4_1_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_4_1_ENABLED","DD_INTEGRATION_NETTY_4_1_ENABLED"], + "DD_TRACE_NETTY_4_1_HTTP2_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_4_1_HTTP2_ENABLED","DD_INTEGRATION_NETTY_4_1_HTTP2_ENABLED"], + "DD_TRACE_NETTY_ANALYTICS_ENABLED": ["DD_NETTY_ANALYTICS_ENABLED"], + "DD_TRACE_NETTY_ANALYTICS_SAMPLE_RATE": ["DD_NETTY_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_NETTY_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_CONCURRENT_ENABLED","DD_INTEGRATION_NETTY_CONCURRENT_ENABLED"], + "DD_TRACE_NETTY_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_ENABLED","DD_INTEGRATION_NETTY_ENABLED"], + "DD_TRACE_NETTY_EVENT_EXECUTOR_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_EVENT_EXECUTOR_ENABLED","DD_INTEGRATION_NETTY_EVENT_EXECUTOR_ENABLED"], + "DD_TRACE_NETTY_PROMISE_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_PROMISE_ENABLED","DD_INTEGRATION_NETTY_PROMISE_ENABLED"], + "DD_TRACE_NEW_TASK_FOR_ENABLED": ["DD_TRACE_INTEGRATION_NEW_TASK_FOR_ENABLED","DD_INTEGRATION_NEW_TASK_FOR_ENABLED"], + "DD_TRACE_NING_ANALYTICS_SAMPLE_RATE": ["DD_NING_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_NING_ENABLED": ["DD_TRACE_INTEGRATION_NING_ENABLED","DD_INTEGRATION_NING_ENABLED"], + "DD_TRACE_NOT_NOT_TRACE_ENABLED": ["DD_TRACE_INTEGRATION_NOT_NOT_TRACE_ENABLED","DD_INTEGRATION_NOT_NOT_TRACE_ENABLED"], + "DD_TRACE_OGNL_ENABLED": ["DD_TRACE_INTEGRATION_OGNL_ENABLED","DD_INTEGRATION_OGNL_ENABLED"], + "DD_TRACE_OKHTTP_2_ANALYTICS_SAMPLE_RATE": ["DD_OKHTTP_2_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_OKHTTP_2_ENABLED": ["DD_TRACE_INTEGRATION_OKHTTP_2_ENABLED","DD_INTEGRATION_OKHTTP_2_ENABLED"], + "DD_TRACE_OKHTTP_3_ANALYTICS_SAMPLE_RATE": ["DD_OKHTTP_3_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_OKHTTP_3_ENABLED": ["DD_TRACE_INTEGRATION_OKHTTP_3_ENABLED","DD_INTEGRATION_OKHTTP_3_ENABLED"], + "DD_TRACE_OKHTTP_ANALYTICS_SAMPLE_RATE": ["DD_OKHTTP_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_OKHTTP_ENABLED": ["DD_TRACE_INTEGRATION_OKHTTP_ENABLED","DD_INTEGRATION_OKHTTP_ENABLED"], + "DD_TRACE_OPENSEARCH_ANALYTICS_SAMPLE_RATE": ["DD_OPENSEARCH_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_OPENSEARCH_ENABLED": ["DD_TRACE_INTEGRATION_OPENSEARCH_ENABLED","DD_INTEGRATION_OPENSEARCH_ENABLED"], + "DD_TRACE_OPENSEARCH_REST_ENABLED": ["DD_TRACE_INTEGRATION_OPENSEARCH_REST_ENABLED","DD_INTEGRATION_OPENSEARCH_REST_ENABLED"], + "DD_TRACE_OPENSEARCH_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_OPENSEARCH_TRANSPORT_ENABLED","DD_INTEGRATION_OPENSEARCH_TRANSPORT_ENABLED"], + "DD_TRACE_OPENTELEMETRY_1_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_1_ENABLED","DD_INTEGRATION_OPENTELEMETRY_1_ENABLED"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_20_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_1_20_ENABLED","DD_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_1_20_ENABLED"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_26_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_1_26_ENABLED","DD_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_1_26_ENABLED"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_ENABLED": ["DD_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_ENABLED"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_SAMPLE_RATE": ["DD_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_ENABLED": ["DD_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_ENABLED"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_SAMPLE_RATE": ["DD_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_ENABLED","DD_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_ENABLED"], + "DD_TRACE_OPENTELEMETRY_BETA_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_BETA_ENABLED","DD_INTEGRATION_OPENTELEMETRY_BETA_ENABLED"], + "DD_TRACE_OPENTELEMETRY_EXPERIMENTAL_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_ENABLED","DD_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_ENABLED"], + "DD_TRACE_OPENTRACING_ENABLED": ["DD_TRACE_INTEGRATION_OPENTRACING_ENABLED","DD_INTEGRATION_OPENTRACING_ENABLED"], + "DD_TRACE_OPENTRACING_GLOBALTRACER_ENABLED": ["DD_TRACE_INTEGRATION_OPENTRACING_GLOBALTRACER_ENABLED","DD_INTEGRATION_OPENTRACING_GLOBALTRACER_ENABLED"], + "DD_TRACE_ORG_JSON_ENABLED": ["DD_TRACE_INTEGRATION_ORG_JSON_ENABLED","DD_INTEGRATION_ORG_JSON_ENABLED"], + "DD_TRACE_OSGI_ENABLED": ["DD_TRACE_INTEGRATION_OSGI_ENABLED","DD_INTEGRATION_OSGI_ENABLED"], + "DD_TRACE_PEKKO_ACTOR_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_ACTOR_ENABLED","DD_INTEGRATION_PEKKO_ACTOR_ENABLED"], + "DD_TRACE_PEKKO_ACTOR_MAILBOX_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_ACTOR_MAILBOX_ENABLED","DD_INTEGRATION_PEKKO_ACTOR_MAILBOX_ENABLED"], + "DD_TRACE_PEKKO_ACTOR_RECEIVE_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_ACTOR_RECEIVE_ENABLED","DD_INTEGRATION_PEKKO_ACTOR_RECEIVE_ENABLED"], + "DD_TRACE_PEKKO_ACTOR_SEND_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_ACTOR_SEND_ENABLED","DD_INTEGRATION_PEKKO_ACTOR_SEND_ENABLED"], + "DD_TRACE_PEKKO_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_CONCURRENT_ENABLED","DD_INTEGRATION_PEKKO_CONCURRENT_ENABLED"], + "DD_TRACE_PEKKO_HTTP2_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_HTTP2_ENABLED","DD_INTEGRATION_PEKKO_HTTP2_ENABLED"], + "DD_TRACE_PEKKO_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_PEKKO_HTTP_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_PEKKO_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_PEKKO_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_PEKKO_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_HTTP_CLIENT_ENABLED","DD_INTEGRATION_PEKKO_HTTP_CLIENT_ENABLED"], + "DD_TRACE_PEKKO_HTTP_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_HTTP_ENABLED","DD_INTEGRATION_PEKKO_HTTP_ENABLED"], + "DD_TRACE_PEKKO_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_PEKKO_HTTP_SERVER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_PEKKO_HTTP_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_HTTP_SERVER_ENABLED","DD_INTEGRATION_PEKKO_HTTP_SERVER_ENABLED"], + "DD_TRACE_PEKKO_SCHEDULER_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_SCHEDULER_ENABLED","DD_INTEGRATION_PEKKO_SCHEDULER_ENABLED"], + "DD_TRACE_PLAY_ACTION_ENABLED": ["DD_TRACE_INTEGRATION_PLAY_ACTION_ENABLED","DD_INTEGRATION_PLAY_ACTION_ENABLED"], + "DD_TRACE_PLAY_ANALYTICS_ENABLED": ["DD_PLAY_ANALYTICS_ENABLED"], + "DD_TRACE_PLAY_ANALYTICS_SAMPLE_RATE": ["DD_PLAY_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_PLAY_ENABLED": ["DD_TRACE_INTEGRATION_PLAY_ENABLED","DD_INTEGRATION_PLAY_ENABLED"], + "DD_TRACE_PLAY_WS_ANALYTICS_ENABLED": ["DD_PLAY_WS_ANALYTICS_ENABLED"], + "DD_TRACE_PLAY_WS_ANALYTICS_SAMPLE_RATE": ["DD_PLAY_WS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_PLAY_WS_ENABLED": ["DD_TRACE_INTEGRATION_PLAY_WS_ENABLED","DD_INTEGRATION_PLAY_WS_ENABLED"], + "DD_TRACE_POWERMOCK_ENABLED": ["DD_TRACE_INTEGRATION_POWERMOCK_ENABLED","DD_INTEGRATION_POWERMOCK_ENABLED"], + "DD_TRACE_PROPAGATION_STYLE_B3_PADDING_ENABLED": ["DD_TRACE_INTEGRATION_PROPAGATION_STYLE_B3_PADDING_ENABLED","DD_INTEGRATION_PROPAGATION_STYLE_B3_PADDING_ENABLED"], + "DD_TRACE_PROTOBUF_ENABLED": ["DD_TRACE_INTEGRATION_PROTOBUF_ENABLED","DD_INTEGRATION_PROTOBUF_ENABLED"], + "DD_TRACE_QUARTZ_ANALYTICS_SAMPLE_RATE": ["DD_QUARTZ_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_QUARTZ_ENABLED": ["DD_TRACE_INTEGRATION_QUARTZ_ENABLED","DD_INTEGRATION_QUARTZ_ENABLED"], + "DD_TRACE_RABBITMQ_ANALYTICS_SAMPLE_RATE": ["DD_RABBITMQ_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_RABBITMQ_ENABLED": ["DD_TRACE_INTEGRATION_RABBITMQ_ENABLED","DD_INTEGRATION_RABBITMQ_ENABLED"], + "DD_TRACE_RABBITMQ_LEGACY_TRACING_ENABLED": ["DD_RABBITMQ_LEGACY_TRACING_ENABLED"], + "DD_TRACE_RABBITMQ_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_RABBITMQ_PROPAGATION_ENABLED","DD_INTEGRATION_RABBITMQ_PROPAGATION_ENABLED"], + "DD_TRACE_RABBIT_LEGACY_TRACING_ENABLED": ["DD_RABBIT_LEGACY_TRACING_ENABLED"], + "DD_TRACE_RABBIT_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_RABBIT_PROPAGATION_ENABLED","DD_INTEGRATION_RABBIT_PROPAGATION_ENABLED"], + "DD_TRACE_RATPACK_ANALYTICS_ENABLED": ["DD_RATPACK_ANALYTICS_ENABLED"], + "DD_TRACE_RATPACK_ANALYTICS_SAMPLE_RATE": ["DD_RATPACK_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_RATPACK_ENABLED": ["DD_TRACE_INTEGRATION_RATPACK_ENABLED","DD_INTEGRATION_RATPACK_ENABLED"], + "DD_TRACE_RATPACK_REQUEST_BODY_ENABLED": ["DD_TRACE_INTEGRATION_RATPACK_REQUEST_BODY_ENABLED","DD_INTEGRATION_RATPACK_REQUEST_BODY_ENABLED"], + "DD_TRACE_REACTIVE_STREAMS_1_ENABLED": ["DD_TRACE_INTEGRATION_REACTIVE_STREAMS_1_ENABLED","DD_INTEGRATION_REACTIVE_STREAMS_1_ENABLED"], + "DD_TRACE_REACTIVE_STREAMS_ENABLED": ["DD_TRACE_INTEGRATION_REACTIVE_STREAMS_ENABLED","DD_INTEGRATION_REACTIVE_STREAMS_ENABLED"], + "DD_TRACE_REACTOR_CORE_ENABLED": ["DD_TRACE_INTEGRATION_REACTOR_CORE_ENABLED","DD_INTEGRATION_REACTOR_CORE_ENABLED"], + "DD_TRACE_REACTOR_NETTY_1_ENABLED": ["DD_TRACE_INTEGRATION_REACTOR_NETTY_1_ENABLED","DD_INTEGRATION_REACTOR_NETTY_1_ENABLED"], + "DD_TRACE_REACTOR_NETTY_ENABLED": ["DD_TRACE_INTEGRATION_REACTOR_NETTY_ENABLED","DD_INTEGRATION_REACTOR_NETTY_ENABLED"], + "DD_TRACE_REDISCALA_ANALYTICS_SAMPLE_RATE": ["DD_REDISCALA_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_REDISCALA_CONNECTION_ENABLED": ["DD_TRACE_INTEGRATION_REDISCALA_CONNECTION_ENABLED","DD_INTEGRATION_REDISCALA_CONNECTION_ENABLED"], + "DD_TRACE_REDISCALA_ENABLED": ["DD_TRACE_INTEGRATION_REDISCALA_ENABLED","DD_INTEGRATION_REDISCALA_ENABLED"], + "DD_TRACE_REDISSON_ANALYTICS_SAMPLE_RATE": ["DD_REDISSON_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_REDISSON_ENABLED": ["DD_TRACE_INTEGRATION_REDISSON_ENABLED","DD_INTEGRATION_REDISSON_ENABLED"], + "DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE": ["DD_REDIS_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_REDIS_ENABLED": ["DD_TRACE_INTEGRATION_REDIS_ENABLED","DD_INTEGRATION_REDIS_ENABLED"], + "DD_TRACE_REJECTED_EXECUTION_HANDLER_ENABLED": ["DD_TRACE_INTEGRATION_REJECTED_EXECUTION_HANDLER_ENABLED","DD_INTEGRATION_REJECTED_EXECUTION_HANDLER_ENABLED"], + "DD_TRACE_RENAISSANCE_ENABLED": ["DD_TRACE_INTEGRATION_RENAISSANCE_ENABLED","DD_INTEGRATION_RENAISSANCE_ENABLED"], + "DD_TRACE_RESPONSE_ENABLED": ["DD_TRACE_INTEGRATION_RESPONSE_ENABLED","DD_INTEGRATION_RESPONSE_ENABLED"], + "DD_TRACE_RESTEASY_ENABLED": ["DD_TRACE_INTEGRATION_RESTEASY_ENABLED","DD_INTEGRATION_RESTEASY_ENABLED"], + "DD_TRACE_RESTLET_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_RESTLET_HTTP_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_RESTLET_HTTP_ENABLED": ["DD_TRACE_INTEGRATION_RESTLET_HTTP_ENABLED","DD_INTEGRATION_RESTLET_HTTP_ENABLED"], + "DD_TRACE_RESTLET_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_RESTLET_HTTP_SERVER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_RESTLET_HTTP_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_RESTLET_HTTP_SERVER_ENABLED","DD_INTEGRATION_RESTLET_HTTP_SERVER_ENABLED"], + "DD_TRACE_RMI_ANALYTICS_SAMPLE_RATE": ["DD_RMI_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_RMI_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_RMI_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_RMI_CLIENT_CONTEXT_PROPAGATOR_ENABLED": ["DD_TRACE_INTEGRATION_RMI_CLIENT_CONTEXT_PROPAGATOR_ENABLED","DD_INTEGRATION_RMI_CLIENT_CONTEXT_PROPAGATOR_ENABLED"], + "DD_TRACE_RMI_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_RMI_CLIENT_ENABLED","DD_INTEGRATION_RMI_CLIENT_ENABLED"], + "DD_TRACE_RMI_CONTEXT_PROPAGATOR_ENABLED": ["DD_TRACE_INTEGRATION_RMI_CONTEXT_PROPAGATOR_ENABLED","DD_INTEGRATION_RMI_CONTEXT_PROPAGATOR_ENABLED"], + "DD_TRACE_RMI_ENABLED": ["DD_TRACE_INTEGRATION_RMI_ENABLED","DD_INTEGRATION_RMI_ENABLED"], + "DD_TRACE_RMI_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_RMI_SERVER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_RMI_SERVER_CONTEXT_PROPAGATOR_ENABLED": ["DD_TRACE_INTEGRATION_RMI_SERVER_CONTEXT_PROPAGATOR_ENABLED","DD_INTEGRATION_RMI_SERVER_CONTEXT_PROPAGATOR_ENABLED"], + "DD_TRACE_RMI_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_RMI_SERVER_ENABLED","DD_INTEGRATION_RMI_SERVER_ENABLED"], + "DD_TRACE_RUNNABLE_ENABLED": ["DD_TRACE_INTEGRATION_RUNNABLE_ENABLED","DD_INTEGRATION_RUNNABLE_ENABLED"], + "DD_TRACE_RUNNABLE_FUTURE_ENABLED": ["DD_TRACE_INTEGRATION_RUNNABLE_FUTURE_ENABLED","DD_INTEGRATION_RUNNABLE_FUTURE_ENABLED"], + "DD_TRACE_RXJAVA_ENABLED": ["DD_TRACE_INTEGRATION_RXJAVA_ENABLED","DD_INTEGRATION_RXJAVA_ENABLED"], + "DD_TRACE_S3_ENABLED": ["DD_TRACE_INTEGRATION_S3_ENABLED","DD_INTEGRATION_S3_ENABLED"], + "DD_TRACE_SCALATEST_ENABLED": ["DD_TRACE_INTEGRATION_SCALATEST_ENABLED","DD_INTEGRATION_SCALATEST_ENABLED"], + "DD_TRACE_SCALA_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_CONCURRENT_ENABLED","DD_INTEGRATION_SCALA_CONCURRENT_ENABLED"], + "DD_TRACE_SCALA_FUTURE_OBJECT_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_FUTURE_OBJECT_ENABLED","DD_INTEGRATION_SCALA_FUTURE_OBJECT_ENABLED"], + "DD_TRACE_SCALA_PROMISE_COMPLETE_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_PROMISE_COMPLETE_ENABLED","DD_INTEGRATION_SCALA_PROMISE_COMPLETE_ENABLED"], + "DD_TRACE_SCALA_PROMISE_COMPLETION_PRIORITY_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_PROMISE_COMPLETION_PRIORITY_ENABLED","DD_INTEGRATION_SCALA_PROMISE_COMPLETION_PRIORITY_ENABLED"], + "DD_TRACE_SCALA_PROMISE_RESOLVE_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_PROMISE_RESOLVE_ENABLED","DD_INTEGRATION_SCALA_PROMISE_RESOLVE_ENABLED"], + "DD_TRACE_SELENIUM_ENABLED": ["DD_TRACE_INTEGRATION_SELENIUM_ENABLED","DD_INTEGRATION_SELENIUM_ENABLED"], + "DD_TRACE_SERVELET_RESPONSE_ENABLED": ["DD_TRACE_INTEGRATION_SERVELET_RESPONSE_ENABLED","DD_INTEGRATION_SERVELET_RESPONSE_ENABLED"], + "DD_TRACE_SERVICETALK_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_SERVICETALK_CONCURRENT_ENABLED","DD_INTEGRATION_SERVICETALK_CONCURRENT_ENABLED"], + "DD_TRACE_SERVICETALK_ENABLED": ["DD_TRACE_INTEGRATION_SERVICETALK_ENABLED","DD_INTEGRATION_SERVICETALK_ENABLED"], + "DD_TRACE_SERVLET_2_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_2_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SERVLET_2_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_2_ENABLED","DD_INTEGRATION_SERVLET_2_ENABLED"], + "DD_TRACE_SERVLET_3_ANALYTICS_ENABLED": ["DD_SERVLET_3_ANALYTICS_ENABLED"], + "DD_TRACE_SERVLET_3_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_3_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SERVLET_3_ASYNC_CONTEXT_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_3_ASYNC_CONTEXT_ENABLED", "DD_INTEGRATION_SERVLET_3_ASYNC_CONTEXT_ENABLED"], + "DD_TRACE_SERVLET_3_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_3_ENABLED","DD_INTEGRATION_SERVLET_3_ENABLED"], + "DD_TRACE_SERVLET_5_ASYNC_CONTEXT_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_5_ASYNC_CONTEXT_ENABLED", "DD_INTEGRATION_SERVLET_5_ASYNC_CONTEXT_ENABLED"], + "DD_TRACE_SERVLET_5_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_5_ENABLED","DD_INTEGRATION_SERVLET_5_ENABLED"], + "DD_TRACE_SERVLET_ANALYTICS_ENABLED": ["DD_SERVLET_ANALYTICS_ENABLED"], + "DD_TRACE_SERVLET_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SERVLET_COOKIE_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_COOKIE_ENABLED","DD_INTEGRATION_SERVLET_COOKIE_ENABLED"], + "DD_TRACE_SERVLET_DISPATCHER_ANALYTICS_ENABLED": ["DD_SERVLET_DISPATCHER_ANALYTICS_ENABLED"], + "DD_TRACE_SERVLET_DISPATCHER_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_DISPATCHER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SERVLET_DISPATCHER_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_DISPATCHER_ENABLED","DD_INTEGRATION_SERVLET_DISPATCHER_ENABLED"], + "DD_TRACE_SERVLET_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_ENABLED","DD_INTEGRATION_SERVLET_ENABLED"], + "DD_TRACE_SERVLET_FILTER_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_FILTER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SERVLET_FILTER_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_FILTER_ENABLED","DD_INTEGRATION_SERVLET_FILTER_ENABLED"], + "DD_TRACE_SERVLET_REQUEST_BODY_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_REQUEST_BODY_ENABLED","DD_INTEGRATION_SERVLET_REQUEST_BODY_ENABLED"], + "DD_TRACE_SERVLET_REQUEST_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_REQUEST_ENABLED","DD_INTEGRATION_SERVLET_REQUEST_ENABLED"], + "DD_TRACE_SERVLET_RESPONSE_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_RESPONSE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SERVLET_RESPONSE_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_RESPONSE_ENABLED","DD_INTEGRATION_SERVLET_RESPONSE_ENABLED"], + "DD_TRACE_SERVLET_SERVICE_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_SERVICE_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SERVLET_SERVICE_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_SERVICE_ENABLED","DD_INTEGRATION_SERVLET_SERVICE_ENABLED"], + "DD_TRACE_SERVLET_SESSION_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_SESSION_ENABLED","DD_INTEGRATION_SERVLET_SESSION_ENABLED"], + "DD_TRACE_SETUP_TEARDOWN_ENABLED": ["DD_TRACE_INTEGRATION_SETUP_TEARDOWN_ENABLED","DD_INTEGRATION_SETUP_TEARDOWN_ENABLED"], + "DD_TRACE_SFN_ENABLED": ["DD_TRACE_INTEGRATION_SFN_ENABLED","DD_INTEGRATION_SFN_ENABLED"], + "DD_TRACE_SHUTDOWN_ENABLED": ["DD_TRACE_INTEGRATION_SHUTDOWN_ENABLED","DD_INTEGRATION_SHUTDOWN_ENABLED"], + "DD_TRACE_SLICK_ENABLED": ["DD_TRACE_INTEGRATION_SLICK_ENABLED","DD_INTEGRATION_SLICK_ENABLED"], + "DD_TRACE_SNAKEYAML_ENABLED": ["DD_TRACE_INTEGRATION_SNAKEYAML_ENABLED","DD_INTEGRATION_SNAKEYAML_ENABLED"], + "DD_TRACE_SNS_ENABLED": ["DD_TRACE_INTEGRATION_SNS_ENABLED","DD_INTEGRATION_SNS_ENABLED"], + "DD_TRACE_SOCKET_ENABLED": ["DD_TRACE_INTEGRATION_SOCKET_ENABLED","DD_INTEGRATION_SOCKET_ENABLED"], + "DD_TRACE_SPARKJAVA_2_4_ENABLED": ["DD_TRACE_INTEGRATION_SPARKJAVA_2_4_ENABLED","DD_INTEGRATION_SPARKJAVA_2_4_ENABLED"], + "DD_TRACE_SPARKJAVA_ENABLED": ["DD_TRACE_INTEGRATION_SPARKJAVA_ENABLED","DD_INTEGRATION_SPARKJAVA_ENABLED"], + "DD_TRACE_SPARK_ENABLED": ["DD_TRACE_INTEGRATION_SPARK_ENABLED","DD_INTEGRATION_SPARK_ENABLED"], + "DD_TRACE_SPARK_EXECUTOR_ANALYTICS_SAMPLE_RATE": ["DD_SPARK_EXECUTOR_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPARK_EXECUTOR_ENABLED": ["DD_TRACE_INTEGRATION_SPARK_EXECUTOR_ENABLED","DD_INTEGRATION_SPARK_EXECUTOR_ENABLED"], + "DD_TRACE_SPARK_EXIT_ENABLED": ["DD_TRACE_INTEGRATION_SPARK_EXIT_ENABLED","DD_INTEGRATION_SPARK_EXIT_ENABLED"], + "DD_TRACE_SPARK_OPENLINEAGE_ENABLED": ["DD_TRACE_INTEGRATION_SPARK_OPENLINEAGE_ENABLED","DD_INTEGRATION_SPARK_OPENLINEAGE_ENABLED"], + "DD_TRACE_SPRAY_ANALYTICS_SAMPLE_RATE": ["DD_SPRAY_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPRAY_HTTP_ENABLED": ["DD_TRACE_INTEGRATION_SPRAY_HTTP_ENABLED","DD_INTEGRATION_SPRAY_HTTP_ENABLED"], + "DD_TRACE_SPRAY_HTTP_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_SPRAY_HTTP_SERVER_ENABLED","DD_INTEGRATION_SPRAY_HTTP_SERVER_ENABLED"], + "DD_TRACE_SPRING_ASYNC_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_ASYNC_ENABLED","DD_INTEGRATION_SPRING_ASYNC_ENABLED"], + "DD_TRACE_SPRING_BEANS_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_BEANS_ENABLED","DD_INTEGRATION_SPRING_BEANS_ENABLED"], + "DD_TRACE_SPRING_BOOT_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_BOOT_ENABLED","DD_INTEGRATION_SPRING_BOOT_ENABLED"], + "DD_TRACE_SPRING_BOOT_SPAN_ORIGIN_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_BOOT_SPAN_ORIGIN_ENABLED","DD_INTEGRATION_SPRING_BOOT_SPAN_ORIGIN_ENABLED"], + "DD_TRACE_SPRING_CLOUD_ZUUL_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_CLOUD_ZUUL_ENABLED","DD_INTEGRATION_SPRING_CLOUD_ZUUL_ENABLED"], + "DD_TRACE_SPRING_CORE_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_CORE_ENABLED","DD_INTEGRATION_SPRING_CORE_ENABLED"], + "DD_TRACE_SPRING_DATA_ANALYTICS_ENABLED": ["DD_SPRING_DATA_ANALYTICS_ENABLED"], + "DD_TRACE_SPRING_DATA_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_DATA_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPRING_DATA_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_DATA_ENABLED","DD_INTEGRATION_SPRING_DATA_ENABLED"], + "DD_TRACE_SPRING_JMS_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_JMS_ENABLED","DD_INTEGRATION_SPRING_JMS_ENABLED"], + "DD_TRACE_SPRING_MESSAGING_4_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_MESSAGING_4_ENABLED","DD_INTEGRATION_SPRING_MESSAGING_4_ENABLED"], + "DD_TRACE_SPRING_MESSAGING_ANALYTICS_ENABLED": ["DD_SPRING_MESSAGING_ANALYTICS_ENABLED"], + "DD_TRACE_SPRING_MESSAGING_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_MESSAGING_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPRING_MESSAGING_E2E_DURATION_ENABLED": ["DD_SPRING_MESSAGING_E2E_DURATION_ENABLED"], + "DD_TRACE_SPRING_MESSAGING_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_MESSAGING_ENABLED","DD_INTEGRATION_SPRING_MESSAGING_ENABLED"], + "DD_TRACE_SPRING_PATH_FILTER_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_PATH_FILTER_ENABLED","DD_INTEGRATION_SPRING_PATH_FILTER_ENABLED"], + "DD_TRACE_SPRING_RABBIT_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_RABBIT_ENABLED","DD_INTEGRATION_SPRING_RABBIT_ENABLED"], + "DD_TRACE_SPRING_SCHEDULING_ANALYTICS_ENABLED": ["DD_SPRING_SCHEDULING_ANALYTICS_ENABLED"], + "DD_TRACE_SPRING_SCHEDULING_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_SCHEDULING_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPRING_SCHEDULING_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_SCHEDULING_ENABLED","DD_INTEGRATION_SPRING_SCHEDULING_ENABLED"], + "DD_TRACE_SPRING_SCHEDULING_LEGACY_TRACING_ENABLED": ["DD_SPRING_SCHEDULING_LEGACY_TRACING_ENABLED"], + "DD_TRACE_SPRING_SECURITY_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_SECURITY_ENABLED","DD_INTEGRATION_SPRING_SECURITY_ENABLED"], + "DD_TRACE_SPRING_WEBFLUX_ANALYTICS_ENABLED": ["DD_SPRING_WEBFLUX_ANALYTICS_ENABLED"], + "DD_TRACE_SPRING_WEBFLUX_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_WEBFLUX_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPRING_WEBFLUX_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_WEBFLUX_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPRING_WEBFLUX_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEBFLUX_CLIENT_ENABLED","DD_INTEGRATION_SPRING_WEBFLUX_CLIENT_ENABLED"], + "DD_TRACE_SPRING_WEBFLUX_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEBFLUX_ENABLED","DD_INTEGRATION_SPRING_WEBFLUX_ENABLED"], + "DD_TRACE_SPRING_WEBFLUX_FUNCTIONAL_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEBFLUX_FUNCTIONAL_ENABLED","DD_INTEGRATION_SPRING_WEBFLUX_FUNCTIONAL_ENABLED"], + "DD_TRACE_SPRING_WEB_ANALYTICS_ENABLED": ["DD_SPRING_WEB_ANALYTICS_ENABLED"], + "DD_TRACE_SPRING_WEB_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_WEB_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPRING_WEB_CODE_ORIGIN_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEB_CODE_ORIGIN_ENABLED","DD_INTEGRATION_SPRING_WEB_CODE_ORIGIN_ENABLED"], + "DD_TRACE_SPRING_WEB_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEB_ENABLED","DD_INTEGRATION_SPRING_WEB_ENABLED"], + "DD_TRACE_SPRING_WS_2_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WS_2_ENABLED","DD_INTEGRATION_SPRING_WS_2_ENABLED"], + "DD_TRACE_SPRING_WS_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WS_ENABLED","DD_INTEGRATION_SPRING_WS_ENABLED"], + "DD_TRACE_SPYMEMCACHED_ANALYTICS_SAMPLE_RATE": ["DD_SPYMEMCACHED_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SPYMEMCACHED_ENABLED": ["DD_TRACE_INTEGRATION_SPYMEMCACHED_ENABLED","DD_INTEGRATION_SPYMEMCACHED_ENABLED"], + "DD_TRACE_SQS_ENABLED": ["DD_TRACE_INTEGRATION_SQS_ENABLED","DD_INTEGRATION_SQS_ENABLED"], + "DD_TRACE_SQS_LEGACY_TRACING_ENABLED": ["DD_SQS_LEGACY_TRACING_ENABLED"], + "DD_TRACE_SQS_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_SQS_PROPAGATION_ENABLED","DD_INTEGRATION_SQS_PROPAGATION_ENABLED"], + "DD_TRACE_SSLSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_SSLSOCKET_ENABLED","DD_INTEGRATION_SSLSOCKET_ENABLED"], + "DD_TRACE_STATS_COMPUTATION_ENABLED": ["DD_TRACE_INTEGRATION_STATS_COMPUTATION_ENABLED","DD_INTEGRATION_STATS_COMPUTATION_ENABLED"], + "DD_TRACE_STRUCTURED_TASK_SCOPE_ENABLED": ["DD_TRACE_INTEGRATION_STRUCTURED_TASK_SCOPE_ENABLED","DD_INTEGRATION_STRUCTURED_TASK_SCOPE_ENABLED"], + "DD_TRACE_SUREFIRE_ENABLED": ["DD_TRACE_INTEGRATION_SUREFIRE_ENABLED","DD_INTEGRATION_SUREFIRE_ENABLED"], + "DD_TRACE_SYNAPSE3_ANALYTICS_SAMPLE_RATE": ["DD_SYNAPSE3_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_SYNAPSE3_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_SYNAPSE3_CLIENT_ENABLED","DD_INTEGRATION_SYNAPSE3_CLIENT_ENABLED"], + "DD_TRACE_SYNAPSE3_ENABLED": ["DD_TRACE_INTEGRATION_SYNAPSE3_ENABLED","DD_INTEGRATION_SYNAPSE3_ENABLED"], + "DD_TRACE_SYNAPSE3_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_SYNAPSE3_SERVER_ENABLED","DD_INTEGRATION_SYNAPSE3_SERVER_ENABLED"], + "DD_TRACE_TASK_RUNNER_ENABLED": ["DD_TRACE_INTEGRATION_TASK_RUNNER_ENABLED","DD_INTEGRATION_TASK_RUNNER_ENABLED"], + "DD_TRACE_TASK_UNWRAPPING_ENABLED": ["DD_TRACE_INTEGRATION_TASK_UNWRAPPING_ENABLED","DD_INTEGRATION_TASK_UNWRAPPING_ENABLED"], + "DD_TRACE_TESTNG_6_ENABLED": ["DD_TRACE_INTEGRATION_TESTNG_6_ENABLED","DD_INTEGRATION_TESTNG_6_ENABLED"], + "DD_TRACE_TESTNG_7_ENABLED": ["DD_TRACE_INTEGRATION_TESTNG_7_ENABLED","DD_INTEGRATION_TESTNG_7_ENABLED"], + "DD_TRACE_TESTNG_ENABLED": ["DD_TRACE_INTEGRATION_TESTNG_ENABLED","DD_INTEGRATION_TESTNG_ENABLED"], + "DD_TRACE_TESTNG_ITR_ENABLED": ["DD_TRACE_INTEGRATION_TESTNG_ITR_ENABLED","DD_INTEGRATION_TESTNG_ITR_ENABLED"], + "DD_TRACE_TEST_ORDER_ENABLED": ["DD_TRACE_INTEGRATION_TEST_ORDER_ENABLED","DD_INTEGRATION_TEST_ORDER_ENABLED"], + "DD_TRACE_TEST_RETRY_ENABLED": ["DD_TRACE_INTEGRATION_TEST_RETRY_ENABLED","DD_INTEGRATION_TEST_RETRY_ENABLED"], + "DD_TRACE_THREAD_POOL_EXECUTORS_LEGACY_TRACING_ENABLED": ["DD_THREAD_POOL_EXECUTORS_LEGACY_TRACING_ENABLED"], + "DD_TRACE_THROWABLES_ENABLED": ["DD_TRACE_INTEGRATION_THROWABLES_ENABLED","DD_INTEGRATION_THROWABLES_ENABLED"], + "DD_TRACE_THYMELEAF_ENABLED": ["DD_TRACE_INTEGRATION_THYMELEAF_ENABLED","DD_INTEGRATION_THYMELEAF_ENABLED"], + "DD_TRACE_TIBCO_BW_ANALYTICS_SAMPLE_RATE": ["DD_TIBCO_BW_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_TIBCO_BW_ENABLED": ["DD_TRACE_INTEGRATION_TIBCO_BW_ENABLED","DD_INTEGRATION_TIBCO_BW_ENABLED"], + "DD_TRACE_TIBCO_ENABLED": ["DD_TRACE_INTEGRATION_TIBCO_ENABLED","DD_INTEGRATION_TIBCO_ENABLED"], + "DD_TRACE_TINYLOG_ENABLED": ["DD_TRACE_INTEGRATION_TINYLOG_ENABLED","DD_INTEGRATION_TINYLOG_ENABLED"], + "DD_TRACE_TOMCAT_ANALYTICS_ENABLED": ["DD_TOMCAT_ANALYTICS_ENABLED"], + "DD_TRACE_TOMCAT_ANALYTICS_SAMPLE_RATE": ["DD_TOMCAT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_TOMCAT_CLASSLOADING_ENABLED": ["DD_TRACE_INTEGRATION_TOMCAT_CLASSLOADING_ENABLED","DD_INTEGRATION_TOMCAT_CLASSLOADING_ENABLED"], + "DD_TRACE_TOMCAT_ENABLED": ["DD_TRACE_INTEGRATION_TOMCAT_ENABLED","DD_INTEGRATION_TOMCAT_ENABLED"], + "DD_TRACE_TOMCAT_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_TOMCAT_WEBSOCKET_ENABLED","DD_INTEGRATION_TOMCAT_WEBSOCKET_ENABLED"], + "DD_TRACE_TRACE_ANNOTATION_ANALYTICS_ENABLED": ["DD_TRACE_ANNOTATION_ANALYTICS_ENABLED"], + "DD_TRACE_TRACE_ANNOTATION_ANALYTICS_SAMPLE_RATE": ["DD_TRACE_ANNOTATION_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_TRACE_ANNOTATION_ENABLED": ["DD_TRACE_INTEGRATION_TRACE_ANNOTATION_ENABLED","DD_INTEGRATION_TRACE_ANNOTATION_ENABLED"], + "DD_TRACE_TRACE_CONFIG_ANALYTICS_ENABLED": ["DD_TRACE_CONFIG_ANALYTICS_ENABLED"], + "DD_TRACE_TRACE_CONFIG_ANALYTICS_SAMPLE_RATE": ["DD_TRACE_CONFIG_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_TRACE_CONFIG_ENABLED": ["DD_TRACE_INTEGRATION_TRACE_CONFIG_ENABLED","DD_INTEGRATION_TRACE_CONFIG_ENABLED"], + "DD_TRACE_TRACE_ENABLED": ["DD_TRACE_INTEGRATION_TRACE_ENABLED","DD_INTEGRATION_TRACE_ENABLED"], + "DD_TRACE_TWILIO_SDK_ANALYTICS_SAMPLE_RATE": ["DD_TWILIO_SDK_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_TWILIO_SDK_ENABLED": ["DD_TRACE_INTEGRATION_TWILIO_SDK_ENABLED","DD_INTEGRATION_TWILIO_SDK_ENABLED"], + "DD_TRACE_UNDERTOW_2_0_ENABLED": ["DD_TRACE_INTEGRATION_UNDERTOW_2_0_ENABLED","DD_INTEGRATION_UNDERTOW_2_0_ENABLED"], + "DD_TRACE_UNDERTOW_2_2_ENABLED": ["DD_TRACE_INTEGRATION_UNDERTOW_2_2_ENABLED","DD_INTEGRATION_UNDERTOW_2_2_ENABLED"], + "DD_TRACE_UNDERTOW_ENABLED": ["DD_TRACE_INTEGRATION_UNDERTOW_ENABLED","DD_INTEGRATION_UNDERTOW_ENABLED"], + "DD_TRACE_UNDERTOW_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_UNDERTOW_HTTP_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_UNDERTOW_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_UNDERTOW_HTTP_SERVER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_UNDERTOW_LEGACY_TRACING_ENABLED": ["DD_UNDERTOW_LEGACY_TRACING_ENABLED"], + "DD_TRACE_UNDERTOW_REQUEST_PARSE_ENABLED": ["DD_TRACE_INTEGRATION_UNDERTOW_REQUEST_PARSE_ENABLED","DD_INTEGRATION_UNDERTOW_REQUEST_PARSE_ENABLED"], + "DD_TRACE_URLCONNECTION_ANALYTICS_SAMPLE_RATE": ["DD_URLCONNECTION_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_URLCONNECTION_ENABLED": ["DD_TRACE_INTEGRATION_URLCONNECTION_ENABLED","DD_INTEGRATION_URLCONNECTION_ENABLED"], + "DD_TRACE_VALKEY_ANALYTICS_SAMPLE_RATE": ["DD_VALKEY_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_VALKEY_ENABLED": ["DD_TRACE_INTEGRATION_VALKEY_ENABLED","DD_INTEGRATION_VALKEY_ENABLED"], + "DD_TRACE_VELOCITY_ENABLED": ["DD_TRACE_INTEGRATION_VELOCITY_ENABLED","DD_INTEGRATION_VELOCITY_ENABLED"], + "DD_TRACE_VERTX_3_4_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_3_4_ENABLED","DD_INTEGRATION_VERTX_3_4_ENABLED"], + "DD_TRACE_VERTX_3_5_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_3_5_ENABLED","DD_INTEGRATION_VERTX_3_5_ENABLED"], + "DD_TRACE_VERTX_3_9_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_3_9_ENABLED","DD_INTEGRATION_VERTX_3_9_ENABLED"], + "DD_TRACE_VERTX_4_0_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_4_0_ENABLED","DD_INTEGRATION_VERTX_4_0_ENABLED"], + "DD_TRACE_VERTX_5_0_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_5_0_ENABLED","DD_INTEGRATION_VERTX_5_0_ENABLED"], + "DD_TRACE_VERTX_ANALYTICS_SAMPLE_RATE": ["DD_VERTX_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_VERTX_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_ENABLED","DD_INTEGRATION_VERTX_ENABLED"], + "DD_TRACE_VERTX_REDIS_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_VERTX_REDIS_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_VERTX_REDIS_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_REDIS_CLIENT_ENABLED","DD_INTEGRATION_VERTX_REDIS_CLIENT_ENABLED"], + "DD_TRACE_VERTX_ROUTE_HANDLER_ANALYTICS_ENABLED": ["DD_VERTX_ROUTE_HANDLER_ANALYTICS_ENABLED"], + "DD_TRACE_VERTX_ROUTE_HANDLER_ANALYTICS_SAMPLE_RATE": ["DD_VERTX_ROUTE_HANDLER_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_VERTX_SQL_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_VERTX_SQL_CLIENT_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_VERTX_SQL_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_SQL_CLIENT_ENABLED","DD_INTEGRATION_VERTX_SQL_CLIENT_ENABLED"], + "DD_TRACE_WALLCLOCK_ENABLED": ["DD_TRACE_INTEGRATION_WALLCLOCK_ENABLED","DD_INTEGRATION_WALLCLOCK_ENABLED"], + "DD_TRACE_WEAVER_ENABLED": ["DD_TRACE_INTEGRATION_WEAVER_ENABLED","DD_INTEGRATION_WEAVER_ENABLED"], + "DD_TRACE_WEBSOCKET_ANALYTICS_SAMPLE_RATE": ["DD_WEBSOCKET_ANALYTICS_SAMPLE_RATE"], + "DD_TRACE_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_WEBSOCKET_ENABLED","DD_INTEGRATION_WEBSOCKET_ENABLED"], + "DD_TRACE_WEBSPHERE_JMX_ENABLED": ["DD_TRACE_INTEGRATION_WEBSPHERE_JMX_ENABLED","DD_INTEGRATION_WEBSPHERE_JMX_ENABLED"], + "DD_TRACE_WILDFLY_ENABLED": ["DD_TRACE_INTEGRATION_WILDFLY_ENABLED","DD_INTEGRATION_WILDFLY_ENABLED"], + "DD_TRACE_ZIO_EXPERIMENTAL_ENABLED": ["DD_TRACE_INTEGRATION_ZIO_EXPERIMENTAL_ENABLED","DD_INTEGRATION_ZIO_EXPERIMENTAL_ENABLED"], + "DD_TRACE_AEROSPIKE_ANALYTICS_ENABLED": ["DD_AEROSPIKE_ANALYTICS_ENABLED"], + "DD_TRACE_AKKA_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_AKKA_HTTP_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_AKKA_HTTP_SERVER_ANALYTICS_ENABLED": ["DD_AKKA_HTTP_SERVER_ANALYTICS_ENABLED"], + "DD_TRACE_AMQP_ANALYTICS_ENABLED": ["DD_AMQP_ANALYTICS_ENABLED"], + "DD_TRACE_AMQP_E2E_DURATION_ENABLED": ["DD_AMQP_E2E_DURATION_ENABLED"], + "DD_TRACE_ANALYTICS_ENABLED": ["DD_ANALYTICS_ENABLED"], + "DD_TRACE_APACHE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["DD_APACHE_HTTPASYNCCLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_APACHE_HTTPCLIENT5_ANALYTICS_ENABLED": ["DD_APACHE_HTTPCLIENT5_ANALYTICS_ENABLED"], + "DD_TRACE_APACHE_HTTPCLIENT_ANALYTICS_ENABLED": ["DD_APACHE_HTTPCLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_APACHE_HTTP_CLIENT5_ANALYTICS_ENABLED": ["DD_APACHE_HTTP_CLIENT5_ANALYTICS_ENABLED"], + "DD_TRACE_APACHE_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_APACHE_HTTP_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_ARMERIA_ANALYTICS_ENABLED": ["DD_ARMERIA_ANALYTICS_ENABLED"], + "DD_TRACE_ARMERIA_GRPC_ANALYTICS_ENABLED": ["DD_ARMERIA_GRPC_ANALYTICS_ENABLED"], + "DD_TRACE_ARMERIA_GRPC_CLIENT_ANALYTICS_ENABLED": ["DD_ARMERIA_GRPC_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_ARMERIA_GRPC_SERVER_ANALYTICS_ENABLED": ["DD_ARMERIA_GRPC_SERVER_ANALYTICS_ENABLED"], + "DD_TRACE_AWS_SDK_ANALYTICS_ENABLED": ["DD_AWS_SDK_ANALYTICS_ENABLED"], + "DD_TRACE_AWS_SDK_E2E_DURATION_ENABLED": ["DD_AWS_SDK_E2E_DURATION_ENABLED"], + "DD_TRACE_AXIS2_ANALYTICS_ENABLED": ["DD_AXIS2_ANALYTICS_ENABLED"], + "DD_TRACE_AXWAY_HTTP_ANALYTICS_ENABLED": ["DD_AXWAY_HTTP_ANALYTICS_ENABLED"], + "DD_TRACE_AZURE_FUNCTIONS_ANALYTICS_ENABLED": ["DD_AZURE_FUNCTIONS_ANALYTICS_ENABLED"], + "DD_TRACE_CASSANDRA_ANALYTICS_ENABLED": ["DD_CASSANDRA_ANALYTICS_ENABLED"], + "DD_TRACE_COMMONS_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_COMMONS_HTTP_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_COUCHBASE_ANALYTICS_ENABLED": ["DD_COUCHBASE_ANALYTICS_ENABLED"], + "DD_TRACE_CUCUMBER_5_ANALYTICS_ENABLED": ["DD_CUCUMBER_5_ANALYTICS_ENABLED"], + "DD_TRACE_CUCUMBER_ANALYTICS_ENABLED": ["DD_CUCUMBER_ANALYTICS_ENABLED"], + "DD_TRACE_DATANUCLEUS_ANALYTICS_ENABLED": ["DD_DATANUCLEUS_ANALYTICS_ENABLED"], + "DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED": ["DD_ELASTICSEARCH_ANALYTICS_ENABLED"], + "DD_TRACE_FINATRA_ANALYTICS_ENABLED": ["DD_FINATRA_ANALYTICS_ENABLED"], + "DD_TRACE_GOOGLE_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_GOOGLE_HTTP_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_GOOGLE_PUBSUB_ANALYTICS_ENABLED": ["DD_GOOGLE_PUBSUB_ANALYTICS_ENABLED"], + "DD_TRACE_GOOGLE_PUBSUB_E2E_DURATION_ENABLED": ["DD_GOOGLE_PUBSUB_E2E_DURATION_ENABLED"], + "DD_TRACE_GRAPHQL_JAVA_ANALYTICS_ENABLED": ["DD_GRAPHQL_JAVA_ANALYTICS_ENABLED"], + "DD_TRACE_GRIZZLY_CLIENT_ANALYTICS_ENABLED": ["DD_GRIZZLY_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_HAZELCAST_SDK_ANALYTICS_ENABLED": ["DD_HAZELCAST_SDK_ANALYTICS_ENABLED"], + "DD_TRACE_HIBERNATE_CORE_ANALYTICS_ENABLED": ["DD_HIBERNATE_CORE_ANALYTICS_ENABLED"], + "DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["DD_HTTPASYNCCLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_HTTPCLIENT5_ANALYTICS_ENABLED": ["DD_HTTPCLIENT5_ANALYTICS_ENABLED"], + "DD_TRACE_HTTPCLIENT_ANALYTICS_ENABLED": ["DD_HTTPCLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_IGNITE_ANALYTICS_ENABLED": ["DD_IGNITE_ANALYTICS_ENABLED"], + "DD_TRACE_JAKARTA_WS_ANALYTICS_ENABLED": ["DD_JAKARTA_WS_ANALYTICS_ENABLED"], + "DD_TRACE_JAVA_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_JAVA_HTTP_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_JAXRS_ANALYTICS_ENABLED": ["DD_JAXRS_ANALYTICS_ENABLED"], + "DD_TRACE_JAX_RS_ANALYTICS_ENABLED": ["DD_JAX_RS_ANALYTICS_ENABLED"], + "DD_TRACE_JAX_RS_CLIENT_ANALYTICS_ENABLED": ["DD_JAX_RS_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_JAX_WS_ANALYTICS_ENABLED": ["DD_JAX_WS_ANALYTICS_ENABLED"], + "DD_TRACE_JDBC_DATASOURCE_ANALYTICS_ENABLED": ["DD_JDBC_DATASOURCE_ANALYTICS_ENABLED"], + "DD_TRACE_JEDIS_ANALYTICS_ENABLED": ["DD_JEDIS_ANALYTICS_ENABLED"], + "DD_TRACE_JETTY_CLIENT_ANALYTICS_ENABLED": ["DD_JETTY_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_JMS_ANALYTICS_ENABLED": ["DD_JMS_ANALYTICS_ENABLED"], + "DD_TRACE_JMS_E2E_DURATION_ENABLED": ["DD_JMS_E2E_DURATION_ENABLED"], + "DD_TRACE_JMS_TIME_IN_QUEUE_ENABLED": ["DD_JMS_TIME_IN_QUEUE_ENABLED"], + "DD_TRACE_KAFKA_STREAMS_ANALYTICS_ENABLED": ["DD_KAFKA_STREAMS_ANALYTICS_ENABLED"], + "DD_TRACE_KAFKA_STREAMS_E2E_DURATION_ENABLED": ["DD_KAFKA_STREAMS_E2E_DURATION_ENABLED"], + "DD_TRACE_LETTUCE_ANALYTICS_ENABLED": ["DD_LETTUCE_ANALYTICS_ENABLED"], + "DD_TRACE_LIBERTY_ANALYTICS_ENABLED": ["DD_LIBERTY_ANALYTICS_ENABLED"], + "DD_TRACE_MICRONAUT_ANALYTICS_ENABLED": ["DD_MICRONAUT_ANALYTICS_ENABLED"], + "DD_TRACE_MULE_ANALYTICS_ENABLED": ["DD_MULE_ANALYTICS_ENABLED"], + "DD_TRACE_NING_ANALYTICS_ENABLED": ["DD_NING_ANALYTICS_ENABLED"], + "DD_TRACE_OKHTTP_2_ANALYTICS_ENABLED": ["DD_OKHTTP_2_ANALYTICS_ENABLED"], + "DD_TRACE_OKHTTP_3_ANALYTICS_ENABLED": ["DD_OKHTTP_3_ANALYTICS_ENABLED"], + "DD_TRACE_OKHTTP_ANALYTICS_ENABLED": ["DD_OKHTTP_ANALYTICS_ENABLED"], + "DD_TRACE_OPENSEARCH_ANALYTICS_ENABLED": ["DD_OPENSEARCH_ANALYTICS_ENABLED"], + "DD_TRACE_PEKKO_HTTP_ANALYTICS_ENABLED": ["DD_PEKKO_HTTP_ANALYTICS_ENABLED"], + "DD_TRACE_PEKKO_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_PEKKO_HTTP_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_PEKKO_HTTP_SERVER_ANALYTICS_ENABLED": ["DD_PEKKO_HTTP_SERVER_ANALYTICS_ENABLED"], + "DD_TRACE_QUARTZ_ANALYTICS_ENABLED": ["DD_QUARTZ_ANALYTICS_ENABLED"], + "DD_TRACE_RABBITMQ_ANALYTICS_ENABLED": ["DD_RABBITMQ_ANALYTICS_ENABLED"], + "DD_TRACE_RABBITMQ_E2E_DURATION_ENABLED": ["DD_RABBITMQ_E2E_DURATION_ENABLED"], + "DD_TRACE_RABBITMQ_TIME_IN_QUEUE_ENABLED": ["DD_RABBITMQ_TIME_IN_QUEUE_ENABLED"], + "DD_TRACE_RABBIT_TIME_IN_QUEUE_ENABLED": ["DD_RABBIT_TIME_IN_QUEUE_ENABLED"], + "DD_TRACE_REDISSCALA_ANALYTICS_ENABLED": ["DD_REDISSCALA_ANALYTICS_ENABLED"], + "DD_TRACE_REDISSON_ANALYTICS_ENABLED": ["DD_REDISSON_ANALYTICS_ENABLED"], + "DD_TRACE_REDIS_ANALYTICS_ENABLED": ["DD_REDIS_ANALYTICS_ENABLED"], + "DD_TRACE_RESTLET_HTTP_ANALYTICS_ENABLED": ["DD_RESTLET_HTTP_ANALYTICS_ENABLED"], + "DD_TRACE_RESTLET_HTTP_SERVER_ANALYTICS_ENABLED": ["DD_RESTLET_HTTP_SERVER_ANALYTICS_ENABLED"], + "DD_TRACE_RMI_ANALYTICS_ENABLED": ["DD_RMI_ANALYTICS_ENABLED"], + "DD_TRACE_RMI_CLIENT_ANALYTICS_ENABLED": ["DD_RMI_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_RMI_SERVER_ANALYTICS_ENABLED": ["DD_RMI_SERVER_ANALYTICS_ENABLED"], + "DD_TRACE_SERVLET_2_ANALYTICS_ENABLED": ["DD_SERVLET_2_ANALYTICS_ENABLED"], + "DD_TRACE_SERVLET_FILTER_ANALYTICS_ENABLED": ["DD_SERVLET_FILTER_ANALYTICS_ENABLED"], + "DD_TRACE_SERVLET_RESPONSE_ANALYTICS_ENABLED": ["DD_SERVLET_RESPONSE_ANALYTICS_ENABLED"], + "DD_TRACE_SERVLET_SERVICE_ANALYTICS_ENABLED": ["DD_SERVLET_SERVICE_ANALYTICS_ENABLED"], + "DD_TRACE_SPARK_EXECUTOR_ANALYTICS_ENABLED": ["DD_SPARK_EXECUTOR_ANALYTICS_ENABLED"], + "DD_TRACE_SPRAY_ANALYTICS_ENABLED": ["DD_SPRAY_ANALYTICS_ENABLED"], + "DD_TRACE_SPRING_WEBFLUX_CLIENT_ANALYTICS_ENABLED": ["DD_SPRING_WEBFLUX_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_SPYMEMCACHED_ANALYTICS_ENABLED": ["DD_SPYMEMCACHED_ANALYTICS_ENABLED"], + "DD_TRACE_SQS_TIME_IN_QUEUE_ENABLED": ["DD_SQS_TIME_IN_QUEUE_ENABLED"], + "DD_TRACE_SYNAPSE3_ANALYTICS_ENABLED": ["DD_SYNAPSE3_ANALYTICS_ENABLED"], + "DD_TRACE_TIBCO_BW_ANALYTICS_ENABLED": ["DD_TIBCO_BW_ANALYTICS_ENABLED"], + "DD_TRACE_TWILIO_SDK_ANALYTICS_ENABLED": ["DD_TWILIO_SDK_ANALYTICS_ENABLED"], + "DD_TRACE_UNDERTOW_HTTP_ANALYTICS_ENABLED": ["DD_UNDERTOW_HTTP_ANALYTICS_ENABLED"], + "DD_TRACE_UNDERTOW_HTTP_SERVER_ANALYTICS_ENABLED": ["DD_UNDERTOW_HTTP_SERVER_ANALYTICS_ENABLED"], + "DD_TRACE_URLCONNECTION_ANALYTICS_ENABLED": ["DD_URLCONNECTION_ANALYTICS_ENABLED"], + "DD_TRACE_VALKEY_ANALYTICS_ENABLED": ["DD_VALKEY_ANALYTICS_ENABLED"], + "DD_TRACE_VERTX_ANALYTICS_ENABLED": ["DD_VERTX_ANALYTICS_ENABLED"], + "DD_TRACE_VERTX_REDIS_CLIENT_ANALYTICS_ENABLED": ["DD_VERTX_REDIS_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_VERTX_SQL_CLIENT_ANALYTICS_ENABLED": ["DD_VERTX_SQL_CLIENT_ANALYTICS_ENABLED"], + "DD_TRACE_WEBSOCKET_ANALYTICS_ENABLED": ["DD_WEBSOCKET_ANALYTICS_ENABLED"] + }, + "deprecations": { + } +} From 0eda8639b29abdfb53ac5ba32887ed33f8c10719 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 23 Sep 2025 14:04:45 -0700 Subject: [PATCH 22/41] removing extra supported-configurations.json --- .../resources/supported-configurations.json | 2050 ----------------- 1 file changed, 2050 deletions(-) delete mode 100644 utils/config-utils/src/main/resources/supported-configurations.json diff --git a/utils/config-utils/src/main/resources/supported-configurations.json b/utils/config-utils/src/main/resources/supported-configurations.json deleted file mode 100644 index 725fef3703e..00000000000 --- a/utils/config-utils/src/main/resources/supported-configurations.json +++ /dev/null @@ -1,2050 +0,0 @@ -{ - "supportedConfigurations": { - "DD_AAS_JAVA_EXTENSION_VERSION": ["A"], - "DD_ACTION_EXECUTION_ID": ["A"], - "DD_ADD_SPAN_POINTERS": ["A"], - "DD_AGENTLESS_LOG_SUBMISSION_ENABLED": ["A"], - "DD_AGENTLESS_LOG_SUBMISSION_LEVEL": ["A"], - "DD_AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE": ["A"], - "DD_AGENTLESS_LOG_SUBMISSION_URL": ["A"], - "DD_AGENT_HOST": ["A"], - "DD_AGENT_PORT": ["A"], - "DD_API_KEY": ["A"], - "DD_API_KEY_FILE": ["A"], - "DD_API_SECURITY_ENABLED": ["A"], - "DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED": ["A"], - "DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT": ["A"], - "DD_API_SECURITY_SAMPLE_DELAY": ["A"], - "DD_APM_TRACING_ENABLED": ["A"], - "DD_APPLICATION_KEY": ["A"], - "DD_APPLICATION_KEY_FILE": ["A"], - "DD_APP_CUSTOMLOGMANAGER": ["A"], - "DD_APP_CUSTOMJMXBUILDER": ["A"], - "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING": ["A"], - "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE": ["A"], - "DD_APPSEC_COLLECT_ALL_HEADERS": ["A"], - "DD_APPSEC_ENABLED": ["A"], - "DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED": ["A"], - "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML": ["A"], - "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON": ["A"], - "DD_APPSEC_IPHEADER": ["A"], - "DD_APPSEC_MAX_COLLECTED_HEADERS": ["A"], - "DD_APPSEC_MAX_STACKTRACES": ["A"], - "DD_APPSEC_MAX_STACKTRACE_DEPTH": ["A"], - "DD_APPSEC_MAX_STACK_TRACES": ["A"], - "DD_APPSEC_MAX_STACK_TRACE_DEPTH": ["A"], - "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP": ["A"], - "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP": ["A"], - "DD_APPSEC_RASP_COLLECT_REQUEST_BODY": ["A"], - "DD_APPSEC_RASP_ENABLED": ["A"], - "DD_APPSEC_REPORTING_INBAND": ["A"], - "DD_APPSEC_REPORT_TIMEOUT": ["A"], - "DD_APPSEC_RULES": ["A"], - "DD_APPSEC_SCA_ENABLED": ["A"], - "DD_APPSEC_STACKTRACE_ENABLED": ["A"], - "DD_APPSEC_STACK_TRACE_ENABLED": ["A"], - "DD_APPSEC_TRACE_RATE_LIMIT": ["A"], - "DD_APPSEC_WAF_METRICS": ["A"], - "DD_APPSEC_WAF_TIMEOUT": ["A"], - "DD_AWS_PROPAGATION_ENABLED": ["A"], - "DD_AWS_SDK_PROPAGATION_ENABLED": ["A"], - "DD_AZURE_APP_SERVICES": ["A"], - "DD_CIVISIBILITY_ADDITIONAL_CHILD_PROCESS_JVM_ARGS": ["A"], - "DD_CIVISIBILITY_AGENTLESS_ENABLED": ["A"], - "DD_CIVISIBILITY_AGENTLESS_URL": ["A"], - "DD_CIVISIBILITY_AGENT_JAR_URI": ["A"], - "DD_CIVISIBILITY_AUTO_CONFIGURATION_ENABLED": ["A"], - "DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER": ["A"], - "DD_CIVISIBILITY_BACKEND_API_TIMEOUT_MILLIS": ["A"], - "DD_CIVISIBILITY_BUILD_INSTRUMENTATION_ENABLED": ["A"], - "DD_CIVISIBILITY_CIPROVIDER_INTEGRATION_ENABLED": ["A"], - "DD_CIVISIBILITY_CODE_COVERAGE_ENABLED": ["A"], - "DD_CIVISIBILITY_CODE_COVERAGE_EXCLUDES": ["A"], - "DD_CIVISIBILITY_CODE_COVERAGE_INCLUDES": ["A"], - "DD_CIVISIBILITY_CODE_COVERAGE_LINES_ENABLED": ["A"], - "DD_CIVISIBILITY_CODE_COVERAGE_REPORT_DUMP_DIR": ["A"], - "DD_CIVISIBILITY_CODE_COVERAGE_ROOT_PACKAGES_LIMIT": ["A"], - "DD_CIVISIBILITY_COMPILER_PLUGIN_AUTO_CONFIGURATION_ENABLED": ["A"], - "DD_CIVISIBILITY_COMPILER_PLUGIN_VERSION": ["A"], - "DD_CIVISIBILITY_DEBUG_PORT": ["A"], - "DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED": ["A"], - "DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_LOWER_LIMIT": ["A"], - "DD_CIVISIBILITY_ENABLED": ["A"], - "DD_CIVISIBILITY_EXECUTION_SETTINGS_CACHE_SIZE": ["A"], - "DD_CIVISIBILITY_FLAKY_RETRY_COUNT": ["A"], - "DD_CIVISIBILITY_FLAKY_RETRY_ENABLED": ["A"], - "DD_CIVISIBILITY_FLAKY_RETRY_ONLY_KNOWN_FLAKES": ["A"], - "DD_CIVISIBILITY_GIT_CLIENT_ENABLED": ["A"], - "DD_CIVISIBILITY_GIT_COMMAND_TIMEOUT_MILLIS": ["A"], - "DD_CIVISIBILITY_GIT_REMOTE_NAME": ["A"], - "DD_CIVISIBILITY_GIT_UNSHALLOW_DEFER": ["A"], - "DD_CIVISIBILITY_GIT_UNSHALLOW_ENABLED": ["A"], - "DD_CIVISIBILITY_GIT_UPLOAD_ENABLED": ["A"], - "DD_CIVISIBILITY_GIT_UPLOAD_TIMEOUT_MILLIS": ["A"], - "DD_CIVISIBILITY_GRADLE_SOURCESETS": ["A"], - "DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED": ["A"], - "DD_CIVISIBILITY_INJECTED_TRACER_VERSION": ["A"], - "DD_CIVISIBILITY_ITR_ENABLED": ["A"], - "DD_CIVISIBILITY_JACOCO_PLUGIN_VERSION": ["A"], - "DD_CIVISIBILITY_JVM_INFO_CACHE_SIZE": ["A"], - "DD_CIVISIBILITY_KNOWN_TESTS_REQUEST_ENABLED": ["A"], - "DD_CIVISIBILITY_MODULE_NAME": ["A"], - "DD_CIVISIBILITY_REMOTE_ENV_VARS_PROVIDER_KEY": ["A"], - "DD_CIVISIBILITY_REMOTE_ENV_VARS_PROVIDER_URL": ["A"], - "DD_CIVISIBILITY_REPO_INDEX_DUPLICATE_KEY_CHECK_ENABLED": ["A"], - "DD_CIVISIBILITY_REPO_INDEX_FOLLOW_SYMLINKS": ["A"], - "DD_CIVISIBILITY_RESOURCE_FOLDER_NAMES": ["A"], - "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS": ["A"], - "DD_CIVISIBILITY_SCALATEST_FORK_MONITOR_ENABLED": ["A"], - "DD_CIVISIBILITY_SIGNAL_CLIENT_TIMEOUT_MILLIS": ["A"], - "DD_CIVISIBILITY_SIGNAL_SERVER_HOST": ["A"], - "DD_CIVISIBILITY_SIGNAL_SERVER_PORT": ["A"], - "DD_CIVISIBILITY_SOURCE_DATA_ENABLED": ["A"], - "DD_CIVISIBILITY_TELEMETRY_ENABLED": ["A"], - "DD_CIVISIBILITY_TEST_COMMAND": ["A"], - "DD_CIVISIBILITY_TEST_ORDER": ["A"], - "DD_CIVISIBILITY_TEST_SKIPPING_ENABLED": ["A"], - "DD_CIVISIBILITY_TOTAL_FLAKY_RETRY_COUNT": ["A"], - "DD_CIVISIBILITY_TRACE_SANITATION_ENABLED": ["A"], - "DD_CODE_ORIGIN_FOR_SPANS_ENABLED": ["A"], - "DD_CODE_ORIGIN_MAX_USER_FRAMES": ["A"], - "DD_CONFIG_INVERSION_STRICT": ["A"], - "DD_CRASHTRACKING_AGENTLESS": ["A"], - "DD_CRASHTRACKING_DEBUG_AUTOCONFIG_ENABLE": ["A"], - "DD_CRASHTRACKING_DEBUG_START_FORCE_FIRST": ["A"], - "DD_CRASHTRACKING_ENABLED": ["A"], - "DD_CRASHTRACKING_PROXY_HOST": ["A"], - "DD_CRASHTRACKING_PROXY_PASSWORD": ["A"], - "DD_CRASHTRACKING_PROXY_PORT": ["A"], - "DD_CRASHTRACKING_PROXY_USERNAME": ["A"], - "DD_CRASHTRACKING_TAGS": ["A"], - "DD_CRASHTRACKING_UPLOAD_TIMEOUT": ["A"], - "DD_CUSTOM_TRACE_ID": ["A"], - "DD_CWS_ENABLED": ["A"], - "DD_CWS_TLS_REFRESH": ["A"], - "DD_DATA_JOBS_COMMAND_PATTERN": ["A"], - "DD_DATA_JOBS_ENABLED": ["A"], - "DD_DATA_JOBS_OPENLINEAGE_ENABLED": ["A"], - "DD_DATA_STREAMS_BUCKET_DURATION_SECONDS": ["A"], - "DD_DATA_STREAMS_ENABLED": ["A"], - "DD_DBM_PROPAGATION_MODE": ["A"], - "DD_DBM_TRACE_PREPARED_STATEMENTS": ["A"], - "DD_DISTRIBUTED_DEBUGGER_ENABLED": ["A"], - "DD_DOGSTATSD_ARGS": ["A"], - "DD_DOGSTATSD_HOST": ["A"], - "DD_DOGSTATSD_PATH": ["A"], - "DD_DOGSTATSD_PIPE_NAME": ["A"], - "DD_DOGSTATSD_PORT": ["A"], - "DD_DOGSTATSD_START_DELAY": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_CLASSFILE_DUMP_ENABLED": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_DIAGNOSTICS_INTERVAL": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_ENABLED": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_EXCLUDE_FILES": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_INCLUDE_FILES": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_INSTRUMENT_THE_WORLD": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_LOCALVAR_HOISTING_LEVEL": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_MAX_PAYLOAD_SIZE": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_METRICS_ENABLED": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_POLL_INTERVAL": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_REDACTED_TYPES": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_SNAPSHOT_URL": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_SOURCE_FILE_TRACKING_ENABLED": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_BATCH_SIZE": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_TIMEOUT": ["A"], - "DD_DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE": ["A"], - "DD_ENV": ["A"], - "DD_EXCEPTION_DEBUGGING_ENABLED": ["A"], - "DD_EXCEPTION_REPLAY_CAPTURE_INTERMEDIATE_SPANS_ENABLED": ["A"], - "DD_EXCEPTION_REPLAY_CAPTURE_INTERVAL_SECONDS": ["A"], - "DD_EXCEPTION_REPLAY_CAPTURE_MAX_FRAMES": ["A"], - "DD_EXCEPTION_REPLAY_ENABLED": ["A"], - "DD_EXCEPTION_REPLAY_MAX_EXCEPTION_ANALYSIS_LIMIT": ["A"], - "DD_EXCEPTION_REPLAY_MAX_FRAMES_TO_CAPTURE": ["A"], - "DD_EXPERIMENTAL_API_SECURITY_ENABLED": ["A"], - "DD_EXPERIMENTAL_DEFER_INTEGRATIONS_UNTIL": ["A"], - "DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED": ["A"], - "DD_GIT_BRANCH": ["A"], - "DD_GIT_COMMIT_AUTHOR_DATE": ["A"], - "DD_GIT_COMMIT_AUTHOR_EMAIL": ["A"], - "DD_GIT_COMMIT_AUTHOR_NAME": ["A"], - "DD_GIT_COMMIT_COMMITTER_DATE": ["A"], - "DD_GIT_COMMIT_COMMITTER_EMAIL": ["A"], - "DD_GIT_COMMIT_COMMITTER_NAME": ["A"], - "DD_GIT_COMMIT_HEAD_SHA": ["A"], - "DD_GIT_COMMIT_MESSAGE": ["A"], - "DD_GIT_COMMIT_SHA": ["A"], - "DD_GIT_PULL_REQUEST_BASE_BRANCH": ["A"], - "DD_GIT_PULL_REQUEST_BASE_BRANCH_SHA": ["A"], - "DD_GIT_REPOSITORY_URL": ["A"], - "DD_GIT_TAG": ["A"], - "DD_GRPC_CLIENT_ERROR_STATUSES": ["A"], - "DD_GRPC_SERVER_ERROR_STATUSES": ["A"], - "DD_HTTP_CLIENT_ERROR_STATUSES": ["A"], - "DD_HTTP_CLIENT_TAG_HEADERS": ["A"], - "DD_HTTP_CLIENT_TAG_QUERY_STRING": ["A"], - "DD_HTTP_SERVER_DECODED_RESOURCE_PRESERVE_SPACES": ["A"], - "DD_HTTP_SERVER_ERROR_STATUSES": ["A"], - "DD_HTTP_SERVER_RAW_QUERY_STRING": ["A"], - "DD_HTTP_SERVER_RAW_RESOURCE": ["A"], - "DD_HTTP_SERVER_ROUTE_BASED_NAMING": ["A"], - "DD_HTTP_SERVER_TAG_QUERY_STRING": ["A"], - "DD_HYSTRIX_MEASURED_ENABLED": ["A"], - "DD_HYSTRIX_TAGS_ENABLED": ["A"], - "DD_IAST_ANONYMOUS_CLASSES_ENABLED": ["A"], - "DD_IAST_CONTEXT_MODE": ["A"], - "DD_IAST_DB_ROWS_TO_TAINT": ["A"], - "DD_IAST_DEBUG_ENABLED": ["A"], - "DD_IAST_DEDUPLICATION_ENABLED": ["A"], - "DD_IAST_DETECTION_MODE": ["A"], - "DD_IAST_ENABLED": ["A"], - "DD_IAST_EXPERIMENTAL_PROPAGATION_ENABLED": ["A"], - "DD_IAST_HARDCODED_SECRET_ENABLED": ["A"], - "DD_IAST_MAX_CONCURRENT_REQUESTS": ["A"], - "DD_IAST_MAX_RANGE_COUNT": ["A"], - "DD_IAST_REDACTION_ENABLED": ["A"], - "DD_IAST_REDACTION_NAME_PATTERN": ["A"], - "DD_IAST_REDACTION_VALUE_PATTERN": ["A"], - "DD_IAST_REQUEST_SAMPLING": ["A"], - "DD_IAST_SECURITY_CONTROLS_CONFIGURATION": ["A"], - "DD_IAST_SOURCE_MAPPING_ENABLED": ["A"], - "DD_IAST_SOURCE_MAPPING_MAX_SIZE": ["A"], - "DD_IAST_STACKTRACE_ENABLED": ["A"], - "DD_IAST_STACKTRACE_LEAK_SUPPRESS": ["A"], - "DD_IAST_STACK_TRACE_ENABLED": ["A"], - "DD_IAST_STACK_TRACE_LEAK_SUPPRESS": ["A"], - "DD_IAST_TELEMETRY_VERBOSITY": ["A"], - "DD_IAST_TRUNCATION_MAX_VALUE_LENGTH": ["A"], - "DD_IAST_VULNERABILITIES_PER_REQUEST": ["A"], - "DD_IAST_WEAK_CIPHER_ALGORITHMS": ["A"], - "DD_IAST_WEAK_HASH_ALGORITHMS": ["A"], - "DD_ID_GENERATION_STRATEGY": ["A"], - "DD_IGNITE_CACHE_INCLUDE_KEYS": ["A"], - "DD_INJECTION_ENABLED": ["A"], - "DD_INJECT_FORCE": ["A"], - "DD_INSTRUMENTATION_CONFIG_ID": ["A"], - "DD_INSTRUMENTATION_INSTALL_ID": ["A"], - "DD_INSTRUMENTATION_INSTALL_TIME": ["A"], - "DD_INSTRUMENTATION_INSTALL_TYPE": ["A"], - "DD_INSTRUMENTATION_SOURCE": ["A"], - "DD_INSTRUMENTATION_TELEMETRY_ENABLED": ["A"], - "DD_INTEGRATIONS_ENABLED": ["A"], - "DD_INTEGRATION_JUNIT_ENABLED": ["A"], - "DD_INTEGRATION_SYNAPSE_LEGACY_OPERATION_NAME": ["A"], - "DD_INTEGRATION_TESTNG_ENABLED": ["A"], - "DD_INTERNAL_EXCEPTION_REPLAY_ONLY_LOCAL_ROOT": ["A"], - "DD_INTERNAL_FORCE_SYMBOL_DATABASE_UPLOAD": ["A"], - "DD_JDK_SOCKET_ENABLED": ["A"], - "DD_JMS_PROPAGATION_DISABLED_QUEUES": ["A"], - "DD_JMS_PROPAGATION_DISABLED_TOPICS": ["A"], - "DD_JMS_PROPAGATION_ENABLED": ["A"], - "DD_JMS_UNACKNOWLEDGED_MAX_AGE": ["A"], - "DD_JMXFETCH_CHECK_PERIOD": ["A"], - "DD_JMXFETCH_CONFIG": ["A"], - "DD_JMXFETCH_CONFIG_DIR": ["A"], - "DD_JMXFETCH_ENABLED": ["A"], - "DD_JMXFETCH_INITIAL_REFRESH_BEANS_PERIOD": ["A"], - "DD_JMXFETCH_METRICS_CONFIGS": ["A"], - "DD_JMXFETCH_MULTIPLE_RUNTIME_SERVICES_ENABLED": ["A"], - "DD_JMXFETCH_MULTIPLE_RUNTIME_SERVICES_LIMIT": ["A"], - "DD_JMXFETCH_REFRESH_BEANS_PERIOD": ["A"], - "DD_JMXFETCH_START_DELAY": ["A"], - "DD_JMXFETCH_STATSD_HOST": ["A"], - "DD_JMXFETCH_STATSD_PORT": ["A"], - "DD_KAFKA_CLIENT_BASE64_DECODING_ENABLED": ["A"], - "DD_KAFKA_CLIENT_PROPAGATION_DISABLED_TOPICS": ["A"], - "DD_KAFKA_CLIENT_PROPAGATION_ENABLED": ["A"], - "DD_KAFKA_PROPAGATION_ENABLED": ["A"], - "DD_LLMOBS_AGENTLESS_ENABLED": ["A"], - "DD_LLMOBS_ENABLED": ["A"], - "DD_LLMOBS_ML_APP": ["A"], - "DD_LOGS_INJECTION": ["A"], - "DD_LOGS_INJECTION_ENABLED": ["A"], - "DD_LOG_LEVEL": ["A"], - "DD_MEASURE_METHODS": ["A"], - "DD_MESSAGE_BROKER_SPLIT_BY_DESTINATION": ["A"], - "DD_OBFUSCATION_QUERY_STRING_REGEXP": ["A"], - "DD_OPTIMIZED_MAP_ENABLED": ["A"], - "DD_PIPELINE_EXECUTION_ID": ["A"], - "DD_PRIMARY_TAG": ["A"], - "DD_PRIORITIZATION_TYPE": ["A"], - "DD_PRIORITY_SAMPLING": ["A"], - "DD_PRIORITY_SAMPLING_FORCE": ["A"], - "DD_PROFILING_AGENTLESS": ["A"], - "DD_PROFILING_ALLOCATION_ENABLED": ["A"], - "DD_PROFILING_APIKEY": ["A"], - "DD_PROFILING_APIKEY_FILE": ["A"], - "DD_PROFILING_API_KEY": ["A"], - "DD_PROFILING_API_KEY_FILE": ["A"], - "DD_PROFILING_ASYNC_ALLOC_INTERVAL": ["A"], - "DD_PROFILING_ASYNC_CPU_ENABLED": ["A"], - "DD_PROFILING_ASYNC_CPU_INTERVAL_MS": ["A"], - "DD_PROFILING_ASYNC_CSTACK": ["A"], - "DD_PROFILING_ASYNC_DEBUG_LIB": ["A"], - "DD_PROFILING_ASYNC_LINENUMBERS": ["A"], - "DD_PROFILING_ASYNC_LIVEHEAP_CAPACITY": ["A"], - "DD_PROFILING_ASYNC_LIVEHEAP_ENABLED": ["A"], - "DD_PROFILING_ASYNC_LIVEHEAP_INTERVAL": ["A"], - "DD_PROFILING_ASYNC_LIVEHEAP_SAMPLE_PERCENT": ["A"], - "DD_PROFILING_ASYNC_LOGLEVEL": ["A"], - "DD_PROFILING_ASYNC_SAFEMODE": ["A"], - "DD_PROFILING_ASYNC_WALL_COLLAPSING": ["A"], - "DD_PROFILING_ASYNC_WALL_CONTEXT_FILTER": ["A"], - "DD_PROFILING_ASYNC_WALL_ENABLED": ["A"], - "DD_PROFILING_ASYNC_WALL_INTERVAL_MS": ["A"], - "DD_PROFILING_AUXILIARY": ["A"], - "DD_PROFILING_BACKPRESSURE_SAMPLE_LIMIT": ["A"], - "DD_PROFILING_BACKPRESSURE_SAMPLING_ENABLED": ["A"], - "DD_PROFILING_CONTEXT_ATTRIBUTES": ["A"], - "DD_PROFILING_CONTEXT_ATTRIBUTES_RESOURCE_NAME_ENABLED": ["A"], - "DD_PROFILING_CONTEXT_ATTRIBUTES_SPAN_NAME_ENABLED": ["A"], - "DD_PROFILING_DDPROF_ALLOC_ENABLED": ["A"], - "DD_PROFILING_DDPROF_ALLOC_INTERVAL": ["A"], - "DD_PROFILING_DDPROF_CPU_ENABLED": ["A"], - "DD_PROFILING_DDPROF_CPU_INTERVAL_MS": ["A"], - "DD_PROFILING_DDPROF_CSTACK": ["A"], - "DD_PROFILING_DDPROF_DEBUG_LIB": ["A"], - "DD_PROFILING_DDPROF_ENABLED": ["A"], - "DD_PROFILING_DDPROF_LINENUMBERS": ["A"], - "DD_PROFILING_DDPROF_LIVEHEAP_CAPACITY": ["A"], - "DD_PROFILING_DDPROF_LIVEHEAP_ENABLED": ["A"], - "DD_PROFILING_DDPROF_LIVEHEAP_INTERVAL": ["A"], - "DD_PROFILING_DDPROF_LIVEHEAP_SAMPLE_PERCENT": ["A"], - "DD_PROFILING_DDPROF_LIVEHEAP_TRACK_SIZE_ENABLED": ["A"], - "DD_PROFILING_DDPROF_LOGLEVEL": ["A"], - "DD_PROFILING_DDPROF_MEMLEAK_CAPACITY": ["A"], - "DD_PROFILING_DDPROF_MEMLEAK_ENABLED": ["A"], - "DD_PROFILING_DDPROF_MEMLEAK_INTERVAL": ["A"], - "DD_PROFILING_DDPROF_SAFEMODE": ["A"], - "DD_PROFILING_DDPROF_SCRATCH": ["A"], - "DD_PROFILING_DDPROF_STACKDEPTH": ["A"], - "DD_PROFILING_DDPROF_WALL_COLLAPSING": ["A"], - "DD_PROFILING_DDPROF_WALL_CONTEXT_FILTER": ["A"], - "DD_PROFILING_DDPROF_WALL_ENABLED": ["A"], - "DD_PROFILING_DDPROF_WALL_INTERVAL_MS": ["A"], - "DD_PROFILING_DEBUG_DUMP_PATH": ["A"], - "DD_PROFILING_DEBUG_JFR_DISABLED": ["A"], - "DD_PROFILING_DEBUG_UPLOAD_COMPRESSION": ["A"], - "DD_PROFILING_DETAILED_DEBUG_LOGGING": ["A"], - "DD_PROFILING_DIRECTALLOCATION_ENABLED": ["A"], - "DD_PROFILING_DIRECT_ALLOCATION_SAMPLE_LIMIT": ["A"], - "DD_PROFILING_DISABLED_EVENTS": ["A"], - "DD_PROFILING_ENABLED": ["A"], - "DD_PROFILING_ENABLED_EVENTS": ["A"], - "DD_PROFILING_ENDPOINT_COLLECTION_ENABLED": ["A"], - "DD_PROFILING_EXCEPTION_HISTOGRAM_MAX_COLLECTION_SIZE": ["A"], - "DD_PROFILING_EXCEPTION_HISTOGRAM_TOP_ITEMS": ["A"], - "DD_PROFILING_EXCEPTION_RECORD_MESSAGE": ["A"], - "DD_PROFILING_EXCEPTION_SAMPLE_LIMIT": ["A"], - "DD_PROFILING_EXCLUDE_AGENT_THREADS": ["A"], - "DD_PROFILING_EXPERIMENTAL_ASYNC_SCHEDULING_EVENT": ["A"], - "DD_PROFILING_EXPERIMENTAL_ASYNC_SCHEDULING_EVENT_INTERVAL": ["A"], - "DD_PROFILING_EXPERIMENTAL_ASYNC_WALL_JVMTI": ["A"], - "DD_PROFILING_EXPERIMENTAL_DDPROF_SCHEDULING_EVENT": ["A"], - "DD_PROFILING_EXPERIMENTAL_DDPROF_SCHEDULING_EVENT_INTERVAL": ["A"], - "DD_PROFILING_EXPERIMENTAL_DDPROF_WALL_JVMTI": ["A"], - "DD_PROFILING_HEAP_ENABLED": ["A"], - "DD_PROFILING_HEAP_HISTOGRAM_ENABLED": ["A"], - "DD_PROFILING_HEAP_HISTOGRAM_MODE": ["A"], - "DD_PROFILING_HEAP_TRACK_GENERATIONS": ["A"], - "DD_PROFILING_HOTSPOTS_ENABLED": ["A"], - "DD_PROFILING_JFR_REPOSITORY_BASE": ["A"], - "DD_PROFILING_JFR_REPOSITORY_MAXSIZE": ["A"], - "DD_PROFILING_JFR_TEMPLATE_OVERRIDE_FILE": ["A"], - "DD_PROFILING_PROXY_HOST": ["A"], - "DD_PROFILING_PROXY_PASSWORD": ["A"], - "DD_PROFILING_PROXY_PORT": ["A"], - "DD_PROFILING_PROXY_USERNAME": ["A"], - "DD_PROFILING_QUEUEING_TIME_ENABLED": ["A"], - "DD_PROFILING_QUEUEING_TIME_THRESHOLD_MILLIS": ["A"], - "DD_PROFILING_SMAP_AGGREGATION_ENABLED": ["A"], - "DD_PROFILING_SMAP_COLLECTION_ENABLED": ["A"], - "DD_PROFILING_STACKDEPTH": ["A"], - "DD_PROFILING_START_DELAY": ["A"], - "DD_PROFILING_START_FORCE_FIRST": ["A"], - "DD_PROFILING_TAGS": ["A"], - "DD_PROFILING_TEMPDIR": ["A"], - "DD_PROFILING_TIMELINE_EVENTS_ENABLED": ["A"], - "DD_PROFILING_ULTRA_MINIMAL": ["A"], - "DD_PROFILING_UPLOAD_COMPRESSION": ["A"], - "DD_PROFILING_UPLOAD_PERIOD": ["A"], - "DD_PROFILING_UPLOAD_SUMMARY_ON_413": ["A"], - "DD_PROFILING_UPLOAD_TIMEOUT": ["A"], - "DD_PROFILING_URL": ["A"], - "DD_PROPAGATION_EXTRACT_LOG_HEADER_NAMES_ENABLED": ["A"], - "DD_PROPAGATION_STYLE_EXTRACT": ["A"], - "DD_PROPAGATION_STYLE_INJECT": ["A"], - "DD_PROXY_NO_PROXY": ["A"], - "DD_RABBITMQ_PROPAGATION_ENABLED": ["A"], - "DD_RABBIT_INCLUDE_ROUTINGKEY_IN_RESOURCE": ["A"], - "DD_RABBIT_PROPAGATION_DISABLED_EXCHANGES": ["A"], - "DD_RABBIT_PROPAGATION_DISABLED_QUEUES": ["A"], - "DD_RABBIT_PROPAGATION_ENABLED": ["A"], - "DD_RC_TARGETS_KEY": ["A"], - "DD_RC_TARGETS_KEY_ID": ["A"], - "DD_REMOTE_CONFIGURATION_ENABLED": ["A"], - "DD_REMOTE_CONFIG_ENABLED": ["A"], - "DD_REMOTE_CONFIG_INTEGRITY_CHECK_ENABLED": ["A"], - "DD_REMOTE_CONFIG_MAX_EXTRA_SERVICES": ["A"], - "DD_REMOTE_CONFIG_MAX_PAYLOAD_SIZE": ["A"], - "DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS": ["A"], - "DD_REMOTE_CONFIG_URL": ["A"], - "DD_RESOLVER_CACHE_CONFIG": ["A"], - "DD_RESOLVER_CACHE_DIR": ["A"], - "DD_RESOLVER_NAMES_ARE_UNIQUE": ["A"], - "DD_RESOLVER_RESET_INTERVAL": ["A"], - "DD_RESOLVER_SIMPLE_METHOD_GRAPH": ["A"], - "DD_RESOLVER_USE_LOADCLASS": ["A"], - "DD_RESOLVER_USE_URL_CACHES": ["A"], - "DD_RUM_APPLICATION_ID": ["A"], - "DD_RUM_CLIENT_TOKEN": ["A"], - "DD_RUM_DEFAULT_PRIVACY_LEVEL": ["A"], - "DD_RUM_ENABLED": ["A"], - "DD_RUM_ENVIRONMENT": ["A"], - "DD_RUM_MAJOR_VERSION": ["A"], - "DD_RUM_REMOTE_CONFIGURATION_ID": ["A"], - "DD_RUM_SERVICE": ["A"], - "DD_RUM_SESSION_REPLAY_SAMPLE_RATE": ["A"], - "DD_RUM_SESSION_SAMPLE_RATE": ["A"], - "DD_RUM_SITE": ["A"], - "DD_RUM_TRACK_LONG_TASKS": ["A"], - "DD_RUM_TRACK_RESOURCES": ["A"], - "DD_RUM_TRACK_USER_INTERACTION": ["A"], - "DD_RUM_VERSION": ["A"], - "DD_RUNTIME_ID_ENABLED": ["A"], - "DD_RUNTIME_METRICS_ENABLED": ["A"], - "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED": ["A"], - "DD_SERVICE": ["A"], - "DD_SERVICE_MAPPING": ["A"], - "DD_SERVICE_NAME": ["A"], - "DD_SERVICE_NAME_SET_BY_USER": ["A"], - "DD_SITE": ["A"], - "DD_SPAN_SAMPLING_RULES": ["A"], - "DD_SPAN_SAMPLING_RULES_FILE": ["A"], - "DD_SPARK_APP_NAME_AS_SERVICE": ["A"], - "DD_SPARK_TASK_HISTOGRAM_ENABLED": ["A"], - "DD_SPRING_DATA_REPOSITORY_INTERFACE_RESOURCE_NAME": ["A"], - "DD_SQS_PROPAGATION_ENABLED": ["A"], - "DD_STACK_TRACE_LENGTH_LIMIT": ["A"], - "DD_STATSD_CLIENT_QUEUE_SIZE": ["A"], - "DD_STATSD_CLIENT_SOCKET_BUFFER": ["A"], - "DD_STATSD_CLIENT_SOCKET_TIMEOUT": ["A"], - "DD_SYMBOL_DATABASE_COMPRESSED": ["A"], - "DD_SYMBOL_DATABASE_FLUSH_THRESHOLD": ["A"], - "DD_SYMBOL_DATABASE_UPLOAD_ENABLED": ["A"], - "DD_TAGS": ["A"], - "DD_TELEMETRY_DEBUG_REQUESTS_ENABLED": ["A"], - "DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED": ["A"], - "DD_TELEMETRY_DEPENDENCY_RESOLUTION_PERIOD_MILLIS": ["A"], - "DD_TELEMETRY_DEPENDENCY_RESOLUTION_QUEUE_SIZE": ["A"], - "DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL": ["A"], - "DD_TELEMETRY_FORWARDER_MAX_TAGS": ["A"], - "DD_TELEMETRY_FORWARDER_PATH": ["A"], - "DD_TELEMETRY_HEARTBEAT_INTERVAL": ["A"], - "DD_TELEMETRY_LOG_COLLECTION_ENABLED": ["A"], - "DD_TELEMETRY_METRICS_ENABLED": ["A"], - "DD_TELEMETRY_METRICS_INTERVAL": ["A"], - "DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES": ["A"], - "DD_TEST_MANAGEMENT_ENABLED": ["A"], - "DD_TEST_SESSION_NAME": ["A"], - "DD_THIRD_PARTY_EXCLUDES": ["A"], - "DD_THIRD_PARTY_INCLUDES": ["A"], - "DD_THIRD_PARTY_SHADING_IDENTIFIERS": ["A"], - "DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED": ["A"], - "DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED": ["A"], - "DD_TRACE_AEROSPIKE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AEROSPIKE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AEROSPIKE_ENABLED": ["A"], - "DD_TRACE_AGENT_ARGS": ["A"], - "DD_TRACE_AGENT_PATH": ["A"], - "DD_TRACE_AGENT_PORT": ["A"], - "DD_TRACE_AGENT_TIMEOUT": ["A"], - "DD_TRACE_AGENT_UNIX_DOMAIN_SOCKET": ["A"], - "DD_TRACE_AGENT_URL": ["A"], - "DD_TRACE_AGENT_V0_5_ENABLED": ["A"], - "DD_TRACE_AKKA_ACTOR_ENABLED": ["A"], - "DD_TRACE_AKKA_ACTOR_MAILBOX_ENABLED": ["A"], - "DD_TRACE_AKKA_ACTOR_RECEIVE_ENABLED": ["A"], - "DD_TRACE_AKKA_ACTOR_SEND_ENABLED": ["A"], - "DD_TRACE_AKKA_CONCURRENT_ENABLED": ["A"], - "DD_TRACE_AKKA_FORK_JOIN_EXECUTOR_TASK_NAME": ["A"], - "DD_TRACE_AKKA_FORK_JOIN_POOL_NAME": ["A"], - "DD_TRACE_AKKA_FORK_JOIN_TASK_NAME": ["A"], - "DD_TRACE_AKKA_HTTP2_ENABLED": ["A"], - "DD_TRACE_AKKA_HTTP_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AKKA_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AKKA_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AKKA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AKKA_HTTP_CLIENT_ENABLED": ["A"], - "DD_TRACE_AKKA_HTTP_ENABLED": ["A"], - "DD_TRACE_AKKA_HTTP_SERVER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AKKA_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AKKA_HTTP_SERVER_ENABLED": ["A"], - "DD_TRACE_ALLOCATEDIRECT_ENABLED": ["A"], - "DD_TRACE_AMQP_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AMQP_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AMQP_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_AMQP_ENABLED": ["A"], - "DD_TRACE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_ANNOTATIONS": ["A"], - "DD_TRACE_ANNOTATIONS_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_ANNOTATION_ASYNC": ["A"], - "DD_TRACE_APACHE_HTTPASYNCCLIENT5_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_APACHE_HTTPASYNCCLIENT_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTPCLIENT5_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_APACHE_HTTPCLIENT5_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTPCLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_APACHE_HTTPCLIENT_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTPCORE_5_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTPCORE_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTP_CLIENT5_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTP_CLIENT5_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_APACHE_HTTP_CLIENT5_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_APACHE_HTTP_CLIENT_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTP_CORE_5_ENABLED": ["A"], - "DD_TRACE_APACHE_HTTP_CORE_ENABLED": ["A"], - "DD_TRACE_APACHE_SPARK_ENABLED": ["A"], - "DD_TRACE_ARMERIA_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_ARMERIA_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_ARMERIA_ENABLED": ["A"], - "DD_TRACE_ARMERIA_GRPC_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_ARMERIA_GRPC_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_ARMERIA_GRPC_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_ARMERIA_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_ARMERIA_GRPC_CLIENT_ENABLED": ["A"], - "DD_TRACE_ARMERIA_GRPC_ENABLED": ["A"], - "DD_TRACE_ARMERIA_GRPC_MESSAGE_ENABLED": ["A"], - "DD_TRACE_ARMERIA_GRPC_SERVER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_ARMERIA_GRPC_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_ARMERIA_GRPC_SERVER_ENABLED": ["A"], - "DD_TRACE_ARMERIA_JETTY_ENABLED": ["A"], - "DD_TRACE_AUTH0_JWT_ENABLED": ["A"], - "DD_TRACE_AVRO_ENABLED": ["A"], - "DD_TRACE_AWSADD_SPAN_POINTERS": ["A"], - "DD_TRACE_AWS_DYNAMODB_ENABLED": ["A"], - "DD_TRACE_AWS_LAMBDA_ENABLED": ["A"], - "DD_TRACE_AWS_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_AWS_S3_ENABLED": ["A"], - "DD_TRACE_AWS_SDK_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AWS_SDK_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AWS_SDK_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_AWS_SDK_ENABLED": ["A"], - "DD_TRACE_AWS_SDK_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_AWS_SDK_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_AXIS2_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AXIS2_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AXIS2_ENABLED": ["A"], - "DD_TRACE_AXIS2_TRANSPORT_ENABLED": ["A"], - "DD_TRACE_AXIS_PROMOTE_RESOURCE_NAME": ["A"], - "DD_TRACE_AXIS_TRANSPORT_CLASS_NAME": ["A"], - "DD_TRACE_AXWAY_API_ENABLED": ["A"], - "DD_TRACE_AXWAY_HTTP_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AXWAY_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AZURE_FUNCTIONS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_AZURE_FUNCTIONS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_AZURE_FUNCTIONS_ENABLED": ["A"], - "DD_TRACE_BAGGAGE_MAX_BYTES": ["A"], - "DD_TRACE_BAGGAGE_MAX_ITEMS": ["A"], - "DD_TRACE_BAGGAGE_TAG_KEYS": ["A"], - "DD_TRACE_CAFFEINE_ENABLED": ["A"], - "DD_TRACE_CASSANDRA_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_CASSANDRA_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_CASSANDRA_ENABLED": ["A"], - "DD_TRACE_CASSANDRA_KEYSPACE_STATEMENT_EXTRACTION_ENABLED": ["A"], - "DD_TRACE_CI_VISIBILITY_ENABLED": ["A"], - "DD_TRACE_CLASSES_EXCLUDE": ["A"], - "DD_TRACE_CLASSES_EXCLUDE_FILE": ["A"], - "DD_TRACE_CLASSLOADERS_DEFER": ["A"], - "DD_TRACE_CLASSLOADERS_EXCLUDE": ["A"], - "DD_TRACE_CLASSLOADING_ENABLED": ["A"], - "DD_TRACE_CLIENT_IP_ENABLED": ["A"], - "DD_TRACE_CLIENT_IP_HEADER": ["A"], - "DD_TRACE_CLIENT_IP_RESOLVER_ENABLED": ["A"], - "DD_TRACE_CLOCK_SYNC_PERIOD": ["A"], - "DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH": ["A"], - "DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS": ["A"], - "DD_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES": ["A"], - "DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING": ["A"], - "DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING": ["A"], - "DD_TRACE_CODESOURCES_EXCLUDE": ["A"], - "DD_TRACE_COMMONS_FILEUPLOAD_ENABLED": ["A"], - "DD_TRACE_COMMONS_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_COMMONS_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_COMMONS_HTTP_CLIENT_ENABLED": ["A"], - "DD_TRACE_CONFIG": ["A"], - "DD_TRACE_CONSUMER_TASK_ENABLED": ["A"], - "DD_TRACE_COUCHBASE_3_ENABLED": ["A"], - "DD_TRACE_COUCHBASE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_COUCHBASE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_COUCHBASE_ENABLED": ["A"], - "DD_TRACE_COUCHBASE_INTERNAL_SPANS_ENABLED": ["A"], - "DD_TRACE_CUCUMBER_5_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_CUCUMBER_5_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_CUCUMBER_5_ENABLED": ["A"], - "DD_TRACE_CUCUMBER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_CUCUMBER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_CUCUMBER_ENABLED": ["A"], - "DD_TRACE_CXF_ENABLED": ["A"], - "DD_TRACE_CXF_INVOKER_ENABLED": ["A"], - "DD_TRACE_DATANUCLEUS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_DATANUCLEUS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_DATANUCLEUS_ENABLED": ["A"], - "DD_TRACE_DB2_ENABLED": ["A"], - "DD_TRACE_DBM_ENABLED": ["A"], - "DD_TRACE_DBSTATEMENTRULE_ENABLED": ["A"], - "DD_TRACE_DB_CLIENT_SPLIT_BY_HOST": ["A"], - "DD_TRACE_DB_CLIENT_SPLIT_BY_INSTANCE": ["A"], - "DD_TRACE_DB_CLIENT_SPLIT_BY_INSTANCE_TYPE_SUFFIX": ["A"], - "DD_TRACE_DEBUG": ["A"], - "DD_TRACE_DEFINECLASS_ENABLED": ["A"], - "DD_TRACE_DIRECTALLOCATION_ENABLED": ["A"], - "DD_TRACE_DO_NOT_TRACE_ANNOTATION_ENABLED": ["A"], - "DD_TRACE_DROPWIZARD_ENABLED": ["A"], - "DD_TRACE_DROPWIZARD_VIEW_ENABLED": ["A"], - "DD_TRACE_DYNAMODB_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_ELASTICSEARCH_BODY_AND_PARAMS_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_BODY_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_PARAMS_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_REST_5_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_REST_6_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_REST_7_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_REST_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_2_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_5_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_6_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_7_ENABLED": ["A"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_ENABLED": ["A"], - "DD_TRACE_EMR_AWS_SDK_ENABLED": ["A"], - "DD_TRACE_ENABLED": ["A"], - "DD_TRACE_EVENTBRIDGE_ENABLED": ["A"], - "DD_TRACE_EXECUTORS": ["A"], - "DD_TRACE_EXECUTORS_ALL": ["A"], - "DD_TRACE_EXPERIMENTAL_FEATURES_ENABLED": ["A"], - "DD_TRACE_EXPERIMENTAL_JEE_SPLIT_BY_DEPLOYMENT": ["A"], - "DD_TRACE_EXPERIMENTAL_KEEP_LATENCY_THRESHOLD_MS": ["A"], - "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_ENABLED": ["A"], - "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVAL": ["A"], - "DD_TRACE_EXPERIMENTAL_LONG_RUNNING_INITIAL_FLUSH_INTERVAL": ["A"], - "DD_TRACE_EXTENSIONS_PATH": ["A"], - "DD_TRACE_FILEITEMITERATOR_ENABLED": ["A"], - "DD_TRACE_FILEITEMSTREAM_ENABLED": ["A"], - "DD_TRACE_FILEITEM_ENABLED": ["A"], - "DD_TRACE_FINATRA_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_FINATRA_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_FINATRA_ENABLED": ["A"], - "DD_TRACE_FJP_ENABLED": ["A"], - "DD_TRACE_FJP_WORKQUEUE_ENABLED": ["A"], - "DD_TRACE_FLUSH_INTERVAL": ["A"], - "DD_TRACE_FORCEMANUALDROPTAGINTERCEPTOR_ENABLED": ["A"], - "DD_TRACE_FORCEMANUALKEEPTAGINTERCEPTOR_ENABLED": ["A"], - "DD_TRACE_FORCESAMPLINGPRIORITYTAGINTERCEPTOR_ENABLED": ["A"], - "DD_TRACE_FREEMARKER_ENABLED": ["A"], - "DD_TRACE_GIT_METADATA_ENABLED": ["A"], - "DD_TRACE_GLASSFISH_ENABLED": ["A"], - "DD_TRACE_GLOBAL_TAGS": ["A"], - "DD_TRACE_GOOGLE_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_GOOGLE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_GOOGLE_HTTP_CLIENT_ENABLED": ["A"], - "DD_TRACE_GOOGLE_PUBSUB_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_GOOGLE_PUBSUB_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_GOOGLE_PUBSUB_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_GOOGLE_PUBSUB_ENABLED": ["A"], - "DD_TRACE_GOOGLE_PUBSUB_IGNORED_GRPC_METHODS": ["A"], - "DD_TRACE_GOOGLE_PUBSUB_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_GOOGLE_PUBSUB_PUBLISHER_ENABLED": ["A"], - "DD_TRACE_GOOGLE_PUBSUB_RECEIVER_ENABLED": ["A"], - "DD_TRACE_GRADLE_ENABLED": ["A"], - "DD_TRACE_GRADLE_BUILD_LISTENER_ENABLED": ["A"], - "DD_TRACE_GRADLE_BUILD_SCOPE_SERVICES_ENABLED": ["A"], - "DD_TRACE_GRADLE_DAEMON_LOGGING_ENABLED": ["A"], - "DD_TRACE_GRADLE_DAEMON_JVM_OPTIONS_ENABLED": ["A"], - "DD_TRACE_GRADLE_PLUGIN_INJECTOR_ENABLED": ["A"], - "DD_TRACE_GRAPHQL_JAVA_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_GRAPHQL_JAVA_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_GRAPHQL_JAVA_ENABLED": ["A"], - "DD_TRACE_GRIZZLY_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_GRIZZLY_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_GRIZZLY_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_GRIZZLY_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_GRIZZLY_CLIENT_ENABLED": ["A"], - "DD_TRACE_GRIZZLY_ENABLED": ["A"], - "DD_TRACE_GRIZZLY_FILTERCHAIN_ENABLED": ["A"], - "DD_TRACE_GRPC_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_GRPC_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_GRPC_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_GRPC_CLIENT_ENABLED": ["A"], - "DD_TRACE_GRPC_ENABLED": ["A"], - "DD_TRACE_GRPC_IGNORED_INBOUND_METHODS": ["A"], - "DD_TRACE_GRPC_IGNORED_OUTBOUND_METHODS": ["A"], - "DD_TRACE_GRPC_MESSAGE_ENABLED": ["A"], - "DD_TRACE_GRPC_NETTY_ENABLED": ["A"], - "DD_TRACE_GRPC_SERVER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_GRPC_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_GRPC_SERVER_CODE_ORIGIN_ENABLED": ["A"], - "DD_TRACE_GRPC_SERVER_ENABLED": ["A"], - "DD_TRACE_GRPC_SERVER_TRIM_PACKAGE_RESOURCE": ["A"], - "DD_TRACE_GSON_ENABLED": ["A"], - "DD_TRACE_GUAVA_ENABLED": ["A"], - "DD_TRACE_HAZELCAST_ENABLED": ["A"], - "DD_TRACE_HAZELCAST_LEGACY_ENABLED": ["A"], - "DD_TRACE_HAZELCAST_SDK_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_HAZELCAST_SDK_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_HEADER_BAGGAGE": ["A"], - "DD_TRACE_HEADER_TAGS": ["A"], - "DD_TRACE_HEADER_TAGS_LEGACY_PARSING_ENABLED": ["A"], - "DD_TRACE_HEALTH_METRICS_ENABLED": ["A"], - "DD_TRACE_HEALTH_METRICS_STATSD_HOST": ["A"], - "DD_TRACE_HEALTH_METRICS_STATSD_PORT": ["A"], - "DD_TRACE_HIBERNATE_CORE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_HIBERNATE_CORE_ENABLED": ["A"], - "DD_TRACE_HIBERNATE_ENABLED": ["A"], - "DD_TRACE_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_HTTPASYNCCLIENT5_ENABLED": ["A"], - "DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_HTTPASYNCCLIENT_ENABLED": ["A"], - "DD_TRACE_HTTPCLIENT5_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_HTTPCLIENT5_ENABLED": ["A"], - "DD_TRACE_HTTPCLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_HTTPCLIENT_ENABLED": ["A"], - "DD_TRACE_HTTPCLIENT_REDIRECT_ENABLED": ["A"], - "DD_TRACE_HTTPCORE_5_ENABLED": ["A"], - "DD_TRACE_HTTPCORE_ENABLED": ["A"], - "DD_TRACE_HTTPURLCONNECTION_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_HTTPURLCONNECTION_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_HTTPURLCONNECTION_ENABLED": ["A"], - "DD_TRACE_HTTP_CLIENT_ERROR_STATUSES": ["A"], - "DD_TRACE_HTTP_CLIENT_PATH_RESOURCE_NAME_MAPPING": ["A"], - "DD_TRACE_HTTP_CLIENT_SPLIT_BY_DOMAIN": ["A"], - "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING": ["A"], - "DD_TRACE_HTTP_RESOURCE_REMOVE_TRAILING_SLASH": ["A"], - "DD_TRACE_HTTP_SERVER_ERROR_STATUSES": ["A"], - "DD_TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING": ["A"], - "DD_TRACE_HTTP_URL_CONNECTION_CLASS_NAME": ["A"], - "DD_TRACE_HYSTRIX_ENABLED": ["A"], - "DD_TRACE_IASTINSTRUMENTATION_ENABLED": ["A"], - "DD_TRACE_IAST_RESULTSET_ENABLED": ["A"], - "DD_TRACE_IGNITE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_IGNITE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_IGNITE_ENABLED": ["A"], - "DD_TRACE_INPUTSTREAM_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_DATANUCLEUS_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_DROPWIZARD_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_GRPC_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_HIBERNATE_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_HTTPASYNCCLIENT5_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_HTTPCLIENT5_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_HTTPCLIENT_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_JAVA_CONCURRENT_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTEGRATION_HTTPASYNCCLIENT_MATCHING_SHORTCUT_ENABLED": ["A"], - "DD_TRACE_INTERNAL_EXIT_ON_FAILURE": ["A"], - "DD_TRACE_JACKSON_1_ENABLED": ["A"], - "DD_TRACE_JACKSON_2_12_ENABLED": ["A"], - "DD_TRACE_JACKSON_2_16_ENABLED": ["A"], - "DD_TRACE_JACKSON_2_6_ENABLED": ["A"], - "DD_TRACE_JACKSON_2_8_ENABLED": ["A"], - "DD_TRACE_JACKSON_2_ENABLED": ["A"], - "DD_TRACE_JACKSON_CORE_ENABLED": ["A"], - "DD_TRACE_JACKSON_ENABLED": ["A"], - "DD_TRACE_JACOCO_ENABLED": ["A"], - "DD_TRACE_JAKARTARS_ENABLED": ["A"], - "DD_TRACE_JAKARTA_JMS_ENABLED": ["A"], - "DD_TRACE_JAKARTA_MAIL_BODY_ENABLED": ["A"], - "DD_TRACE_JAKARTA_MAIL_ENABLED": ["A"], - "DD_TRACE_JAKARTA_MAIL_TRANSPORT_ENABLED": ["A"], - "DD_TRACE_JAKARTA_RS_ANNOTATIONS_ENABLED": ["A"], - "DD_TRACE_JAKARTA_RS_ENABLED": ["A"], - "DD_TRACE_JAKARTA_RS_FILTER_ENABLED": ["A"], - "DD_TRACE_JAKARTA_WEBSOCKET_ENABLED": ["A"], - "DD_TRACE_JAKARTA_WS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JAKARTA_WS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JAKARTA_WS_ENABLED": ["A"], - "DD_TRACE_JAVAX_MAIL_BODY_ENABLED": ["A"], - "DD_TRACE_JAVAX_MAIL_ENABLED": ["A"], - "DD_TRACE_JAVAX_MAIL_TRANSPORT_ENABLED": ["A"], - "DD_TRACE_JAVAX_WEBSOCKET_ENABLED": ["A"], - "DD_TRACE_JAVA_COMPLETABLEFUTURE_ENABLED": ["A"], - "DD_TRACE_JAVA_CONCURRENT_ENABLED": ["A"], - "DD_TRACE_JAVA_CONCURRENT_OTHER_ENABLED": ["A"], - "DD_TRACE_JAVA_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JAVA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JAVA_HTTP_CLIENT_ENABLED": ["A"], - "DD_TRACE_JAVA_LANG_APPSEC_ENABLED": ["A"], - "DD_TRACE_JAVA_LANG_MANAGEMENT_ENABLED": ["A"], - "DD_TRACE_JAVA_TIMER_ENABLED": ["A"], - "DD_TRACE_JAXRS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JAXRS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JAXRS_ENABLED": ["A"], - "DD_TRACE_JAX_RS_ADDITIONAL_ANNOTATIONS": ["A"], - "DD_TRACE_JAX_RS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JAX_RS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JAX_RS_ANNOTATIONS_ENABLED": ["A"], - "DD_TRACE_JAX_RS_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JAX_RS_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JAX_RS_CLIENT_ENABLED": ["A"], - "DD_TRACE_JAX_RS_ENABLED": ["A"], - "DD_TRACE_JAX_RS_EXCEPTION_AS_ERROR_ENABLED": ["A"], - "DD_TRACE_JAX_RS_FILTER_ENABLED": ["A"], - "DD_TRACE_JAX_WS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JAX_WS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JAX_WS_ENABLED": ["A"], - "DD_TRACE_JBOSS_LOGMANAGER_ENABLED": ["A"], - "DD_TRACE_JBOSS_MODULES_ENABLED": ["A"], - "DD_TRACE_JDBC_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JDBC_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JDBC_CONNECTION_CLASS_NAME": ["A"], - "DD_TRACE_JDBC_DATASOURCE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JDBC_DATASOURCE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JDBC_DATASOURCE_ENABLED": ["A"], - "DD_TRACE_JDBC_ENABLED": ["A"], - "DD_TRACE_JDBC_PREPARED_STATEMENT_CLASS_NAME": ["A"], - "DD_TRACE_JDBC_RESULTSET_ENABLED": ["A"], - "DD_TRACE_JEDIS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JEDIS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JEDIS_ENABLED": ["A"], - "DD_TRACE_JEE_ENV_ENTRY_ENABLED": ["A"], - "DD_TRACE_JERSEY_ENABLED": ["A"], - "DD_TRACE_JETTY_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JETTY_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JETTY_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JETTY_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JETTY_CLIENT_ENABLED": ["A"], - "DD_TRACE_JETTY_CONCURRENT_ENABLED": ["A"], - "DD_TRACE_JETTY_ENABLED": ["A"], - "DD_TRACE_JETTY_WEBSOCKET_ENABLED": ["A"], - "DD_TRACE_JMS_1_ENABLED": ["A"], - "DD_TRACE_JMS_2_ENABLED": ["A"], - "DD_TRACE_JMS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JMS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JMS_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_JMS_ENABLED": ["A"], - "DD_TRACE_JMS_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_JMS_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_JMS_TIME_IN_QUEUE_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_ACTIVEMQ_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_CASSANDRA_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_CONFLUENT_PLATFORM_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_HAZELCAST_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_HIVEMQ_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_HIVE_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_HUDI_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_IGNITE_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_JBOSS_WILDFLY_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_KAFKA_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_KUBE_APISERVER_METRICS_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_PRESTO_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_SOLR_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_SONARQUBE_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_TOMCAT_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_WEBLOGIC_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_WEBSPHERE_ENABLED": ["A"], - "DD_TRACE_JMXFETCH_{CHECK_NAME}_ENABLED": ["A"], - "DD_TRACE_JMX_TAGS": ["A"], - "DD_TRACE_JNI_ENABLED": ["A"], - "DD_TRACE_JOSE_JWT_ENABLED": ["A"], - "DD_TRACE_JSP_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_JSP_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_JSP_COMPILE_ENABLED": ["A"], - "DD_TRACE_JSP_ENABLED": ["A"], - "DD_TRACE_JSP_RENDER_ENABLED": ["A"], - "DD_TRACE_JUNIT4_ENABLED": ["A"], - "DD_TRACE_JUNIT_38_ENABLED": ["A"], - "DD_TRACE_JUNIT_4_CUCUMBER_ENABLED": ["A"], - "DD_TRACE_JUNIT_4_ENABLED": ["A"], - "DD_TRACE_JUNIT_4_MUNIT_ENABLED": ["A"], - "DD_TRACE_JUNIT_5_CUCUMBER_ENABLED": ["A"], - "DD_TRACE_JUNIT_5_ENABLED": ["A"], - "DD_TRACE_JUNIT_5_SPOCK_ENABLED": ["A"], - "DD_TRACE_JWT_ENABLED": ["A"], - "DD_TRACE_KAFKA_0_11_ENABLED": ["A"], - "DD_TRACE_KAFKA_3_8_ENABLED": ["A"], - "DD_TRACE_KAFKA_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_KAFKA_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_KAFKA_CLIENT_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_KAFKA_CONNECT_ENABLED": ["A"], - "DD_TRACE_KAFKA_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_KAFKA_ENABLED": ["A"], - "DD_TRACE_KAFKA_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_KAFKA_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_KAFKA_STREAMS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_KAFKA_STREAMS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_KAFKA_STREAMS_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_KAFKA_STREAMS_ENABLED": ["A"], - "DD_TRACE_KAFKA_TIME_IN_QUEUE_ENABLED": ["A"], - "DD_TRACE_KARATE_ENABLED": ["A"], - "DD_TRACE_KOTLIN_COROUTINE_ENABLED": ["A"], - "DD_TRACE_LEGACY_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_LETTUCE_4_ASYNC_ENABLED": ["A"], - "DD_TRACE_LETTUCE_4_ENABLED": ["A"], - "DD_TRACE_LETTUCE_5_ASYNC_ENABLED": ["A"], - "DD_TRACE_LETTUCE_5_ENABLED": ["A"], - "DD_TRACE_LETTUCE_5_RX_ENABLED": ["A"], - "DD_TRACE_LETTUCE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_LETTUCE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_LETTUCE_ENABLED": ["A"], - "DD_TRACE_LIBERTY_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_LIBERTY_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_LIBERTY_CLASSLOADING_ENABLED": ["A"], - "DD_TRACE_LIBERTY_ENABLED": ["A"], - "DD_TRACE_LOG4J_1_ENABLED": ["A"], - "DD_TRACE_LOG4J_2_ENABLED": ["A"], - "DD_TRACE_LOG4J_ENABLED": ["A"], - "DD_TRACE_LOGBACK_ENABLED": ["A"], - "DD_TRACE_LOGS_INTAKE_ENABLED": ["A"], - "DD_TRACE_LOGS_INTAKE_LOG4J_2_ENABLED": ["A"], - "DD_TRACE_MAVEN_ENABLED": ["A"], - "DD_TRACE_METHODS": ["A"], - "DD_TRACE_MICRONAUT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_MICRONAUT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_MICRONAUT_ENABLED": ["A"], - "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_2_ENABLED": ["A"], - "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_3_ENABLED": ["A"], - "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_4_ENABLED": ["A"], - "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_ENABLED": ["A"], - "DD_TRACE_MICRONAUT_SPAN_ORIGIN_ENABLED": ["A"], - "DD_TRACE_MMAP_ENABLED": ["A"], - "DD_TRACE_MONGO_3_1_ENABLED": ["A"], - "DD_TRACE_MONGO_3_4_ENABLED": ["A"], - "DD_TRACE_MONGO_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_MONGO_ENABLED": ["A"], - "DD_TRACE_MONGO_REACTIVESTREAMS_ENABLED": ["A"], - "DD_TRACE_MULE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_MULE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_MULE_ENABLED": ["A"], - "DD_TRACE_MULE_JPMS_ENABLED": ["A"], - "DD_TRACE_MULTIPART_ENABLED": ["A"], - "DD_TRACE_NATIVE_IMAGE_ENABLED": ["A"], - "DD_TRACE_NETTY_3_8_ENABLED": ["A"], - "DD_TRACE_NETTY_3_9_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_NETTY_3_9_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_NETTY_4_0_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_NETTY_4_0_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_NETTY_4_0_ENABLED": ["A"], - "DD_TRACE_NETTY_4_1_ENABLED": ["A"], - "DD_TRACE_NETTY_4_1_HTTP2_ENABLED": ["A"], - "DD_TRACE_NETTY_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_NETTY_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_NETTY_CONCURRENT_ENABLED": ["A"], - "DD_TRACE_NETTY_ENABLED": ["A"], - "DD_TRACE_NETTY_EVENT_EXECUTOR_ENABLED": ["A"], - "DD_TRACE_NETTY_PROMISE_ENABLED": ["A"], - "DD_TRACE_NEW_TASK_FOR_ENABLED": ["A"], - "DD_TRACE_NING_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_NING_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_NING_ENABLED": ["A"], - "DD_TRACE_NOT_NOT_TRACE_ENABLED": ["A"], - "DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP": ["A"], - "DD_TRACE_OGNL_ENABLED": ["A"], - "DD_TRACE_OKHTTP_2_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_OKHTTP_2_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_OKHTTP_2_ENABLED": ["A"], - "DD_TRACE_OKHTTP_3_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_OKHTTP_3_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_OKHTTP_3_ENABLED": ["A"], - "DD_TRACE_OKHTTP_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_OKHTTP_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_OKHTTP_ENABLED": ["A"], - "DD_TRACE_OPENSEARCH_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_OPENSEARCH_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_OPENSEARCH_ENABLED": ["A"], - "DD_TRACE_OPENSEARCH_REST_ENABLED": ["A"], - "DD_TRACE_OPENSEARCH_TRANSPORT_ENABLED": ["A"], - "DD_TRACE_OPENTELEMETRY_1_ENABLED": ["A"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_20_ENABLED": ["A"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_26_ENABLED": ["A"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ENABLED": ["A"], - "DD_TRACE_OPENTELEMETRY_BETA_ENABLED": ["A"], - "DD_TRACE_OPENTELEMETRY_EXPERIMENTAL_ENABLED": ["A"], - "DD_TRACE_OPENTRACING_ENABLED": ["A"], - "DD_TRACE_OPENTRACING_GLOBALTRACER_ENABLED": ["A"], - "DD_TRACE_ORG_JSON_ENABLED": ["A"], - "DD_TRACE_OSGI_ENABLED": ["A"], - "DD_TRACE_OTEL_ENABLED": ["A"], - "DD_TRACE_PARTIAL_FLUSH_ENABLED": ["A"], - "DD_TRACE_PARTIAL_FLUSH_MIN_SPANS": ["A"], - "DD_TRACE_PEERSERVICETAGINTERCEPTOR_ENABLED": ["A"], - "DD_TRACE_PEER_HOSTNAME_ENABLED": ["A"], - "DD_TRACE_PEER_SERVICE_COMPONENT_OVERRIDES": ["A"], - "DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED": ["A"], - "DD_TRACE_PEER_SERVICE_MAPPING": ["A"], - "DD_TRACE_PEKKO_ACTOR_ENABLED": ["A"], - "DD_TRACE_PEKKO_ACTOR_MAILBOX_ENABLED": ["A"], - "DD_TRACE_PEKKO_ACTOR_RECEIVE_ENABLED": ["A"], - "DD_TRACE_PEKKO_ACTOR_SEND_ENABLED": ["A"], - "DD_TRACE_PEKKO_CONCURRENT_ENABLED": ["A"], - "DD_TRACE_PEKKO_HTTP2_ENABLED": ["A"], - "DD_TRACE_PEKKO_HTTP_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_PEKKO_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_PEKKO_HTTP_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_PEKKO_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_PEKKO_HTTP_CLIENT_ENABLED": ["A"], - "DD_TRACE_PEKKO_HTTP_ENABLED": ["A"], - "DD_TRACE_PEKKO_HTTP_SERVER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_PEKKO_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_PEKKO_HTTP_SERVER_ENABLED": ["A"], - "DD_TRACE_PEKKO_SCHEDULER_ENABLED": ["A"], - "DD_TRACE_PERF_METRICS_ENABLED": ["A"], - "DD_TRACE_PIPE_NAME": ["A"], - "DD_TRACE_PLAY_ACTION_ENABLED": ["A"], - "DD_TRACE_PLAY_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_PLAY_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_PLAY_ENABLED": ["A"], - "DD_TRACE_PLAY_REPORT_HTTP_STATUS": ["A"], - "DD_TRACE_PLAY_WS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_PLAY_WS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_PLAY_WS_ENABLED": ["A"], - "DD_TRACE_POST_PROCESSING_TIMEOUT": ["A"], - "DD_TRACE_POWERMOCK_ENABLED": ["A"], - "DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT": ["A"], - "DD_TRACE_PROPAGATION_EXTRACT_FIRST": ["A"], - "DD_TRACE_PROPAGATION_STYLE": ["A"], - "DD_TRACE_PROPAGATION_STYLE_B3_PADDING_ENABLED": ["A"], - "DD_TRACE_PROPAGATION_STYLE_EXTRACT": ["A"], - "DD_TRACE_PROPAGATION_STYLE_INJECT": ["A"], - "DD_TRACE_PROTOBUF_ENABLED": ["A"], - "DD_TRACE_QUARTZ_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_QUARTZ_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_QUARTZ_ENABLED": ["A"], - "DD_TRACE_RABBITMQ_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_RABBITMQ_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_RABBITMQ_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_RABBITMQ_ENABLED": ["A"], - "DD_TRACE_RABBITMQ_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_RABBITMQ_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_RABBITMQ_TIME_IN_QUEUE_ENABLED": ["A"], - "DD_TRACE_RABBIT_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_RABBIT_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_RABBIT_TIME_IN_QUEUE_ENABLED": ["A"], - "DD_TRACE_RATE_LIMIT": ["A"], - "DD_TRACE_RATPACK_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_RATPACK_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_RATPACK_ENABLED": ["A"], - "DD_TRACE_RATPACK_REQUEST_BODY_ENABLED": ["A"], - "DD_TRACE_REACTIVE_STREAMS_1_ENABLED": ["A"], - "DD_TRACE_REACTIVE_STREAMS_ENABLED": ["A"], - "DD_TRACE_REACTOR_CORE_ENABLED": ["A"], - "DD_TRACE_REACTOR_NETTY_1_ENABLED": ["A"], - "DD_TRACE_REACTOR_NETTY_ENABLED": ["A"], - "DD_TRACE_REDISCALA_CONNECTION_ENABLED": ["A"], - "DD_TRACE_REDISCALA_ENABLED": ["A"], - "DD_TRACE_REDISSCALA_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_REDISSCALA_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_REDISSON_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_REDISSON_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_REDISSON_ENABLED": ["A"], - "DD_TRACE_REDIS_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_REDIS_ENABLED": ["A"], - "DD_TRACE_REJECTED_EXECUTION_HANDLER_ENABLED": ["A"], - "DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED": ["A"], - "DD_TRACE_RENAISSANCE_ENABLED": ["A"], - "DD_TRACE_REPORT_HOSTNAME": ["A"], - "DD_TRACE_REQUEST_HEADER_TAGS": ["A"], - "DD_TRACE_REQUEST_HEADER_TAGS_COMMA_ALLOWED": ["A"], - "DD_TRACE_RESOLVER_ENABLED": ["A"], - "DD_TRACE_RESOURCENAMERULE_ENABLED": ["A"], - "DD_TRACE_RESPONSE_ENABLED": ["A"], - "DD_TRACE_RESPONSE_HEADER_TAGS": ["A"], - "DD_TRACE_RESTEASY_ENABLED": ["A"], - "DD_TRACE_RESTLET_HTTP_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_RESTLET_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_RESTLET_HTTP_ENABLED": ["A"], - "DD_TRACE_RESTLET_HTTP_SERVER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_RESTLET_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_RESTLET_HTTP_SERVER_ENABLED": ["A"], - "DD_TRACE_RMI_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_RMI_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_RMI_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_RMI_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_RMI_CLIENT_CONTEXT_PROPAGATOR_ENABLED": ["A"], - "DD_TRACE_RMI_CLIENT_ENABLED": ["A"], - "DD_TRACE_RMI_CONTEXT_PROPAGATOR_ENABLED": ["A"], - "DD_TRACE_RMI_ENABLED": ["A"], - "DD_TRACE_RMI_SERVER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_RMI_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_RMI_SERVER_CONTEXT_PROPAGATOR_ENABLED": ["A"], - "DD_TRACE_RMI_SERVER_ENABLED": ["A"], - "DD_TRACE_RUNNABLE_ENABLED": ["A"], - "DD_TRACE_RUNNABLE_FUTURE_ENABLED": ["A"], - "DD_TRACE_RUNTIME_CONTEXT_FIELD_INJECTION": ["A"], - "DD_TRACE_RXJAVA_ENABLED": ["A"], - "DD_TRACE_S3_ENABLED": ["A"], - "DD_TRACE_SAMPLE_RATE": ["A"], - "DD_TRACE_SAMPLING_MECHANISM_VALIDATION_DISABLED": ["A"], - "DD_TRACE_SAMPLING_OPERATION_RULES": ["A"], - "DD_TRACE_SAMPLING_RULES": ["A"], - "DD_TRACE_SAMPLING_SERVICE_RULES": ["A"], - "DD_TRACE_SCALATEST_ENABLED": ["A"], - "DD_TRACE_SCALA_CONCURRENT_ENABLED": ["A"], - "DD_TRACE_SCALA_FUTURE_OBJECT_ENABLED": ["A"], - "DD_TRACE_SCALA_PROMISE_COMPLETE_ENABLED": ["A"], - "DD_TRACE_SCALA_PROMISE_COMPLETION_PRIORITY_ENABLED": ["A"], - "DD_TRACE_SCALA_PROMISE_RESOLVE_ENABLED": ["A"], - "DD_TRACE_SCOPE_DEPTH_LIMIT": ["A"], - "DD_TRACE_SCOPE_ITERATION_KEEP_ALIVE": ["A"], - "DD_TRACE_SCOPE_STRICT_MODE": ["A"], - "DD_TRACE_SECURE_RANDOM": ["A"], - "DD_TRACE_SELENIUM_ENABLED": ["A"], - "DD_TRACE_SERIALVERSIONUID_FIELD_INJECTION": ["A"], - "DD_TRACE_SERVELET_RESPONSE_ENABLED": ["A"], - "DD_TRACE_SERVICENAMETAGINTERCEPTOR_ENABLED": ["A"], - "DD_TRACE_SERVICETALK_CONCURRENT_ENABLED": ["A"], - "DD_TRACE_SERVICETALK_ENABLED": ["A"], - "DD_TRACE_SERVLETCONTEXTTAGINTERCEPTOR_ENABLED": ["A"], - "DD_TRACE_SERVLET_2_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SERVLET_2_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SERVLET_2_ENABLED": ["A"], - "DD_TRACE_SERVLET_3_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SERVLET_3_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SERVLET_3_ASYNC_CONTEXT_ENABLED": ["A"], - "DD_TRACE_SERVLET_3_ENABLED": ["A"], - "DD_TRACE_SERVLET_5_ASYNC_CONTEXT_ENABLED": ["A"], - "DD_TRACE_SERVLET_5_ENABLED": ["A"], - "DD_TRACE_SERVLET_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SERVLET_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SERVLET_ASYNC_TIMEOUT_ERROR": ["A"], - "DD_TRACE_SERVLET_COOKIE_ENABLED": ["A"], - "DD_TRACE_SERVLET_DISPATCHER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SERVLET_DISPATCHER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SERVLET_DISPATCHER_ENABLED": ["A"], - "DD_TRACE_SERVLET_ENABLED": ["A"], - "DD_TRACE_SERVLET_FILTER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SERVLET_FILTER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SERVLET_FILTER_ENABLED": ["A"], - "DD_TRACE_SERVLET_PRINCIPAL_ENABLED": ["A"], - "DD_TRACE_SERVLET_REQUEST_BODY_ENABLED": ["A"], - "DD_TRACE_SERVLET_REQUEST_ENABLED": ["A"], - "DD_TRACE_SERVLET_RESPONSE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SERVLET_RESPONSE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SERVLET_RESPONSE_ENABLED": ["A"], - "DD_TRACE_SERVLET_ROOT_CONTEXT_SERVICE_NAME": ["A"], - "DD_TRACE_SERVLET_SERVICE_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SERVLET_SERVICE_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SERVLET_SERVICE_ENABLED": ["A"], - "DD_TRACE_SERVLET_SESSION_ENABLED": ["A"], - "DD_TRACE_SETUP_TEARDOWN_ENABLED": ["A"], - "DD_TRACE_SFN_ENABLED": ["A"], - "DD_TRACE_SHUTDOWN_ENABLED": ["A"], - "DD_TRACE_SLICK_ENABLED": ["A"], - "DD_TRACE_SNAKEYAML_ENABLED": ["A"], - "DD_TRACE_SNS_ENABLED": ["A"], - "DD_TRACE_SOCKET_ENABLED": ["A"], - "DD_TRACE_SPAN_ATTRIBUTE_SCHEMA": ["A"], - "DD_TRACE_SPAN_TAGS": ["A"], - "DD_TRACE_SPARKJAVA_2_4_ENABLED": ["A"], - "DD_TRACE_SPARKJAVA_ENABLED": ["A"], - "DD_TRACE_SPARK_ENABLED": ["A"], - "DD_TRACE_SPARK_EXECUTOR_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPARK_EXECUTOR_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPARK_EXECUTOR_ENABLED": ["A"], - "DD_TRACE_SPARK_EXIT_ENABLED": ["A"], - "DD_TRACE_SPARK_OPENLINEAGE_ENABLED": ["A"], - "DD_TRACE_SPLIT_BY_TAGS": ["A"], - "DD_TRACE_SPRAY_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPRAY_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPRAY_HTTP_ENABLED": ["A"], - "DD_TRACE_SPRAY_HTTP_SERVER_ENABLED": ["A"], - "DD_TRACE_SPRING_ASYNC_ENABLED": ["A"], - "DD_TRACE_SPRING_BEANS_ENABLED": ["A"], - "DD_TRACE_SPRING_BOOT_ENABLED": ["A"], - "DD_TRACE_SPRING_BOOT_SPAN_ORIGIN_ENABLED": ["A"], - "DD_TRACE_SPRING_CLOUD_ZUUL_ENABLED": ["A"], - "DD_TRACE_SPRING_CORE_ENABLED": ["A"], - "DD_TRACE_SPRING_DATA_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPRING_DATA_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPRING_DATA_ENABLED": ["A"], - "DD_TRACE_SPRING_JMS_ENABLED": ["A"], - "DD_TRACE_SPRING_MESSAGING_4_ENABLED": ["A"], - "DD_TRACE_SPRING_MESSAGING_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPRING_MESSAGING_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPRING_MESSAGING_E2E_DURATION_ENABLED": ["A"], - "DD_TRACE_SPRING_MESSAGING_ENABLED": ["A"], - "DD_TRACE_SPRING_PATH_FILTER_ENABLED": ["A"], - "DD_TRACE_SPRING_RABBIT_ENABLED": ["A"], - "DD_TRACE_SPRING_SCHEDULING_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPRING_SCHEDULING_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPRING_SCHEDULING_ENABLED": ["A"], - "DD_TRACE_SPRING_SCHEDULING_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_SPRING_SECURITY_ENABLED": ["A"], - "DD_TRACE_SPRING_WEBFLUX_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPRING_WEBFLUX_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPRING_WEBFLUX_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPRING_WEBFLUX_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPRING_WEBFLUX_CLIENT_ENABLED": ["A"], - "DD_TRACE_SPRING_WEBFLUX_ENABLED": ["A"], - "DD_TRACE_SPRING_WEBFLUX_FUNCTIONAL_ENABLED": ["A"], - "DD_TRACE_SPRING_WEB_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPRING_WEB_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPRING_WEB_CODE_ORIGIN_ENABLED": ["A"], - "DD_TRACE_SPRING_WEB_ENABLED": ["A"], - "DD_TRACE_SPRING_WS_2_ENABLED": ["A"], - "DD_TRACE_SPRING_WS_ENABLED": ["A"], - "DD_TRACE_SPYMEMCACHED_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SPYMEMCACHED_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SPYMEMCACHED_ENABLED": ["A"], - "DD_TRACE_SQS_BODY_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_SQS_ENABLED": ["A"], - "DD_TRACE_SQS_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_SQS_PROPAGATION_ENABLED": ["A"], - "DD_TRACE_SQS_TIME_IN_QUEUE_ENABLED": ["A"], - "DD_TRACE_SSLSOCKET_ENABLED": ["A"], - "DD_TRACE_STARTUP_LOGS": ["A"], - "DD_TRACE_STATS_COMPUTATION_ENABLED": ["A"], - "DD_TRACE_STATUS404DECORATOR_ENABLED": ["A"], - "DD_TRACE_STATUS404RULE_ENABLED": ["A"], - "DD_TRACE_STRICT_WRITES_ENABLED": ["A"], - "DD_TRACE_STRUCTURED_TASK_SCOPE_ENABLED": ["A"], - "DD_TRACE_SUREFIRE_ENABLED": ["A"], - "DD_TRACE_SYNAPSE3_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_SYNAPSE3_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_SYNAPSE3_CLIENT_ENABLED": ["A"], - "DD_TRACE_SYNAPSE3_ENABLED": ["A"], - "DD_TRACE_SYNAPSE3_SERVER_ENABLED": ["A"], - "DD_TRACE_TAGS": ["A"], - "DD_TRACE_TASK_RUNNER_ENABLED": ["A"], - "DD_TRACE_TASK_UNWRAPPING_ENABLED": ["A"], - "DD_TRACE_TESTNG_6_ENABLED": ["A"], - "DD_TRACE_TESTNG_7_ENABLED": ["A"], - "DD_TRACE_TESTNG_ENABLED": ["A"], - "DD_TRACE_TESTNG_ITR_ENABLED": ["A"], - "DD_TRACE_TESTS_ENABLED": ["A"], - "DD_TRACE_TEST_ORDER_ENABLED": ["A"], - "DD_TRACE_TEST_RETRY_ENABLED": ["A"], - "DD_TRACE_THREAD_POOL_EXECUTORS_EXCLUDE": ["A"], - "DD_TRACE_THREAD_POOL_EXECUTORS_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_THROWABLES_ENABLED": ["A"], - "DD_TRACE_THYMELEAF_ENABLED": ["A"], - "DD_TRACE_TIBCO_BW_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_TIBCO_BW_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_TIBCO_BW_ENABLED": ["A"], - "DD_TRACE_TIBCO_ENABLED": ["A"], - "DD_TRACE_TINYLOG_ENABLED": ["A"], - "DD_TRACE_TOMCAT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_TOMCAT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_TOMCAT_CLASSLOADING_ENABLED": ["A"], - "DD_TRACE_TOMCAT_ENABLED": ["A"], - "DD_TRACE_TOMCAT_WEBSOCKET_ENABLED": ["A"], - "DD_TRACE_TRACER_METRICS_BUFFERING_ENABLED": ["A"], - "DD_TRACE_TRACER_METRICS_ENABLED": ["A"], - "DD_TRACE_TRACER_METRICS_IGNORED_RESOURCES": ["A"], - "DD_TRACE_TRACER_METRICS_MAX_AGGREGATES": ["A"], - "DD_TRACE_TRACER_METRICS_MAX_PENDING": ["A"], - "DD_TRACE_TRACE_ANNOTATION_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_TRACE_ANNOTATION_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_TRACE_ANNOTATION_ENABLED": ["A"], - "DD_TRACE_TRACE_CONFIG_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_TRACE_CONFIG_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_TRACE_CONFIG_ENABLED": ["A"], - "DD_TRACE_TRACE_ENABLED": ["A"], - "DD_TRACE_TRIAGE": ["A"], - "DD_TRACE_TWILIO_SDK_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_TWILIO_SDK_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_TWILIO_SDK_ENABLED": ["A"], - "DD_TRACE_UNDERTOW_2_0_ENABLED": ["A"], - "DD_TRACE_UNDERTOW_2_2_ENABLED": ["A"], - "DD_TRACE_UNDERTOW_ENABLED": ["A"], - "DD_TRACE_UNDERTOW_HTTP_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_UNDERTOW_HTTP_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_UNDERTOW_HTTP_SERVER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_UNDERTOW_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_UNDERTOW_LEGACY_TRACING_ENABLED": ["A"], - "DD_TRACE_UNDERTOW_REQUEST_PARSE_ENABLED": ["A"], - "DD_TRACE_URLASRESOURCENAMERULE_ENABLED": ["A"], - "DD_TRACE_URLCONNECTION_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_URLCONNECTION_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_URLCONNECTION_ENABLED": ["A"], - "DD_TRACE_VALKEY_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_VALKEY_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_VALKEY_ENABLED": ["A"], - "DD_TRACE_VELOCITY_ENABLED": ["A"], - "DD_TRACE_VERTX_3_4_ENABLED": ["A"], - "DD_TRACE_VERTX_3_5_ENABLED": ["A"], - "DD_TRACE_VERTX_3_9_ENABLED": ["A"], - "DD_TRACE_VERTX_4_0_ENABLED": ["A"], - "DD_TRACE_VERTX_5_0_ENABLED": ["A"], - "DD_TRACE_VERTX_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_VERTX_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_VERTX_ENABLED": ["A"], - "DD_TRACE_VERTX_REDIS_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_VERTX_REDIS_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_VERTX_REDIS_CLIENT_ENABLED": ["A"], - "DD_TRACE_VERTX_ROUTE_HANDLER_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_VERTX_ROUTE_HANDLER_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_VERTX_SQL_CLIENT_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_VERTX_SQL_CLIENT_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_VERTX_SQL_CLIENT_ENABLED": ["A"], - "DD_TRACE_WALLCLOCK_ENABLED": ["A"], - "DD_TRACE_WEAVER_ENABLED": ["A"], - "DD_TRACE_WEBSOCKET_ANALYTICS_ENABLED": ["A"], - "DD_TRACE_WEBSOCKET_ANALYTICS_SAMPLE_RATE": ["A"], - "DD_TRACE_WEBSOCKET_ENABLED": ["A"], - "DD_TRACE_WEBSOCKET_MESSAGES_ENABLED": ["A"], - "DD_TRACE_WEBSOCKET_MESSAGES_INHERIT_SAMPLING": ["A"], - "DD_TRACE_WEBSOCKET_MESSAGES_SEPARATE_TRACES": ["A"], - "DD_TRACE_WEBSOCKET_TAG_SESSION_ID": ["A"], - "DD_TRACE_WEBSPHERE_JMX_ENABLED": ["A"], - "DD_TRACE_WILDFLY_ENABLED": ["A"], - "DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH": ["A"], - "DD_TRACE_ZIO_EXPERIMENTAL_ENABLED": ["A"], - "DD_TRIAGE_REPORT_DIR": ["A"], - "DD_TRIAGE_REPORT_TRIGGER": ["A"], - "DD_UNDERTOW_CONTINUATION": ["A"], - "DD_USM_ENABLED": ["A"], - "DD_VERSION": ["A"], - "DD_WRITER_BAGGAGE_INJECT": ["A"], - "DD_WRITER_TYPE": ["A"], - "OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_REQUEST_HEADERS": ["A"], - "OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_RESPONSE_HEADERS": ["A"], - "OTEL_INSTRUMENTATION_HTTP_SERVER_CAPTURE_REQUEST_HEADERS": ["A"], - "OTEL_INSTRUMENTATION_HTTP_SERVER_CAPTURE_RESPONSE_HEADERS": ["A"], - "OTEL_JAVAAGENT_CONFIGURATION_FILE": ["A"], - "OTEL_JAVAAGENT_EXTENSIONS": ["A"], - "OTEL_LOGS_EXPORTER": ["A"], - "OTEL_LOG_LEVEL": ["A"], - "OTEL_METRICS_EXPORTER": ["A"], - "OTEL_PROPAGATORS": ["A"], - "OTEL_RESOURCE_ATTRIBUTES": ["A"], - "OTEL_SDK_DISABLED": ["A"], - "OTEL_SERVICE_NAME": ["A"], - "OTEL_TRACES_EXPORTER": ["A"], - "OTEL_TRACES_SAMPLER_ARG": ["A"], - "OTEL_TRACES_SAMPLER": ["A"] - }, - "aliases": { - "DD_PROFILING_ASYNC_LIVEHEAP_CAPACITY": ["DD_PROFILING_DDPROF_MEMLEAK_CAPACITY"], - "DD_PROFILING_ASYNC_LIVEHEAP_INTERVAL": ["DD_PROFILING_DDPROF_MEMLEAK_INTERVAL"], - "DD_PROFILING_STACKDEPTH": ["DD_PROFILING_DDPROF_STACKDEPTH"], - "DD_TRACE_AEROSPIKE_ANALYTICS_SAMPLE_RATE": ["DD_AEROSPIKE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AEROSPIKE_ENABLED": ["DD_TRACE_INTEGRATION_AEROSPIKE_ENABLED","DD_INTEGRATION_AEROSPIKE_ENABLED"], - "DD_TRACE_AKKA_ACTOR_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_ACTOR_ENABLED","DD_INTEGRATION_AKKA_ACTOR_ENABLED"], - "DD_TRACE_AKKA_ACTOR_MAILBOX_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_ACTOR_MAILBOX_ENABLED","DD_INTEGRATION_AKKA_ACTOR_MAILBOX_ENABLED"], - "DD_TRACE_AKKA_ACTOR_RECEIVE_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_ACTOR_RECEIVE_ENABLED","DD_INTEGRATION_AKKA_ACTOR_RECEIVE_ENABLED"], - "DD_TRACE_AKKA_ACTOR_SEND_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_ACTOR_SEND_ENABLED","DD_INTEGRATION_AKKA_ACTOR_SEND_ENABLED"], - "DD_TRACE_AKKA_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_CONCURRENT_ENABLED","DD_INTEGRATION_AKKA_CONCURRENT_ENABLED"], - "DD_TRACE_AKKA_HTTP2_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_HTTP2_ENABLED","DD_INTEGRATION_AKKA_HTTP2_ENABLED"], - "DD_TRACE_AKKA_HTTP_ANALYTICS_ENABLED": ["DD_AKKA_HTTP_ANALYTICS_ENABLED"], - "DD_TRACE_AKKA_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_AKKA_HTTP_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AKKA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_AKKA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AKKA_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_HTTP_CLIENT_ENABLED","DD_INTEGRATION_AKKA_HTTP_CLIENT_ENABLED"], - "DD_TRACE_AKKA_HTTP_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_HTTP_ENABLED","DD_INTEGRATION_AKKA_HTTP_ENABLED"], - "DD_TRACE_AKKA_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_AKKA_HTTP_SERVER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AKKA_HTTP_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_AKKA_HTTP_SERVER_ENABLED","DD_INTEGRATION_AKKA_HTTP_SERVER_ENABLED"], - "DD_TRACE_ALLOCATEDIRECT_ENABLED": ["DD_TRACE_INTEGRATION_ALLOCATEDIRECT_ENABLED","DD_INTEGRATION_ALLOCATEDIRECT_ENABLED"], - "DD_TRACE_AMQP_ANALYTICS_SAMPLE_RATE": ["DD_AMQP_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AMQP_ENABLED": ["DD_TRACE_INTEGRATION_AMQP_ENABLED","DD_INTEGRATION_AMQP_ENABLED"], - "DD_TRACE_ANNOTATIONS_LEGACY_TRACING_ENABLED": ["DD_ANNOTATIONS_LEGACY_TRACING_ENABLED"], - "DD_TRACE_APACHE_HTTPASYNCCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPASYNCCLIENT5_ENABLED","DD_INTEGRATION_APACHE_HTTPASYNCCLIENT5_ENABLED"], - "DD_TRACE_APACHE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_APACHE_HTTPASYNCCLIENT_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPASYNCCLIENT_ENABLED","DD_INTEGRATION_APACHE_HTTPASYNCCLIENT_ENABLED"], - "DD_TRACE_APACHE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_APACHE_HTTPCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPCLIENT5_ENABLED","DD_INTEGRATION_APACHE_HTTPCLIENT5_ENABLED"], - "DD_TRACE_APACHE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_APACHE_HTTPCLIENT_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPCLIENT_ENABLED","DD_INTEGRATION_APACHE_HTTPCLIENT_ENABLED"], - "DD_TRACE_APACHE_HTTPCORE_5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPCORE_5_ENABLED","DD_INTEGRATION_APACHE_HTTPCORE_5_ENABLED"], - "DD_TRACE_APACHE_HTTPCORE_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTPCORE_ENABLED","DD_INTEGRATION_APACHE_HTTPCORE_ENABLED"], - "DD_TRACE_APACHE_HTTP_CLIENT5_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTP_CLIENT5_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_APACHE_HTTP_CLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTP_CLIENT5_ENABLED","DD_INTEGRATION_APACHE_HTTP_CLIENT5_ENABLED"], - "DD_TRACE_APACHE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_APACHE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_APACHE_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTP_CLIENT_ENABLED","DD_INTEGRATION_APACHE_HTTP_CLIENT_ENABLED"], - "DD_TRACE_APACHE_HTTP_CORE_5_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTP_CORE_5_ENABLED","DD_INTEGRATION_APACHE_HTTP_CORE_5_ENABLED"], - "DD_TRACE_APACHE_HTTP_CORE_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_HTTP_CORE_ENABLED","DD_INTEGRATION_APACHE_HTTP_CORE_ENABLED"], - "DD_TRACE_APACHE_SPARK_ENABLED": ["DD_TRACE_INTEGRATION_APACHE_SPARK_ENABLED","DD_INTEGRATION_APACHE_SPARK_ENABLED"], - "DD_TRACE_ARMERIA_ANALYTICS_SAMPLE_RATE": ["DD_ARMERIA_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_ARMERIA_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_ENABLED","DD_INTEGRATION_ARMERIA_ENABLED"], - "DD_TRACE_ARMERIA_GRPC_ANALYTICS_SAMPLE_RATE": ["DD_ARMERIA_GRPC_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_ARMERIA_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_ARMERIA_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_ARMERIA_GRPC_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_GRPC_CLIENT_ENABLED","DD_INTEGRATION_ARMERIA_GRPC_CLIENT_ENABLED"], - "DD_TRACE_ARMERIA_GRPC_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_GRPC_ENABLED","DD_INTEGRATION_ARMERIA_GRPC_ENABLED"], - "DD_TRACE_ARMERIA_GRPC_MESSAGE_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_GRPC_MESSAGE_ENABLED","DD_INTEGRATION_ARMERIA_GRPC_MESSAGE_ENABLED"], - "DD_TRACE_ARMERIA_GRPC_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_ARMERIA_GRPC_SERVER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_ARMERIA_GRPC_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_GRPC_SERVER_ENABLED","DD_INTEGRATION_ARMERIA_GRPC_SERVER_ENABLED"], - "DD_TRACE_ARMERIA_JETTY_ENABLED": ["DD_TRACE_INTEGRATION_ARMERIA_JETTY_ENABLED","DD_INTEGRATION_ARMERIA_JETTY_ENABLED"], - "DD_TRACE_AUTH0_JWT_ENABLED": ["DD_TRACE_INTEGRATION_AUTH0_JWT_ENABLED","DD_INTEGRATION_AUTH0_JWT_ENABLED"], - "DD_TRACE_AVRO_ENABLED": ["DD_TRACE_INTEGRATION_AVRO_ENABLED","DD_INTEGRATION_AVRO_ENABLED"], - "DD_TRACE_AWSADD_SPAN_POINTERS": ["DD_AWSADD_SPAN_POINTERS"], - "DD_TRACE_AWS_DYNAMODB_ENABLED": ["DD_TRACE_INTEGRATION_AWS_DYNAMODB_ENABLED","DD_INTEGRATION_AWS_DYNAMODB_ENABLED"], - "DD_TRACE_AWS_LAMBDA_ENABLED": ["DD_TRACE_INTEGRATION_AWS_LAMBDA_ENABLED","DD_INTEGRATION_AWS_LAMBDA_ENABLED"], - "DD_TRACE_AWS_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_AWS_PROPAGATION_ENABLED","DD_INTEGRATION_AWS_PROPAGATION_ENABLED"], - "DD_TRACE_AWS_S3_ENABLED": ["DD_TRACE_INTEGRATION_AWS_S3_ENABLED","DD_INTEGRATION_AWS_S3_ENABLED"], - "DD_TRACE_AWS_SDK_ANALYTICS_SAMPLE_RATE": ["DD_AWS_SDK_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AWS_SDK_ENABLED": ["DD_TRACE_INTEGRATION_AWS_SDK_ENABLED","DD_INTEGRATION_AWS_SDK_ENABLED"], - "DD_TRACE_AWS_SDK_LEGACY_TRACING_ENABLED": ["DD_AWS_SDK_LEGACY_TRACING_ENABLED"], - "DD_TRACE_AWS_SDK_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_AWS_SDK_PROPAGATION_ENABLED","DD_INTEGRATION_AWS_SDK_PROPAGATION_ENABLED"], - "DD_TRACE_AXIS2_ANALYTICS_SAMPLE_RATE": ["DD_AXIS2_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AXIS2_ENABLED": ["DD_TRACE_INTEGRATION_AXIS2_ENABLED","DD_INTEGRATION_AXIS2_ENABLED"], - "DD_TRACE_AXIS2_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_AXIS2_TRANSPORT_ENABLED","DD_INTEGRATION_AXIS2_TRANSPORT_ENABLED"], - "DD_TRACE_AXWAY_API_ENABLED": ["DD_TRACE_INTEGRATION_AXWAY_API_ENABLED","DD_INTEGRATION_AXWAY_API_ENABLED"], - "DD_TRACE_AXWAY_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_AXWAY_HTTP_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AZURE_FUNCTIONS_ANALYTICS_SAMPLE_RATE": ["DD_AZURE_FUNCTIONS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_AZURE_FUNCTIONS_ENABLED": ["DD_TRACE_INTEGRATION_AZURE_FUNCTIONS_ENABLED","DD_INTEGRATION_AZURE_FUNCTIONS_ENABLED"], - "DD_TRACE_CAFFEINE_ENABLED": ["DD_TRACE_INTEGRATION_CAFFEINE_ENABLED","DD_INTEGRATION_CAFFEINE_ENABLED"], - "DD_TRACE_CASSANDRA_ANALYTICS_SAMPLE_RATE": ["DD_CASSANDRA_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_CASSANDRA_ENABLED": ["DD_TRACE_INTEGRATION_CASSANDRA_ENABLED","DD_INTEGRATION_CASSANDRA_ENABLED"], - "DD_TRACE_CI_VISIBILITY_ENABLED": ["DD_TRACE_INTEGRATION_CI_VISIBILITY_ENABLED","DD_INTEGRATION_CI_VISIBILITY_ENABLED"], - "DD_TRACE_CLASSLOADING_ENABLED": ["DD_TRACE_INTEGRATION_CLASSLOADING_ENABLED","DD_INTEGRATION_CLASSLOADING_ENABLED"], - "DD_TRACE_COMMONS_FILEUPLOAD_ENABLED": ["DD_TRACE_INTEGRATION_COMMONS_FILEUPLOAD_ENABLED","DD_INTEGRATION_COMMONS_FILEUPLOAD_ENABLED"], - "DD_TRACE_COMMONS_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_COMMONS_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_COMMONS_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_COMMONS_HTTP_CLIENT_ENABLED","DD_INTEGRATION_COMMONS_HTTP_CLIENT_ENABLED"], - "DD_TRACE_CONSUMER_TASK_ENABLED": ["DD_TRACE_INTEGRATION_CONSUMER_TASK_ENABLED","DD_INTEGRATION_CONSUMER_TASK_ENABLED"], - "DD_TRACE_COUCHBASE_3_ENABLED": ["DD_TRACE_INTEGRATION_COUCHBASE_3_ENABLED","DD_INTEGRATION_COUCHBASE_3_ENABLED"], - "DD_TRACE_COUCHBASE_ANALYTICS_SAMPLE_RATE": ["DD_COUCHBASE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_COUCHBASE_ENABLED": ["DD_TRACE_INTEGRATION_COUCHBASE_ENABLED","DD_INTEGRATION_COUCHBASE_ENABLED"], - "DD_TRACE_CUCUMBER_5_ANALYTICS_SAMPLE_RATE": ["DD_CUCUMBER_5_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_CUCUMBER_5_ENABLED": ["DD_TRACE_INTEGRATION_CUCUMBER_5_ENABLED","DD_INTEGRATION_CUCUMBER_5_ENABLED"], - "DD_TRACE_CUCUMBER_ANALYTICS_SAMPLE_RATE": ["DD_CUCUMBER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_CUCUMBER_ENABLED": ["DD_TRACE_INTEGRATION_CUCUMBER_ENABLED","DD_INTEGRATION_CUCUMBER_ENABLED"], - "DD_TRACE_CXF_ENABLED": ["DD_TRACE_INTEGRATION_CXF_ENABLED","DD_INTEGRATION_CXF_ENABLED"], - "DD_TRACE_CXF_INVOKER_ENABLED": ["DD_TRACE_INTEGRATION_CXF_INVOKER_ENABLED","DD_INTEGRATION_CXF_INVOKER_ENABLED"], - "DD_TRACE_DATANUCLEUS_ANALYTICS_SAMPLE_RATE": ["DD_DATANUCLEUS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_DATANUCLEUS_ENABLED": ["DD_TRACE_INTEGRATION_DATANUCLEUS_ENABLED","DD_INTEGRATION_DATANUCLEUS_ENABLED"], - "DD_TRACE_DB2_ENABLED": ["DD_TRACE_INTEGRATION_DB2_ENABLED","DD_INTEGRATION_DB2_ENABLED"], - "DD_TRACE_DBM_ENABLED": ["DD_TRACE_INTEGRATION_DBM_ENABLED","DD_INTEGRATION_DBM_ENABLED"], - "DD_TRACE_DEFINECLASS_ENABLED": ["DD_TRACE_INTEGRATION_DEFINECLASS_ENABLED","DD_INTEGRATION_DEFINECLASS_ENABLED"], - "DD_TRACE_DIRECTALLOCATION_ENABLED": ["DD_TRACE_INTEGRATION_DIRECTALLOCATION_ENABLED","DD_INTEGRATION_DIRECTALLOCATION_ENABLED"], - "DD_TRACE_DO_NOT_TRACE_ANNOTATION_ENABLED": ["DD_TRACE_INTEGRATION_DO_NOT_TRACE_ANNOTATION_ENABLED","DD_INTEGRATION_DO_NOT_TRACE_ANNOTATION_ENABLED"], - "DD_TRACE_DROPWIZARD_ENABLED": ["DD_TRACE_INTEGRATION_DROPWIZARD_ENABLED","DD_INTEGRATION_DROPWIZARD_ENABLED"], - "DD_TRACE_DROPWIZARD_VIEW_ENABLED": ["DD_TRACE_INTEGRATION_DROPWIZARD_VIEW_ENABLED","DD_INTEGRATION_DROPWIZARD_VIEW_ENABLED"], - "DD_TRACE_DYNAMODB_ENABLED": ["DD_TRACE_INTEGRATION_DYNAMODB_ENABLED","DD_INTEGRATION_DYNAMODB_ENABLED"], - "DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE": ["DD_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_ELASTICSEARCH_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_ENABLED","DD_INTEGRATION_ELASTICSEARCH_ENABLED"], - "DD_TRACE_ELASTICSEARCH_REST_5_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_REST_5_ENABLED","DD_INTEGRATION_ELASTICSEARCH_REST_5_ENABLED"], - "DD_TRACE_ELASTICSEARCH_REST_6_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_REST_6_ENABLED","DD_INTEGRATION_ELASTICSEARCH_REST_6_ENABLED"], - "DD_TRACE_ELASTICSEARCH_REST_7_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_REST_7_ENABLED","DD_INTEGRATION_ELASTICSEARCH_REST_7_ENABLED"], - "DD_TRACE_ELASTICSEARCH_REST_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_REST_ENABLED","DD_INTEGRATION_ELASTICSEARCH_REST_ENABLED"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_2_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_2_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_2_ENABLED"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_5_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_5_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_5_ENABLED"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_6_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_6_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_6_ENABLED"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_7_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_7_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_7_ENABLED"], - "DD_TRACE_ELASTICSEARCH_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_ENABLED"], - "DD_TRACE_EMR_AWS_SDK_ENABLED": ["DD_TRACE_INTEGRATION_EMR_AWS_SDK_ENABLED","DD_INTEGRATION_EMR_AWS_SDK_ENABLED"], - "DD_TRACE_EVENTBRIDGE_ENABLED": ["DD_TRACE_INTEGRATION_EVENTBRIDGE_ENABLED","DD_INTEGRATION_EVENTBRIDGE_ENABLED"], - "DD_TRACE_FILEITEMITERATOR_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEMITERATOR_ENABLED","DD_INTEGRATION_FILEITEMITERATOR_ENABLED"], - "DD_TRACE_FILEITEMSTREAM_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEMSTREAM_ENABLED","DD_INTEGRATION_FILEITEMSTREAM_ENABLED"], - "DD_TRACE_FILEITEM_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEM_ENABLED","DD_INTEGRATION_FILEITEM_ENABLED"], - "DD_TRACE_FINATRA_ANALYTICS_SAMPLE_RATE": ["DD_FINATRA_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_FINATRA_ENABLED": ["DD_TRACE_INTEGRATION_FINATRA_ENABLED","DD_INTEGRATION_FINATRA_ENABLED"], - "DD_TRACE_FJP_ENABLED": ["DD_TRACE_INTEGRATION_FJP_ENABLED","DD_INTEGRATION_FJP_ENABLED"], - "DD_TRACE_FJP_WORKQUEUE_ENABLED": ["DD_TRACE_INTEGRATION_FJP_WORKQUEUE_ENABLED","DD_INTEGRATION_FJP_WORKQUEUE_ENABLED"], - "DD_TRACE_FREEMARKER_ENABLED": ["DD_TRACE_INTEGRATION_FREEMARKER_ENABLED","DD_INTEGRATION_FREEMARKER_ENABLED"], - "DD_TRACE_GLASSFISH_ENABLED": ["DD_TRACE_INTEGRATION_GLASSFISH_ENABLED","DD_INTEGRATION_GLASSFISH_ENABLED"], - "DD_TRACE_GOOGLE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_GOOGLE_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_GOOGLE_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_GOOGLE_HTTP_CLIENT_ENABLED","DD_INTEGRATION_GOOGLE_HTTP_CLIENT_ENABLED"], - "DD_TRACE_GOOGLE_PUBSUB_ANALYTICS_SAMPLE_RATE": ["DD_GOOGLE_PUBSUB_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_GOOGLE_PUBSUB_ENABLED": ["DD_TRACE_INTEGRATION_GOOGLE_PUBSUB_ENABLED","DD_INTEGRATION_GOOGLE_PUBSUB_ENABLED"], - "DD_TRACE_GOOGLE_PUBSUB_LEGACY_TRACING_ENABLED": ["DD_GOOGLE_PUBSUB_LEGACY_TRACING_ENABLED"], - "DD_TRACE_GOOGLE_PUBSUB_PUBLISHER_ENABLED": ["DD_TRACE_INTEGRATION_GOOGLE_PUBSUB_PUBLISHER_ENABLED","DD_INTEGRATION_GOOGLE_PUBSUB_PUBLISHER_ENABLED"], - "DD_TRACE_GOOGLE_PUBSUB_RECEIVER_ENABLED": ["DD_TRACE_INTEGRATION_GOOGLE_PUBSUB_RECEIVER_ENABLED","DD_INTEGRATION_GOOGLE_PUBSUB_RECEIVER_ENABLED"], - "DD_TRACE_GRADLE_BUILD_LISTENER_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_BUILD_LISTENER_ENABLED","DD_INTEGRATION_GRADLE_BUILD_LISTENER_ENABLED"], - "DD_TRACE_GRADLE_BUILD_SCOPE_SERVICES_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_BUILD_SCOPE_SERVICES_ENABLED","DD_INTEGRATION_GRADLE_BUILD_SCOPE_SERVICES_ENABLED"], - "DD_TRACE_GRADLE_DAEMON_JVM_OPTIONS_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_DAEMON_JVM_OPTIONS_ENABLED","DD_INTEGRATION_GRADLE_DAEMON_JVM_OPTIONS_ENABLED"], - "DD_TRACE_GRADLE_DAEMON_LOGGING_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_DAEMON_LOGGING_ENABLED","DD_INTEGRATION_GRADLE_DAEMON_LOGGING_ENABLED"], - "DD_TRACE_GRADLE_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_ENABLED","DD_INTEGRATION_GRADLE_ENABLED"], - "DD_TRACE_GRADLE_PLUGIN_INJECTOR_ENABLED": ["DD_TRACE_INTEGRATION_GRADLE_PLUGIN_INJECTOR_ENABLED","DD_INTEGRATION_GRADLE_PLUGIN_INJECTOR_ENABLED"], - "DD_TRACE_GRAPHQL_JAVA_ANALYTICS_SAMPLE_RATE": ["DD_GRAPHQL_JAVA_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_GRAPHQL_JAVA_ENABLED": ["DD_TRACE_INTEGRATION_GRAPHQL_JAVA_ENABLED","DD_INTEGRATION_GRAPHQL_JAVA_ENABLED"], - "DD_TRACE_GRIZZLY_ANALYTICS_ENABLED": ["DD_GRIZZLY_ANALYTICS_ENABLED"], - "DD_TRACE_GRIZZLY_ANALYTICS_SAMPLE_RATE": ["DD_GRIZZLY_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_GRIZZLY_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_GRIZZLY_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_GRIZZLY_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_GRIZZLY_CLIENT_ENABLED","DD_INTEGRATION_GRIZZLY_CLIENT_ENABLED"], - "DD_TRACE_GRIZZLY_ENABLED": ["DD_TRACE_INTEGRATION_GRIZZLY_ENABLED","DD_INTEGRATION_GRIZZLY_ENABLED"], - "DD_TRACE_GRIZZLY_FILTERCHAIN_ENABLED": ["DD_TRACE_INTEGRATION_GRIZZLY_FILTERCHAIN_ENABLED","DD_INTEGRATION_GRIZZLY_FILTERCHAIN_ENABLED"], - "DD_TRACE_GRPC_ANALYTICS_ENABLED": ["DD_GRPC_ANALYTICS_ENABLED"], - "DD_TRACE_GRPC_ANALYTICS_SAMPLE_RATE": ["DD_GRPC_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_GRPC_CLIENT_ANALYTICS_ENABLED": ["DD_GRPC_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_GRPC_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_GRPC_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_CLIENT_ENABLED","DD_INTEGRATION_GRPC_CLIENT_ENABLED"], - "DD_TRACE_GRPC_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_ENABLED","DD_INTEGRATION_GRPC_ENABLED"], - "DD_TRACE_GRPC_MESSAGE_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_MESSAGE_ENABLED","DD_INTEGRATION_GRPC_MESSAGE_ENABLED"], - "DD_TRACE_GRPC_NETTY_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_NETTY_ENABLED","DD_INTEGRATION_GRPC_NETTY_ENABLED"], - "DD_TRACE_GRPC_SERVER_ANALYTICS_ENABLED": ["DD_GRPC_SERVER_ANALYTICS_ENABLED"], - "DD_TRACE_GRPC_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_GRPC_SERVER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_GRPC_SERVER_CODE_ORIGIN_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_SERVER_CODE_ORIGIN_ENABLED","DD_INTEGRATION_GRPC_SERVER_CODE_ORIGIN_ENABLED"], - "DD_TRACE_GRPC_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_GRPC_SERVER_ENABLED","DD_INTEGRATION_GRPC_SERVER_ENABLED"], - "DD_TRACE_GSON_ENABLED": ["DD_TRACE_INTEGRATION_GSON_ENABLED","DD_INTEGRATION_GSON_ENABLED"], - "DD_TRACE_GUAVA_ENABLED": ["DD_TRACE_INTEGRATION_GUAVA_ENABLED","DD_INTEGRATION_GUAVA_ENABLED"], - "DD_TRACE_HAZELCAST_ENABLED": ["DD_TRACE_INTEGRATION_HAZELCAST_ENABLED","DD_INTEGRATION_HAZELCAST_ENABLED"], - "DD_TRACE_HAZELCAST_LEGACY_ENABLED": ["DD_TRACE_INTEGRATION_HAZELCAST_LEGACY_ENABLED","DD_INTEGRATION_HAZELCAST_LEGACY_ENABLED"], - "DD_TRACE_HAZELCAST_SDK_ANALYTICS_SAMPLE_RATE": ["DD_HAZELCAST_SDK_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_HEADER_TAGS_LEGACY_PARSING_ENABLED": ["DD_TRACE_INTEGRATION_HEADER_TAGS_LEGACY_PARSING_ENABLED","DD_INTEGRATION_HEADER_TAGS_LEGACY_PARSING_ENABLED"], - "DD_TRACE_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE": ["DD_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_HIBERNATE_CORE_ENABLED": ["DD_TRACE_INTEGRATION_HIBERNATE_CORE_ENABLED","DD_INTEGRATION_HIBERNATE_CORE_ENABLED"], - "DD_TRACE_HIBERNATE_ENABLED": ["DD_TRACE_INTEGRATION_HIBERNATE_ENABLED","DD_INTEGRATION_HIBERNATE_ENABLED"], - "DD_TRACE_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED": ["DD_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED"], - "DD_TRACE_HTTPASYNCCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_HTTPASYNCCLIENT5_ENABLED","DD_INTEGRATION_HTTPASYNCCLIENT5_ENABLED"], - "DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_HTTPASYNCCLIENT_ENABLED": ["DD_TRACE_INTEGRATION_HTTPASYNCCLIENT_ENABLED","DD_INTEGRATION_HTTPASYNCCLIENT_ENABLED"], - "DD_TRACE_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE": ["DD_HTTPCLIENT5_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_HTTPCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCLIENT5_ENABLED","DD_INTEGRATION_HTTPCLIENT5_ENABLED"], - "DD_TRACE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_HTTPCLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_HTTPCLIENT_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCLIENT_ENABLED","DD_INTEGRATION_HTTPCLIENT_ENABLED"], - "DD_TRACE_HTTPCLIENT_REDIRECT_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCLIENT_REDIRECT_ENABLED","DD_INTEGRATION_HTTPCLIENT_REDIRECT_ENABLED"], - "DD_TRACE_HTTPCORE_5_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCORE_5_ENABLED","DD_INTEGRATION_HTTPCORE_5_ENABLED"], - "DD_TRACE_HTTPCORE_ENABLED": ["DD_TRACE_INTEGRATION_HTTPCORE_ENABLED","DD_INTEGRATION_HTTPCORE_ENABLED"], - "DD_TRACE_HTTPURLCONNECTION_ANALYTICS_ENABLED": ["DD_HTTPURLCONNECTION_ANALYTICS_ENABLED"], - "DD_TRACE_HTTPURLCONNECTION_ANALYTICS_SAMPLE_RATE": ["DD_HTTPURLCONNECTION_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_HTTPURLCONNECTION_ENABLED": ["DD_TRACE_INTEGRATION_HTTPURLCONNECTION_ENABLED","DD_INTEGRATION_HTTPURLCONNECTION_ENABLED"], - "DD_TRACE_HYSTRIX_ENABLED": ["DD_TRACE_INTEGRATION_HYSTRIX_ENABLED","DD_INTEGRATION_HYSTRIX_ENABLED"], - "DD_TRACE_IASTINSTRUMENTATION_ENABLED": ["DD_TRACE_INTEGRATION_IASTINSTRUMENTATION_ENABLED","DD_INTEGRATION_IASTINSTRUMENTATION_ENABLED"], - "DD_TRACE_IAST_RESULTSET_ENABLED": ["DD_TRACE_INTEGRATION_IAST_RESULTSET_ENABLED","DD_INTEGRATION_IAST_RESULTSET_ENABLED"], - "DD_TRACE_IGNITE_ANALYTICS_SAMPLE_RATE": ["DD_IGNITE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_IGNITE_ENABLED": ["DD_TRACE_INTEGRATION_IGNITE_ENABLED","DD_INTEGRATION_IGNITE_ENABLED"], - "DD_TRACE_INPUTSTREAM_ENABLED": ["DD_TRACE_INTEGRATION_INPUTSTREAM_ENABLED","DD_INTEGRATION_INPUTSTREAM_ENABLED"], - "DD_TRACE_INTEGRATION_DATANUCLEUS_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_DATANUCLEUS_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_DROPWIZARD_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_DROPWIZARD_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_GRPC_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_GRPC_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_HIBERNATE_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HIBERNATE_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_HTTPASYNCCLIENT5_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HTTPASYNCCLIENT5_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_HTTPASYNCCLIENT_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HTTPASYNCCLIENT_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_HTTPCLIENT5_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HTTPCLIENT5_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_HTTPCLIENT_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_HTTPCLIENT_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_JAVA_CONCURRENT_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_JAVA_CONCURRENT_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_MATCHING_SHORTCUT_ENABLED": ["DD_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_MATCHING_SHORTCUT_ENABLED"], - "DD_TRACE_JACKSON_1_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_1_ENABLED","DD_INTEGRATION_JACKSON_1_ENABLED"], - "DD_TRACE_JACKSON_2_12_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_12_ENABLED","DD_INTEGRATION_JACKSON_2_12_ENABLED"], - "DD_TRACE_JACKSON_2_16_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_16_ENABLED","DD_INTEGRATION_JACKSON_2_16_ENABLED"], - "DD_TRACE_JACKSON_2_6_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_6_ENABLED","DD_INTEGRATION_JACKSON_2_6_ENABLED"], - "DD_TRACE_JACKSON_2_8_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_8_ENABLED","DD_INTEGRATION_JACKSON_2_8_ENABLED"], - "DD_TRACE_JACKSON_2_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_2_ENABLED","DD_INTEGRATION_JACKSON_2_ENABLED"], - "DD_TRACE_JACKSON_CORE_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_CORE_ENABLED","DD_INTEGRATION_JACKSON_CORE_ENABLED"], - "DD_TRACE_JACKSON_ENABLED": ["DD_TRACE_INTEGRATION_JACKSON_ENABLED","DD_INTEGRATION_JACKSON_ENABLED"], - "DD_TRACE_JACOCO_ENABLED": ["DD_TRACE_INTEGRATION_JACOCO_ENABLED","DD_INTEGRATION_JACOCO_ENABLED"], - "DD_TRACE_JAKARTARS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTARS_ENABLED","DD_INTEGRATION_JAKARTARS_ENABLED"], - "DD_TRACE_JAKARTA_JMS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_JMS_ENABLED","DD_INTEGRATION_JAKARTA_JMS_ENABLED"], - "DD_TRACE_JAKARTA_MAIL_BODY_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_MAIL_BODY_ENABLED","DD_INTEGRATION_JAKARTA_MAIL_BODY_ENABLED"], - "DD_TRACE_JAKARTA_MAIL_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_MAIL_ENABLED","DD_INTEGRATION_JAKARTA_MAIL_ENABLED"], - "DD_TRACE_JAKARTA_MAIL_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_MAIL_TRANSPORT_ENABLED","DD_INTEGRATION_JAKARTA_MAIL_TRANSPORT_ENABLED"], - "DD_TRACE_JAKARTA_RS_ANNOTATIONS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_RS_ANNOTATIONS_ENABLED","DD_INTEGRATION_JAKARTA_RS_ANNOTATIONS_ENABLED"], - "DD_TRACE_JAKARTA_RS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_RS_ENABLED","DD_INTEGRATION_JAKARTA_RS_ENABLED"], - "DD_TRACE_JAKARTA_RS_FILTER_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_RS_FILTER_ENABLED","DD_INTEGRATION_JAKARTA_RS_FILTER_ENABLED"], - "DD_TRACE_JAKARTA_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_WEBSOCKET_ENABLED","DD_INTEGRATION_JAKARTA_WEBSOCKET_ENABLED"], - "DD_TRACE_JAKARTA_WS_ANALYTICS_SAMPLE_RATE": ["DD_JAKARTA_WS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JAKARTA_WS_ENABLED": ["DD_TRACE_INTEGRATION_JAKARTA_WS_ENABLED","DD_INTEGRATION_JAKARTA_WS_ENABLED"], - "DD_TRACE_JAVAX_MAIL_BODY_ENABLED": ["DD_TRACE_INTEGRATION_JAVAX_MAIL_BODY_ENABLED","DD_INTEGRATION_JAVAX_MAIL_BODY_ENABLED"], - "DD_TRACE_JAVAX_MAIL_ENABLED": ["DD_TRACE_INTEGRATION_JAVAX_MAIL_ENABLED","DD_INTEGRATION_JAVAX_MAIL_ENABLED"], - "DD_TRACE_JAVAX_MAIL_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_JAVAX_MAIL_TRANSPORT_ENABLED","DD_INTEGRATION_JAVAX_MAIL_TRANSPORT_ENABLED"], - "DD_TRACE_JAVAX_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_JAVAX_WEBSOCKET_ENABLED","DD_INTEGRATION_JAVAX_WEBSOCKET_ENABLED"], - "DD_TRACE_JAVA_COMPLETABLEFUTURE_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_COMPLETABLEFUTURE_ENABLED","DD_INTEGRATION_JAVA_COMPLETABLEFUTURE_ENABLED"], - "DD_TRACE_JAVA_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_CONCURRENT_ENABLED","DD_INTEGRATION_JAVA_CONCURRENT_ENABLED"], - "DD_TRACE_JAVA_CONCURRENT_OTHER_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_CONCURRENT_OTHER_ENABLED","DD_INTEGRATION_JAVA_CONCURRENT_OTHER_ENABLED"], - "DD_TRACE_JAVA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_JAVA_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JAVA_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_HTTP_CLIENT_ENABLED","DD_INTEGRATION_JAVA_HTTP_CLIENT_ENABLED"], - "DD_TRACE_JAVA_LANG_APPSEC_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_LANG_APPSEC_ENABLED","DD_INTEGRATION_JAVA_LANG_APPSEC_ENABLED"], - "DD_TRACE_JAVA_LANG_MANAGEMENT_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_LANG_MANAGEMENT_ENABLED","DD_INTEGRATION_JAVA_LANG_MANAGEMENT_ENABLED"], - "DD_TRACE_JAVA_TIMER_ENABLED": ["DD_TRACE_INTEGRATION_JAVA_TIMER_ENABLED","DD_INTEGRATION_JAVA_TIMER_ENABLED"], - "DD_TRACE_JAXRS_ANALYTICS_SAMPLE_RATE": ["DD_JAXRS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JAXRS_ENABLED": ["DD_TRACE_INTEGRATION_JAXRS_ENABLED","DD_INTEGRATION_JAXRS_ENABLED"], - "DD_TRACE_JAX_RS_ANALYTICS_SAMPLE_RATE": ["DD_JAX_RS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JAX_RS_ANNOTATIONS_ENABLED": ["DD_TRACE_INTEGRATION_JAX_RS_ANNOTATIONS_ENABLED","DD_INTEGRATION_JAX_RS_ANNOTATIONS_ENABLED"], - "DD_TRACE_JAX_RS_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_JAX_RS_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JAX_RS_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_JAX_RS_CLIENT_ENABLED","DD_INTEGRATION_JAX_RS_CLIENT_ENABLED"], - "DD_TRACE_JAX_RS_ENABLED": ["DD_TRACE_INTEGRATION_JAX_RS_ENABLED","DD_INTEGRATION_JAX_RS_ENABLED"], - "DD_TRACE_JAX_RS_FILTER_ENABLED": ["DD_TRACE_INTEGRATION_JAX_RS_FILTER_ENABLED","DD_INTEGRATION_JAX_RS_FILTER_ENABLED"], - "DD_TRACE_JAX_WS_ANALYTICS_SAMPLE_RATE": ["DD_JAX_WS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JAX_WS_ENABLED": ["DD_TRACE_INTEGRATION_JAX_WS_ENABLED","DD_INTEGRATION_JAX_WS_ENABLED"], - "DD_TRACE_JBOSS_LOGMANAGER_ENABLED": ["DD_TRACE_INTEGRATION_JBOSS_LOGMANAGER_ENABLED","DD_INTEGRATION_JBOSS_LOGMANAGER_ENABLED"], - "DD_TRACE_JBOSS_MODULES_ENABLED": ["DD_TRACE_INTEGRATION_JBOSS_MODULES_ENABLED","DD_INTEGRATION_JBOSS_MODULES_ENABLED"], - "DD_TRACE_JDBC_ANALYTICS_ENABLED": ["DD_JDBC_ANALYTICS_ENABLED"], - "DD_TRACE_JDBC_ANALYTICS_SAMPLE_RATE": ["DD_JDBC_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JDBC_DATASOURCE_ANALYTICS_SAMPLE_RATE": ["DD_JDBC_DATASOURCE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JDBC_DATASOURCE_ENABLED": ["DD_TRACE_INTEGRATION_JDBC_DATASOURCE_ENABLED","DD_INTEGRATION_JDBC_DATASOURCE_ENABLED"], - "DD_TRACE_JDBC_ENABLED": ["DD_TRACE_INTEGRATION_JDBC_ENABLED","DD_INTEGRATION_JDBC_ENABLED"], - "DD_TRACE_JDBC_RESULTSET_ENABLED": ["DD_TRACE_INTEGRATION_JDBC_RESULTSET_ENABLED","DD_INTEGRATION_JDBC_RESULTSET_ENABLED"], - "DD_TRACE_JEDIS_ANALYTICS_SAMPLE_RATE": ["DD_JEDIS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JEDIS_ENABLED": ["DD_TRACE_INTEGRATION_JEDIS_ENABLED","DD_INTEGRATION_JEDIS_ENABLED"], - "DD_TRACE_JEE_ENV_ENTRY_ENABLED": ["DD_TRACE_INTEGRATION_JEE_ENV_ENTRY_ENABLED","DD_INTEGRATION_JEE_ENV_ENTRY_ENABLED"], - "DD_TRACE_JERSEY_ENABLED": ["DD_TRACE_INTEGRATION_JERSEY_ENABLED","DD_INTEGRATION_JERSEY_ENABLED"], - "DD_TRACE_JETTY_ANALYTICS_ENABLED": ["DD_JETTY_ANALYTICS_ENABLED"], - "DD_TRACE_JETTY_ANALYTICS_SAMPLE_RATE": ["DD_JETTY_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JETTY_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_JETTY_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JETTY_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_JETTY_CLIENT_ENABLED","DD_INTEGRATION_JETTY_CLIENT_ENABLED"], - "DD_TRACE_JETTY_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_JETTY_CONCURRENT_ENABLED","DD_INTEGRATION_JETTY_CONCURRENT_ENABLED"], - "DD_TRACE_JETTY_ENABLED": ["DD_TRACE_INTEGRATION_JETTY_ENABLED","DD_INTEGRATION_JETTY_ENABLED"], - "DD_TRACE_JETTY_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_JETTY_WEBSOCKET_ENABLED","DD_INTEGRATION_JETTY_WEBSOCKET_ENABLED"], - "DD_TRACE_JMS_1_ENABLED": ["DD_TRACE_INTEGRATION_JMS_1_ENABLED","DD_INTEGRATION_JMS_1_ENABLED"], - "DD_TRACE_JMS_2_ENABLED": ["DD_TRACE_INTEGRATION_JMS_2_ENABLED","DD_INTEGRATION_JMS_2_ENABLED"], - "DD_TRACE_JMS_ANALYTICS_SAMPLE_RATE": ["DD_JMS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JMS_ENABLED": ["DD_TRACE_INTEGRATION_JMS_ENABLED","DD_INTEGRATION_JMS_ENABLED"], - "DD_TRACE_JMS_LEGACY_TRACING_ENABLED": ["DD_JMS_LEGACY_TRACING_ENABLED"], - "DD_TRACE_JMS_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_JMS_PROPAGATION_ENABLED","DD_INTEGRATION_JMS_PROPAGATION_ENABLED"], - "DD_TRACE_JMXFETCH_ACTIVEMQ_ENABLED": ["DD_JMXFETCH_ACTIVEMQ_ENABLED"], - "DD_TRACE_JMXFETCH_CASSANDRA_ENABLED": ["DD_JMXFETCH_CASSANDRA_ENABLED"], - "DD_TRACE_JMXFETCH_CONFLUENT_PLATFORM_ENABLED": ["DD_JMXFETCH_CONFLUENT_PLATFORM_ENABLED"], - "DD_TRACE_JMXFETCH_HAZELCAST_ENABLED": ["DD_JMXFETCH_HAZELCAST_ENABLED"], - "DD_TRACE_JMXFETCH_HIVEMQ_ENABLED": ["DD_JMXFETCH_HIVEMQ_ENABLED"], - "DD_TRACE_JMXFETCH_HIVE_ENABLED": ["DD_JMXFETCH_HIVE_ENABLED"], - "DD_TRACE_JMXFETCH_HUDI_ENABLED": ["DD_JMXFETCH_HUDI_ENABLED"], - "DD_TRACE_JMXFETCH_IGNITE_ENABLED": ["DD_JMXFETCH_IGNITE_ENABLED"], - "DD_TRACE_JMXFETCH_JBOSS_WILDFLY_ENABLED": ["DD_JMXFETCH_JBOSS_WILDFLY_ENABLED"], - "DD_TRACE_JMXFETCH_KAFKA_ENABLED": ["DD_JMXFETCH_KAFKA_ENABLED"], - "DD_TRACE_JMXFETCH_KUBE_APISERVER_METRICS_ENABLED": ["DD_JMXFETCH_KUBE_APISERVER_METRICS_ENABLED"], - "DD_TRACE_JMXFETCH_PRESTO_ENABLED": ["DD_JMXFETCH_PRESTO_ENABLED"], - "DD_TRACE_JMXFETCH_SOLR_ENABLED": ["DD_JMXFETCH_SOLR_ENABLED"], - "DD_TRACE_JMXFETCH_SONARQUBE_ENABLED": ["DD_JMXFETCH_SONARQUBE_ENABLED"], - "DD_TRACE_JMXFETCH_TOMCAT_ENABLED": ["DD_JMXFETCH_TOMCAT_ENABLED"], - "DD_TRACE_JMXFETCH_WEBLOGIC_ENABLED": ["DD_JMXFETCH_WEBLOGIC_ENABLED"], - "DD_TRACE_JMXFETCH_WEBSPHERE_ENABLED": ["DD_JMXFETCH_WEBSPHERE_ENABLED"], - "DD_TRACE_JMXFETCH_{CHECK_NAME}_ENABLED": ["DD_JMXFETCH_{CHECK_NAME}_ENABLED"], - "DD_TRACE_JNI_ENABLED": ["DD_TRACE_INTEGRATION_JNI_ENABLED","DD_INTEGRATION_JNI_ENABLED"], - "DD_TRACE_JOSE_JWT_ENABLED": ["DD_TRACE_INTEGRATION_JOSE_JWT_ENABLED","DD_INTEGRATION_JOSE_JWT_ENABLED"], - "DD_TRACE_JSP_ANALYTICS_ENABLED": ["DD_JSP_ANALYTICS_ENABLED"], - "DD_TRACE_JSP_ANALYTICS_SAMPLE_RATE": ["DD_JSP_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_JSP_COMPILE_ENABLED": ["DD_TRACE_INTEGRATION_JSP_COMPILE_ENABLED","DD_INTEGRATION_JSP_COMPILE_ENABLED"], - "DD_TRACE_JSP_ENABLED": ["DD_TRACE_INTEGRATION_JSP_ENABLED","DD_INTEGRATION_JSP_ENABLED"], - "DD_TRACE_JSP_RENDER_ENABLED": ["DD_TRACE_INTEGRATION_JSP_RENDER_ENABLED","DD_INTEGRATION_JSP_RENDER_ENABLED"], - "DD_TRACE_JUNIT4_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT4_ENABLED","DD_INTEGRATION_JUNIT4_ENABLED"], - "DD_TRACE_JUNIT_38_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_38_ENABLED","DD_INTEGRATION_JUNIT_38_ENABLED"], - "DD_TRACE_JUNIT_4_CUCUMBER_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_4_CUCUMBER_ENABLED","DD_INTEGRATION_JUNIT_4_CUCUMBER_ENABLED"], - "DD_TRACE_JUNIT_4_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_4_ENABLED","DD_INTEGRATION_JUNIT_4_ENABLED"], - "DD_TRACE_JUNIT_4_MUNIT_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_4_MUNIT_ENABLED","DD_INTEGRATION_JUNIT_4_MUNIT_ENABLED"], - "DD_TRACE_JUNIT_5_CUCUMBER_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_5_CUCUMBER_ENABLED","DD_INTEGRATION_JUNIT_5_CUCUMBER_ENABLED"], - "DD_TRACE_JUNIT_5_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_5_ENABLED","DD_INTEGRATION_JUNIT_5_ENABLED"], - "DD_TRACE_JUNIT_5_SPOCK_ENABLED": ["DD_TRACE_INTEGRATION_JUNIT_5_SPOCK_ENABLED","DD_INTEGRATION_JUNIT_5_SPOCK_ENABLED"], - "DD_TRACE_JWT_ENABLED": ["DD_TRACE_INTEGRATION_JWT_ENABLED","DD_INTEGRATION_JWT_ENABLED"], - "DD_TRACE_KAFKA_0_11_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_0_11_ENABLED","DD_INTEGRATION_KAFKA_0_11_ENABLED"], - "DD_TRACE_KAFKA_3_8_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_3_8_ENABLED","DD_INTEGRATION_KAFKA_3_8_ENABLED"], - "DD_TRACE_KAFKA_ANALYTICS_ENABLED": ["DD_KAFKA_ANALYTICS_ENABLED"], - "DD_TRACE_KAFKA_ANALYTICS_SAMPLE_RATE": ["DD_KAFKA_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_KAFKA_CLIENT_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_CLIENT_PROPAGATION_ENABLED","DD_INTEGRATION_KAFKA_CLIENT_PROPAGATION_ENABLED"], - "DD_TRACE_KAFKA_CONNECT_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_CONNECT_ENABLED","DD_INTEGRATION_KAFKA_CONNECT_ENABLED"], - "DD_TRACE_KAFKA_E2E_DURATION_ENABLED": ["DD_KAFKA_E2E_DURATION_ENABLED"], - "DD_TRACE_KAFKA_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_ENABLED","DD_INTEGRATION_KAFKA_ENABLED"], - "DD_TRACE_KAFKA_LEGACY_TRACING_ENABLED": ["DD_KAFKA_LEGACY_TRACING_ENABLED"], - "DD_TRACE_KAFKA_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_PROPAGATION_ENABLED","DD_INTEGRATION_KAFKA_PROPAGATION_ENABLED"], - "DD_TRACE_KAFKA_STREAMS_ANALYTICS_SAMPLE_RATE": ["DD_KAFKA_STREAMS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_KAFKA_STREAMS_ENABLED": ["DD_TRACE_INTEGRATION_KAFKA_STREAMS_ENABLED","DD_INTEGRATION_KAFKA_STREAMS_ENABLED"], - "DD_TRACE_KAFKA_TIME_IN_QUEUE_ENABLED": ["DD_KAFKA_TIME_IN_QUEUE_ENABLED"], - "DD_TRACE_KARATE_ENABLED": ["DD_TRACE_INTEGRATION_KARATE_ENABLED","DD_INTEGRATION_KARATE_ENABLED"], - "DD_TRACE_KOTLIN_COROUTINE_ENABLED": ["DD_TRACE_INTEGRATION_KOTLIN_COROUTINE_ENABLED","DD_INTEGRATION_KOTLIN_COROUTINE_ENABLED"], - "DD_TRACE_LEGACY_E2E_DURATION_ENABLED": ["DD_LEGACY_E2E_DURATION_ENABLED"], - "DD_TRACE_LETTUCE_4_ASYNC_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_4_ASYNC_ENABLED","DD_INTEGRATION_LETTUCE_4_ASYNC_ENABLED"], - "DD_TRACE_LETTUCE_4_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_4_ENABLED","DD_INTEGRATION_LETTUCE_4_ENABLED"], - "DD_TRACE_LETTUCE_5_ASYNC_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_5_ASYNC_ENABLED","DD_INTEGRATION_LETTUCE_5_ASYNC_ENABLED"], - "DD_TRACE_LETTUCE_5_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_5_ENABLED","DD_INTEGRATION_LETTUCE_5_ENABLED"], - "DD_TRACE_LETTUCE_5_RX_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_5_RX_ENABLED","DD_INTEGRATION_LETTUCE_5_RX_ENABLED"], - "DD_TRACE_LETTUCE_ANALYTICS_SAMPLE_RATE": ["DD_LETTUCE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_LETTUCE_ENABLED": ["DD_TRACE_INTEGRATION_LETTUCE_ENABLED","DD_INTEGRATION_LETTUCE_ENABLED"], - "DD_TRACE_LIBERTY_ANALYTICS_SAMPLE_RATE": ["DD_LIBERTY_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_LIBERTY_CLASSLOADING_ENABLED": ["DD_TRACE_INTEGRATION_LIBERTY_CLASSLOADING_ENABLED","DD_INTEGRATION_LIBERTY_CLASSLOADING_ENABLED"], - "DD_TRACE_LIBERTY_ENABLED": ["DD_TRACE_INTEGRATION_LIBERTY_ENABLED","DD_INTEGRATION_LIBERTY_ENABLED"], - "DD_TRACE_LOG4J_1_ENABLED": ["DD_TRACE_INTEGRATION_LOG4J_1_ENABLED","DD_INTEGRATION_LOG4J_1_ENABLED"], - "DD_TRACE_LOG4J_2_ENABLED": ["DD_TRACE_INTEGRATION_LOG4J_2_ENABLED","DD_INTEGRATION_LOG4J_2_ENABLED"], - "DD_TRACE_LOG4J_ENABLED": ["DD_TRACE_INTEGRATION_LOG4J_ENABLED","DD_INTEGRATION_LOG4J_ENABLED"], - "DD_TRACE_LOGBACK_ENABLED": ["DD_TRACE_INTEGRATION_LOGBACK_ENABLED","DD_INTEGRATION_LOGBACK_ENABLED"], - "DD_TRACE_LOGS_INTAKE_ENABLED": ["DD_TRACE_INTEGRATION_LOGS_INTAKE_ENABLED","DD_INTEGRATION_LOGS_INTAKE_ENABLED"], - "DD_TRACE_LOGS_INTAKE_LOG4J_2_ENABLED": ["DD_TRACE_INTEGRATION_LOGS_INTAKE_LOG4J_2_ENABLED","DD_INTEGRATION_LOGS_INTAKE_LOG4J_2_ENABLED"], - "DD_TRACE_MAVEN_ENABLED": ["DD_TRACE_INTEGRATION_MAVEN_ENABLED","DD_INTEGRATION_MAVEN_ENABLED"], - "DD_TRACE_MICRONAUT_ANALYTICS_SAMPLE_RATE": ["DD_MICRONAUT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_MICRONAUT_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_ENABLED","DD_INTEGRATION_MICRONAUT_ENABLED"], - "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_2_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_2_ENABLED","DD_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_2_ENABLED"], - "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_3_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_3_ENABLED","DD_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_3_ENABLED"], - "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_4_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_4_ENABLED","DD_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_4_ENABLED"], - "DD_TRACE_MICRONAUT_HTTP_SERVER_NETTY_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_ENABLED","DD_INTEGRATION_MICRONAUT_HTTP_SERVER_NETTY_ENABLED"], - "DD_TRACE_MICRONAUT_SPAN_ORIGIN_ENABLED": ["DD_TRACE_INTEGRATION_MICRONAUT_SPAN_ORIGIN_ENABLED","DD_INTEGRATION_MICRONAUT_SPAN_ORIGIN_ENABLED"], - "DD_TRACE_MMAP_ENABLED": ["DD_TRACE_INTEGRATION_MMAP_ENABLED","DD_INTEGRATION_MMAP_ENABLED"], - "DD_TRACE_MONGO_3_1_ENABLED": ["DD_TRACE_INTEGRATION_MONGO_3_1_ENABLED","DD_INTEGRATION_MONGO_3_1_ENABLED"], - "DD_TRACE_MONGO_3_4_ENABLED": ["DD_TRACE_INTEGRATION_MONGO_3_4_ENABLED","DD_INTEGRATION_MONGO_3_4_ENABLED"], - "DD_TRACE_MONGO_ANALYTICS_ENABLED": ["DD_MONGO_ANALYTICS_ENABLED"], - "DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE": ["DD_MONGO_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_MONGO_ENABLED": ["DD_TRACE_INTEGRATION_MONGO_ENABLED","DD_INTEGRATION_MONGO_ENABLED"], - "DD_TRACE_MONGO_REACTIVESTREAMS_ENABLED": ["DD_TRACE_INTEGRATION_MONGO_REACTIVESTREAMS_ENABLED","DD_INTEGRATION_MONGO_REACTIVESTREAMS_ENABLED"], - "DD_TRACE_MULE_ANALYTICS_SAMPLE_RATE": ["DD_MULE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_MULE_ENABLED": ["DD_TRACE_INTEGRATION_MULE_ENABLED","DD_INTEGRATION_MULE_ENABLED"], - "DD_TRACE_MULE_JPMS_ENABLED": ["DD_TRACE_INTEGRATION_MULE_JPMS_ENABLED","DD_INTEGRATION_MULE_JPMS_ENABLED"], - "DD_TRACE_MULTIPART_ENABLED": ["DD_TRACE_INTEGRATION_MULTIPART_ENABLED","DD_INTEGRATION_MULTIPART_ENABLED"], - "DD_TRACE_NATIVE_IMAGE_ENABLED": ["DD_TRACE_INTEGRATION_NATIVE_IMAGE_ENABLED","DD_INTEGRATION_NATIVE_IMAGE_ENABLED"], - "DD_TRACE_NETTY_3_8_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_3_8_ENABLED","DD_INTEGRATION_NETTY_3_8_ENABLED"], - "DD_TRACE_NETTY_3_9_ANALYTICS_ENABLED": ["DD_NETTY_3_9_ANALYTICS_ENABLED"], - "DD_TRACE_NETTY_3_9_ANALYTICS_SAMPLE_RATE": ["DD_NETTY_3_9_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_NETTY_4_0_ANALYTICS_ENABLED": ["DD_NETTY_4_0_ANALYTICS_ENABLED"], - "DD_TRACE_NETTY_4_0_ANALYTICS_SAMPLE_RATE": ["DD_NETTY_4_0_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_NETTY_4_0_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_4_0_ENABLED","DD_INTEGRATION_NETTY_4_0_ENABLED"], - "DD_TRACE_NETTY_4_1_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_4_1_ENABLED","DD_INTEGRATION_NETTY_4_1_ENABLED"], - "DD_TRACE_NETTY_4_1_HTTP2_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_4_1_HTTP2_ENABLED","DD_INTEGRATION_NETTY_4_1_HTTP2_ENABLED"], - "DD_TRACE_NETTY_ANALYTICS_ENABLED": ["DD_NETTY_ANALYTICS_ENABLED"], - "DD_TRACE_NETTY_ANALYTICS_SAMPLE_RATE": ["DD_NETTY_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_NETTY_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_CONCURRENT_ENABLED","DD_INTEGRATION_NETTY_CONCURRENT_ENABLED"], - "DD_TRACE_NETTY_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_ENABLED","DD_INTEGRATION_NETTY_ENABLED"], - "DD_TRACE_NETTY_EVENT_EXECUTOR_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_EVENT_EXECUTOR_ENABLED","DD_INTEGRATION_NETTY_EVENT_EXECUTOR_ENABLED"], - "DD_TRACE_NETTY_PROMISE_ENABLED": ["DD_TRACE_INTEGRATION_NETTY_PROMISE_ENABLED","DD_INTEGRATION_NETTY_PROMISE_ENABLED"], - "DD_TRACE_NEW_TASK_FOR_ENABLED": ["DD_TRACE_INTEGRATION_NEW_TASK_FOR_ENABLED","DD_INTEGRATION_NEW_TASK_FOR_ENABLED"], - "DD_TRACE_NING_ANALYTICS_SAMPLE_RATE": ["DD_NING_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_NING_ENABLED": ["DD_TRACE_INTEGRATION_NING_ENABLED","DD_INTEGRATION_NING_ENABLED"], - "DD_TRACE_NOT_NOT_TRACE_ENABLED": ["DD_TRACE_INTEGRATION_NOT_NOT_TRACE_ENABLED","DD_INTEGRATION_NOT_NOT_TRACE_ENABLED"], - "DD_TRACE_OGNL_ENABLED": ["DD_TRACE_INTEGRATION_OGNL_ENABLED","DD_INTEGRATION_OGNL_ENABLED"], - "DD_TRACE_OKHTTP_2_ANALYTICS_SAMPLE_RATE": ["DD_OKHTTP_2_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_OKHTTP_2_ENABLED": ["DD_TRACE_INTEGRATION_OKHTTP_2_ENABLED","DD_INTEGRATION_OKHTTP_2_ENABLED"], - "DD_TRACE_OKHTTP_3_ANALYTICS_SAMPLE_RATE": ["DD_OKHTTP_3_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_OKHTTP_3_ENABLED": ["DD_TRACE_INTEGRATION_OKHTTP_3_ENABLED","DD_INTEGRATION_OKHTTP_3_ENABLED"], - "DD_TRACE_OKHTTP_ANALYTICS_SAMPLE_RATE": ["DD_OKHTTP_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_OKHTTP_ENABLED": ["DD_TRACE_INTEGRATION_OKHTTP_ENABLED","DD_INTEGRATION_OKHTTP_ENABLED"], - "DD_TRACE_OPENSEARCH_ANALYTICS_SAMPLE_RATE": ["DD_OPENSEARCH_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_OPENSEARCH_ENABLED": ["DD_TRACE_INTEGRATION_OPENSEARCH_ENABLED","DD_INTEGRATION_OPENSEARCH_ENABLED"], - "DD_TRACE_OPENSEARCH_REST_ENABLED": ["DD_TRACE_INTEGRATION_OPENSEARCH_REST_ENABLED","DD_INTEGRATION_OPENSEARCH_REST_ENABLED"], - "DD_TRACE_OPENSEARCH_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_OPENSEARCH_TRANSPORT_ENABLED","DD_INTEGRATION_OPENSEARCH_TRANSPORT_ENABLED"], - "DD_TRACE_OPENTELEMETRY_1_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_1_ENABLED","DD_INTEGRATION_OPENTELEMETRY_1_ENABLED"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_20_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_1_20_ENABLED","DD_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_1_20_ENABLED"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_26_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_1_26_ENABLED","DD_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_1_26_ENABLED"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_ENABLED": ["DD_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_ENABLED"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_SAMPLE_RATE": ["DD_OPENTELEMETRY_ANNOTATIONS_1_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_ENABLED": ["DD_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_ENABLED"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_SAMPLE_RATE": ["DD_OPENTELEMETRY_ANNOTATIONS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_OPENTELEMETRY_ANNOTATIONS_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_ENABLED","DD_INTEGRATION_OPENTELEMETRY_ANNOTATIONS_ENABLED"], - "DD_TRACE_OPENTELEMETRY_BETA_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_BETA_ENABLED","DD_INTEGRATION_OPENTELEMETRY_BETA_ENABLED"], - "DD_TRACE_OPENTELEMETRY_EXPERIMENTAL_ENABLED": ["DD_TRACE_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_ENABLED","DD_INTEGRATION_OPENTELEMETRY_EXPERIMENTAL_ENABLED"], - "DD_TRACE_OPENTRACING_ENABLED": ["DD_TRACE_INTEGRATION_OPENTRACING_ENABLED","DD_INTEGRATION_OPENTRACING_ENABLED"], - "DD_TRACE_OPENTRACING_GLOBALTRACER_ENABLED": ["DD_TRACE_INTEGRATION_OPENTRACING_GLOBALTRACER_ENABLED","DD_INTEGRATION_OPENTRACING_GLOBALTRACER_ENABLED"], - "DD_TRACE_ORG_JSON_ENABLED": ["DD_TRACE_INTEGRATION_ORG_JSON_ENABLED","DD_INTEGRATION_ORG_JSON_ENABLED"], - "DD_TRACE_OSGI_ENABLED": ["DD_TRACE_INTEGRATION_OSGI_ENABLED","DD_INTEGRATION_OSGI_ENABLED"], - "DD_TRACE_PEKKO_ACTOR_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_ACTOR_ENABLED","DD_INTEGRATION_PEKKO_ACTOR_ENABLED"], - "DD_TRACE_PEKKO_ACTOR_MAILBOX_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_ACTOR_MAILBOX_ENABLED","DD_INTEGRATION_PEKKO_ACTOR_MAILBOX_ENABLED"], - "DD_TRACE_PEKKO_ACTOR_RECEIVE_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_ACTOR_RECEIVE_ENABLED","DD_INTEGRATION_PEKKO_ACTOR_RECEIVE_ENABLED"], - "DD_TRACE_PEKKO_ACTOR_SEND_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_ACTOR_SEND_ENABLED","DD_INTEGRATION_PEKKO_ACTOR_SEND_ENABLED"], - "DD_TRACE_PEKKO_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_CONCURRENT_ENABLED","DD_INTEGRATION_PEKKO_CONCURRENT_ENABLED"], - "DD_TRACE_PEKKO_HTTP2_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_HTTP2_ENABLED","DD_INTEGRATION_PEKKO_HTTP2_ENABLED"], - "DD_TRACE_PEKKO_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_PEKKO_HTTP_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_PEKKO_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_PEKKO_HTTP_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_PEKKO_HTTP_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_HTTP_CLIENT_ENABLED","DD_INTEGRATION_PEKKO_HTTP_CLIENT_ENABLED"], - "DD_TRACE_PEKKO_HTTP_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_HTTP_ENABLED","DD_INTEGRATION_PEKKO_HTTP_ENABLED"], - "DD_TRACE_PEKKO_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_PEKKO_HTTP_SERVER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_PEKKO_HTTP_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_HTTP_SERVER_ENABLED","DD_INTEGRATION_PEKKO_HTTP_SERVER_ENABLED"], - "DD_TRACE_PEKKO_SCHEDULER_ENABLED": ["DD_TRACE_INTEGRATION_PEKKO_SCHEDULER_ENABLED","DD_INTEGRATION_PEKKO_SCHEDULER_ENABLED"], - "DD_TRACE_PLAY_ACTION_ENABLED": ["DD_TRACE_INTEGRATION_PLAY_ACTION_ENABLED","DD_INTEGRATION_PLAY_ACTION_ENABLED"], - "DD_TRACE_PLAY_ANALYTICS_ENABLED": ["DD_PLAY_ANALYTICS_ENABLED"], - "DD_TRACE_PLAY_ANALYTICS_SAMPLE_RATE": ["DD_PLAY_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_PLAY_ENABLED": ["DD_TRACE_INTEGRATION_PLAY_ENABLED","DD_INTEGRATION_PLAY_ENABLED"], - "DD_TRACE_PLAY_WS_ANALYTICS_ENABLED": ["DD_PLAY_WS_ANALYTICS_ENABLED"], - "DD_TRACE_PLAY_WS_ANALYTICS_SAMPLE_RATE": ["DD_PLAY_WS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_PLAY_WS_ENABLED": ["DD_TRACE_INTEGRATION_PLAY_WS_ENABLED","DD_INTEGRATION_PLAY_WS_ENABLED"], - "DD_TRACE_POWERMOCK_ENABLED": ["DD_TRACE_INTEGRATION_POWERMOCK_ENABLED","DD_INTEGRATION_POWERMOCK_ENABLED"], - "DD_TRACE_PROPAGATION_STYLE_B3_PADDING_ENABLED": ["DD_TRACE_INTEGRATION_PROPAGATION_STYLE_B3_PADDING_ENABLED","DD_INTEGRATION_PROPAGATION_STYLE_B3_PADDING_ENABLED"], - "DD_TRACE_PROTOBUF_ENABLED": ["DD_TRACE_INTEGRATION_PROTOBUF_ENABLED","DD_INTEGRATION_PROTOBUF_ENABLED"], - "DD_TRACE_QUARTZ_ANALYTICS_SAMPLE_RATE": ["DD_QUARTZ_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_QUARTZ_ENABLED": ["DD_TRACE_INTEGRATION_QUARTZ_ENABLED","DD_INTEGRATION_QUARTZ_ENABLED"], - "DD_TRACE_RABBITMQ_ANALYTICS_SAMPLE_RATE": ["DD_RABBITMQ_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_RABBITMQ_ENABLED": ["DD_TRACE_INTEGRATION_RABBITMQ_ENABLED","DD_INTEGRATION_RABBITMQ_ENABLED"], - "DD_TRACE_RABBITMQ_LEGACY_TRACING_ENABLED": ["DD_RABBITMQ_LEGACY_TRACING_ENABLED"], - "DD_TRACE_RABBITMQ_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_RABBITMQ_PROPAGATION_ENABLED","DD_INTEGRATION_RABBITMQ_PROPAGATION_ENABLED"], - "DD_TRACE_RABBIT_LEGACY_TRACING_ENABLED": ["DD_RABBIT_LEGACY_TRACING_ENABLED"], - "DD_TRACE_RABBIT_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_RABBIT_PROPAGATION_ENABLED","DD_INTEGRATION_RABBIT_PROPAGATION_ENABLED"], - "DD_TRACE_RATPACK_ANALYTICS_ENABLED": ["DD_RATPACK_ANALYTICS_ENABLED"], - "DD_TRACE_RATPACK_ANALYTICS_SAMPLE_RATE": ["DD_RATPACK_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_RATPACK_ENABLED": ["DD_TRACE_INTEGRATION_RATPACK_ENABLED","DD_INTEGRATION_RATPACK_ENABLED"], - "DD_TRACE_RATPACK_REQUEST_BODY_ENABLED": ["DD_TRACE_INTEGRATION_RATPACK_REQUEST_BODY_ENABLED","DD_INTEGRATION_RATPACK_REQUEST_BODY_ENABLED"], - "DD_TRACE_REACTIVE_STREAMS_1_ENABLED": ["DD_TRACE_INTEGRATION_REACTIVE_STREAMS_1_ENABLED","DD_INTEGRATION_REACTIVE_STREAMS_1_ENABLED"], - "DD_TRACE_REACTIVE_STREAMS_ENABLED": ["DD_TRACE_INTEGRATION_REACTIVE_STREAMS_ENABLED","DD_INTEGRATION_REACTIVE_STREAMS_ENABLED"], - "DD_TRACE_REACTOR_CORE_ENABLED": ["DD_TRACE_INTEGRATION_REACTOR_CORE_ENABLED","DD_INTEGRATION_REACTOR_CORE_ENABLED"], - "DD_TRACE_REACTOR_NETTY_1_ENABLED": ["DD_TRACE_INTEGRATION_REACTOR_NETTY_1_ENABLED","DD_INTEGRATION_REACTOR_NETTY_1_ENABLED"], - "DD_TRACE_REACTOR_NETTY_ENABLED": ["DD_TRACE_INTEGRATION_REACTOR_NETTY_ENABLED","DD_INTEGRATION_REACTOR_NETTY_ENABLED"], - "DD_TRACE_REDISCALA_ANALYTICS_SAMPLE_RATE": ["DD_REDISCALA_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_REDISCALA_CONNECTION_ENABLED": ["DD_TRACE_INTEGRATION_REDISCALA_CONNECTION_ENABLED","DD_INTEGRATION_REDISCALA_CONNECTION_ENABLED"], - "DD_TRACE_REDISCALA_ENABLED": ["DD_TRACE_INTEGRATION_REDISCALA_ENABLED","DD_INTEGRATION_REDISCALA_ENABLED"], - "DD_TRACE_REDISSON_ANALYTICS_SAMPLE_RATE": ["DD_REDISSON_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_REDISSON_ENABLED": ["DD_TRACE_INTEGRATION_REDISSON_ENABLED","DD_INTEGRATION_REDISSON_ENABLED"], - "DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE": ["DD_REDIS_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_REDIS_ENABLED": ["DD_TRACE_INTEGRATION_REDIS_ENABLED","DD_INTEGRATION_REDIS_ENABLED"], - "DD_TRACE_REJECTED_EXECUTION_HANDLER_ENABLED": ["DD_TRACE_INTEGRATION_REJECTED_EXECUTION_HANDLER_ENABLED","DD_INTEGRATION_REJECTED_EXECUTION_HANDLER_ENABLED"], - "DD_TRACE_RENAISSANCE_ENABLED": ["DD_TRACE_INTEGRATION_RENAISSANCE_ENABLED","DD_INTEGRATION_RENAISSANCE_ENABLED"], - "DD_TRACE_RESPONSE_ENABLED": ["DD_TRACE_INTEGRATION_RESPONSE_ENABLED","DD_INTEGRATION_RESPONSE_ENABLED"], - "DD_TRACE_RESTEASY_ENABLED": ["DD_TRACE_INTEGRATION_RESTEASY_ENABLED","DD_INTEGRATION_RESTEASY_ENABLED"], - "DD_TRACE_RESTLET_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_RESTLET_HTTP_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_RESTLET_HTTP_ENABLED": ["DD_TRACE_INTEGRATION_RESTLET_HTTP_ENABLED","DD_INTEGRATION_RESTLET_HTTP_ENABLED"], - "DD_TRACE_RESTLET_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_RESTLET_HTTP_SERVER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_RESTLET_HTTP_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_RESTLET_HTTP_SERVER_ENABLED","DD_INTEGRATION_RESTLET_HTTP_SERVER_ENABLED"], - "DD_TRACE_RMI_ANALYTICS_SAMPLE_RATE": ["DD_RMI_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_RMI_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_RMI_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_RMI_CLIENT_CONTEXT_PROPAGATOR_ENABLED": ["DD_TRACE_INTEGRATION_RMI_CLIENT_CONTEXT_PROPAGATOR_ENABLED","DD_INTEGRATION_RMI_CLIENT_CONTEXT_PROPAGATOR_ENABLED"], - "DD_TRACE_RMI_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_RMI_CLIENT_ENABLED","DD_INTEGRATION_RMI_CLIENT_ENABLED"], - "DD_TRACE_RMI_CONTEXT_PROPAGATOR_ENABLED": ["DD_TRACE_INTEGRATION_RMI_CONTEXT_PROPAGATOR_ENABLED","DD_INTEGRATION_RMI_CONTEXT_PROPAGATOR_ENABLED"], - "DD_TRACE_RMI_ENABLED": ["DD_TRACE_INTEGRATION_RMI_ENABLED","DD_INTEGRATION_RMI_ENABLED"], - "DD_TRACE_RMI_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_RMI_SERVER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_RMI_SERVER_CONTEXT_PROPAGATOR_ENABLED": ["DD_TRACE_INTEGRATION_RMI_SERVER_CONTEXT_PROPAGATOR_ENABLED","DD_INTEGRATION_RMI_SERVER_CONTEXT_PROPAGATOR_ENABLED"], - "DD_TRACE_RMI_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_RMI_SERVER_ENABLED","DD_INTEGRATION_RMI_SERVER_ENABLED"], - "DD_TRACE_RUNNABLE_ENABLED": ["DD_TRACE_INTEGRATION_RUNNABLE_ENABLED","DD_INTEGRATION_RUNNABLE_ENABLED"], - "DD_TRACE_RUNNABLE_FUTURE_ENABLED": ["DD_TRACE_INTEGRATION_RUNNABLE_FUTURE_ENABLED","DD_INTEGRATION_RUNNABLE_FUTURE_ENABLED"], - "DD_TRACE_RXJAVA_ENABLED": ["DD_TRACE_INTEGRATION_RXJAVA_ENABLED","DD_INTEGRATION_RXJAVA_ENABLED"], - "DD_TRACE_S3_ENABLED": ["DD_TRACE_INTEGRATION_S3_ENABLED","DD_INTEGRATION_S3_ENABLED"], - "DD_TRACE_SCALATEST_ENABLED": ["DD_TRACE_INTEGRATION_SCALATEST_ENABLED","DD_INTEGRATION_SCALATEST_ENABLED"], - "DD_TRACE_SCALA_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_CONCURRENT_ENABLED","DD_INTEGRATION_SCALA_CONCURRENT_ENABLED"], - "DD_TRACE_SCALA_FUTURE_OBJECT_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_FUTURE_OBJECT_ENABLED","DD_INTEGRATION_SCALA_FUTURE_OBJECT_ENABLED"], - "DD_TRACE_SCALA_PROMISE_COMPLETE_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_PROMISE_COMPLETE_ENABLED","DD_INTEGRATION_SCALA_PROMISE_COMPLETE_ENABLED"], - "DD_TRACE_SCALA_PROMISE_COMPLETION_PRIORITY_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_PROMISE_COMPLETION_PRIORITY_ENABLED","DD_INTEGRATION_SCALA_PROMISE_COMPLETION_PRIORITY_ENABLED"], - "DD_TRACE_SCALA_PROMISE_RESOLVE_ENABLED": ["DD_TRACE_INTEGRATION_SCALA_PROMISE_RESOLVE_ENABLED","DD_INTEGRATION_SCALA_PROMISE_RESOLVE_ENABLED"], - "DD_TRACE_SELENIUM_ENABLED": ["DD_TRACE_INTEGRATION_SELENIUM_ENABLED","DD_INTEGRATION_SELENIUM_ENABLED"], - "DD_TRACE_SERVELET_RESPONSE_ENABLED": ["DD_TRACE_INTEGRATION_SERVELET_RESPONSE_ENABLED","DD_INTEGRATION_SERVELET_RESPONSE_ENABLED"], - "DD_TRACE_SERVICETALK_CONCURRENT_ENABLED": ["DD_TRACE_INTEGRATION_SERVICETALK_CONCURRENT_ENABLED","DD_INTEGRATION_SERVICETALK_CONCURRENT_ENABLED"], - "DD_TRACE_SERVICETALK_ENABLED": ["DD_TRACE_INTEGRATION_SERVICETALK_ENABLED","DD_INTEGRATION_SERVICETALK_ENABLED"], - "DD_TRACE_SERVLET_2_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_2_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SERVLET_2_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_2_ENABLED","DD_INTEGRATION_SERVLET_2_ENABLED"], - "DD_TRACE_SERVLET_3_ANALYTICS_ENABLED": ["DD_SERVLET_3_ANALYTICS_ENABLED"], - "DD_TRACE_SERVLET_3_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_3_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SERVLET_3_ASYNC_CONTEXT_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_3_ASYNC_CONTEXT_ENABLED", "DD_INTEGRATION_SERVLET_3_ASYNC_CONTEXT_ENABLED"], - "DD_TRACE_SERVLET_3_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_3_ENABLED","DD_INTEGRATION_SERVLET_3_ENABLED"], - "DD_TRACE_SERVLET_5_ASYNC_CONTEXT_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_5_ASYNC_CONTEXT_ENABLED", "DD_INTEGRATION_SERVLET_5_ASYNC_CONTEXT_ENABLED"], - "DD_TRACE_SERVLET_5_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_5_ENABLED","DD_INTEGRATION_SERVLET_5_ENABLED"], - "DD_TRACE_SERVLET_ANALYTICS_ENABLED": ["DD_SERVLET_ANALYTICS_ENABLED"], - "DD_TRACE_SERVLET_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SERVLET_COOKIE_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_COOKIE_ENABLED","DD_INTEGRATION_SERVLET_COOKIE_ENABLED"], - "DD_TRACE_SERVLET_DISPATCHER_ANALYTICS_ENABLED": ["DD_SERVLET_DISPATCHER_ANALYTICS_ENABLED"], - "DD_TRACE_SERVLET_DISPATCHER_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_DISPATCHER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SERVLET_DISPATCHER_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_DISPATCHER_ENABLED","DD_INTEGRATION_SERVLET_DISPATCHER_ENABLED"], - "DD_TRACE_SERVLET_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_ENABLED","DD_INTEGRATION_SERVLET_ENABLED"], - "DD_TRACE_SERVLET_FILTER_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_FILTER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SERVLET_FILTER_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_FILTER_ENABLED","DD_INTEGRATION_SERVLET_FILTER_ENABLED"], - "DD_TRACE_SERVLET_REQUEST_BODY_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_REQUEST_BODY_ENABLED","DD_INTEGRATION_SERVLET_REQUEST_BODY_ENABLED"], - "DD_TRACE_SERVLET_REQUEST_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_REQUEST_ENABLED","DD_INTEGRATION_SERVLET_REQUEST_ENABLED"], - "DD_TRACE_SERVLET_RESPONSE_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_RESPONSE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SERVLET_RESPONSE_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_RESPONSE_ENABLED","DD_INTEGRATION_SERVLET_RESPONSE_ENABLED"], - "DD_TRACE_SERVLET_SERVICE_ANALYTICS_SAMPLE_RATE": ["DD_SERVLET_SERVICE_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SERVLET_SERVICE_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_SERVICE_ENABLED","DD_INTEGRATION_SERVLET_SERVICE_ENABLED"], - "DD_TRACE_SERVLET_SESSION_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_SESSION_ENABLED","DD_INTEGRATION_SERVLET_SESSION_ENABLED"], - "DD_TRACE_SETUP_TEARDOWN_ENABLED": ["DD_TRACE_INTEGRATION_SETUP_TEARDOWN_ENABLED","DD_INTEGRATION_SETUP_TEARDOWN_ENABLED"], - "DD_TRACE_SFN_ENABLED": ["DD_TRACE_INTEGRATION_SFN_ENABLED","DD_INTEGRATION_SFN_ENABLED"], - "DD_TRACE_SHUTDOWN_ENABLED": ["DD_TRACE_INTEGRATION_SHUTDOWN_ENABLED","DD_INTEGRATION_SHUTDOWN_ENABLED"], - "DD_TRACE_SLICK_ENABLED": ["DD_TRACE_INTEGRATION_SLICK_ENABLED","DD_INTEGRATION_SLICK_ENABLED"], - "DD_TRACE_SNAKEYAML_ENABLED": ["DD_TRACE_INTEGRATION_SNAKEYAML_ENABLED","DD_INTEGRATION_SNAKEYAML_ENABLED"], - "DD_TRACE_SNS_ENABLED": ["DD_TRACE_INTEGRATION_SNS_ENABLED","DD_INTEGRATION_SNS_ENABLED"], - "DD_TRACE_SOCKET_ENABLED": ["DD_TRACE_INTEGRATION_SOCKET_ENABLED","DD_INTEGRATION_SOCKET_ENABLED"], - "DD_TRACE_SPARKJAVA_2_4_ENABLED": ["DD_TRACE_INTEGRATION_SPARKJAVA_2_4_ENABLED","DD_INTEGRATION_SPARKJAVA_2_4_ENABLED"], - "DD_TRACE_SPARKJAVA_ENABLED": ["DD_TRACE_INTEGRATION_SPARKJAVA_ENABLED","DD_INTEGRATION_SPARKJAVA_ENABLED"], - "DD_TRACE_SPARK_ENABLED": ["DD_TRACE_INTEGRATION_SPARK_ENABLED","DD_INTEGRATION_SPARK_ENABLED"], - "DD_TRACE_SPARK_EXECUTOR_ANALYTICS_SAMPLE_RATE": ["DD_SPARK_EXECUTOR_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPARK_EXECUTOR_ENABLED": ["DD_TRACE_INTEGRATION_SPARK_EXECUTOR_ENABLED","DD_INTEGRATION_SPARK_EXECUTOR_ENABLED"], - "DD_TRACE_SPARK_EXIT_ENABLED": ["DD_TRACE_INTEGRATION_SPARK_EXIT_ENABLED","DD_INTEGRATION_SPARK_EXIT_ENABLED"], - "DD_TRACE_SPARK_OPENLINEAGE_ENABLED": ["DD_TRACE_INTEGRATION_SPARK_OPENLINEAGE_ENABLED","DD_INTEGRATION_SPARK_OPENLINEAGE_ENABLED"], - "DD_TRACE_SPRAY_ANALYTICS_SAMPLE_RATE": ["DD_SPRAY_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPRAY_HTTP_ENABLED": ["DD_TRACE_INTEGRATION_SPRAY_HTTP_ENABLED","DD_INTEGRATION_SPRAY_HTTP_ENABLED"], - "DD_TRACE_SPRAY_HTTP_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_SPRAY_HTTP_SERVER_ENABLED","DD_INTEGRATION_SPRAY_HTTP_SERVER_ENABLED"], - "DD_TRACE_SPRING_ASYNC_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_ASYNC_ENABLED","DD_INTEGRATION_SPRING_ASYNC_ENABLED"], - "DD_TRACE_SPRING_BEANS_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_BEANS_ENABLED","DD_INTEGRATION_SPRING_BEANS_ENABLED"], - "DD_TRACE_SPRING_BOOT_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_BOOT_ENABLED","DD_INTEGRATION_SPRING_BOOT_ENABLED"], - "DD_TRACE_SPRING_BOOT_SPAN_ORIGIN_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_BOOT_SPAN_ORIGIN_ENABLED","DD_INTEGRATION_SPRING_BOOT_SPAN_ORIGIN_ENABLED"], - "DD_TRACE_SPRING_CLOUD_ZUUL_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_CLOUD_ZUUL_ENABLED","DD_INTEGRATION_SPRING_CLOUD_ZUUL_ENABLED"], - "DD_TRACE_SPRING_CORE_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_CORE_ENABLED","DD_INTEGRATION_SPRING_CORE_ENABLED"], - "DD_TRACE_SPRING_DATA_ANALYTICS_ENABLED": ["DD_SPRING_DATA_ANALYTICS_ENABLED"], - "DD_TRACE_SPRING_DATA_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_DATA_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPRING_DATA_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_DATA_ENABLED","DD_INTEGRATION_SPRING_DATA_ENABLED"], - "DD_TRACE_SPRING_JMS_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_JMS_ENABLED","DD_INTEGRATION_SPRING_JMS_ENABLED"], - "DD_TRACE_SPRING_MESSAGING_4_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_MESSAGING_4_ENABLED","DD_INTEGRATION_SPRING_MESSAGING_4_ENABLED"], - "DD_TRACE_SPRING_MESSAGING_ANALYTICS_ENABLED": ["DD_SPRING_MESSAGING_ANALYTICS_ENABLED"], - "DD_TRACE_SPRING_MESSAGING_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_MESSAGING_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPRING_MESSAGING_E2E_DURATION_ENABLED": ["DD_SPRING_MESSAGING_E2E_DURATION_ENABLED"], - "DD_TRACE_SPRING_MESSAGING_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_MESSAGING_ENABLED","DD_INTEGRATION_SPRING_MESSAGING_ENABLED"], - "DD_TRACE_SPRING_PATH_FILTER_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_PATH_FILTER_ENABLED","DD_INTEGRATION_SPRING_PATH_FILTER_ENABLED"], - "DD_TRACE_SPRING_RABBIT_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_RABBIT_ENABLED","DD_INTEGRATION_SPRING_RABBIT_ENABLED"], - "DD_TRACE_SPRING_SCHEDULING_ANALYTICS_ENABLED": ["DD_SPRING_SCHEDULING_ANALYTICS_ENABLED"], - "DD_TRACE_SPRING_SCHEDULING_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_SCHEDULING_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPRING_SCHEDULING_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_SCHEDULING_ENABLED","DD_INTEGRATION_SPRING_SCHEDULING_ENABLED"], - "DD_TRACE_SPRING_SCHEDULING_LEGACY_TRACING_ENABLED": ["DD_SPRING_SCHEDULING_LEGACY_TRACING_ENABLED"], - "DD_TRACE_SPRING_SECURITY_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_SECURITY_ENABLED","DD_INTEGRATION_SPRING_SECURITY_ENABLED"], - "DD_TRACE_SPRING_WEBFLUX_ANALYTICS_ENABLED": ["DD_SPRING_WEBFLUX_ANALYTICS_ENABLED"], - "DD_TRACE_SPRING_WEBFLUX_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_WEBFLUX_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPRING_WEBFLUX_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_WEBFLUX_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPRING_WEBFLUX_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEBFLUX_CLIENT_ENABLED","DD_INTEGRATION_SPRING_WEBFLUX_CLIENT_ENABLED"], - "DD_TRACE_SPRING_WEBFLUX_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEBFLUX_ENABLED","DD_INTEGRATION_SPRING_WEBFLUX_ENABLED"], - "DD_TRACE_SPRING_WEBFLUX_FUNCTIONAL_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEBFLUX_FUNCTIONAL_ENABLED","DD_INTEGRATION_SPRING_WEBFLUX_FUNCTIONAL_ENABLED"], - "DD_TRACE_SPRING_WEB_ANALYTICS_ENABLED": ["DD_SPRING_WEB_ANALYTICS_ENABLED"], - "DD_TRACE_SPRING_WEB_ANALYTICS_SAMPLE_RATE": ["DD_SPRING_WEB_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPRING_WEB_CODE_ORIGIN_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEB_CODE_ORIGIN_ENABLED","DD_INTEGRATION_SPRING_WEB_CODE_ORIGIN_ENABLED"], - "DD_TRACE_SPRING_WEB_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WEB_ENABLED","DD_INTEGRATION_SPRING_WEB_ENABLED"], - "DD_TRACE_SPRING_WS_2_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WS_2_ENABLED","DD_INTEGRATION_SPRING_WS_2_ENABLED"], - "DD_TRACE_SPRING_WS_ENABLED": ["DD_TRACE_INTEGRATION_SPRING_WS_ENABLED","DD_INTEGRATION_SPRING_WS_ENABLED"], - "DD_TRACE_SPYMEMCACHED_ANALYTICS_SAMPLE_RATE": ["DD_SPYMEMCACHED_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SPYMEMCACHED_ENABLED": ["DD_TRACE_INTEGRATION_SPYMEMCACHED_ENABLED","DD_INTEGRATION_SPYMEMCACHED_ENABLED"], - "DD_TRACE_SQS_ENABLED": ["DD_TRACE_INTEGRATION_SQS_ENABLED","DD_INTEGRATION_SQS_ENABLED"], - "DD_TRACE_SQS_LEGACY_TRACING_ENABLED": ["DD_SQS_LEGACY_TRACING_ENABLED"], - "DD_TRACE_SQS_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_SQS_PROPAGATION_ENABLED","DD_INTEGRATION_SQS_PROPAGATION_ENABLED"], - "DD_TRACE_SSLSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_SSLSOCKET_ENABLED","DD_INTEGRATION_SSLSOCKET_ENABLED"], - "DD_TRACE_STATS_COMPUTATION_ENABLED": ["DD_TRACE_INTEGRATION_STATS_COMPUTATION_ENABLED","DD_INTEGRATION_STATS_COMPUTATION_ENABLED"], - "DD_TRACE_STRUCTURED_TASK_SCOPE_ENABLED": ["DD_TRACE_INTEGRATION_STRUCTURED_TASK_SCOPE_ENABLED","DD_INTEGRATION_STRUCTURED_TASK_SCOPE_ENABLED"], - "DD_TRACE_SUREFIRE_ENABLED": ["DD_TRACE_INTEGRATION_SUREFIRE_ENABLED","DD_INTEGRATION_SUREFIRE_ENABLED"], - "DD_TRACE_SYNAPSE3_ANALYTICS_SAMPLE_RATE": ["DD_SYNAPSE3_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_SYNAPSE3_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_SYNAPSE3_CLIENT_ENABLED","DD_INTEGRATION_SYNAPSE3_CLIENT_ENABLED"], - "DD_TRACE_SYNAPSE3_ENABLED": ["DD_TRACE_INTEGRATION_SYNAPSE3_ENABLED","DD_INTEGRATION_SYNAPSE3_ENABLED"], - "DD_TRACE_SYNAPSE3_SERVER_ENABLED": ["DD_TRACE_INTEGRATION_SYNAPSE3_SERVER_ENABLED","DD_INTEGRATION_SYNAPSE3_SERVER_ENABLED"], - "DD_TRACE_TASK_RUNNER_ENABLED": ["DD_TRACE_INTEGRATION_TASK_RUNNER_ENABLED","DD_INTEGRATION_TASK_RUNNER_ENABLED"], - "DD_TRACE_TASK_UNWRAPPING_ENABLED": ["DD_TRACE_INTEGRATION_TASK_UNWRAPPING_ENABLED","DD_INTEGRATION_TASK_UNWRAPPING_ENABLED"], - "DD_TRACE_TESTNG_6_ENABLED": ["DD_TRACE_INTEGRATION_TESTNG_6_ENABLED","DD_INTEGRATION_TESTNG_6_ENABLED"], - "DD_TRACE_TESTNG_7_ENABLED": ["DD_TRACE_INTEGRATION_TESTNG_7_ENABLED","DD_INTEGRATION_TESTNG_7_ENABLED"], - "DD_TRACE_TESTNG_ENABLED": ["DD_TRACE_INTEGRATION_TESTNG_ENABLED","DD_INTEGRATION_TESTNG_ENABLED"], - "DD_TRACE_TESTNG_ITR_ENABLED": ["DD_TRACE_INTEGRATION_TESTNG_ITR_ENABLED","DD_INTEGRATION_TESTNG_ITR_ENABLED"], - "DD_TRACE_TEST_ORDER_ENABLED": ["DD_TRACE_INTEGRATION_TEST_ORDER_ENABLED","DD_INTEGRATION_TEST_ORDER_ENABLED"], - "DD_TRACE_TEST_RETRY_ENABLED": ["DD_TRACE_INTEGRATION_TEST_RETRY_ENABLED","DD_INTEGRATION_TEST_RETRY_ENABLED"], - "DD_TRACE_THREAD_POOL_EXECUTORS_LEGACY_TRACING_ENABLED": ["DD_THREAD_POOL_EXECUTORS_LEGACY_TRACING_ENABLED"], - "DD_TRACE_THROWABLES_ENABLED": ["DD_TRACE_INTEGRATION_THROWABLES_ENABLED","DD_INTEGRATION_THROWABLES_ENABLED"], - "DD_TRACE_THYMELEAF_ENABLED": ["DD_TRACE_INTEGRATION_THYMELEAF_ENABLED","DD_INTEGRATION_THYMELEAF_ENABLED"], - "DD_TRACE_TIBCO_BW_ANALYTICS_SAMPLE_RATE": ["DD_TIBCO_BW_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_TIBCO_BW_ENABLED": ["DD_TRACE_INTEGRATION_TIBCO_BW_ENABLED","DD_INTEGRATION_TIBCO_BW_ENABLED"], - "DD_TRACE_TIBCO_ENABLED": ["DD_TRACE_INTEGRATION_TIBCO_ENABLED","DD_INTEGRATION_TIBCO_ENABLED"], - "DD_TRACE_TINYLOG_ENABLED": ["DD_TRACE_INTEGRATION_TINYLOG_ENABLED","DD_INTEGRATION_TINYLOG_ENABLED"], - "DD_TRACE_TOMCAT_ANALYTICS_ENABLED": ["DD_TOMCAT_ANALYTICS_ENABLED"], - "DD_TRACE_TOMCAT_ANALYTICS_SAMPLE_RATE": ["DD_TOMCAT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_TOMCAT_CLASSLOADING_ENABLED": ["DD_TRACE_INTEGRATION_TOMCAT_CLASSLOADING_ENABLED","DD_INTEGRATION_TOMCAT_CLASSLOADING_ENABLED"], - "DD_TRACE_TOMCAT_ENABLED": ["DD_TRACE_INTEGRATION_TOMCAT_ENABLED","DD_INTEGRATION_TOMCAT_ENABLED"], - "DD_TRACE_TOMCAT_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_TOMCAT_WEBSOCKET_ENABLED","DD_INTEGRATION_TOMCAT_WEBSOCKET_ENABLED"], - "DD_TRACE_TRACE_ANNOTATION_ANALYTICS_ENABLED": ["DD_TRACE_ANNOTATION_ANALYTICS_ENABLED"], - "DD_TRACE_TRACE_ANNOTATION_ANALYTICS_SAMPLE_RATE": ["DD_TRACE_ANNOTATION_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_TRACE_ANNOTATION_ENABLED": ["DD_TRACE_INTEGRATION_TRACE_ANNOTATION_ENABLED","DD_INTEGRATION_TRACE_ANNOTATION_ENABLED"], - "DD_TRACE_TRACE_CONFIG_ANALYTICS_ENABLED": ["DD_TRACE_CONFIG_ANALYTICS_ENABLED"], - "DD_TRACE_TRACE_CONFIG_ANALYTICS_SAMPLE_RATE": ["DD_TRACE_CONFIG_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_TRACE_CONFIG_ENABLED": ["DD_TRACE_INTEGRATION_TRACE_CONFIG_ENABLED","DD_INTEGRATION_TRACE_CONFIG_ENABLED"], - "DD_TRACE_TRACE_ENABLED": ["DD_TRACE_INTEGRATION_TRACE_ENABLED","DD_INTEGRATION_TRACE_ENABLED"], - "DD_TRACE_TWILIO_SDK_ANALYTICS_SAMPLE_RATE": ["DD_TWILIO_SDK_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_TWILIO_SDK_ENABLED": ["DD_TRACE_INTEGRATION_TWILIO_SDK_ENABLED","DD_INTEGRATION_TWILIO_SDK_ENABLED"], - "DD_TRACE_UNDERTOW_2_0_ENABLED": ["DD_TRACE_INTEGRATION_UNDERTOW_2_0_ENABLED","DD_INTEGRATION_UNDERTOW_2_0_ENABLED"], - "DD_TRACE_UNDERTOW_2_2_ENABLED": ["DD_TRACE_INTEGRATION_UNDERTOW_2_2_ENABLED","DD_INTEGRATION_UNDERTOW_2_2_ENABLED"], - "DD_TRACE_UNDERTOW_ENABLED": ["DD_TRACE_INTEGRATION_UNDERTOW_ENABLED","DD_INTEGRATION_UNDERTOW_ENABLED"], - "DD_TRACE_UNDERTOW_HTTP_ANALYTICS_SAMPLE_RATE": ["DD_UNDERTOW_HTTP_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_UNDERTOW_HTTP_SERVER_ANALYTICS_SAMPLE_RATE": ["DD_UNDERTOW_HTTP_SERVER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_UNDERTOW_LEGACY_TRACING_ENABLED": ["DD_UNDERTOW_LEGACY_TRACING_ENABLED"], - "DD_TRACE_UNDERTOW_REQUEST_PARSE_ENABLED": ["DD_TRACE_INTEGRATION_UNDERTOW_REQUEST_PARSE_ENABLED","DD_INTEGRATION_UNDERTOW_REQUEST_PARSE_ENABLED"], - "DD_TRACE_URLCONNECTION_ANALYTICS_SAMPLE_RATE": ["DD_URLCONNECTION_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_URLCONNECTION_ENABLED": ["DD_TRACE_INTEGRATION_URLCONNECTION_ENABLED","DD_INTEGRATION_URLCONNECTION_ENABLED"], - "DD_TRACE_VALKEY_ANALYTICS_SAMPLE_RATE": ["DD_VALKEY_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_VALKEY_ENABLED": ["DD_TRACE_INTEGRATION_VALKEY_ENABLED","DD_INTEGRATION_VALKEY_ENABLED"], - "DD_TRACE_VELOCITY_ENABLED": ["DD_TRACE_INTEGRATION_VELOCITY_ENABLED","DD_INTEGRATION_VELOCITY_ENABLED"], - "DD_TRACE_VERTX_3_4_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_3_4_ENABLED","DD_INTEGRATION_VERTX_3_4_ENABLED"], - "DD_TRACE_VERTX_3_5_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_3_5_ENABLED","DD_INTEGRATION_VERTX_3_5_ENABLED"], - "DD_TRACE_VERTX_3_9_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_3_9_ENABLED","DD_INTEGRATION_VERTX_3_9_ENABLED"], - "DD_TRACE_VERTX_4_0_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_4_0_ENABLED","DD_INTEGRATION_VERTX_4_0_ENABLED"], - "DD_TRACE_VERTX_5_0_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_5_0_ENABLED","DD_INTEGRATION_VERTX_5_0_ENABLED"], - "DD_TRACE_VERTX_ANALYTICS_SAMPLE_RATE": ["DD_VERTX_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_VERTX_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_ENABLED","DD_INTEGRATION_VERTX_ENABLED"], - "DD_TRACE_VERTX_REDIS_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_VERTX_REDIS_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_VERTX_REDIS_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_REDIS_CLIENT_ENABLED","DD_INTEGRATION_VERTX_REDIS_CLIENT_ENABLED"], - "DD_TRACE_VERTX_ROUTE_HANDLER_ANALYTICS_ENABLED": ["DD_VERTX_ROUTE_HANDLER_ANALYTICS_ENABLED"], - "DD_TRACE_VERTX_ROUTE_HANDLER_ANALYTICS_SAMPLE_RATE": ["DD_VERTX_ROUTE_HANDLER_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_VERTX_SQL_CLIENT_ANALYTICS_SAMPLE_RATE": ["DD_VERTX_SQL_CLIENT_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_VERTX_SQL_CLIENT_ENABLED": ["DD_TRACE_INTEGRATION_VERTX_SQL_CLIENT_ENABLED","DD_INTEGRATION_VERTX_SQL_CLIENT_ENABLED"], - "DD_TRACE_WALLCLOCK_ENABLED": ["DD_TRACE_INTEGRATION_WALLCLOCK_ENABLED","DD_INTEGRATION_WALLCLOCK_ENABLED"], - "DD_TRACE_WEAVER_ENABLED": ["DD_TRACE_INTEGRATION_WEAVER_ENABLED","DD_INTEGRATION_WEAVER_ENABLED"], - "DD_TRACE_WEBSOCKET_ANALYTICS_SAMPLE_RATE": ["DD_WEBSOCKET_ANALYTICS_SAMPLE_RATE"], - "DD_TRACE_WEBSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_WEBSOCKET_ENABLED","DD_INTEGRATION_WEBSOCKET_ENABLED"], - "DD_TRACE_WEBSPHERE_JMX_ENABLED": ["DD_TRACE_INTEGRATION_WEBSPHERE_JMX_ENABLED","DD_INTEGRATION_WEBSPHERE_JMX_ENABLED"], - "DD_TRACE_WILDFLY_ENABLED": ["DD_TRACE_INTEGRATION_WILDFLY_ENABLED","DD_INTEGRATION_WILDFLY_ENABLED"], - "DD_TRACE_ZIO_EXPERIMENTAL_ENABLED": ["DD_TRACE_INTEGRATION_ZIO_EXPERIMENTAL_ENABLED","DD_INTEGRATION_ZIO_EXPERIMENTAL_ENABLED"], - "DD_TRACE_AEROSPIKE_ANALYTICS_ENABLED": ["DD_AEROSPIKE_ANALYTICS_ENABLED"], - "DD_TRACE_AKKA_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_AKKA_HTTP_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_AKKA_HTTP_SERVER_ANALYTICS_ENABLED": ["DD_AKKA_HTTP_SERVER_ANALYTICS_ENABLED"], - "DD_TRACE_AMQP_ANALYTICS_ENABLED": ["DD_AMQP_ANALYTICS_ENABLED"], - "DD_TRACE_AMQP_E2E_DURATION_ENABLED": ["DD_AMQP_E2E_DURATION_ENABLED"], - "DD_TRACE_ANALYTICS_ENABLED": ["DD_ANALYTICS_ENABLED"], - "DD_TRACE_APACHE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["DD_APACHE_HTTPASYNCCLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_APACHE_HTTPCLIENT5_ANALYTICS_ENABLED": ["DD_APACHE_HTTPCLIENT5_ANALYTICS_ENABLED"], - "DD_TRACE_APACHE_HTTPCLIENT_ANALYTICS_ENABLED": ["DD_APACHE_HTTPCLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_APACHE_HTTP_CLIENT5_ANALYTICS_ENABLED": ["DD_APACHE_HTTP_CLIENT5_ANALYTICS_ENABLED"], - "DD_TRACE_APACHE_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_APACHE_HTTP_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_ARMERIA_ANALYTICS_ENABLED": ["DD_ARMERIA_ANALYTICS_ENABLED"], - "DD_TRACE_ARMERIA_GRPC_ANALYTICS_ENABLED": ["DD_ARMERIA_GRPC_ANALYTICS_ENABLED"], - "DD_TRACE_ARMERIA_GRPC_CLIENT_ANALYTICS_ENABLED": ["DD_ARMERIA_GRPC_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_ARMERIA_GRPC_SERVER_ANALYTICS_ENABLED": ["DD_ARMERIA_GRPC_SERVER_ANALYTICS_ENABLED"], - "DD_TRACE_AWS_SDK_ANALYTICS_ENABLED": ["DD_AWS_SDK_ANALYTICS_ENABLED"], - "DD_TRACE_AWS_SDK_E2E_DURATION_ENABLED": ["DD_AWS_SDK_E2E_DURATION_ENABLED"], - "DD_TRACE_AXIS2_ANALYTICS_ENABLED": ["DD_AXIS2_ANALYTICS_ENABLED"], - "DD_TRACE_AXWAY_HTTP_ANALYTICS_ENABLED": ["DD_AXWAY_HTTP_ANALYTICS_ENABLED"], - "DD_TRACE_AZURE_FUNCTIONS_ANALYTICS_ENABLED": ["DD_AZURE_FUNCTIONS_ANALYTICS_ENABLED"], - "DD_TRACE_CASSANDRA_ANALYTICS_ENABLED": ["DD_CASSANDRA_ANALYTICS_ENABLED"], - "DD_TRACE_COMMONS_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_COMMONS_HTTP_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_COUCHBASE_ANALYTICS_ENABLED": ["DD_COUCHBASE_ANALYTICS_ENABLED"], - "DD_TRACE_CUCUMBER_5_ANALYTICS_ENABLED": ["DD_CUCUMBER_5_ANALYTICS_ENABLED"], - "DD_TRACE_CUCUMBER_ANALYTICS_ENABLED": ["DD_CUCUMBER_ANALYTICS_ENABLED"], - "DD_TRACE_DATANUCLEUS_ANALYTICS_ENABLED": ["DD_DATANUCLEUS_ANALYTICS_ENABLED"], - "DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED": ["DD_ELASTICSEARCH_ANALYTICS_ENABLED"], - "DD_TRACE_FINATRA_ANALYTICS_ENABLED": ["DD_FINATRA_ANALYTICS_ENABLED"], - "DD_TRACE_GOOGLE_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_GOOGLE_HTTP_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_GOOGLE_PUBSUB_ANALYTICS_ENABLED": ["DD_GOOGLE_PUBSUB_ANALYTICS_ENABLED"], - "DD_TRACE_GOOGLE_PUBSUB_E2E_DURATION_ENABLED": ["DD_GOOGLE_PUBSUB_E2E_DURATION_ENABLED"], - "DD_TRACE_GRAPHQL_JAVA_ANALYTICS_ENABLED": ["DD_GRAPHQL_JAVA_ANALYTICS_ENABLED"], - "DD_TRACE_GRIZZLY_CLIENT_ANALYTICS_ENABLED": ["DD_GRIZZLY_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_HAZELCAST_SDK_ANALYTICS_ENABLED": ["DD_HAZELCAST_SDK_ANALYTICS_ENABLED"], - "DD_TRACE_HIBERNATE_CORE_ANALYTICS_ENABLED": ["DD_HIBERNATE_CORE_ANALYTICS_ENABLED"], - "DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["DD_HTTPASYNCCLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_HTTPCLIENT5_ANALYTICS_ENABLED": ["DD_HTTPCLIENT5_ANALYTICS_ENABLED"], - "DD_TRACE_HTTPCLIENT_ANALYTICS_ENABLED": ["DD_HTTPCLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_IGNITE_ANALYTICS_ENABLED": ["DD_IGNITE_ANALYTICS_ENABLED"], - "DD_TRACE_JAKARTA_WS_ANALYTICS_ENABLED": ["DD_JAKARTA_WS_ANALYTICS_ENABLED"], - "DD_TRACE_JAVA_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_JAVA_HTTP_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_JAXRS_ANALYTICS_ENABLED": ["DD_JAXRS_ANALYTICS_ENABLED"], - "DD_TRACE_JAX_RS_ANALYTICS_ENABLED": ["DD_JAX_RS_ANALYTICS_ENABLED"], - "DD_TRACE_JAX_RS_CLIENT_ANALYTICS_ENABLED": ["DD_JAX_RS_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_JAX_WS_ANALYTICS_ENABLED": ["DD_JAX_WS_ANALYTICS_ENABLED"], - "DD_TRACE_JDBC_DATASOURCE_ANALYTICS_ENABLED": ["DD_JDBC_DATASOURCE_ANALYTICS_ENABLED"], - "DD_TRACE_JEDIS_ANALYTICS_ENABLED": ["DD_JEDIS_ANALYTICS_ENABLED"], - "DD_TRACE_JETTY_CLIENT_ANALYTICS_ENABLED": ["DD_JETTY_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_JMS_ANALYTICS_ENABLED": ["DD_JMS_ANALYTICS_ENABLED"], - "DD_TRACE_JMS_E2E_DURATION_ENABLED": ["DD_JMS_E2E_DURATION_ENABLED"], - "DD_TRACE_JMS_TIME_IN_QUEUE_ENABLED": ["DD_JMS_TIME_IN_QUEUE_ENABLED"], - "DD_TRACE_KAFKA_STREAMS_ANALYTICS_ENABLED": ["DD_KAFKA_STREAMS_ANALYTICS_ENABLED"], - "DD_TRACE_KAFKA_STREAMS_E2E_DURATION_ENABLED": ["DD_KAFKA_STREAMS_E2E_DURATION_ENABLED"], - "DD_TRACE_LETTUCE_ANALYTICS_ENABLED": ["DD_LETTUCE_ANALYTICS_ENABLED"], - "DD_TRACE_LIBERTY_ANALYTICS_ENABLED": ["DD_LIBERTY_ANALYTICS_ENABLED"], - "DD_TRACE_MICRONAUT_ANALYTICS_ENABLED": ["DD_MICRONAUT_ANALYTICS_ENABLED"], - "DD_TRACE_MULE_ANALYTICS_ENABLED": ["DD_MULE_ANALYTICS_ENABLED"], - "DD_TRACE_NING_ANALYTICS_ENABLED": ["DD_NING_ANALYTICS_ENABLED"], - "DD_TRACE_OKHTTP_2_ANALYTICS_ENABLED": ["DD_OKHTTP_2_ANALYTICS_ENABLED"], - "DD_TRACE_OKHTTP_3_ANALYTICS_ENABLED": ["DD_OKHTTP_3_ANALYTICS_ENABLED"], - "DD_TRACE_OKHTTP_ANALYTICS_ENABLED": ["DD_OKHTTP_ANALYTICS_ENABLED"], - "DD_TRACE_OPENSEARCH_ANALYTICS_ENABLED": ["DD_OPENSEARCH_ANALYTICS_ENABLED"], - "DD_TRACE_PEKKO_HTTP_ANALYTICS_ENABLED": ["DD_PEKKO_HTTP_ANALYTICS_ENABLED"], - "DD_TRACE_PEKKO_HTTP_CLIENT_ANALYTICS_ENABLED": ["DD_PEKKO_HTTP_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_PEKKO_HTTP_SERVER_ANALYTICS_ENABLED": ["DD_PEKKO_HTTP_SERVER_ANALYTICS_ENABLED"], - "DD_TRACE_QUARTZ_ANALYTICS_ENABLED": ["DD_QUARTZ_ANALYTICS_ENABLED"], - "DD_TRACE_RABBITMQ_ANALYTICS_ENABLED": ["DD_RABBITMQ_ANALYTICS_ENABLED"], - "DD_TRACE_RABBITMQ_E2E_DURATION_ENABLED": ["DD_RABBITMQ_E2E_DURATION_ENABLED"], - "DD_TRACE_RABBITMQ_TIME_IN_QUEUE_ENABLED": ["DD_RABBITMQ_TIME_IN_QUEUE_ENABLED"], - "DD_TRACE_RABBIT_TIME_IN_QUEUE_ENABLED": ["DD_RABBIT_TIME_IN_QUEUE_ENABLED"], - "DD_TRACE_REDISSCALA_ANALYTICS_ENABLED": ["DD_REDISSCALA_ANALYTICS_ENABLED"], - "DD_TRACE_REDISSON_ANALYTICS_ENABLED": ["DD_REDISSON_ANALYTICS_ENABLED"], - "DD_TRACE_REDIS_ANALYTICS_ENABLED": ["DD_REDIS_ANALYTICS_ENABLED"], - "DD_TRACE_RESTLET_HTTP_ANALYTICS_ENABLED": ["DD_RESTLET_HTTP_ANALYTICS_ENABLED"], - "DD_TRACE_RESTLET_HTTP_SERVER_ANALYTICS_ENABLED": ["DD_RESTLET_HTTP_SERVER_ANALYTICS_ENABLED"], - "DD_TRACE_RMI_ANALYTICS_ENABLED": ["DD_RMI_ANALYTICS_ENABLED"], - "DD_TRACE_RMI_CLIENT_ANALYTICS_ENABLED": ["DD_RMI_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_RMI_SERVER_ANALYTICS_ENABLED": ["DD_RMI_SERVER_ANALYTICS_ENABLED"], - "DD_TRACE_SERVLET_2_ANALYTICS_ENABLED": ["DD_SERVLET_2_ANALYTICS_ENABLED"], - "DD_TRACE_SERVLET_FILTER_ANALYTICS_ENABLED": ["DD_SERVLET_FILTER_ANALYTICS_ENABLED"], - "DD_TRACE_SERVLET_RESPONSE_ANALYTICS_ENABLED": ["DD_SERVLET_RESPONSE_ANALYTICS_ENABLED"], - "DD_TRACE_SERVLET_SERVICE_ANALYTICS_ENABLED": ["DD_SERVLET_SERVICE_ANALYTICS_ENABLED"], - "DD_TRACE_SPARK_EXECUTOR_ANALYTICS_ENABLED": ["DD_SPARK_EXECUTOR_ANALYTICS_ENABLED"], - "DD_TRACE_SPRAY_ANALYTICS_ENABLED": ["DD_SPRAY_ANALYTICS_ENABLED"], - "DD_TRACE_SPRING_WEBFLUX_CLIENT_ANALYTICS_ENABLED": ["DD_SPRING_WEBFLUX_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_SPYMEMCACHED_ANALYTICS_ENABLED": ["DD_SPYMEMCACHED_ANALYTICS_ENABLED"], - "DD_TRACE_SQS_TIME_IN_QUEUE_ENABLED": ["DD_SQS_TIME_IN_QUEUE_ENABLED"], - "DD_TRACE_SYNAPSE3_ANALYTICS_ENABLED": ["DD_SYNAPSE3_ANALYTICS_ENABLED"], - "DD_TRACE_TIBCO_BW_ANALYTICS_ENABLED": ["DD_TIBCO_BW_ANALYTICS_ENABLED"], - "DD_TRACE_TWILIO_SDK_ANALYTICS_ENABLED": ["DD_TWILIO_SDK_ANALYTICS_ENABLED"], - "DD_TRACE_UNDERTOW_HTTP_ANALYTICS_ENABLED": ["DD_UNDERTOW_HTTP_ANALYTICS_ENABLED"], - "DD_TRACE_UNDERTOW_HTTP_SERVER_ANALYTICS_ENABLED": ["DD_UNDERTOW_HTTP_SERVER_ANALYTICS_ENABLED"], - "DD_TRACE_URLCONNECTION_ANALYTICS_ENABLED": ["DD_URLCONNECTION_ANALYTICS_ENABLED"], - "DD_TRACE_VALKEY_ANALYTICS_ENABLED": ["DD_VALKEY_ANALYTICS_ENABLED"], - "DD_TRACE_VERTX_ANALYTICS_ENABLED": ["DD_VERTX_ANALYTICS_ENABLED"], - "DD_TRACE_VERTX_REDIS_CLIENT_ANALYTICS_ENABLED": ["DD_VERTX_REDIS_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_VERTX_SQL_CLIENT_ANALYTICS_ENABLED": ["DD_VERTX_SQL_CLIENT_ANALYTICS_ENABLED"], - "DD_TRACE_WEBSOCKET_ANALYTICS_ENABLED": ["DD_WEBSOCKET_ANALYTICS_ENABLED"] - }, - "deprecations": { - } -} From d4cf4fbe4361e0c7ece280a65e68eabbc3a171e4 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 18 Sep 2025 15:00:10 -0700 Subject: [PATCH 23/41] migrating config-utils tests and ConfigInversionMetric telemetry --- utils/config-utils/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils/config-utils/build.gradle.kts b/utils/config-utils/build.gradle.kts index e77af1d50d0..83d98508d8b 100644 --- a/utils/config-utils/build.gradle.kts +++ b/utils/config-utils/build.gradle.kts @@ -31,6 +31,7 @@ val excludedClassesCoverage by extra( // tested in internal-api "datadog.trace.bootstrap.config.provider.StableConfigParser", "datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource", + "datadog.trace.config.inversion.ConfigInversionStrictStyle", ) ) @@ -43,7 +44,8 @@ val excludedClassesBranchCoverage by extra( val excludedClassesInstructionCoverage by extra( listOf( - "datadog.trace.config.inversion.GeneratedSupportedConfigurations" + "datadog.trace.config.inversion.GeneratedSupportedConfigurations", + "datadog.trace.config.inversion.SupportedConfigurationSource" ) ) From 76281ababb62cdeeb885c80e487863e682a9a25c Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 15 Sep 2025 12:51:11 -0700 Subject: [PATCH 24/41] config inversion init --- .../trace/config/inversion/ConfigHelper.java | 98 ++++++++ .../inversion/ConfigInversionStrictStyle.java | 24 ++ .../SupportedConfigurationSource.java | 32 +++ .../config/inversion/ConfigHelperTest.java | 238 ++++++++++++++++++ .../TestSupportedConfigurationSource.java | 44 ++++ 5 files changed, 436 insertions(+) create mode 100644 utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java create mode 100644 utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigInversionStrictStyle.java create mode 100644 utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java create mode 100644 utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java create mode 100644 utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java new file mode 100644 index 00000000000..79fcd21a7f6 --- /dev/null +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -0,0 +1,98 @@ +package datadog.trace.config.inversion; + +import datadog.environment.EnvironmentVariables; +import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class ConfigHelper { + private static ConfigInversionStrictStyle configInversionStrict; + + // Default to production source + private static SupportedConfigurationSource configSource = new SupportedConfigurationSource(); + + public static void setConfigInversionStrict(ConfigInversionStrictStyle configInversionStrict) { + ConfigHelper.configInversionStrict = configInversionStrict; + } + + public static ConfigInversionStrictStyle configInversionStrictFlag() { + return configInversionStrict; + } + + // Used only for testing purposes + static void setConfigurationSource(SupportedConfigurationSource testSource) { + configSource = testSource; + } + + /** Reset all configuration data to the generated defaults. Useful for cleaning up after tests. */ + static void resetToDefaults() { + configSource = new SupportedConfigurationSource(); + configInversionStrict = ConfigInversionStrictStyle.WARNING; + } + + public static Map getEnvironmentVariables() { + Map env = EnvironmentVariables.getAll(); + Map configs = new LinkedHashMap<>(); + for (Map.Entry entry : env.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + if (key.startsWith("DD_") + || key.startsWith("OTEL_") + || configSource.getAliasMapping().containsKey(key)) { + if (configSource.getSupportedConfigurations().contains(key)) { + configs.put(key, value); + // If this environment variable is the alias of another, and we haven't processed the + // original environment variable yet, handle it here. + } else if (configSource.getAliasMapping().containsKey(key) + && !configs.containsKey(configSource.getAliasMapping().get(key))) { + List aliasList = + configSource.getAliases().get(configSource.getAliasMapping().get(key)); + for (String alias : aliasList) { + if (env.containsKey(alias)) { + configs.put(configSource.getAliasMapping().get(key), env.get(alias)); + break; + } + } + } + + // TODO: Follow-up - Add deprecation handling + // if (configSource.getDeprecatedConfigurations().containsKey(key)) { + // String warning = "Environment variable " + key + " is deprecated. " + + // (configSource.getAliasMapping().containsKey(key) + // ? "Please use " + configSource.getAliasMapping().get(key) + " instead." + // : configSource.getDeprecatedConfigurations().get(key)); + // System.err.println(warning); + // } + } else { + configs.put(key, value); + } + } + return configs; + } + + public static String getEnvironmentVariable(String name) { + if ((name.startsWith("DD_") || name.startsWith("OTEL_")) + && !configSource.getAliasMapping().containsKey(name) + && !configSource.getSupportedConfigurations().contains(name)) { + if (configInversionStrict != ConfigInversionStrictStyle.TEST) { + ConfigInversionMetricCollectorProvider.get().setUndocumentedEnvVarMetric(name); + } + + if (configInversionStrict == ConfigInversionStrictStyle.STRICT) { + return null; // If strict mode is enabled, return null for unsupported configs + } + } + + String config = EnvironmentVariables.get(name); + if (config == null && configSource.getAliases().containsKey(name)) { + for (String alias : configSource.getAliases().get(name)) { + String aliasValue = EnvironmentVariables.get(alias); + if (aliasValue != null) { + return aliasValue; + } + } + } + return config; + } +} diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigInversionStrictStyle.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigInversionStrictStyle.java new file mode 100644 index 00000000000..e379ff77e43 --- /dev/null +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigInversionStrictStyle.java @@ -0,0 +1,24 @@ +package datadog.trace.config.inversion; + +import java.util.Locale; + +/** Trace propagation styles for injecting and extracting trace propagation headers. */ +public enum ConfigInversionStrictStyle { + STRICT, + WARNING, + TEST; + + private String displayName; + + ConfigInversionStrictStyle() { + this.displayName = name().toLowerCase(Locale.ROOT); + } + + @Override + public String toString() { + if (displayName == null) { + displayName = name().toLowerCase(Locale.ROOT); + } + return displayName; + } +} diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java new file mode 100644 index 00000000000..599298f2294 --- /dev/null +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java @@ -0,0 +1,32 @@ +package datadog.trace.config.inversion; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * This class uses {@link #GeneratedSupportedConfigurations} for handling supported configurations + * for Config Inversion Can be extended for testing with custom configuration data. + */ +class SupportedConfigurationSource { + + /** @return Set of supported configuration keys */ + public Set getSupportedConfigurations() { + return GeneratedSupportedConfigurations.SUPPORTED; + } + + /** @return Map of configuration keys to their aliases */ + public Map> getAliases() { + return GeneratedSupportedConfigurations.ALIASES; + } + + /** @return Map of alias keys to their primary configuration keys */ + public Map getAliasMapping() { + return GeneratedSupportedConfigurations.ALIAS_MAPPING; + } + + /** @return Map of deprecated configurations */ + public Map getDeprecatedConfigurations() { + return GeneratedSupportedConfigurations.DEPRECATED; + } +} diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java new file mode 100644 index 00000000000..07a9f591e72 --- /dev/null +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java @@ -0,0 +1,238 @@ +package datadog.trace.config.inversion; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class ConfigHelperTest { + // Test environment variables + private static final String TEST_DD_VAR = "DD_TEST_CONFIG"; + private static final String TEST_DD_VAR_VAL = "test_dd_var"; + private static final String TEST_OTEL_VAR = "OTEL_TEST_CONFIG"; + private static final String TEST_OTEL_VAR_VAL = "test_otel_var"; + private static final String TEST_REGULAR_VAR = "REGULAR_TEST_CONFIG"; + private static final String TEST_REGULAR_VAR_VAL = "test_regular_var"; + private static final String UNSUPPORTED_DD_VAR = "DD_UNSUPPORTED_CONFIG"; + + private static final String ALIAS_DD_VAR = "DD_TEST_CONFIG_ALIAS"; + private static final String ALIAS_DD_VAL = "test_alias_val"; + private static final String NON_DD_ALIAS_VAR = "TEST_CONFIG_ALIAS"; + private static final String NON_DD_ALIAS_VAL = "test_alias_val_non_dd"; + + private static final String NEW_ALIAS_TARGET = "DD_NEW_ALIAS_TARGET"; + private static final String NEW_ALIAS_KEY_1 = "DD_NEW_ALIAS_KEY_1"; + private static final String NEW_ALIAS_KEY_2 = "DD_NEW_ALIAS_KEY_2"; + + private static ConfigInversionStrictStyle strictness; + private static TestSupportedConfigurationSource testSource; + + @BeforeAll + static void setUp() { + // Set up test configurations using SupportedConfigurationSource + Set testSupported = + new HashSet<>(Arrays.asList(TEST_DD_VAR, TEST_OTEL_VAR, TEST_REGULAR_VAR)); + + Map> testAliases = new HashMap<>(); + testAliases.put(TEST_DD_VAR, Arrays.asList(ALIAS_DD_VAR, NON_DD_ALIAS_VAR)); + testAliases.put(NEW_ALIAS_TARGET, Arrays.asList(NEW_ALIAS_KEY_1)); + + Map testAliasMapping = new HashMap<>(); + testAliasMapping.put(ALIAS_DD_VAR, TEST_DD_VAR); + testAliasMapping.put(NON_DD_ALIAS_VAR, TEST_DD_VAR); + testAliasMapping.put(NEW_ALIAS_KEY_2, NEW_ALIAS_TARGET); + + // Create and set test configuration source + testSource = + new TestSupportedConfigurationSource( + testSupported, testAliases, testAliasMapping, new HashMap<>()); + ConfigHelper.setConfigurationSource(testSource); + strictness = ConfigHelper.configInversionStrictFlag(); + ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.STRICT); + } + + @AfterAll + static void tearDown() { + ConfigHelper.resetToDefaults(); + ConfigHelper.setConfigInversionStrict(strictness); + } + + @Test + void testBasicConfigHelper() { + setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); + setEnvVar(TEST_OTEL_VAR, TEST_OTEL_VAR_VAL); + setEnvVar(TEST_REGULAR_VAR, TEST_REGULAR_VAR_VAL); + + assertEquals(TEST_DD_VAR_VAL, ConfigHelper.getEnvironmentVariable(TEST_DD_VAR)); + assertEquals(TEST_OTEL_VAR_VAL, ConfigHelper.getEnvironmentVariable(TEST_OTEL_VAR)); + assertEquals(TEST_REGULAR_VAR_VAL, ConfigHelper.getEnvironmentVariable(TEST_REGULAR_VAR)); + + Map result = ConfigHelper.getEnvironmentVariables(); + assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); + assertEquals(TEST_OTEL_VAR_VAL, result.get(TEST_OTEL_VAR)); + assertEquals(TEST_REGULAR_VAR_VAL, result.get(TEST_REGULAR_VAR)); + + // Cleanup + setEnvVar(TEST_DD_VAR, null); + setEnvVar(TEST_OTEL_VAR, null); + setEnvVar(TEST_REGULAR_VAR, null); + } + + @Test + void testAliasSupport() { + setEnvVar(ALIAS_DD_VAR, ALIAS_DD_VAL); + + assertEquals(ALIAS_DD_VAL, ConfigHelper.getEnvironmentVariable(TEST_DD_VAR)); + Map result = ConfigHelper.getEnvironmentVariables(); + assertEquals(ALIAS_DD_VAL, result.get(TEST_DD_VAR)); + assertFalse(result.containsKey(ALIAS_DD_VAR)); + + // Cleanup + setEnvVar(ALIAS_DD_VAR, null); + } + + @Test + void testMainConfigPrecedence() { + // When both main variable and alias are set, main should take precedence + setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); + setEnvVar(ALIAS_DD_VAR, ALIAS_DD_VAL); + + assertEquals(TEST_DD_VAR_VAL, ConfigHelper.getEnvironmentVariable(TEST_DD_VAR)); + Map result = ConfigHelper.getEnvironmentVariables(); + assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); + assertFalse(result.containsKey(ALIAS_DD_VAR)); + + // Cleanup + setEnvVar(TEST_DD_VAR, null); + setEnvVar(ALIAS_DD_VAR, null); + } + + @Test + void testUnsupportedDDEnvironmentVariable() { + setEnvVar(UNSUPPORTED_DD_VAR, ""); + + assertNull(ConfigHelper.getEnvironmentVariable(UNSUPPORTED_DD_VAR)); + Map result = ConfigHelper.getEnvironmentVariables(); + assertFalse(result.containsKey(UNSUPPORTED_DD_VAR)); + + // Cleanup + setEnvVar(UNSUPPORTED_DD_VAR, null); + } + + @Test + void testNonDDAliases() { + setEnvVar(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); + + assertEquals(NON_DD_ALIAS_VAL, ConfigHelper.getEnvironmentVariable(TEST_DD_VAR)); + Map result = ConfigHelper.getEnvironmentVariables(); + assertEquals(NON_DD_ALIAS_VAL, result.get(TEST_DD_VAR)); + assertFalse(result.containsKey(NON_DD_ALIAS_VAR)); + + // Cleanup + setEnvVar(NON_DD_ALIAS_VAR, null); + } + + @Test + void testAliasesWithoutPresentAliases() { + Map result = ConfigHelper.getEnvironmentVariables(); + assertFalse(result.containsKey(ALIAS_DD_VAR)); + } + + @Test + void testUnsupportedButNotStrict() { + ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.WARNING); + setEnvVar(UNSUPPORTED_DD_VAR, "loose"); + + // Should fall through and return the env var even though it's unsupported + assertEquals("loose", ConfigHelper.getEnvironmentVariable(UNSUPPORTED_DD_VAR)); + + // Cleanup + ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.STRICT); + setEnvVar(UNSUPPORTED_DD_VAR, null); + } + + @Test + void testAliasWithEmptyList() { + Map> aliasMap = new HashMap<>(); + aliasMap.put("EMPTY_ALIAS_CONFIG", new ArrayList<>()); + + ConfigHelper.setConfigurationSource( + new TestSupportedConfigurationSource( + new HashSet<>(), aliasMap, new HashMap<>(), new HashMap<>())); + + assertNull(ConfigHelper.getEnvironmentVariable("EMPTY_ALIAS_CONFIG")); + + // Cleanup + ConfigHelper.setConfigurationSource(testSource); + } + + @Test + void testAliasSkippedWhenBaseAlreadyPresent() { + setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); + setEnvVar(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); + + Map result = ConfigHelper.getEnvironmentVariables(); + assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); + assertFalse(result.containsKey(NON_DD_ALIAS_VAR)); + + // Cleanup + setEnvVar(TEST_DD_VAR, null); + setEnvVar(NON_DD_ALIAS_VAR, null); + } + + @Test + void testInconsistentAliasesAndAliasMapping() { + setEnvVar(NEW_ALIAS_KEY_2, "some_value"); + + Map result = ConfigHelper.getEnvironmentVariables(); + + assertFalse(result.containsKey(NEW_ALIAS_KEY_2)); + assertFalse(result.containsKey(NEW_ALIAS_TARGET)); + + // Cleanup + setEnvVar(NEW_ALIAS_KEY_2, null); + } + + // TODO: Update to verify telemetry when implemented + @Test + void testUnsupportedEnvWarningNotInTestMode() { + ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.TEST); + + setEnvVar("DD_FAKE_VAR", "banana"); + + // Should allow unsupported variable in TEST mode + assertEquals("banana", ConfigHelper.getEnvironmentVariable("DD_FAKE_VAR")); + + // Cleanup + setEnvVar("DD_FAKE_VAR", null); + ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.STRICT); + } + + // Copied from utils.TestHelper + @SuppressWarnings("unchecked") + private static void setEnvVar(String envName, String envValue) { + try { + Class classOfMap = System.getenv().getClass(); + Field field = classOfMap.getDeclaredField("m"); + field.setAccessible(true); + if (envValue == null) { + ((Map) field.get(System.getenv())).remove(envName); + } else { + ((Map) field.get(System.getenv())).put(envName, envValue); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java new file mode 100644 index 00000000000..448b26706ea --- /dev/null +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java @@ -0,0 +1,44 @@ +package datadog.trace.config.inversion; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** Test implementation of SupportedConfigurationSource that uses custom configuration data */ +class TestSupportedConfigurationSource extends SupportedConfigurationSource { + private final Set supported; + private final Map> aliases; + private final Map aliasMapping; + private final Map deprecated; + + public TestSupportedConfigurationSource( + Set supported, + Map> aliases, + Map aliasMapping, + Map deprecated) { + this.supported = supported; + this.aliases = aliases; + this.aliasMapping = aliasMapping; + this.deprecated = deprecated; + } + + @Override + public Set getSupportedConfigurations() { + return supported; + } + + @Override + public Map> getAliases() { + return aliases; + } + + @Override + public Map getAliasMapping() { + return aliasMapping; + } + + @Override + public Map getDeprecatedConfigurations() { + return deprecated; + } +} From 83f0f98c777b26a908e2aa01a52f2ca6323fdc29 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 15 Sep 2025 14:18:01 -0700 Subject: [PATCH 25/41] migrating config-utils tests --- .../src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy | 0 .../trace/bootstrap/config/provider/ConfigProviderTest.groovy | 0 .../config/provider/OtelEnvironmentConfigSourceTest.groovy | 0 .../trace/bootstrap/config/provider/StableConfigParserTest.groovy | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy (100%) rename {internal-api => utils/config-utils}/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy (100%) diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy similarity index 100% rename from internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy rename to utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy From e9f9689f282b7a51db77dcfa67499f87d40076dd Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 16 Sep 2025 10:47:48 -0700 Subject: [PATCH 26/41] undo move of test files that rely on inject*config --- .../trace/bootstrap/config/provider/ConfigProviderTest.groovy | 0 .../config/provider/OtelEnvironmentConfigSourceTest.groovy | 0 .../trace/bootstrap/config/provider/StableConfigParserTest.groovy | 0 .../src/test/java}/datadog/trace/api/ConfigCollectorTest.groovy | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {utils/config-utils => internal-api}/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy (100%) rename {utils/config-utils => internal-api}/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy (100%) rename {utils/config-utils => internal-api}/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy (100%) rename {utils/config-utils/src/test/groovy => internal-api/src/test/java}/datadog/trace/api/ConfigCollectorTest.groovy (100%) diff --git a/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy similarity index 100% rename from utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy rename to internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/ConfigProviderTest.groovy diff --git a/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy similarity index 100% rename from utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy rename to internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy diff --git a/utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy similarity index 100% rename from utils/config-utils/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy rename to internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/StableConfigParserTest.groovy diff --git a/utils/config-utils/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy b/internal-api/src/test/java/datadog/trace/api/ConfigCollectorTest.groovy similarity index 100% rename from utils/config-utils/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy rename to internal-api/src/test/java/datadog/trace/api/ConfigCollectorTest.groovy From 9625dd4a7f02828ea3f7733b9623aa9a63d8d878 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 16 Sep 2025 11:00:06 -0700 Subject: [PATCH 27/41] adding deprecation handling --- .../trace/config/inversion/ConfigHelper.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java index 79fcd21a7f6..d1397ccb79c 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -55,15 +55,17 @@ public static Map getEnvironmentVariables() { } } } - // TODO: Follow-up - Add deprecation handling - // if (configSource.getDeprecatedConfigurations().containsKey(key)) { - // String warning = "Environment variable " + key + " is deprecated. " + - // (configSource.getAliasMapping().containsKey(key) - // ? "Please use " + configSource.getAliasMapping().get(key) + " instead." - // : configSource.getDeprecatedConfigurations().get(key)); - // System.err.println(warning); - // } + if (configSource.getDeprecatedConfigurations().containsKey(key)) { + String warning = + "Environment variable " + + key + + " is deprecated. " + + (configSource.getAliasMapping().containsKey(key) + ? "Please use " + configSource.getAliasMapping().get(key) + " instead." + : configSource.getDeprecatedConfigurations().get(key)); + System.err.println(warning); + } } else { configs.put(key, value); } From a2926f925ba71195b8a5cb88edf56bffe2f15f96 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 16 Sep 2025 11:27:58 -0700 Subject: [PATCH 28/41] updating tests --- .../config/inversion/ConfigHelperTest.java | 28 ++----------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java index 07a9f591e72..06f035cdc39 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java @@ -12,6 +12,8 @@ import java.util.List; import java.util.Map; import java.util.Set; + +import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -41,6 +43,7 @@ public class ConfigHelperTest { @BeforeAll static void setUp() { // Set up test configurations using SupportedConfigurationSource +// ConfigInversionMetricCollectorProvider.register(ConfigInversionMetricCollectorImpl.getInstance()); Set testSupported = new HashSet<>(Arrays.asList(TEST_DD_VAR, TEST_OTEL_VAR, TEST_REGULAR_VAR)); @@ -118,18 +121,6 @@ void testMainConfigPrecedence() { setEnvVar(ALIAS_DD_VAR, null); } - @Test - void testUnsupportedDDEnvironmentVariable() { - setEnvVar(UNSUPPORTED_DD_VAR, ""); - - assertNull(ConfigHelper.getEnvironmentVariable(UNSUPPORTED_DD_VAR)); - Map result = ConfigHelper.getEnvironmentVariables(); - assertFalse(result.containsKey(UNSUPPORTED_DD_VAR)); - - // Cleanup - setEnvVar(UNSUPPORTED_DD_VAR, null); - } - @Test void testNonDDAliases() { setEnvVar(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); @@ -149,19 +140,6 @@ void testAliasesWithoutPresentAliases() { assertFalse(result.containsKey(ALIAS_DD_VAR)); } - @Test - void testUnsupportedButNotStrict() { - ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.WARNING); - setEnvVar(UNSUPPORTED_DD_VAR, "loose"); - - // Should fall through and return the env var even though it's unsupported - assertEquals("loose", ConfigHelper.getEnvironmentVariable(UNSUPPORTED_DD_VAR)); - - // Cleanup - ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.STRICT); - setEnvVar(UNSUPPORTED_DD_VAR, null); - } - @Test void testAliasWithEmptyList() { Map> aliasMap = new HashMap<>(); From bcb6db659609fc7561b480b54fe37ed1f45c43ad Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 16 Sep 2025 11:33:37 -0700 Subject: [PATCH 29/41] spotless --- .../datadog/trace/config/inversion/ConfigHelperTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java index 06f035cdc39..674e52d0847 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java @@ -12,8 +12,6 @@ import java.util.List; import java.util.Map; import java.util.Set; - -import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -43,7 +41,8 @@ public class ConfigHelperTest { @BeforeAll static void setUp() { // Set up test configurations using SupportedConfigurationSource -// ConfigInversionMetricCollectorProvider.register(ConfigInversionMetricCollectorImpl.getInstance()); + // + // ConfigInversionMetricCollectorProvider.register(ConfigInversionMetricCollectorImpl.getInstance()); Set testSupported = new HashSet<>(Arrays.asList(TEST_DD_VAR, TEST_OTEL_VAR, TEST_REGULAR_VAR)); From 31fc7b45393522ad4603d8c58eca156d348df285 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 18 Sep 2025 17:05:53 -0700 Subject: [PATCH 30/41] excluding json from shadowjar --- dd-java-agent/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index e1376aae333..f3caea05c61 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -93,6 +93,8 @@ ext.generalShadowJarConfig = { exclude '**/io/airlift/compress/snappy/**' relocate 'io.airlift', 'datadog.io.airlift' + exclude '**/supported-configurations.json' + final String projectName = "${project.name}" // Prevents conflict with other instances, but doesn't relocate instrumentation From 71e309fd3d00920ac680b522adbb565e3e24c99c Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 19 Sep 2025 10:35:08 -0700 Subject: [PATCH 31/41] updating gradle files --- dd-java-agent/build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index f3caea05c61..e1376aae333 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -93,8 +93,6 @@ ext.generalShadowJarConfig = { exclude '**/io/airlift/compress/snappy/**' relocate 'io.airlift', 'datadog.io.airlift' - exclude '**/supported-configurations.json' - final String projectName = "${project.name}" // Prevents conflict with other instances, but doesn't relocate instrumentation From c65460abf3336fb13a7a815cb880fe613d70a9e6 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 19 Sep 2025 14:44:19 -0700 Subject: [PATCH 32/41] responding to PR comments --- .../trace/config/inversion/ConfigHelper.java | 81 ++++++++++++++----- .../inversion/ConfigInversionStrictStyle.java | 24 ------ .../config/inversion/ConfigHelperTest.java | 15 ++-- 3 files changed, 72 insertions(+), 48 deletions(-) delete mode 100644 utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigInversionStrictStyle.java diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java index d1397ccb79c..ac4dc6f92a7 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -2,21 +2,51 @@ import datadog.environment.EnvironmentVariables; import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider; -import java.util.LinkedHashMap; +import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ConfigHelper { - private static ConfigInversionStrictStyle configInversionStrict; + + /** Config Inversion strictness policy for enforcement of undocumented environment variables */ + public enum StrictnessPolicy { + STRICT, + WARNING, + TEST; + + private String displayName; + + StrictnessPolicy() { + this.displayName = name().toLowerCase(Locale.ROOT); + } + + @Override + public String toString() { + if (displayName == null) { + displayName = name().toLowerCase(Locale.ROOT); + } + return displayName; + } + } + + private static final Logger log = LoggerFactory.getLogger(ConfigHelper.class); + + private static StrictnessPolicy configInversionStrict = StrictnessPolicy.WARNING; + + // Cache for configs, init value is null + private static Map configs; // Default to production source private static SupportedConfigurationSource configSource = new SupportedConfigurationSource(); - public static void setConfigInversionStrict(ConfigInversionStrictStyle configInversionStrict) { + public static void setConfigInversionStrict(StrictnessPolicy configInversionStrict) { ConfigHelper.configInversionStrict = configInversionStrict; } - public static ConfigInversionStrictStyle configInversionStrictFlag() { + public static StrictnessPolicy configInversionStrictFlag() { return configInversionStrict; } @@ -25,32 +55,40 @@ static void setConfigurationSource(SupportedConfigurationSource testSource) { configSource = testSource; } + /** Resetting config cache. Useful for cleaning up after tests. */ + static void resetCache() { + configs = null; + } + /** Reset all configuration data to the generated defaults. Useful for cleaning up after tests. */ static void resetToDefaults() { configSource = new SupportedConfigurationSource(); - configInversionStrict = ConfigInversionStrictStyle.WARNING; + configInversionStrict = StrictnessPolicy.WARNING; } public static Map getEnvironmentVariables() { + if (configs != null) { + return configs; + } + + configs = new HashMap<>(); Map env = EnvironmentVariables.getAll(); - Map configs = new LinkedHashMap<>(); for (Map.Entry entry : env.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); - if (key.startsWith("DD_") - || key.startsWith("OTEL_") - || configSource.getAliasMapping().containsKey(key)) { + Map aliasMapping = configSource.getAliasMapping(); + if (key.startsWith("DD_") || key.startsWith("OTEL_") || aliasMapping.containsKey(key)) { + String baseConfig; if (configSource.getSupportedConfigurations().contains(key)) { configs.put(key, value); // If this environment variable is the alias of another, and we haven't processed the // original environment variable yet, handle it here. - } else if (configSource.getAliasMapping().containsKey(key) - && !configs.containsKey(configSource.getAliasMapping().get(key))) { - List aliasList = - configSource.getAliases().get(configSource.getAliasMapping().get(key)); + } else if (aliasMapping.containsKey(key) + && !configs.containsKey(baseConfig = aliasMapping.get(key))) { + List aliasList = configSource.getAliases().get(baseConfig); for (String alias : aliasList) { if (env.containsKey(alias)) { - configs.put(configSource.getAliasMapping().get(key), env.get(alias)); + configs.put(baseConfig, env.get(alias)); break; } } @@ -64,7 +102,7 @@ public static Map getEnvironmentVariables() { + (configSource.getAliasMapping().containsKey(key) ? "Please use " + configSource.getAliasMapping().get(key) + " instead." : configSource.getDeprecatedConfigurations().get(key)); - System.err.println(warning); + log.warn(warning); } } else { configs.put(key, value); @@ -74,21 +112,26 @@ public static Map getEnvironmentVariables() { } public static String getEnvironmentVariable(String name) { + if (configs != null && configs.containsKey(name)) { + return configs.get(name); + } + if ((name.startsWith("DD_") || name.startsWith("OTEL_")) && !configSource.getAliasMapping().containsKey(name) && !configSource.getSupportedConfigurations().contains(name)) { - if (configInversionStrict != ConfigInversionStrictStyle.TEST) { + if (configInversionStrict != StrictnessPolicy.TEST) { ConfigInversionMetricCollectorProvider.get().setUndocumentedEnvVarMetric(name); } - if (configInversionStrict == ConfigInversionStrictStyle.STRICT) { + if (configInversionStrict == StrictnessPolicy.STRICT) { return null; // If strict mode is enabled, return null for unsupported configs } } String config = EnvironmentVariables.get(name); - if (config == null && configSource.getAliases().containsKey(name)) { - for (String alias : configSource.getAliases().get(name)) { + List aliases; + if (config == null && (aliases = configSource.getAliases().get(name)) != null) { + for (String alias : aliases) { String aliasValue = EnvironmentVariables.get(alias); if (aliasValue != null) { return aliasValue; diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigInversionStrictStyle.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigInversionStrictStyle.java deleted file mode 100644 index e379ff77e43..00000000000 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigInversionStrictStyle.java +++ /dev/null @@ -1,24 +0,0 @@ -package datadog.trace.config.inversion; - -import java.util.Locale; - -/** Trace propagation styles for injecting and extracting trace propagation headers. */ -public enum ConfigInversionStrictStyle { - STRICT, - WARNING, - TEST; - - private String displayName; - - ConfigInversionStrictStyle() { - this.displayName = name().toLowerCase(Locale.ROOT); - } - - @Override - public String toString() { - if (displayName == null) { - displayName = name().toLowerCase(Locale.ROOT); - } - return displayName; - } -} diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java index 674e52d0847..1b0ca09836c 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java @@ -13,6 +13,7 @@ import java.util.Map; import java.util.Set; import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -24,7 +25,6 @@ public class ConfigHelperTest { private static final String TEST_OTEL_VAR_VAL = "test_otel_var"; private static final String TEST_REGULAR_VAR = "REGULAR_TEST_CONFIG"; private static final String TEST_REGULAR_VAR_VAL = "test_regular_var"; - private static final String UNSUPPORTED_DD_VAR = "DD_UNSUPPORTED_CONFIG"; private static final String ALIAS_DD_VAR = "DD_TEST_CONFIG_ALIAS"; private static final String ALIAS_DD_VAL = "test_alias_val"; @@ -35,7 +35,7 @@ public class ConfigHelperTest { private static final String NEW_ALIAS_KEY_1 = "DD_NEW_ALIAS_KEY_1"; private static final String NEW_ALIAS_KEY_2 = "DD_NEW_ALIAS_KEY_2"; - private static ConfigInversionStrictStyle strictness; + private static ConfigHelper.StrictnessPolicy strictness; private static TestSupportedConfigurationSource testSource; @BeforeAll @@ -61,7 +61,7 @@ static void setUp() { testSupported, testAliases, testAliasMapping, new HashMap<>()); ConfigHelper.setConfigurationSource(testSource); strictness = ConfigHelper.configInversionStrictFlag(); - ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.STRICT); + ConfigHelper.setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); } @AfterAll @@ -70,6 +70,11 @@ static void tearDown() { ConfigHelper.setConfigInversionStrict(strictness); } + @AfterEach + void reset() { + ConfigHelper.resetCache(); + } + @Test void testBasicConfigHelper() { setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); @@ -184,7 +189,7 @@ void testInconsistentAliasesAndAliasMapping() { // TODO: Update to verify telemetry when implemented @Test void testUnsupportedEnvWarningNotInTestMode() { - ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.TEST); + ConfigHelper.setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST); setEnvVar("DD_FAKE_VAR", "banana"); @@ -193,7 +198,7 @@ void testUnsupportedEnvWarningNotInTestMode() { // Cleanup setEnvVar("DD_FAKE_VAR", null); - ConfigHelper.setConfigInversionStrict(ConfigInversionStrictStyle.STRICT); + ConfigHelper.setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); } // Copied from utils.TestHelper From a4de955097d3aeb4e0e3092af695fecf2f1473ea Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 19 Sep 2025 14:46:47 -0700 Subject: [PATCH 33/41] updating class coverage exclude --- utils/config-utils/build.gradle.kts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/utils/config-utils/build.gradle.kts b/utils/config-utils/build.gradle.kts index 83d98508d8b..cffcadd3d22 100644 --- a/utils/config-utils/build.gradle.kts +++ b/utils/config-utils/build.gradle.kts @@ -30,8 +30,7 @@ val excludedClassesCoverage by extra( "datadog.trace.bootstrap.config.provider.stableconfig.Selector", // tested in internal-api "datadog.trace.bootstrap.config.provider.StableConfigParser", - "datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource", - "datadog.trace.config.inversion.ConfigInversionStrictStyle", + "datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource" ) ) From cad575cb6e2ec319b0a3503c29060b115544d397 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 23 Sep 2025 14:33:36 -0700 Subject: [PATCH 34/41] updating ConfigHelper to be a singleton --- .../trace/config/inversion/ConfigHelper.java | 30 ++++++---- .../config/inversion/ConfigHelperTest.java | 55 ++++++++++--------- 2 files changed, 46 insertions(+), 39 deletions(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java index ac4dc6f92a7..de4c058113a 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -34,39 +34,45 @@ public String toString() { private static final Logger log = LoggerFactory.getLogger(ConfigHelper.class); - private static StrictnessPolicy configInversionStrict = StrictnessPolicy.WARNING; + private static final ConfigHelper INSTANCE = new ConfigHelper(); + + private StrictnessPolicy configInversionStrict = StrictnessPolicy.WARNING; // Cache for configs, init value is null - private static Map configs; + private Map configs; // Default to production source - private static SupportedConfigurationSource configSource = new SupportedConfigurationSource(); + private SupportedConfigurationSource configSource = new SupportedConfigurationSource(); + + public static ConfigHelper get() { + return INSTANCE; + } - public static void setConfigInversionStrict(StrictnessPolicy configInversionStrict) { - ConfigHelper.configInversionStrict = configInversionStrict; + public void setConfigInversionStrict(StrictnessPolicy configInversionStrict) { + this.configInversionStrict = configInversionStrict; } - public static StrictnessPolicy configInversionStrictFlag() { + public StrictnessPolicy configInversionStrictFlag() { return configInversionStrict; } // Used only for testing purposes - static void setConfigurationSource(SupportedConfigurationSource testSource) { + void setConfigurationSource(SupportedConfigurationSource testSource) { configSource = testSource; } /** Resetting config cache. Useful for cleaning up after tests. */ - static void resetCache() { + void resetCache() { configs = null; } /** Reset all configuration data to the generated defaults. Useful for cleaning up after tests. */ - static void resetToDefaults() { + void resetToDefaults() { configSource = new SupportedConfigurationSource(); - configInversionStrict = StrictnessPolicy.WARNING; + this.configInversionStrict = StrictnessPolicy.WARNING; } - public static Map getEnvironmentVariables() { + public Map getEnvironmentVariables() { if (configs != null) { return configs; } @@ -111,7 +117,7 @@ public static Map getEnvironmentVariables() { return configs; } - public static String getEnvironmentVariable(String name) { + public String getEnvironmentVariable(String name) { if (configs != null && configs.containsKey(name)) { return configs.get(name); } diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java index 1b0ca09836c..6bd940b471b 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java @@ -59,20 +59,20 @@ static void setUp() { testSource = new TestSupportedConfigurationSource( testSupported, testAliases, testAliasMapping, new HashMap<>()); - ConfigHelper.setConfigurationSource(testSource); - strictness = ConfigHelper.configInversionStrictFlag(); - ConfigHelper.setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); + ConfigHelper.get().setConfigurationSource(testSource); + strictness = ConfigHelper.get().configInversionStrictFlag(); + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); } @AfterAll static void tearDown() { - ConfigHelper.resetToDefaults(); - ConfigHelper.setConfigInversionStrict(strictness); + ConfigHelper.get().resetToDefaults(); + ConfigHelper.get().setConfigInversionStrict(strictness); } @AfterEach void reset() { - ConfigHelper.resetCache(); + ConfigHelper.get().resetCache(); } @Test @@ -81,11 +81,11 @@ void testBasicConfigHelper() { setEnvVar(TEST_OTEL_VAR, TEST_OTEL_VAR_VAL); setEnvVar(TEST_REGULAR_VAR, TEST_REGULAR_VAR_VAL); - assertEquals(TEST_DD_VAR_VAL, ConfigHelper.getEnvironmentVariable(TEST_DD_VAR)); - assertEquals(TEST_OTEL_VAR_VAL, ConfigHelper.getEnvironmentVariable(TEST_OTEL_VAR)); - assertEquals(TEST_REGULAR_VAR_VAL, ConfigHelper.getEnvironmentVariable(TEST_REGULAR_VAR)); + assertEquals(TEST_DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); + assertEquals(TEST_OTEL_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_OTEL_VAR)); + assertEquals(TEST_REGULAR_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_REGULAR_VAR)); - Map result = ConfigHelper.getEnvironmentVariables(); + Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); assertEquals(TEST_OTEL_VAR_VAL, result.get(TEST_OTEL_VAR)); assertEquals(TEST_REGULAR_VAR_VAL, result.get(TEST_REGULAR_VAR)); @@ -100,8 +100,8 @@ void testBasicConfigHelper() { void testAliasSupport() { setEnvVar(ALIAS_DD_VAR, ALIAS_DD_VAL); - assertEquals(ALIAS_DD_VAL, ConfigHelper.getEnvironmentVariable(TEST_DD_VAR)); - Map result = ConfigHelper.getEnvironmentVariables(); + assertEquals(ALIAS_DD_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); + Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(ALIAS_DD_VAL, result.get(TEST_DD_VAR)); assertFalse(result.containsKey(ALIAS_DD_VAR)); @@ -115,8 +115,8 @@ void testMainConfigPrecedence() { setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); setEnvVar(ALIAS_DD_VAR, ALIAS_DD_VAL); - assertEquals(TEST_DD_VAR_VAL, ConfigHelper.getEnvironmentVariable(TEST_DD_VAR)); - Map result = ConfigHelper.getEnvironmentVariables(); + assertEquals(TEST_DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); + Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); assertFalse(result.containsKey(ALIAS_DD_VAR)); @@ -129,8 +129,8 @@ void testMainConfigPrecedence() { void testNonDDAliases() { setEnvVar(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); - assertEquals(NON_DD_ALIAS_VAL, ConfigHelper.getEnvironmentVariable(TEST_DD_VAR)); - Map result = ConfigHelper.getEnvironmentVariables(); + assertEquals(NON_DD_ALIAS_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); + Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(NON_DD_ALIAS_VAL, result.get(TEST_DD_VAR)); assertFalse(result.containsKey(NON_DD_ALIAS_VAR)); @@ -140,7 +140,7 @@ void testNonDDAliases() { @Test void testAliasesWithoutPresentAliases() { - Map result = ConfigHelper.getEnvironmentVariables(); + Map result = ConfigHelper.get().getEnvironmentVariables(); assertFalse(result.containsKey(ALIAS_DD_VAR)); } @@ -149,14 +149,15 @@ void testAliasWithEmptyList() { Map> aliasMap = new HashMap<>(); aliasMap.put("EMPTY_ALIAS_CONFIG", new ArrayList<>()); - ConfigHelper.setConfigurationSource( - new TestSupportedConfigurationSource( - new HashSet<>(), aliasMap, new HashMap<>(), new HashMap<>())); + ConfigHelper.get() + .setConfigurationSource( + new TestSupportedConfigurationSource( + new HashSet<>(), aliasMap, new HashMap<>(), new HashMap<>())); - assertNull(ConfigHelper.getEnvironmentVariable("EMPTY_ALIAS_CONFIG")); + assertNull(ConfigHelper.get().getEnvironmentVariable("EMPTY_ALIAS_CONFIG")); // Cleanup - ConfigHelper.setConfigurationSource(testSource); + ConfigHelper.get().setConfigurationSource(testSource); } @Test @@ -164,7 +165,7 @@ void testAliasSkippedWhenBaseAlreadyPresent() { setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); setEnvVar(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); - Map result = ConfigHelper.getEnvironmentVariables(); + Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); assertFalse(result.containsKey(NON_DD_ALIAS_VAR)); @@ -177,7 +178,7 @@ void testAliasSkippedWhenBaseAlreadyPresent() { void testInconsistentAliasesAndAliasMapping() { setEnvVar(NEW_ALIAS_KEY_2, "some_value"); - Map result = ConfigHelper.getEnvironmentVariables(); + Map result = ConfigHelper.get().getEnvironmentVariables(); assertFalse(result.containsKey(NEW_ALIAS_KEY_2)); assertFalse(result.containsKey(NEW_ALIAS_TARGET)); @@ -189,16 +190,16 @@ void testInconsistentAliasesAndAliasMapping() { // TODO: Update to verify telemetry when implemented @Test void testUnsupportedEnvWarningNotInTestMode() { - ConfigHelper.setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST); + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST); setEnvVar("DD_FAKE_VAR", "banana"); // Should allow unsupported variable in TEST mode - assertEquals("banana", ConfigHelper.getEnvironmentVariable("DD_FAKE_VAR")); + assertEquals("banana", ConfigHelper.get().getEnvironmentVariable("DD_FAKE_VAR")); // Cleanup setEnvVar("DD_FAKE_VAR", null); - ConfigHelper.setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); } // Copied from utils.TestHelper From 5fe0a889c9cf93b4e5c3a8485574634ec6c198e9 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 23 Sep 2025 16:58:55 -0700 Subject: [PATCH 35/41] refactoring ConfigHelper and ConfigurationSources to simplify code readability and hide supported-configuration details --- .../trace/config/inversion/ConfigHelper.java | 33 +++++++++---------- .../SupportedConfigurationSource.java | 24 +++++++------- .../TestSupportedConfigurationSource.java | 16 ++++----- 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java index de4c058113a..527bbcf7794 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -82,32 +82,29 @@ public Map getEnvironmentVariables() { for (Map.Entry entry : env.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); - Map aliasMapping = configSource.getAliasMapping(); - if (key.startsWith("DD_") || key.startsWith("OTEL_") || aliasMapping.containsKey(key)) { - String baseConfig; - if (configSource.getSupportedConfigurations().contains(key)) { + String primaryEnv = configSource.primaryEnvFromAlias(key); + if (key.startsWith("DD_") || key.startsWith("OTEL_") || null != primaryEnv) { + if (configSource.supported(key)) { configs.put(key, value); // If this environment variable is the alias of another, and we haven't processed the // original environment variable yet, handle it here. - } else if (aliasMapping.containsKey(key) - && !configs.containsKey(baseConfig = aliasMapping.get(key))) { - List aliasList = configSource.getAliases().get(baseConfig); - for (String alias : aliasList) { + } else if (null != primaryEnv && !configs.containsKey(primaryEnv)) { + List aliases = configSource.getAliases(primaryEnv); + for (String alias : aliases) { if (env.containsKey(alias)) { - configs.put(baseConfig, env.get(alias)); + configs.put(primaryEnv, env.get(alias)); break; } } } - // TODO: Follow-up - Add deprecation handling - if (configSource.getDeprecatedConfigurations().containsKey(key)) { + String envFromDeprecated; + if ((envFromDeprecated = configSource.primaryEnvFromDeprecated(key)) != null) { String warning = "Environment variable " + key - + " is deprecated. " - + (configSource.getAliasMapping().containsKey(key) - ? "Please use " + configSource.getAliasMapping().get(key) + " instead." - : configSource.getDeprecatedConfigurations().get(key)); + + " is deprecated. Please use " + + (primaryEnv != null ? primaryEnv : envFromDeprecated) + + " instead."; log.warn(warning); } } else { @@ -123,8 +120,8 @@ public String getEnvironmentVariable(String name) { } if ((name.startsWith("DD_") || name.startsWith("OTEL_")) - && !configSource.getAliasMapping().containsKey(name) - && !configSource.getSupportedConfigurations().contains(name)) { + && null != configSource.primaryEnvFromAlias(name) + && !configSource.supported(name)) { if (configInversionStrict != StrictnessPolicy.TEST) { ConfigInversionMetricCollectorProvider.get().setUndocumentedEnvVarMetric(name); } @@ -136,7 +133,7 @@ public String getEnvironmentVariable(String name) { String config = EnvironmentVariables.get(name); List aliases; - if (config == null && (aliases = configSource.getAliases().get(name)) != null) { + if (config == null && (aliases = configSource.getAliases(name)) != null) { for (String alias : aliases) { String aliasValue = EnvironmentVariables.get(alias); if (aliasValue != null) { diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java index 599298f2294..80b8b3d4f4f 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java @@ -1,8 +1,6 @@ package datadog.trace.config.inversion; import java.util.List; -import java.util.Map; -import java.util.Set; /** * This class uses {@link #GeneratedSupportedConfigurations} for handling supported configurations @@ -10,23 +8,23 @@ */ class SupportedConfigurationSource { - /** @return Set of supported configuration keys */ - public Set getSupportedConfigurations() { - return GeneratedSupportedConfigurations.SUPPORTED; + /** @return Set of supported environment variable keys */ + public boolean supported(String env) { + return GeneratedSupportedConfigurations.SUPPORTED.contains(env); } - /** @return Map of configuration keys to their aliases */ - public Map> getAliases() { - return GeneratedSupportedConfigurations.ALIASES; + /** @return List of aliases for an environment variable */ + public List getAliases(String env) { + return GeneratedSupportedConfigurations.ALIASES.getOrDefault(env, null); } - /** @return Map of alias keys to their primary configuration keys */ - public Map getAliasMapping() { - return GeneratedSupportedConfigurations.ALIAS_MAPPING; + /** @return Primary environment variable for a queried alias */ + public String primaryEnvFromAlias(String alias) { + return GeneratedSupportedConfigurations.ALIAS_MAPPING.getOrDefault(alias, null); } /** @return Map of deprecated configurations */ - public Map getDeprecatedConfigurations() { - return GeneratedSupportedConfigurations.DEPRECATED; + public String primaryEnvFromDeprecated(String deprecated) { + return GeneratedSupportedConfigurations.DEPRECATED.getOrDefault(deprecated, null); } } diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java index 448b26706ea..c7d4b5e0632 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java @@ -23,22 +23,22 @@ public TestSupportedConfigurationSource( } @Override - public Set getSupportedConfigurations() { - return supported; + public boolean supported(String env) { + return supported.contains(env); } @Override - public Map> getAliases() { - return aliases; + public List getAliases(String env) { + return aliases.getOrDefault(env, null); } @Override - public Map getAliasMapping() { - return aliasMapping; + public String primaryEnvFromAlias(String alias) { + return aliasMapping.getOrDefault(alias, null); } @Override - public Map getDeprecatedConfigurations() { - return deprecated; + public String primaryEnvFromDeprecated(String deprecated) { + return this.deprecated.getOrDefault(deprecated, null); } } From 4c924eb2e35be6f85b673e2eab6efeb56c1e79f1 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 24 Sep 2025 17:35:31 -0700 Subject: [PATCH 36/41] responding to PR comments and refactoring ConfigHelperTest to utilize ControllableEnvironmentVariables --- .../SupportedConfigurationSource.java | 3 +- .../config/inversion/ConfigHelperTest.java | 72 +++++-------------- .../TestSupportedConfigurationSource.java | 3 +- 3 files changed, 21 insertions(+), 57 deletions(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java index 80b8b3d4f4f..92af0e5d2eb 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java @@ -1,5 +1,6 @@ package datadog.trace.config.inversion; +import java.util.ArrayList; import java.util.List; /** @@ -15,7 +16,7 @@ public boolean supported(String env) { /** @return List of aliases for an environment variable */ public List getAliases(String env) { - return GeneratedSupportedConfigurations.ALIASES.getOrDefault(env, null); + return GeneratedSupportedConfigurations.ALIASES.getOrDefault(env, new ArrayList<>()); } /** @return Primary environment variable for a queried alias */ diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java index 6bd940b471b..1c6aa0d5ca2 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; -import java.lang.reflect.Field; +import datadog.trace.test.util.ControllableEnvironmentVariables; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -35,14 +35,16 @@ public class ConfigHelperTest { private static final String NEW_ALIAS_KEY_1 = "DD_NEW_ALIAS_KEY_1"; private static final String NEW_ALIAS_KEY_2 = "DD_NEW_ALIAS_KEY_2"; + private static ControllableEnvironmentVariables env; + private static ConfigHelper.StrictnessPolicy strictness; private static TestSupportedConfigurationSource testSource; @BeforeAll static void setUp() { + env = ControllableEnvironmentVariables.setup(); + // Set up test configurations using SupportedConfigurationSource - // - // ConfigInversionMetricCollectorProvider.register(ConfigInversionMetricCollectorImpl.getInstance()); Set testSupported = new HashSet<>(Arrays.asList(TEST_DD_VAR, TEST_OTEL_VAR, TEST_REGULAR_VAR)); @@ -73,13 +75,14 @@ static void tearDown() { @AfterEach void reset() { ConfigHelper.get().resetCache(); + env.clear(); } @Test void testBasicConfigHelper() { - setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); - setEnvVar(TEST_OTEL_VAR, TEST_OTEL_VAR_VAL); - setEnvVar(TEST_REGULAR_VAR, TEST_REGULAR_VAR_VAL); + env.set(TEST_DD_VAR, TEST_DD_VAR_VAL); + env.set(TEST_OTEL_VAR, TEST_OTEL_VAR_VAL); + env.set(TEST_REGULAR_VAR, TEST_REGULAR_VAR_VAL); assertEquals(TEST_DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); assertEquals(TEST_OTEL_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_OTEL_VAR)); @@ -89,53 +92,38 @@ void testBasicConfigHelper() { assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); assertEquals(TEST_OTEL_VAR_VAL, result.get(TEST_OTEL_VAR)); assertEquals(TEST_REGULAR_VAR_VAL, result.get(TEST_REGULAR_VAR)); - - // Cleanup - setEnvVar(TEST_DD_VAR, null); - setEnvVar(TEST_OTEL_VAR, null); - setEnvVar(TEST_REGULAR_VAR, null); } @Test void testAliasSupport() { - setEnvVar(ALIAS_DD_VAR, ALIAS_DD_VAL); + env.set(ALIAS_DD_VAR, ALIAS_DD_VAL); assertEquals(ALIAS_DD_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(ALIAS_DD_VAL, result.get(TEST_DD_VAR)); assertFalse(result.containsKey(ALIAS_DD_VAR)); - - // Cleanup - setEnvVar(ALIAS_DD_VAR, null); } @Test void testMainConfigPrecedence() { // When both main variable and alias are set, main should take precedence - setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); - setEnvVar(ALIAS_DD_VAR, ALIAS_DD_VAL); + env.set(TEST_DD_VAR, TEST_DD_VAR_VAL); + env.set(ALIAS_DD_VAR, ALIAS_DD_VAL); assertEquals(TEST_DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); assertFalse(result.containsKey(ALIAS_DD_VAR)); - - // Cleanup - setEnvVar(TEST_DD_VAR, null); - setEnvVar(ALIAS_DD_VAR, null); } @Test void testNonDDAliases() { - setEnvVar(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); + env.set(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); assertEquals(NON_DD_ALIAS_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(NON_DD_ALIAS_VAL, result.get(TEST_DD_VAR)); assertFalse(result.containsKey(NON_DD_ALIAS_VAR)); - - // Cleanup - setEnvVar(NON_DD_ALIAS_VAR, null); } @Test @@ -162,60 +150,34 @@ void testAliasWithEmptyList() { @Test void testAliasSkippedWhenBaseAlreadyPresent() { - setEnvVar(TEST_DD_VAR, TEST_DD_VAR_VAL); - setEnvVar(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); + env.set(TEST_DD_VAR, TEST_DD_VAR_VAL); + env.set(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); Map result = ConfigHelper.get().getEnvironmentVariables(); assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); assertFalse(result.containsKey(NON_DD_ALIAS_VAR)); - - // Cleanup - setEnvVar(TEST_DD_VAR, null); - setEnvVar(NON_DD_ALIAS_VAR, null); } @Test void testInconsistentAliasesAndAliasMapping() { - setEnvVar(NEW_ALIAS_KEY_2, "some_value"); + env.set(NEW_ALIAS_KEY_2, "some_value"); Map result = ConfigHelper.get().getEnvironmentVariables(); assertFalse(result.containsKey(NEW_ALIAS_KEY_2)); assertFalse(result.containsKey(NEW_ALIAS_TARGET)); - - // Cleanup - setEnvVar(NEW_ALIAS_KEY_2, null); } - // TODO: Update to verify telemetry when implemented @Test void testUnsupportedEnvWarningNotInTestMode() { ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST); - setEnvVar("DD_FAKE_VAR", "banana"); + env.set("DD_FAKE_VAR", "banana"); // Should allow unsupported variable in TEST mode assertEquals("banana", ConfigHelper.get().getEnvironmentVariable("DD_FAKE_VAR")); // Cleanup - setEnvVar("DD_FAKE_VAR", null); ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); } - - // Copied from utils.TestHelper - @SuppressWarnings("unchecked") - private static void setEnvVar(String envName, String envValue) { - try { - Class classOfMap = System.getenv().getClass(); - Field field = classOfMap.getDeclaredField("m"); - field.setAccessible(true); - if (envValue == null) { - ((Map) field.get(System.getenv())).remove(envName); - } else { - ((Map) field.get(System.getenv())).put(envName, envValue); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } } diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java index c7d4b5e0632..4b4abe15509 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java @@ -1,5 +1,6 @@ package datadog.trace.config.inversion; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -29,7 +30,7 @@ public boolean supported(String env) { @Override public List getAliases(String env) { - return aliases.getOrDefault(env, null); + return aliases.getOrDefault(env, new ArrayList<>()); } @Override From 3bbf4865bd5abbc7d256f9d190c6f7223c67f129 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 25 Sep 2025 11:40:54 -0700 Subject: [PATCH 37/41] updating PR comments --- .../trace/config/inversion/SupportedConfigurationSource.java | 4 ++-- .../config/inversion/TestSupportedConfigurationSource.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java index 92af0e5d2eb..b42baab5481 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java @@ -1,6 +1,6 @@ package datadog.trace.config.inversion; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -16,7 +16,7 @@ public boolean supported(String env) { /** @return List of aliases for an environment variable */ public List getAliases(String env) { - return GeneratedSupportedConfigurations.ALIASES.getOrDefault(env, new ArrayList<>()); + return GeneratedSupportedConfigurations.ALIASES.getOrDefault(env, Collections.emptyList()); } /** @return Primary environment variable for a queried alias */ diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java index 4b4abe15509..3dee8925dd1 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/TestSupportedConfigurationSource.java @@ -1,6 +1,6 @@ package datadog.trace.config.inversion; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -30,7 +30,7 @@ public boolean supported(String env) { @Override public List getAliases(String env) { - return aliases.getOrDefault(env, new ArrayList<>()); + return aliases.getOrDefault(env, Collections.emptyList()); } @Override From 8ba684e64072c471b86000af9b50202e98987d1f Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 25 Sep 2025 12:44:45 -0700 Subject: [PATCH 38/41] cleanup and code coverage --- .../trace/api/ConfigCollectorTest.groovy | 0 utils/config-utils/build.gradle.kts | 2 + .../config/inversion/ConfigHelperTest.java | 70 +++++++++++-------- 3 files changed, 43 insertions(+), 29 deletions(-) rename internal-api/src/test/{java => groovy}/datadog/trace/api/ConfigCollectorTest.groovy (100%) diff --git a/internal-api/src/test/java/datadog/trace/api/ConfigCollectorTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy similarity index 100% rename from internal-api/src/test/java/datadog/trace/api/ConfigCollectorTest.groovy rename to internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy diff --git a/utils/config-utils/build.gradle.kts b/utils/config-utils/build.gradle.kts index cffcadd3d22..03d9c8de0d0 100644 --- a/utils/config-utils/build.gradle.kts +++ b/utils/config-utils/build.gradle.kts @@ -37,6 +37,8 @@ val excludedClassesCoverage by extra( val excludedClassesBranchCoverage by extra( listOf( "datadog.trace.bootstrap.config.provider.AgentArgsInjector", + // Enum + "datadog.trace.config.inversion.ConfigHelper.StrictnessPolicy", "datadog.trace.util.ConfigStrings" ) ) diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java index 1c6aa0d5ca2..de25a06aefe 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java @@ -19,12 +19,12 @@ public class ConfigHelperTest { // Test environment variables - private static final String TEST_DD_VAR = "DD_TEST_CONFIG"; - private static final String TEST_DD_VAR_VAL = "test_dd_var"; - private static final String TEST_OTEL_VAR = "OTEL_TEST_CONFIG"; - private static final String TEST_OTEL_VAR_VAL = "test_otel_var"; - private static final String TEST_REGULAR_VAR = "REGULAR_TEST_CONFIG"; - private static final String TEST_REGULAR_VAR_VAL = "test_regular_var"; + private static final String DD_VAR = "DD_TEST_CONFIG"; + private static final String DD_VAR_VAL = "test_dd_var"; + private static final String OTEL_VAR = "OTEL_TEST_CONFIG"; + private static final String OTEL_VAR_VAL = "test_otel_var"; + private static final String REGULAR_VAR = "REGULAR_TEST_CONFIG"; + private static final String REGULAR_VAR_VAL = "test_regular_var"; private static final String ALIAS_DD_VAR = "DD_TEST_CONFIG_ALIAS"; private static final String ALIAS_DD_VAL = "test_alias_val"; @@ -45,16 +45,15 @@ static void setUp() { env = ControllableEnvironmentVariables.setup(); // Set up test configurations using SupportedConfigurationSource - Set testSupported = - new HashSet<>(Arrays.asList(TEST_DD_VAR, TEST_OTEL_VAR, TEST_REGULAR_VAR)); + Set testSupported = new HashSet<>(Arrays.asList(DD_VAR, OTEL_VAR, REGULAR_VAR)); Map> testAliases = new HashMap<>(); - testAliases.put(TEST_DD_VAR, Arrays.asList(ALIAS_DD_VAR, NON_DD_ALIAS_VAR)); + testAliases.put(DD_VAR, Arrays.asList(ALIAS_DD_VAR, NON_DD_ALIAS_VAR)); testAliases.put(NEW_ALIAS_TARGET, Arrays.asList(NEW_ALIAS_KEY_1)); Map testAliasMapping = new HashMap<>(); - testAliasMapping.put(ALIAS_DD_VAR, TEST_DD_VAR); - testAliasMapping.put(NON_DD_ALIAS_VAR, TEST_DD_VAR); + testAliasMapping.put(ALIAS_DD_VAR, DD_VAR); + testAliasMapping.put(NON_DD_ALIAS_VAR, DD_VAR); testAliasMapping.put(NEW_ALIAS_KEY_2, NEW_ALIAS_TARGET); // Create and set test configuration source @@ -80,39 +79,39 @@ void reset() { @Test void testBasicConfigHelper() { - env.set(TEST_DD_VAR, TEST_DD_VAR_VAL); - env.set(TEST_OTEL_VAR, TEST_OTEL_VAR_VAL); - env.set(TEST_REGULAR_VAR, TEST_REGULAR_VAR_VAL); + env.set(DD_VAR, DD_VAR_VAL); + env.set(OTEL_VAR, OTEL_VAR_VAL); + env.set(REGULAR_VAR, REGULAR_VAR_VAL); - assertEquals(TEST_DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); - assertEquals(TEST_OTEL_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_OTEL_VAR)); - assertEquals(TEST_REGULAR_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_REGULAR_VAR)); + assertEquals(DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(DD_VAR)); + assertEquals(OTEL_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(OTEL_VAR)); + assertEquals(REGULAR_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(REGULAR_VAR)); Map result = ConfigHelper.get().getEnvironmentVariables(); - assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); - assertEquals(TEST_OTEL_VAR_VAL, result.get(TEST_OTEL_VAR)); - assertEquals(TEST_REGULAR_VAR_VAL, result.get(TEST_REGULAR_VAR)); + assertEquals(DD_VAR_VAL, result.get(DD_VAR)); + assertEquals(OTEL_VAR_VAL, result.get(OTEL_VAR)); + assertEquals(REGULAR_VAR_VAL, result.get(REGULAR_VAR)); } @Test void testAliasSupport() { env.set(ALIAS_DD_VAR, ALIAS_DD_VAL); - assertEquals(ALIAS_DD_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); + assertEquals(ALIAS_DD_VAL, ConfigHelper.get().getEnvironmentVariable(DD_VAR)); Map result = ConfigHelper.get().getEnvironmentVariables(); - assertEquals(ALIAS_DD_VAL, result.get(TEST_DD_VAR)); + assertEquals(ALIAS_DD_VAL, result.get(DD_VAR)); assertFalse(result.containsKey(ALIAS_DD_VAR)); } @Test void testMainConfigPrecedence() { // When both main variable and alias are set, main should take precedence - env.set(TEST_DD_VAR, TEST_DD_VAR_VAL); + env.set(DD_VAR, DD_VAR_VAL); env.set(ALIAS_DD_VAR, ALIAS_DD_VAL); - assertEquals(TEST_DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); + assertEquals(DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(DD_VAR)); Map result = ConfigHelper.get().getEnvironmentVariables(); - assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); + assertEquals(DD_VAR_VAL, result.get(DD_VAR)); assertFalse(result.containsKey(ALIAS_DD_VAR)); } @@ -120,9 +119,9 @@ void testMainConfigPrecedence() { void testNonDDAliases() { env.set(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); - assertEquals(NON_DD_ALIAS_VAL, ConfigHelper.get().getEnvironmentVariable(TEST_DD_VAR)); + assertEquals(NON_DD_ALIAS_VAL, ConfigHelper.get().getEnvironmentVariable(DD_VAR)); Map result = ConfigHelper.get().getEnvironmentVariables(); - assertEquals(NON_DD_ALIAS_VAL, result.get(TEST_DD_VAR)); + assertEquals(NON_DD_ALIAS_VAL, result.get(DD_VAR)); assertFalse(result.containsKey(NON_DD_ALIAS_VAR)); } @@ -150,11 +149,11 @@ void testAliasWithEmptyList() { @Test void testAliasSkippedWhenBaseAlreadyPresent() { - env.set(TEST_DD_VAR, TEST_DD_VAR_VAL); + env.set(DD_VAR, DD_VAR_VAL); env.set(NON_DD_ALIAS_VAR, NON_DD_ALIAS_VAL); Map result = ConfigHelper.get().getEnvironmentVariables(); - assertEquals(TEST_DD_VAR_VAL, result.get(TEST_DD_VAR)); + assertEquals(DD_VAR_VAL, result.get(DD_VAR)); assertFalse(result.containsKey(NON_DD_ALIAS_VAR)); } @@ -180,4 +179,17 @@ void testUnsupportedEnvWarningNotInTestMode() { // Cleanup ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); } + + @Test + void testCache() { + env.set(DD_VAR, DD_VAR_VAL); + + Map result = ConfigHelper.get().getEnvironmentVariables(); + assertEquals(DD_VAR_VAL, result.get(DD_VAR)); + + // Ensure that the cached value is returned + env.set(DD_VAR, ALIAS_DD_VAL); + assertEquals(DD_VAR_VAL, result.get(DD_VAR)); + assertEquals(DD_VAR_VAL, ConfigHelper.get().getEnvironmentVariable(DD_VAR)); + } } From cad4c24448f28ef7ff6b4feccce7237f3c72f53b Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 1 Oct 2025 16:23:53 -0400 Subject: [PATCH 39/41] bugfix --- .../main/java/datadog/trace/config/inversion/ConfigHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java index 527bbcf7794..9cd423e453a 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -120,7 +120,7 @@ public String getEnvironmentVariable(String name) { } if ((name.startsWith("DD_") || name.startsWith("OTEL_")) - && null != configSource.primaryEnvFromAlias(name) + && null == configSource.primaryEnvFromAlias(name) && !configSource.supported(name)) { if (configInversionStrict != StrictnessPolicy.TEST) { ConfigInversionMetricCollectorProvider.get().setUndocumentedEnvVarMetric(name); From 11fc52b890db02cc0fbc55d7ad5e19d8dc7b31fd Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 6 Oct 2025 14:12:56 -0400 Subject: [PATCH 40/41] responding to PR comments --- .../trace/config/inversion/ConfigHelper.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java index 9cd423e453a..8900423ad12 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -2,7 +2,7 @@ import datadog.environment.EnvironmentVariables; import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider; -import java.util.HashMap; +import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Map; @@ -38,8 +38,11 @@ public String toString() { private StrictnessPolicy configInversionStrict = StrictnessPolicy.WARNING; + private static final String DD_PREFIX = "DD_"; + private static final String OTEL_PREFIX = "OTEL_"; + // Cache for configs, init value is null - private Map configs; + private Map configs = Collections.emptyMap(); // Default to production source private SupportedConfigurationSource configSource = new SupportedConfigurationSource(); @@ -70,25 +73,25 @@ void resetCache() { void resetToDefaults() { configSource = new SupportedConfigurationSource(); this.configInversionStrict = StrictnessPolicy.WARNING; + configs = Collections.emptyMap(); } public Map getEnvironmentVariables() { - if (configs != null) { + if (!configs.isEmpty()) { return configs; } - configs = new HashMap<>(); Map env = EnvironmentVariables.getAll(); for (Map.Entry entry : env.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); String primaryEnv = configSource.primaryEnvFromAlias(key); - if (key.startsWith("DD_") || key.startsWith("OTEL_") || null != primaryEnv) { + if (key.startsWith(DD_PREFIX) || key.startsWith(OTEL_PREFIX) || primaryEnv != null) { if (configSource.supported(key)) { configs.put(key, value); // If this environment variable is the alias of another, and we haven't processed the // original environment variable yet, handle it here. - } else if (null != primaryEnv && !configs.containsKey(primaryEnv)) { + } else if (primaryEnv != null && !configs.containsKey(primaryEnv)) { List aliases = configSource.getAliases(primaryEnv); for (String alias : aliases) { if (env.containsKey(alias)) { @@ -97,8 +100,8 @@ public Map getEnvironmentVariables() { } } } - String envFromDeprecated; - if ((envFromDeprecated = configSource.primaryEnvFromDeprecated(key)) != null) { + String envFromDeprecated = configSource.primaryEnvFromDeprecated(key); + if (envFromDeprecated != null) { String warning = "Environment variable " + key @@ -115,12 +118,12 @@ public Map getEnvironmentVariables() { } public String getEnvironmentVariable(String name) { - if (configs != null && configs.containsKey(name)) { + if (configs.containsKey(name)) { return configs.get(name); } - if ((name.startsWith("DD_") || name.startsWith("OTEL_")) - && null == configSource.primaryEnvFromAlias(name) + if ((name.startsWith(DD_PREFIX) || name.startsWith(OTEL_PREFIX)) + && configSource.primaryEnvFromAlias(name) == null && !configSource.supported(name)) { if (configInversionStrict != StrictnessPolicy.TEST) { ConfigInversionMetricCollectorProvider.get().setUndocumentedEnvVarMetric(name); From 63e5d5a0682cbb22fbebfa1b214e7c7b7a847b82 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 6 Oct 2025 15:11:16 -0400 Subject: [PATCH 41/41] fixing issue with EmptyMap --- .../datadog/trace/config/inversion/ConfigHelper.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java index 8900423ad12..53341e0a66a 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -3,6 +3,7 @@ import datadog.environment.EnvironmentVariables; import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -41,7 +42,7 @@ public String toString() { private static final String DD_PREFIX = "DD_"; private static final String OTEL_PREFIX = "OTEL_"; - // Cache for configs, init value is null + // Cache for configs, init value is EmptyMap private Map configs = Collections.emptyMap(); // Default to production source @@ -66,14 +67,14 @@ void setConfigurationSource(SupportedConfigurationSource testSource) { /** Resetting config cache. Useful for cleaning up after tests. */ void resetCache() { - configs = null; + configs = Collections.emptyMap(); } /** Reset all configuration data to the generated defaults. Useful for cleaning up after tests. */ void resetToDefaults() { configSource = new SupportedConfigurationSource(); this.configInversionStrict = StrictnessPolicy.WARNING; - configs = Collections.emptyMap(); + resetCache(); } public Map getEnvironmentVariables() { @@ -81,6 +82,9 @@ public Map getEnvironmentVariables() { return configs; } + // Initial value is EmptyMap + configs = new HashMap<>(); + Map env = EnvironmentVariables.getAll(); for (Map.Entry entry : env.entrySet()) { String key = entry.getKey();