Skip to content

Commit 7966580

Browse files
committed
Register ConfigInversion netric collector for InstrumenterConfig
InstrumenterConfig runs before Config and checks settings that control instrumentation. We skip the registration when doing native-image builds because we deliberately turn off non-critical features like telemetry for native-image. This change also simplifies ConfigInversionMetricCollectorProvider.get() for performance reasons, while moving debug logs to NoOpConfigInversionMetricCollector when the telemetry based implementation is not yet registered.
1 parent 640a4bd commit 7966580

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@
8080
import static datadog.trace.util.CollectionUtils.tryMakeImmutableSet;
8181

8282
import datadog.trace.api.profiling.ProfilingEnablement;
83+
import datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl;
84+
import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider;
8385
import datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl;
8486
import datadog.trace.api.telemetry.OtelEnvMetricCollectorProvider;
8587
import datadog.trace.bootstrap.config.provider.ConfigProvider;
@@ -107,6 +109,14 @@
107109
* @see Config for other configurations
108110
*/
109111
public class InstrumenterConfig {
112+
static {
113+
if (!Platform.isNativeImageBuilder()) {
114+
// Bind telemetry collector to config module before initializing ConfigProvider
115+
ConfigInversionMetricCollectorProvider.register(
116+
ConfigInversionMetricCollectorImpl.getInstance());
117+
}
118+
}
119+
110120
private final ConfigProvider configProvider;
111121

112122
private final boolean triageEnabled;

utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorProvider.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
11
package datadog.trace.api.telemetry;
22

3-
import org.slf4j.Logger;
4-
import org.slf4j.LoggerFactory;
5-
63
public final class ConfigInversionMetricCollectorProvider {
7-
private static final Logger log =
8-
LoggerFactory.getLogger(ConfigInversionMetricCollectorProvider.class);
9-
private static ConfigInversionMetricCollector INSTANCE = null;
4+
private static ConfigInversionMetricCollector INSTANCE =
5+
NoOpConfigInversionMetricCollector.getInstance();
106

117
private ConfigInversionMetricCollectorProvider() {}
128

139
public static ConfigInversionMetricCollector get() {
14-
if (INSTANCE == null) {
15-
log.debug(
16-
"ConfigInversionMetricCollector has not been registered. Defaulting to NoOp implementation.");
17-
// Return NoOp implementation for build tasks like instrumentJava that run before
18-
// implementation is registered
19-
return NoOpConfigInversionMetricCollector.getInstance();
20-
}
2110
return INSTANCE;
2211
}
2312

utils/config-utils/src/main/java/datadog/trace/api/telemetry/NoOpConfigInversionMetricCollector.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package datadog.trace.api.telemetry;
22

3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
36
/**
47
* NOOP implementation of ConfigInversionMetricCollector. Used as a default when the real collector
58
* is not registered during build tasks like instrumentJava.
@@ -8,6 +11,9 @@ public final class NoOpConfigInversionMetricCollector implements ConfigInversion
811
private static final NoOpConfigInversionMetricCollector INSTANCE =
912
new NoOpConfigInversionMetricCollector();
1013

14+
private static final Logger log =
15+
LoggerFactory.getLogger(NoOpConfigInversionMetricCollector.class);
16+
1117
private NoOpConfigInversionMetricCollector() {}
1218

1319
public static NoOpConfigInversionMetricCollector getInstance() {
@@ -16,6 +22,6 @@ public static NoOpConfigInversionMetricCollector getInstance() {
1622

1723
@Override
1824
public void setUndocumentedEnvVarMetric(String configName) {
19-
// NOOP - do nothing
25+
log.debug("Environment variable {} is undocumented", configName);
2026
}
2127
}

0 commit comments

Comments
 (0)