From 3d18a7773ac052165b5246724b67f5de868cd05c Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 17 Dec 2025 07:58:37 +0100 Subject: [PATCH 1/7] feat: add method to retrieve instrumentation configuration by name --- .../api/incubator/config/ConfigProvider.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java index 62cc044e653..407e459d7f0 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java @@ -5,6 +5,8 @@ package io.opentelemetry.api.incubator.config; +import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; + import javax.annotation.Nullable; import javax.annotation.concurrent.ThreadSafe; @@ -30,6 +32,22 @@ public interface ConfigProvider { @Nullable DeclarativeConfigProperties getInstrumentationConfig(); + /** + * Returns the {@link DeclarativeConfigProperties} for a specific instrumentation by name. If no + * configuration is available for the given name, an empty {@link DeclarativeConfigProperties} is + * returned. + * + * @param name the name of the instrumentation + * @return the {@link DeclarativeConfigProperties} for the given instrumentation name + */ + default DeclarativeConfigProperties get(String name) { + DeclarativeConfigProperties config = getInstrumentationConfig(); + if (config == null) { + return empty(); + } + return config.getStructured("java", empty()).getStructured(name, empty()); + } + /** Returns a no-op {@link ConfigProvider}. */ static ConfigProvider noop() { return () -> null; From 704499d48d4895f93762e95c16fce4c6c28906f2 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 17 Dec 2025 08:11:13 +0100 Subject: [PATCH 2/7] add test --- .../sdk/autoconfigure/DeclarativeConfigurationTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 09038b40e6d..87fae078c83 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -231,5 +231,8 @@ void configFile_ConfigProvider() { assertThat(InstrumentationConfigUtil.javaInstrumentationConfig(globalConfigProvider, "example")) .isNotNull() .satisfies(exampleConfig -> assertThat(exampleConfig.getString("key")).isEqualTo("value")); + + // shortcut to get specific instrumentation config + assertThat(globalConfigProvider.get("example").getString("key")).isEqualTo("value"); } } From 85beb5c03c372d28ac9ca4d58e29f69c431005fd Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 18 Dec 2025 12:42:46 +0100 Subject: [PATCH 3/7] pr review --- .../io/opentelemetry/api/incubator/config/ConfigProvider.java | 2 +- .../sdk/autoconfigure/DeclarativeConfigurationTest.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java index 407e459d7f0..d990667e492 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java @@ -40,7 +40,7 @@ public interface ConfigProvider { * @param name the name of the instrumentation * @return the {@link DeclarativeConfigProperties} for the given instrumentation name */ - default DeclarativeConfigProperties get(String name) { + default DeclarativeConfigProperties getJavaInstrumentationConfig(String name) { DeclarativeConfigProperties config = getInstrumentationConfig(); if (config == null) { return empty(); diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 87fae078c83..1295a326c61 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -233,6 +233,7 @@ void configFile_ConfigProvider() { .satisfies(exampleConfig -> assertThat(exampleConfig.getString("key")).isEqualTo("value")); // shortcut to get specific instrumentation config - assertThat(globalConfigProvider.get("example").getString("key")).isEqualTo("value"); + assertThat(globalConfigProvider.getJavaInstrumentationConfig("example").getString("key")) + .isEqualTo("value"); } } From 5b60d373b44c4a44928e2c5c6aeb6f5ec13194d7 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 19 Dec 2025 11:29:17 +0100 Subject: [PATCH 4/7] feat: add method to retrieve general instrumentation configuration by name --- .../api/incubator/config/ConfigProvider.java | 17 +++++++++++++++++ .../api/incubator/ConfigProviderTest.java | 8 ++++++++ .../DeclarativeConfigurationTest.java | 9 ++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java index d990667e492..4132bd12360 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java @@ -48,6 +48,23 @@ default DeclarativeConfigProperties getJavaInstrumentationConfig(String name) { return config.getStructured("java", empty()).getStructured(name, empty()); } + /** + * Returns the {@link DeclarativeConfigProperties} for general instrumentation config by name. If + * no configuration is available for the given name, an empty {@link DeclarativeConfigProperties} + * is returned. + * + * @param name the name of the general instrumentation config + * @return the {@link DeclarativeConfigProperties} for the given general instrumentation config + * name + */ + default DeclarativeConfigProperties getGeneralInstrumentationConfig(String name) { + DeclarativeConfigProperties config = getInstrumentationConfig(); + if (config == null) { + return empty(); + } + return config.getStructured("general", empty()).getStructured(name, empty()); + } + /** Returns a no-op {@link ConfigProvider}. */ static ConfigProvider noop() { return () -> null; diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java index 9c9e4bf41e1..6ae0a54c81d 100644 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java +++ b/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java @@ -17,4 +17,12 @@ void noopEquality() { ConfigProvider noop = ConfigProvider.noop(); assertThat(ConfigProvider.noop()).isSameAs(noop); } + + @Test + void instrumentationConfigFallback() { + ConfigProvider configProvider = ConfigProvider.noop(); + assertThat(configProvider.getInstrumentationConfig()).isNull(); + assertThat(configProvider.getJavaInstrumentationConfig("servlet")).isNotNull(); + assertThat(configProvider.getGeneralInstrumentationConfig("http")).isNotNull(); + } } diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 1295a326c61..32d460cf970 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.autoconfigure; +import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.Collections.singletonMap; import static org.assertj.core.api.Assertions.assertThatCode; @@ -232,8 +233,14 @@ void configFile_ConfigProvider() { .isNotNull() .satisfies(exampleConfig -> assertThat(exampleConfig.getString("key")).isEqualTo("value")); - // shortcut to get specific instrumentation config + // shortcuts to get specific instrumentation config assertThat(globalConfigProvider.getJavaInstrumentationConfig("example").getString("key")) .isEqualTo("value"); + assertThat( + globalConfigProvider + .getGeneralInstrumentationConfig("http") + .getStructured("client", empty()) + .getScalarList("request_captured_headers", String.class)) + .isEqualTo(Arrays.asList("Content-Type", "Accept")); } } From 051899eb33e8629ca4ecf1433bca4a8a00b0b8a2 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 19 Dec 2025 11:32:37 +0100 Subject: [PATCH 5/7] feat: add method to retrieve general instrumentation configuration by name --- .../api/incubator/config/ConfigProvider.java | 10 ++-------- .../autoconfigure/DeclarativeConfigurationTest.java | 3 +-- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java index 4132bd12360..1826d4b3d33 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java @@ -42,10 +42,7 @@ public interface ConfigProvider { */ default DeclarativeConfigProperties getJavaInstrumentationConfig(String name) { DeclarativeConfigProperties config = getInstrumentationConfig(); - if (config == null) { - return empty(); - } - return config.getStructured("java", empty()).getStructured(name, empty()); + return config == null ? empty() : config.get("java").get(name); } /** @@ -59,10 +56,7 @@ default DeclarativeConfigProperties getJavaInstrumentationConfig(String name) { */ default DeclarativeConfigProperties getGeneralInstrumentationConfig(String name) { DeclarativeConfigProperties config = getInstrumentationConfig(); - if (config == null) { - return empty(); - } - return config.getStructured("general", empty()).getStructured(name, empty()); + return config == null ? empty() : config.get("general").get(name); } /** Returns a no-op {@link ConfigProvider}. */ diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 32d460cf970..6ae6fc50955 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.sdk.autoconfigure; -import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.Collections.singletonMap; import static org.assertj.core.api.Assertions.assertThatCode; @@ -239,7 +238,7 @@ void configFile_ConfigProvider() { assertThat( globalConfigProvider .getGeneralInstrumentationConfig("http") - .getStructured("client", empty()) + .get("client") .getScalarList("request_captured_headers", String.class)) .isEqualTo(Arrays.asList("Content-Type", "Accept")); } From 2283eb61930a257b487fbda5b0b91b8fd55c0111 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 19 Dec 2025 19:49:09 +0100 Subject: [PATCH 6/7] pr review --- .../api/incubator/config/ConfigProvider.java | 14 ++++++-------- .../api/incubator/ConfigProviderTest.java | 2 +- .../DeclarativeConfigurationTest.java | 3 ++- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java index 1826d4b3d33..61a502e2bf8 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java @@ -46,17 +46,15 @@ default DeclarativeConfigProperties getJavaInstrumentationConfig(String name) { } /** - * Returns the {@link DeclarativeConfigProperties} for general instrumentation config by name. If - * no configuration is available for the given name, an empty {@link DeclarativeConfigProperties} - * is returned. + * Returns the {@link DeclarativeConfigProperties} for general instrumentation configuration. If + * the general configuration is not available, an empty {@link DeclarativeConfigProperties} is + * returned. * - * @param name the name of the general instrumentation config - * @return the {@link DeclarativeConfigProperties} for the given general instrumentation config - * name + * @return the {@link DeclarativeConfigProperties} for the general instrumentation configuration */ - default DeclarativeConfigProperties getGeneralInstrumentationConfig(String name) { + default DeclarativeConfigProperties getGeneralInstrumentationConfig() { DeclarativeConfigProperties config = getInstrumentationConfig(); - return config == null ? empty() : config.get("general").get(name); + return config == null ? empty() : config.get("general"); } /** Returns a no-op {@link ConfigProvider}. */ diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java index 6ae0a54c81d..9615263b298 100644 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java +++ b/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java @@ -23,6 +23,6 @@ void instrumentationConfigFallback() { ConfigProvider configProvider = ConfigProvider.noop(); assertThat(configProvider.getInstrumentationConfig()).isNull(); assertThat(configProvider.getJavaInstrumentationConfig("servlet")).isNotNull(); - assertThat(configProvider.getGeneralInstrumentationConfig("http")).isNotNull(); + assertThat(configProvider.getGeneralInstrumentationConfig()).isNotNull(); } } diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 6ae6fc50955..774cec37caa 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -237,7 +237,8 @@ void configFile_ConfigProvider() { .isEqualTo("value"); assertThat( globalConfigProvider - .getGeneralInstrumentationConfig("http") + .getGeneralInstrumentationConfig() + .get("http") .get("client") .getScalarList("request_captured_headers", String.class)) .isEqualTo(Arrays.asList("Content-Type", "Accept")); From 576f2876411a4a8c666173d10cb204303aba8441 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Sat, 20 Dec 2025 09:10:39 +0100 Subject: [PATCH 7/7] pr review --- .../io/opentelemetry/api/incubator/config/ConfigProvider.java | 2 +- .../java/io/opentelemetry/api/incubator/ConfigProviderTest.java | 2 +- .../sdk/autoconfigure/DeclarativeConfigurationTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java index 61a502e2bf8..e155786ac5f 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/config/ConfigProvider.java @@ -40,7 +40,7 @@ public interface ConfigProvider { * @param name the name of the instrumentation * @return the {@link DeclarativeConfigProperties} for the given instrumentation name */ - default DeclarativeConfigProperties getJavaInstrumentationConfig(String name) { + default DeclarativeConfigProperties getInstrumentationConfig(String name) { DeclarativeConfigProperties config = getInstrumentationConfig(); return config == null ? empty() : config.get("java").get(name); } diff --git a/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java b/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java index 9615263b298..82e78abb2c7 100644 --- a/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java +++ b/api/incubator/src/test/java/io/opentelemetry/api/incubator/ConfigProviderTest.java @@ -22,7 +22,7 @@ void noopEquality() { void instrumentationConfigFallback() { ConfigProvider configProvider = ConfigProvider.noop(); assertThat(configProvider.getInstrumentationConfig()).isNull(); - assertThat(configProvider.getJavaInstrumentationConfig("servlet")).isNotNull(); + assertThat(configProvider.getInstrumentationConfig("servlet")).isNotNull(); assertThat(configProvider.getGeneralInstrumentationConfig()).isNotNull(); } } diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 774cec37caa..a399bab2a46 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -233,7 +233,7 @@ void configFile_ConfigProvider() { .satisfies(exampleConfig -> assertThat(exampleConfig.getString("key")).isEqualTo("value")); // shortcuts to get specific instrumentation config - assertThat(globalConfigProvider.getJavaInstrumentationConfig("example").getString("key")) + assertThat(globalConfigProvider.getInstrumentationConfig("example").getString("key")) .isEqualTo("value"); assertThat( globalConfigProvider