Skip to content

Commit 4714e5f

Browse files
committed
early init config
1 parent 346af1c commit 4714e5f

File tree

7 files changed

+78
-9
lines changed

7 files changed

+78
-9
lines changed

javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/DeclarativeConfigPropertiesBridge.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
* string_key: value
4848
* </pre>
4949
*/
50-
final class DeclarativeConfigPropertiesBridge implements ConfigProperties {
50+
public final class DeclarativeConfigPropertiesBridge implements ConfigProperties {
5151

5252
private static final String OTEL_INSTRUMENTATION_PREFIX = "otel.instrumentation.";
5353
private static final String OTEL_JAVA_AGENT_PREFIX = "otel.javaagent.";
@@ -64,7 +64,7 @@ final class DeclarativeConfigPropertiesBridge implements ConfigProperties {
6464
MAPPING_RULES.put("otel.instrumentation.common.default-enabled", "common.default.enabled");
6565
}
6666

67-
DeclarativeConfigPropertiesBridge(ConfigProvider configProvider) {
67+
public DeclarativeConfigPropertiesBridge(ConfigProvider configProvider) {
6868
DeclarativeConfigProperties inst = configProvider.getInstrumentationConfig();
6969
if (inst == null) {
7070
inst = DeclarativeConfigProperties.empty();

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ private static void installBytebuddyAgent(
164164
// If noop OpenTelemetry is enabled, autoConfiguredSdk will be null and AgentListeners are not
165165
// called
166166
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
167-
installOpenTelemetrySdk(extensionClassLoader);
167+
installOpenTelemetrySdk(extensionClassLoader, earlyConfig.getConfigurationModel());
168168

169169
ConfigProperties sdkConfig = AgentListener.resolveConfigProperties(autoConfiguredSdk);
170170
AgentInstrumentationConfig.internalInitializeConfig(

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import io.opentelemetry.sdk.OpenTelemetrySdk;
1010
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
1111
import io.opentelemetry.sdk.common.CompletableResultCode;
12+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
13+
import javax.annotation.Nullable;
1214
import java.util.Arrays;
1315

1416
public final class OpenTelemetryInstaller {
@@ -20,7 +22,11 @@ public final class OpenTelemetryInstaller {
2022
* @return the {@link AutoConfiguredOpenTelemetrySdk}
2123
*/
2224
public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk(
23-
ClassLoader extensionClassLoader) {
25+
ClassLoader extensionClassLoader,
26+
@Nullable OpenTelemetryConfigurationModel configurationModel) {
27+
28+
// todo load from configurationModel if not null
29+
2430

2531
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
2632
AutoConfiguredOpenTelemetrySdk.builder()

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,19 @@
55

66
package io.opentelemetry.javaagent.tooling.config;
77

8+
import io.opentelemetry.api.incubator.config.ConfigProvider;
89
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
10+
import io.opentelemetry.javaagent.extension.DeclarativeConfigPropertiesBridge;
11+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
12+
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
13+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
14+
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
15+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
16+
import java.io.FileInputStream;
17+
import java.io.IOException;
18+
import java.util.Collections;
919
import java.util.Map;
20+
import javax.annotation.Nonnull;
1021
import javax.annotation.Nullable;
1122

1223
/**
@@ -16,17 +27,54 @@
1627
public final class EarlyInitAgentConfig {
1728

1829
public static EarlyInitAgentConfig create() {
19-
return new EarlyInitAgentConfig(ConfigurationFile.getProperties());
30+
String configurationFile =
31+
DefaultConfigProperties.create(Collections.emptyMap())
32+
.getString("otel.experimental.config.file");
33+
34+
return configurationFile != null
35+
? new EarlyInitAgentConfig(loadConfigurationModel(configurationFile))
36+
: new EarlyInitAgentConfig(ConfigurationFile.getProperties());
2037
}
2138

2239
private final Map<String, String> configFileContents;
40+
private final @Nullable OpenTelemetryConfigurationModel configurationModel;
41+
private final @Nullable ConfigProvider configProvider;
42+
private final @Nullable ConfigProperties declarativeConfigProperties;
2343

2444
private EarlyInitAgentConfig(Map<String, String> configFileContents) {
2545
this.configFileContents = configFileContents;
46+
this.configurationModel = null;
47+
this.configProvider = null;
48+
this.declarativeConfigProperties = null;
49+
}
50+
51+
private EarlyInitAgentConfig(@Nonnull OpenTelemetryConfigurationModel configurationModel) {
52+
this.configFileContents = null;
53+
this.configurationModel = configurationModel;
54+
this.configProvider = SdkConfigProvider.create(configurationModel);
55+
this.declarativeConfigProperties = new DeclarativeConfigPropertiesBridge(this.configProvider);
56+
}
57+
58+
@Nullable
59+
public OpenTelemetryConfigurationModel getConfigurationModel() {
60+
return configurationModel;
61+
}
62+
63+
@Nullable
64+
public ConfigProvider getConfigProvider() {
65+
return configProvider;
66+
}
67+
68+
@Nullable
69+
public ConfigProperties getDeclarativeConfigProperties() {
70+
return declarativeConfigProperties;
2671
}
2772

2873
@Nullable
2974
public String getString(String propertyName) {
75+
if (declarativeConfigProperties != null) {
76+
return declarativeConfigProperties.getString(propertyName);
77+
}
3078
String value = ConfigPropertiesUtil.getString(propertyName);
3179
if (value != null) {
3280
return value;
@@ -35,13 +83,20 @@ public String getString(String propertyName) {
3583
}
3684

3785
public boolean getBoolean(String propertyName, boolean defaultValue) {
86+
if (declarativeConfigProperties != null) {
87+
return declarativeConfigProperties.getBoolean(propertyName, defaultValue);
88+
}
89+
3890
String configFileValueStr = configFileContents.get(propertyName);
3991
boolean configFileValue =
4092
configFileValueStr == null ? defaultValue : Boolean.parseBoolean(configFileValueStr);
4193
return ConfigPropertiesUtil.getBoolean(propertyName, configFileValue);
4294
}
4395

4496
public int getInt(String propertyName, int defaultValue) {
97+
if (declarativeConfigProperties != null) {
98+
return declarativeConfigProperties.getInt(propertyName, defaultValue);
99+
}
45100
try {
46101
String configFileValueStr = configFileContents.get(propertyName);
47102
int configFileValue =
@@ -55,4 +110,12 @@ public int getInt(String propertyName, int defaultValue) {
55110
public void logEarlyConfigErrorsIfAny() {
56111
ConfigurationFile.logErrorIfAny();
57112
}
113+
114+
private static OpenTelemetryConfigurationModel loadConfigurationModel(String configurationFile) {
115+
try (FileInputStream fis = new FileInputStream(configurationFile)) {
116+
return DeclarativeConfiguration.parse(fis);
117+
} catch (IOException e) {
118+
throw new RuntimeException(e);
119+
}
120+
}
58121
}

javaagent-tooling/src/test/groovy/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class OpenTelemetryInstallerTest extends Specification {
2121

2222
def "should initialize GlobalOpenTelemetry"() {
2323
when:
24-
def autoConfiguredSdk = OpenTelemetryInstaller.installOpenTelemetrySdk(OpenTelemetryInstaller.classLoader)
24+
def autoConfiguredSdk = OpenTelemetryInstaller.installOpenTelemetrySdk(OpenTelemetryInstaller.classLoader, null)
2525

2626
then:
2727
autoConfiguredSdk != null

javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ void fileConfigOverwritesUserPropertiesSupplier(@TempDir Path tempDir) throws IO
4646

4747
// when
4848
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
49-
OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader());
49+
OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader(), null);
5050

5151
// then
5252
assertThat(AutoConfigureUtil.getConfig(autoConfiguredSdk).getString("custom.key"))

javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ void cleanUp() {
2929
void keepUserOtlpProtocolConfiguration() {
3030
// when
3131
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
32-
OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader());
32+
OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader(), null);
3333

3434
// then
3535
assertThat(
@@ -41,7 +41,7 @@ void keepUserOtlpProtocolConfiguration() {
4141
void defaultHttpProtobufOtlpProtocolConfiguration() {
4242
// when
4343
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
44-
OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader());
44+
OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader(), null);
4545

4646
// then
4747
assertThat(

0 commit comments

Comments
 (0)