Skip to content

Commit 4ad025c

Browse files
committed
early init config
1 parent 4714e5f commit 4ad025c

File tree

3 files changed

+144
-108
lines changed

3 files changed

+144
-108
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.tooling.config;
7+
8+
import io.opentelemetry.api.incubator.config.ConfigProvider;
9+
import io.opentelemetry.javaagent.extension.DeclarativeConfigPropertiesBridge;
10+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
12+
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
13+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
14+
import java.io.FileInputStream;
15+
import java.io.IOException;
16+
import javax.annotation.Nullable;
17+
18+
/**
19+
* Agent config class that is only supposed to be used before the SDK (and {@link
20+
* io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties}) is initialized.
21+
*/
22+
public final class DeclarativeConfigEarlyInitAgentConfig implements EarlyInitAgentConfig {
23+
private final OpenTelemetryConfigurationModel configurationModel;
24+
private final ConfigProvider configProvider;
25+
private final ConfigProperties declarativeConfigProperties;
26+
27+
DeclarativeConfigEarlyInitAgentConfig(String configurationFile) {
28+
this.configurationModel = loadConfigurationModel(configurationFile);
29+
this.configProvider = SdkConfigProvider.create(configurationModel);
30+
this.declarativeConfigProperties = new DeclarativeConfigPropertiesBridge(this.configProvider);
31+
}
32+
33+
public OpenTelemetryConfigurationModel getConfigurationModel() {
34+
return configurationModel;
35+
}
36+
37+
public ConfigProvider getConfigProvider() {
38+
return configProvider;
39+
}
40+
41+
public ConfigProperties getDeclarativeConfigProperties() {
42+
return declarativeConfigProperties;
43+
}
44+
45+
@Nullable
46+
@Override
47+
public String getString(String propertyName) {
48+
return declarativeConfigProperties.getString(propertyName);
49+
}
50+
51+
@Override
52+
public boolean getBoolean(String propertyName, boolean defaultValue) {
53+
return declarativeConfigProperties.getBoolean(propertyName, defaultValue);
54+
}
55+
56+
@Override
57+
public int getInt(String propertyName, int defaultValue) {
58+
return declarativeConfigProperties.getInt(propertyName, defaultValue);
59+
}
60+
61+
@Override
62+
public void logEarlyConfigErrorsIfAny() {
63+
// todo
64+
}
65+
66+
private static OpenTelemetryConfigurationModel loadConfigurationModel(String configurationFile) {
67+
try (FileInputStream fis = new FileInputStream(configurationFile)) {
68+
return DeclarativeConfiguration.parse(fis);
69+
} catch (IOException e) {
70+
throw new RuntimeException(e);
71+
}
72+
}
73+
}
Lines changed: 13 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,26 @@
1-
/*
2-
* Copyright The OpenTelemetry Authors
3-
* SPDX-License-Identifier: Apache-2.0
4-
*/
5-
61
package io.opentelemetry.javaagent.tooling.config;
72

8-
import io.opentelemetry.api.incubator.config.ConfigProvider;
9-
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
10-
import io.opentelemetry.javaagent.extension.DeclarativeConfigPropertiesBridge;
11-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
123
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;
19-
import java.util.Map;
20-
import javax.annotation.Nonnull;
214
import javax.annotation.Nullable;
5+
import java.util.Collections;
226

23-
/**
24-
* Agent config class that is only supposed to be used before the SDK (and {@link
25-
* io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties}) is initialized.
26-
*/
27-
public final class EarlyInitAgentConfig {
28-
29-
public static EarlyInitAgentConfig create() {
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());
37-
}
38-
39-
private final Map<String, String> configFileContents;
40-
private final @Nullable OpenTelemetryConfigurationModel configurationModel;
41-
private final @Nullable ConfigProvider configProvider;
42-
private final @Nullable ConfigProperties declarativeConfigProperties;
43-
44-
private EarlyInitAgentConfig(Map<String, String> configFileContents) {
45-
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;
71-
}
72-
7+
public interface EarlyInitAgentConfig {
738
@Nullable
74-
public String getString(String propertyName) {
75-
if (declarativeConfigProperties != null) {
76-
return declarativeConfigProperties.getString(propertyName);
77-
}
78-
String value = ConfigPropertiesUtil.getString(propertyName);
79-
if (value != null) {
80-
return value;
81-
}
82-
return configFileContents.get(propertyName);
83-
}
9+
String getString(String propertyName);
8410

85-
public boolean getBoolean(String propertyName, boolean defaultValue) {
86-
if (declarativeConfigProperties != null) {
87-
return declarativeConfigProperties.getBoolean(propertyName, defaultValue);
88-
}
11+
boolean getBoolean(String propertyName, boolean defaultValue);
8912

90-
String configFileValueStr = configFileContents.get(propertyName);
91-
boolean configFileValue =
92-
configFileValueStr == null ? defaultValue : Boolean.parseBoolean(configFileValueStr);
93-
return ConfigPropertiesUtil.getBoolean(propertyName, configFileValue);
94-
}
13+
int getInt(String propertyName, int defaultValue);
9514

96-
public int getInt(String propertyName, int defaultValue) {
97-
if (declarativeConfigProperties != null) {
98-
return declarativeConfigProperties.getInt(propertyName, defaultValue);
99-
}
100-
try {
101-
String configFileValueStr = configFileContents.get(propertyName);
102-
int configFileValue =
103-
configFileValueStr == null ? defaultValue : Integer.parseInt(configFileValueStr);
104-
return ConfigPropertiesUtil.getInt(propertyName, configFileValue);
105-
} catch (NumberFormatException ignored) {
106-
return defaultValue;
107-
}
108-
}
15+
void logEarlyConfigErrorsIfAny();
10916

110-
public void logEarlyConfigErrorsIfAny() {
111-
ConfigurationFile.logErrorIfAny();
112-
}
17+
static EarlyInitAgentConfig create() {
18+
String configurationFile =
19+
DefaultConfigProperties.create(Collections.emptyMap())
20+
.getString("otel.experimental.config.file");
11321

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-
}
22+
return configurationFile != null
23+
? new DeclarativeConfigEarlyInitAgentConfig(configurationFile)
24+
: new LegacyConfigFileEarlyInitAgentConfig();
12025
}
12126
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.tooling.config;
7+
8+
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
9+
import java.util.Map;
10+
import javax.annotation.Nullable;
11+
12+
/**
13+
* Agent config class that is only supposed to be used before the SDK (and {@link
14+
* io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties}) is initialized.
15+
*/
16+
public final class LegacyConfigFileEarlyInitAgentConfig implements EarlyInitAgentConfig {
17+
18+
private final Map<String, String> configFileContents;
19+
20+
LegacyConfigFileEarlyInitAgentConfig() {
21+
this.configFileContents = ConfigurationFile.getProperties();
22+
}
23+
24+
@Nullable
25+
@Override
26+
public String getString(String propertyName) {
27+
String value = ConfigPropertiesUtil.getString(propertyName);
28+
if (value != null) {
29+
return value;
30+
}
31+
return configFileContents.get(propertyName);
32+
}
33+
34+
@Override
35+
public boolean getBoolean(String propertyName, boolean defaultValue) {
36+
String configFileValueStr = configFileContents.get(propertyName);
37+
boolean configFileValue =
38+
configFileValueStr == null ? defaultValue : Boolean.parseBoolean(configFileValueStr);
39+
return ConfigPropertiesUtil.getBoolean(propertyName, configFileValue);
40+
}
41+
42+
@Override
43+
public int getInt(String propertyName, int defaultValue) {
44+
try {
45+
String configFileValueStr = configFileContents.get(propertyName);
46+
int configFileValue =
47+
configFileValueStr == null ? defaultValue : Integer.parseInt(configFileValueStr);
48+
return ConfigPropertiesUtil.getInt(propertyName, configFileValue);
49+
} catch (NumberFormatException ignored) {
50+
return defaultValue;
51+
}
52+
}
53+
54+
@Override
55+
public void logEarlyConfigErrorsIfAny() {
56+
ConfigurationFile.logErrorIfAny();
57+
}
58+
}

0 commit comments

Comments
 (0)