Skip to content

Commit d1b365f

Browse files
committed
add system properties bridge
1 parent a87fd0e commit d1b365f

File tree

3 files changed

+81
-15
lines changed

3 files changed

+81
-15
lines changed

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtil.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,63 @@
55

66
package io.opentelemetry.instrumentation.api.internal;
77

8+
import io.opentelemetry.api.OpenTelemetry;
9+
import io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
10+
import io.opentelemetry.api.incubator.config.ConfigProvider;
11+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
812
import java.util.Arrays;
913
import java.util.List;
1014
import java.util.Locale;
1115
import java.util.stream.Collectors;
1216
import javax.annotation.Nullable;
1317

18+
import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty;
19+
1420
/**
1521
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
1622
* any time.
1723
*/
1824
public final class ConfigPropertiesUtil {
1925

26+
private static final boolean isIncubator = isIncubator();
27+
28+
private static boolean isIncubator() {
29+
try {
30+
Class.forName("io.opentelemetry.api.incubator.ExtendedOpenTelemetry");
31+
return true;
32+
} catch (ClassNotFoundException e) {
33+
// The incubator module is not available.
34+
// This only happens in OpenTelemetry API instrumentation tests, where an older version of
35+
// OpenTelemetry API is used that does not have ExtendedOpenTelemetry.
36+
// Having the incubator module without ExtendedOpenTelemetry class should still return false
37+
// for those tests to avoid a ClassNotFoundException.
38+
return false;
39+
}
40+
}
41+
42+
/**
43+
* @deprecated use {@link #getBoolean(OpenTelemetry, boolean, String...)} instead
44+
*/
45+
@Deprecated
2046
public static boolean getBoolean(String propertyName, boolean defaultValue) {
2147
String strValue = getString(propertyName);
2248
return strValue == null ? defaultValue : Boolean.parseBoolean(strValue);
2349
}
2450

51+
/**
52+
* Returns the boolean value of the given property name from Declarative Config if available,
53+
* otherwise falls back to system properties and environment variables.
54+
*/
55+
public static boolean getBoolean(
56+
OpenTelemetry openTelemetry, boolean defaultValue, String... propertyName) {
57+
58+
DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyName);
59+
if (node != null) {
60+
return node.getBoolean(propertyName[propertyName.length - 1], defaultValue);
61+
}
62+
return getBoolean(toSystemProperty(propertyName), defaultValue);
63+
}
64+
2565
public static int getInt(String propertyName, int defaultValue) {
2666
String strValue = getString(propertyName);
2767
if (strValue == null) {
@@ -67,5 +107,29 @@ private static String toEnvVarName(String propertyName) {
67107
return propertyName.toUpperCase(Locale.ROOT).replace('-', '_').replace('.', '_');
68108
}
69109

110+
@Nullable
111+
private static DeclarativeConfigProperties getDeclarativeConfigNode(
112+
OpenTelemetry openTelemetry, String... propertyName) {
113+
if (isIncubator && openTelemetry instanceof ExtendedOpenTelemetry) {
114+
ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry;
115+
ConfigProvider configProvider = extendedOpenTelemetry.getConfigProvider();
116+
DeclarativeConfigProperties instrumentationConfig = configProvider.getInstrumentationConfig();
117+
if (instrumentationConfig == null) {
118+
return empty();
119+
}
120+
DeclarativeConfigProperties node = instrumentationConfig.getStructured("java", empty());
121+
// last part is the leaf property
122+
for (int i = 0; i < propertyName.length - 1; i++) {
123+
node = node.getStructured(propertyName[i], empty());
124+
}
125+
return node;
126+
}
127+
return null;
128+
}
129+
130+
private static String toSystemProperty(String[] propertyName) {
131+
return String.join(".", propertyName).replace('_', '-');
132+
}
133+
70134
private ConfigPropertiesUtil() {}
71135
}

instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,16 @@ public final class OpenTelemetryDriver implements Driver {
6363
private static final AtomicBoolean REGISTERED = new AtomicBoolean();
6464
private static final List<Driver> DRIVER_CANDIDATES = new CopyOnWriteArrayList<>();
6565

66-
private static final SqlCommenter sqlCommenter =
67-
SqlCommenter.builder()
68-
.setEnabled(
69-
ConfigPropertiesUtil.getBoolean(
70-
"otel.instrumentation.jdbc.experimental.sqlcommenter.enabled",
71-
ConfigPropertiesUtil.getBoolean(
72-
"otel.instrumentation.common.experimental.db-sqlcommenter.enabled", false)))
73-
.build();
66+
private static SqlCommenter getSqlCommenter(OpenTelemetry openTelemetry) {
67+
boolean defaultValue =
68+
ConfigPropertiesUtil.getBoolean(
69+
openTelemetry, false, "common", "experimental", "db_sqlcommenter", "enabled");
70+
return SqlCommenter.builder()
71+
.setEnabled(
72+
ConfigPropertiesUtil.getBoolean(
73+
openTelemetry, defaultValue, "jdbc", "experimental", "sqlcommenter", "enabled"))
74+
.build();
75+
}
7476

7577
static {
7678
try {
@@ -256,7 +258,7 @@ public Connection connect(String url, Properties info) throws SQLException {
256258
Instrumenter<DbRequest, Void> statementInstrumenter =
257259
JdbcInstrumenterFactory.createStatementInstrumenter(openTelemetry);
258260

259-
boolean captureQueryParameters = JdbcInstrumenterFactory.captureQueryParameters();
261+
boolean captureQueryParameters = JdbcInstrumenterFactory.captureQueryParameters(openTelemetry);
260262
Instrumenter<DbRequest, Void> transactionInstrumenter =
261263
JdbcInstrumenterFactory.createTransactionInstrumenter(openTelemetry);
262264

@@ -266,7 +268,7 @@ public Connection connect(String url, Properties info) throws SQLException {
266268
statementInstrumenter,
267269
transactionInstrumenter,
268270
captureQueryParameters,
269-
sqlCommenter);
271+
getSqlCommenter(openTelemetry));
270272
}
271273

272274
@Override

instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ public final class JdbcInstrumenterFactory {
3232
private static final JdbcNetworkAttributesGetter netAttributesGetter =
3333
new JdbcNetworkAttributesGetter();
3434

35-
public static boolean captureQueryParameters() {
35+
public static boolean captureQueryParameters(OpenTelemetry openTelemetry) {
3636
return ConfigPropertiesUtil.getBoolean(
37-
"otel.instrumentation.jdbc.experimental.capture-query-parameters", false);
37+
openTelemetry, false, "jdbc", "experimental", "capture_query_parameters");
3838
}
3939

4040
public static Instrumenter<DbRequest, Void> createStatementInstrumenter(
4141
OpenTelemetry openTelemetry) {
42-
return createStatementInstrumenter(openTelemetry, captureQueryParameters());
42+
return createStatementInstrumenter(openTelemetry, captureQueryParameters(openTelemetry));
4343
}
4444

4545
static Instrumenter<DbRequest, Void> createStatementInstrumenter(
@@ -49,7 +49,7 @@ static Instrumenter<DbRequest, Void> createStatementInstrumenter(
4949
emptyList(),
5050
true,
5151
ConfigPropertiesUtil.getBoolean(
52-
"otel.instrumentation.common.db-statement-sanitizer.enabled", true),
52+
openTelemetry, true, "common", "db_statement_sanitizer", "enabled"),
5353
captureQueryParameters);
5454
}
5555

@@ -100,7 +100,7 @@ public static Instrumenter<DbRequest, Void> createTransactionInstrumenter(
100100
return createTransactionInstrumenter(
101101
openTelemetry,
102102
ConfigPropertiesUtil.getBoolean(
103-
"otel.instrumentation.jdbc.experimental.transaction.enabled", false));
103+
openTelemetry, false, "jdbc", "experimental", "transaction", "enabled"));
104104
}
105105

106106
public static Instrumenter<DbRequest, Void> createTransactionInstrumenter(

0 commit comments

Comments
 (0)