Skip to content

Commit 87aa538

Browse files
committed
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
1 parent 5f8a8ed commit 87aa538

File tree

18 files changed

+94
-26
lines changed

18 files changed

+94
-26
lines changed

dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String[
101101
+ "datadog.trace.api.TracePropagationStyle:build_time,"
102102
+ "datadog.trace.api.TracePropagationBehaviorExtract:build_time,"
103103
+ "datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl:build_time,"
104+
+ "datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl:build_time,"
104105
+ "datadog.trace.api.profiling.ProfilingEnablement:build_time,"
105106
+ "datadog.trace.bootstrap.config.provider.ConfigConverter:build_time,"
106107
+ "datadog.trace.bootstrap.config.provider.ConfigConverter$ValueOfLookup:build_time,"

internal-api/build.gradle.kts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ val excludedClassesCoverage by extra(
7878
// Bootstrap API
7979
"datadog.trace.bootstrap.ActiveSubsystems",
8080
"datadog.trace.bootstrap.ContextStore.Factory",
81-
"datadog.trace.bootstrap.config.provider.ConfigProvider.Singleton",
8281
"datadog.trace.bootstrap.instrumentation.api.java.lang.ProcessImplInstrumentationHelpers",
8382
"datadog.trace.bootstrap.instrumentation.api.Tags",
8483
"datadog.trace.bootstrap.instrumentation.api.CommonTagValues",
@@ -167,7 +166,6 @@ val excludedClassesCoverage by extra(
167166
"datadog.trace.api.Config",
168167
"datadog.trace.api.Config.HostNameHolder",
169168
"datadog.trace.api.Config.RuntimeIdHolder",
170-
"datadog.trace.api.ConfigCollector",
171169
"datadog.trace.api.DynamicConfig",
172170
"datadog.trace.api.DynamicConfig.Builder",
173171
"datadog.trace.api.DynamicConfig.Snapshot",
@@ -249,9 +247,6 @@ val excludedClassesBranchCoverage by extra(
249247
"datadog.trace.api.ClassloaderConfigurationOverrides.Lazy",
250248
"datadog.trace.util.stacktrace.HotSpotStackWalker",
251249
"datadog.trace.util.stacktrace.StackWalkerFactory",
252-
// Tested using forked process
253-
"datadog.trace.api.env.CapturedEnvironment",
254-
"datadog.trace.api.env.CapturedEnvironment.ProcessInfo",
255250
"datadog.trace.util.TempLocationManager",
256251
"datadog.trace.util.TempLocationManager.*",
257252
// Branches depend on RUM injector state that cannot be reliably controlled in unit tests
@@ -261,8 +256,6 @@ val excludedClassesBranchCoverage by extra(
261256

262257
val excludedClassesInstructionCoverage by extra(
263258
listOf(
264-
"datadog.trace.bootstrap.config.provider.EnvironmentConfigSource",
265-
"datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource",
266259
"datadog.trace.util.stacktrace.StackWalkerFactory"
267260
)
268261
)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,8 @@
654654
import datadog.trace.api.profiling.ProfilingEnablement;
655655
import datadog.trace.api.rum.RumInjectorConfig;
656656
import datadog.trace.api.rum.RumInjectorConfig.PrivacyLevel;
657+
import datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl;
658+
import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider;
657659
import datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl;
658660
import datadog.trace.api.telemetry.OtelEnvMetricCollectorProvider;
659661
import datadog.trace.bootstrap.config.provider.CapturedEnvironmentConfigSource;
@@ -1248,6 +1250,8 @@ public static String getHostName() {
12481250
static {
12491251
// Bind telemetry collector to config module before initializing ConfigProvider
12501252
OtelEnvMetricCollectorProvider.register(OtelEnvMetricCollectorImpl.getInstance());
1253+
ConfigInversionMetricCollectorProvider.register(
1254+
ConfigInversionMetricCollectorImpl.getInstance());
12511255
}
12521256

12531257
// Read order: System Properties -> Env Variables, [-> properties file], [-> default value]

internal-api/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollector.java renamed to internal-api/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorImpl.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,25 @@
99
import org.slf4j.Logger;
1010
import org.slf4j.LoggerFactory;
1111

12-
public class ConfigInversionMetricCollector
13-
implements MetricCollector<ConfigInversionMetricCollector.ConfigInversionMetric> {
14-
private static final Logger log = LoggerFactory.getLogger(ConfigInversionMetricCollector.class);
12+
public class ConfigInversionMetricCollectorImpl
13+
implements MetricCollector<ConfigInversionMetricCollectorImpl.ConfigInversionMetric>,
14+
ConfigInversionMetricCollector {
15+
private static final Logger log =
16+
LoggerFactory.getLogger(ConfigInversionMetricCollectorImpl.class);
1517
private static final String CONFIG_INVERSION_KEY_TAG = "config_name:";
1618
private static final String CONFIG_INVERSION_METRIC_NAME = "untracked.config.detected";
1719
private static final String NAMESPACE = "tracers";
18-
private static final ConfigInversionMetricCollector INSTANCE =
19-
new ConfigInversionMetricCollector();
20+
private static final ConfigInversionMetricCollectorImpl INSTANCE =
21+
new ConfigInversionMetricCollectorImpl();
2022

21-
private final BlockingQueue<ConfigInversionMetricCollector.ConfigInversionMetric> metricsQueue;
23+
private final BlockingQueue<ConfigInversionMetricCollectorImpl.ConfigInversionMetric>
24+
metricsQueue;
2225

23-
private ConfigInversionMetricCollector() {
26+
private ConfigInversionMetricCollectorImpl() {
2427
this.metricsQueue = new ArrayBlockingQueue<>(RAW_QUEUE_SIZE);
2528
}
2629

27-
public static ConfigInversionMetricCollector getInstance() {
30+
public static ConfigInversionMetricCollectorImpl getInstance() {
2831
return INSTANCE;
2932
}
3033

@@ -34,7 +37,7 @@ public void setUndocumentedEnvVarMetric(String configName) {
3437

3538
private void setMetricConfigInversionMetric(final String... tags) {
3639
if (!metricsQueue.offer(
37-
new ConfigInversionMetricCollector.ConfigInversionMetric(
40+
new ConfigInversionMetricCollectorImpl.ConfigInversionMetric(
3841
NAMESPACE, true, CONFIG_INVERSION_METRIC_NAME, "count", 1, tags))) {
3942
log.debug("Unable to add telemetry metric {} for {}", CONFIG_INVERSION_METRIC_NAME, tags[0]);
4043
}
@@ -46,11 +49,11 @@ public void prepareMetrics() {
4649
}
4750

4851
@Override
49-
public Collection<ConfigInversionMetricCollector.ConfigInversionMetric> drain() {
52+
public Collection<ConfigInversionMetricCollectorImpl.ConfigInversionMetric> drain() {
5053
if (this.metricsQueue.isEmpty()) {
5154
return Collections.emptyList();
5255
}
53-
List<ConfigInversionMetricCollector.ConfigInversionMetric> drained =
56+
List<ConfigInversionMetricCollectorImpl.ConfigInversionMetric> drained =
5457
new ArrayList<>(this.metricsQueue.size());
5558
this.metricsQueue.drainTo(drained);
5659
return drained;
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package datadog.trace.api.telemetry
22

33
import datadog.trace.test.util.DDSpecification
44

5-
import static datadog.trace.api.telemetry.ConfigInversionMetricCollector.CONFIG_INVERSION_METRIC_NAME
5+
import static ConfigInversionMetricCollectorImpl.CONFIG_INVERSION_METRIC_NAME
66

7-
class ConfigInversionMetricCollectorTest extends DDSpecification {
7+
class ConfigInversionMetricCollectorImplTest extends DDSpecification {
88

99
def "should emit metric when unsupported env var is used"() {
1010
setup:
11-
def collector = ConfigInversionMetricCollector.getInstance()
11+
def collector = ConfigInversionMetricCollectorImpl.getInstance()
1212

1313
when:
1414
ConfigInversionMetricCollectorTestHelper.checkAndEmitUnsupported("DD_UNKNOWN_FEATURE")
@@ -28,7 +28,7 @@ class ConfigInversionMetricCollectorTest extends DDSpecification {
2828

2929
def "should not emit metric when supported env var is used"() {
3030
setup:
31-
def collector = ConfigInversionMetricCollector.getInstance()
31+
def collector = ConfigInversionMetricCollectorImpl.getInstance()
3232

3333
when:
3434
ConfigInversionMetricCollectorTestHelper.checkAndEmitUnsupported("DD_ENV")

internal-api/src/test/groovy/datadog/trace/api/telemetry/ConfigInversionMetricCollectorTestHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ public class ConfigInversionMetricCollectorTestHelper {
1010
private static final Set<String> SUPPORTED_ENV_VARS =
1111
new HashSet<>(Arrays.asList("DD_ENV", "DD_SERVICE"));
1212

13-
private static final ConfigInversionMetricCollector configInversionMetricCollector =
14-
ConfigInversionMetricCollector.getInstance();
13+
private static final ConfigInversionMetricCollectorImpl configInversionMetricCollector =
14+
ConfigInversionMetricCollectorImpl.getInstance();
1515

1616
public static void checkAndEmitUnsupported(String envVarName) {
1717
if (!SUPPORTED_ENV_VARS.contains(envVarName)) {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package datadog.telemetry.metric;
22

3-
import datadog.trace.api.telemetry.ConfigInversionMetricCollector;
3+
import datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl;
44
import datadog.trace.api.telemetry.MetricCollector;
55
import edu.umd.cs.findbugs.annotations.NonNull;
66

77
public class ConfigInversionMetricPeriodicAction extends MetricPeriodicAction {
88
@Override
99
@NonNull
1010
public MetricCollector collector() {
11-
return ConfigInversionMetricCollector.getInstance();
11+
return ConfigInversionMetricCollectorImpl.getInstance();
1212
}
1313
}

utils/config-utils/build.gradle.kts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,56 @@ plugins {
55

66
apply(from = "$rootDir/gradle/java.gradle")
77

8+
val minimumBranchCoverage by extra(0.7)
9+
val minimumInstructionCoverage by extra(0.7)
10+
11+
val excludedClassesCoverage by extra(
12+
listOf(
13+
"datadog.trace.api.ConfigCollector",
14+
"datadog.trace.api.env.CapturedEnvironment",
15+
"datadog.trace.api.env.CapturedEnvironment.ProcessInfo",
16+
// tested in internal-api
17+
"datadog.trace.api.telemetry.OtelEnvMetricCollectorProvider",
18+
"datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider",
19+
"datadog.trace.bootstrap.config.provider.CapturedEnvironmentConfigSource",
20+
"datadog.trace.bootstrap.config.provider.ConfigConverter.ValueOfLookup",
21+
// tested in internal-api
22+
"datadog.trace.bootstrap.config.provider.ConfigProvider",
23+
"datadog.trace.bootstrap.config.provider.ConfigProvider.ConfigMergeResolver",
24+
"datadog.trace.bootstrap.config.provider.ConfigProvider.ConfigValueResolver",
25+
"datadog.trace.bootstrap.config.provider.ConfigProvider.Singleton",
26+
"datadog.trace.bootstrap.config.provider.ConfigProvider.Source",
27+
"datadog.trace.bootstrap.config.provider.EnvironmentConfigSource",
28+
// tested in internal-api
29+
"datadog.trace.bootstrap.config.provider.OtelEnvironmentConfigSource",
30+
"datadog.trace.bootstrap.config.provider.stableconfig.Selector",
31+
// tested in internal-api
32+
"datadog.trace.bootstrap.config.provider.StableConfigParser",
33+
"datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource",
34+
)
35+
)
36+
37+
val excludedClassesBranchCoverage by extra(
38+
listOf(
39+
"datadog.trace.bootstrap.config.provider.AgentArgsInjector",
40+
"datadog.trace.util.ConfigStrings"
41+
)
42+
)
43+
44+
val excludedClassesInstructionCoverage by extra(
45+
listOf(
46+
"datadog.trace.config.inversion.GeneratedSupportedConfigurations"
47+
)
48+
)
49+
850
dependencies {
951
implementation(project(":components:environment"))
1052
implementation(project(":components:yaml"))
1153
implementation(project(":dd-trace-api"))
1254
implementation(libs.slf4j)
1355

1456
testImplementation(project(":utils:test-utils"))
57+
testImplementation("org.snakeyaml:snakeyaml-engine:2.9")
1558
}
1659

1760
tasks.named("javadoc") {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package datadog.trace.api.telemetry;
2+
3+
public interface ConfigInversionMetricCollector {
4+
void setUndocumentedEnvVarMetric(String configName);
5+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package datadog.trace.api.telemetry;
2+
3+
public final class ConfigInversionMetricCollectorProvider {
4+
private static ConfigInversionMetricCollector INSTANCE = null;
5+
6+
private ConfigInversionMetricCollectorProvider() {}
7+
8+
public static ConfigInversionMetricCollector get() {
9+
if (INSTANCE == null) {
10+
throw new IllegalStateException(
11+
"ConfigInversionMetricCollectorService has not been registered.");
12+
}
13+
return INSTANCE;
14+
}
15+
16+
public static void register(ConfigInversionMetricCollector instance) {
17+
INSTANCE = instance;
18+
}
19+
}

0 commit comments

Comments
 (0)