Skip to content

Commit 81398c4

Browse files
committed
use declarative config properties
1 parent 376ee7f commit 81398c4

File tree

11 files changed

+133
-54
lines changed

11 files changed

+133
-54
lines changed

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@
1414
import io.opentelemetry.instrumentation.sdk.DeclarativeConfigPropertiesBridge;
1515
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.DeclarativeConfigDisabled;
1616
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.DeclarativeConfigEnabled;
17+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.OtelDisabled;
18+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.OtelEnabled;
1719
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.OtelMapConverter;
18-
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
1920
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge;
2021
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties;
2122
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelSpringProperties;
@@ -45,7 +46,6 @@
4546
import org.slf4j.LoggerFactory;
4647
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
4748
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
48-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
4949
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
5050
import org.springframework.boot.context.properties.EnableConfigurationProperties;
5151
import org.springframework.boot.info.BuildProperties;
@@ -71,7 +71,7 @@ public class OpenTelemetryAutoConfiguration {
7171
public OpenTelemetryAutoConfiguration() {}
7272

7373
@Configuration
74-
@Conditional(SdkEnabled.class)
74+
@Conditional(OtelEnabled.class)
7575
@ConditionalOnMissingBean(OpenTelemetry.class)
7676
static class OpenTelemetrySdkConfig {
7777
@Bean
@@ -207,7 +207,7 @@ private static void logStart() {
207207

208208
@Configuration
209209
@ConditionalOnMissingBean(OpenTelemetry.class)
210-
@ConditionalOnProperty(name = "otel.sdk.disabled", havingValue = "true")
210+
@Conditional(OtelDisabled.class)
211211
static class DisabledOpenTelemetrySdkConfig {
212212

213213
@Bean

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/ConditionalOnEnabledInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
@Target({ElementType.TYPE})
2121
@Retention(RetentionPolicy.RUNTIME)
2222
@ConditionalOnBean(OpenTelemetry.class)
23-
@Conditional({SdkEnabled.class, InstrumentationPropertyEnabled.class})
23+
@Conditional({OtelEnabled.class, InstrumentationPropertyEnabled.class})
2424
public @interface ConditionalOnEnabledInstrumentation {
2525
String module();
2626

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/DeclarativeConfigDisabled.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,17 @@
55

66
package io.opentelemetry.instrumentation.spring.autoconfigure.internal;
77

8-
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
9-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
8+
import org.springframework.context.annotation.Condition;
9+
import org.springframework.context.annotation.ConditionContext;
10+
import org.springframework.core.type.AnnotatedTypeMetadata;
1011

1112
/**
1213
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
1314
* any time.
1415
*/
15-
public class DeclarativeConfigDisabled extends AnyNestedCondition {
16-
public DeclarativeConfigDisabled() {
17-
super(ConfigurationPhase.PARSE_CONFIGURATION);
16+
public class DeclarativeConfigDisabled implements Condition {
17+
@Override
18+
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
19+
return !EarlyConfig.isDeclarativeConfig(context.getEnvironment());
1820
}
19-
20-
@ConditionalOnProperty(name = "otel.file_format", matchIfMissing = true, havingValue = "never")
21-
static class Disabled {}
2221
}

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/DeclarativeConfigEnabled.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,17 @@
55

66
package io.opentelemetry.instrumentation.spring.autoconfigure.internal;
77

8-
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
9-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
8+
import org.springframework.context.annotation.Condition;
9+
import org.springframework.context.annotation.ConditionContext;
10+
import org.springframework.core.type.AnnotatedTypeMetadata;
1011

1112
/**
1213
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
1314
* any time.
1415
*/
15-
public class DeclarativeConfigEnabled extends AnyNestedCondition {
16-
public DeclarativeConfigEnabled() {
17-
super(ConfigurationPhase.PARSE_CONFIGURATION);
16+
public class DeclarativeConfigEnabled implements Condition {
17+
@Override
18+
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
19+
return EarlyConfig.isDeclarativeConfig(context.getEnvironment());
1820
}
19-
20-
@ConditionalOnProperty(name = "otel.file_format")
21-
static class Enabled {}
2221
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal;
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
import java.util.Objects;
11+
import org.springframework.core.env.Environment;
12+
13+
/**
14+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
15+
* any time.
16+
*/
17+
public class EarlyConfig {
18+
private EarlyConfig() {}
19+
20+
private static final Map<String, String> DECLARATIVE_CONFIG_PROPERTY_MAPPING = new HashMap<>();
21+
22+
static {
23+
DECLARATIVE_CONFIG_PROPERTY_MAPPING.put("otel.sdk.disabled", "otel.disabled");
24+
DECLARATIVE_CONFIG_PROPERTY_MAPPING.put(
25+
"otel.instrumentation.%s.enabled", "otel.instrumentation/development.java.%s.enabled");
26+
DECLARATIVE_CONFIG_PROPERTY_MAPPING.put(
27+
"otel.instrumentation.common.default-enabled",
28+
"otel.instrumentation/development.java.common.default.enabled");
29+
}
30+
31+
public static boolean otelEnabled(Environment environment) {
32+
return !environment.getProperty(
33+
translatePropertyName(environment, "otel.sdk.disabled"), Boolean.class, false);
34+
}
35+
36+
public static Boolean isDeclarativeConfig(Environment environment) {
37+
return environment.getProperty("otel.file_format", String.class) != null;
38+
}
39+
40+
public static String translatePropertyName(Environment environment, String name) {
41+
if (isDeclarativeConfig(environment)) {
42+
return Objects.requireNonNull(
43+
DECLARATIVE_CONFIG_PROPERTY_MAPPING.get(name),
44+
"No mapping found for property name: " + name + ". Please report this bug.");
45+
} else {
46+
return name;
47+
}
48+
}
49+
}

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/InstrumentationPropertyEnabled.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55

66
package io.opentelemetry.instrumentation.spring.autoconfigure.internal;
77

8+
import static io.opentelemetry.instrumentation.spring.autoconfigure.internal.EarlyConfig.translatePropertyName;
9+
810
import java.util.Map;
11+
import java.util.Objects;
912
import org.springframework.context.annotation.Condition;
1013
import org.springframework.context.annotation.ConditionContext;
14+
import org.springframework.core.env.Environment;
1115
import org.springframework.core.type.AnnotatedTypeMetadata;
1216

1317
/**
@@ -19,19 +23,26 @@ public class InstrumentationPropertyEnabled implements Condition {
1923
@Override
2024
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
2125
Map<String, Object> attributes =
22-
metadata.getAnnotationAttributes(ConditionalOnEnabledInstrumentation.class.getName());
26+
Objects.requireNonNull(
27+
metadata.getAnnotationAttributes(ConditionalOnEnabledInstrumentation.class.getName()));
28+
29+
Environment environment = context.getEnvironment();
2330

24-
String name = String.format("otel.instrumentation.%s.enabled", attributes.get("module"));
25-
Boolean explicit = context.getEnvironment().getProperty(name, Boolean.class);
31+
String name =
32+
String.format(
33+
translatePropertyName(environment, "otel.instrumentation.%s.enabled"),
34+
attributes.get("module"));
35+
Boolean explicit = environment.getProperty(name, Boolean.class);
2636
if (explicit != null) {
2737
return explicit;
2838
}
2939
boolean defaultValue = (boolean) attributes.get("enabledByDefault");
3040
if (!defaultValue) {
3141
return false;
3242
}
33-
return context
34-
.getEnvironment()
35-
.getProperty("otel.instrumentation.common.default-enabled", Boolean.class, true);
43+
return environment.getProperty(
44+
translatePropertyName(environment, "otel.instrumentation.common.default-enabled"),
45+
Boolean.class,
46+
true);
3647
}
3748
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal;
7+
8+
import org.springframework.context.annotation.Condition;
9+
import org.springframework.context.annotation.ConditionContext;
10+
import org.springframework.core.type.AnnotatedTypeMetadata;
11+
12+
/**
13+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
14+
* any time.
15+
*/
16+
public class OtelDisabled implements Condition {
17+
@Override
18+
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
19+
return !EarlyConfig.otelEnabled(context.getEnvironment());
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal;
7+
8+
import org.springframework.context.annotation.Condition;
9+
import org.springframework.context.annotation.ConditionContext;
10+
import org.springframework.core.type.AnnotatedTypeMetadata;
11+
12+
/**
13+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
14+
* any time.
15+
*/
16+
public class OtelEnabled implements Condition {
17+
@Override
18+
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
19+
return EarlyConfig.otelEnabled(context.getEnvironment());
20+
}
21+
}

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/SdkEnabled.java

Lines changed: 0 additions & 22 deletions
This file was deleted.

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/LogbackAppenderInstaller.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import ch.qos.logback.classic.spi.ILoggingEvent;
1010
import ch.qos.logback.core.Appender;
1111
import io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender;
12+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.EarlyConfig;
1213
import java.util.Iterator;
1314
import java.util.Optional;
1415
import org.slf4j.ILoggerFactory;
@@ -54,11 +55,11 @@ private static boolean isLogbackMdcAppenderAddable(
5455

5556
private static boolean isAppenderAddable(
5657
ApplicationEnvironmentPreparedEvent applicationEnvironmentPreparedEvent, String property) {
57-
boolean otelSdkDisabled =
58-
evaluateBooleanProperty(applicationEnvironmentPreparedEvent, "otel.sdk.disabled", false);
58+
boolean otelEnabled =
59+
EarlyConfig.otelEnabled(applicationEnvironmentPreparedEvent.getEnvironment());
5960
boolean logbackInstrumentationEnabled =
6061
evaluateBooleanProperty(applicationEnvironmentPreparedEvent, property, true);
61-
return !otelSdkDisabled && logbackInstrumentationEnabled;
62+
return otelEnabled && logbackInstrumentationEnabled;
6263
}
6364

6465
private static void reInitializeOpenTelemetryAppender(

0 commit comments

Comments
 (0)