Skip to content

Commit 355b253

Browse files
committed
use spring conditions
1 parent 09105bf commit 355b253

File tree

6 files changed

+66
-115
lines changed

6 files changed

+66
-115
lines changed

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

+31-11
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,50 @@
66
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics;
77

88
import io.opentelemetry.api.OpenTelemetry;
9-
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
109
import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics;
11-
import java.util.function.Consumer;
10+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
11+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge;
12+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
13+
import javax.annotation.PreDestroy;
1214
import org.slf4j.Logger;
1315
import org.slf4j.LoggerFactory;
16+
import org.springframework.boot.CommandLineRunner;
1417
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
1518
import org.springframework.boot.system.JavaVersion;
19+
import org.springframework.context.annotation.Bean;
20+
import org.springframework.context.annotation.Configuration;
1621

1722
/**
1823
* Configures runtime metrics collection for Java 17+.
1924
*
2025
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
2126
* at any time.
2227
*/
28+
// we're not using "runtime-telemetry-java17" requirement here, because java17 is just
29+
// an additional feature - which enables JFR metrics
30+
@ConditionalOnEnabledInstrumentation(module = "runtime-telemetry")
31+
@Configuration
2332
@ConditionalOnJava(value = JavaVersion.SEVENTEEN)
24-
public class Java17RuntimeMetricsAutoConfiguration implements RuntimeMetricsProvider {
25-
private static final Logger logger = LoggerFactory.getLogger(Java17RuntimeMetricsAutoConfiguration.class);
33+
public class Java17RuntimeMetricsAutoConfiguration {
34+
private static final Logger logger =
35+
LoggerFactory.getLogger(Java17RuntimeMetricsAutoConfiguration.class);
2636

27-
@Override
28-
public void start(
29-
OpenTelemetry openTelemetry, Consumer<Runnable> shutdownHook, InstrumentationConfig config) {
30-
logger.debug("Use runtime metrics instrumentation for Java 17+");
31-
RuntimeMetrics.builder(openTelemetry)
32-
.setShutdownHook(shutdownHook)
33-
.startFromInstrumentationConfig(config);
37+
private Runnable shutdownHook;
38+
39+
@PreDestroy
40+
public void stopMetrics() {
41+
if (shutdownHook != null) {
42+
shutdownHook.run();
43+
}
44+
}
45+
46+
@Bean
47+
CommandLineRunner startMetrics(OpenTelemetry openTelemetry, ConfigProperties configProperties) {
48+
return (args) -> {
49+
logger.debug("Use runtime metrics instrumentation for Java 17+");
50+
RuntimeMetrics.builder(openTelemetry)
51+
.setShutdownHook(runnable -> shutdownHook = runnable)
52+
.startFromInstrumentationConfig(new ConfigPropertiesBridge(configProperties));
53+
};
3454
}
3555
}

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

+35-16
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,64 @@
66
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics;
77

88
import io.opentelemetry.api.OpenTelemetry;
9-
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
109
import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics;
11-
import java.util.function.Consumer;
10+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
11+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge;
12+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
13+
import javax.annotation.PreDestroy;
1214
import org.slf4j.Logger;
1315
import org.slf4j.LoggerFactory;
16+
import org.springframework.boot.CommandLineRunner;
1417
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
1518
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava;
1619
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1720
import org.springframework.boot.system.JavaVersion;
21+
import org.springframework.context.annotation.Bean;
22+
import org.springframework.context.annotation.Conditional;
23+
import org.springframework.context.annotation.Configuration;
1824

1925
/**
2026
* Configures runtime metrics collection for Java 8.
2127
*
2228
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
2329
* at any time.
2430
*/
25-
@ConditionalOnJava(value = JavaVersion.SEVENTEEN, range = ConditionalOnJava.Range.OLDER_THAN)
26-
public class Java8RuntimeMetricsAutoConfiguration implements RuntimeMetricsProvider {
27-
private static final Logger logger = LoggerFactory.getLogger(Java8RuntimeMetricsAutoConfiguration.class);
28-
29-
@Override
30-
public void start(
31-
OpenTelemetry openTelemetry, Consumer<Runnable> shutdownHook, InstrumentationConfig config) {
32-
logger.debug("Use runtime metrics instrumentation for Java 8");
33-
RuntimeMetrics.builder(openTelemetry)
34-
.setShutdownHook(shutdownHook)
35-
.startFromInstrumentationConfig(config);
31+
@ConditionalOnEnabledInstrumentation(module = "runtime-telemetry")
32+
@Configuration
33+
@Conditional(Java8RuntimeMetricsAutoConfiguration.Java8MetricsCondition.class)
34+
public class Java8RuntimeMetricsAutoConfiguration {
35+
private static final Logger logger =
36+
LoggerFactory.getLogger(Java8RuntimeMetricsAutoConfiguration.class);
37+
38+
private Runnable shutdownHook;
39+
40+
@PreDestroy
41+
public void stopMetrics() {
42+
if (shutdownHook != null) {
43+
shutdownHook.run();
44+
}
45+
}
46+
47+
@Bean
48+
CommandLineRunner startMetrics(OpenTelemetry openTelemetry, ConfigProperties configProperties) {
49+
return (args) -> {
50+
logger.debug("Use runtime metrics instrumentation for Java 8");
51+
RuntimeMetrics.builder(openTelemetry)
52+
.setShutdownHook(runnable -> shutdownHook = runnable)
53+
.startFromInstrumentationConfig(new ConfigPropertiesBridge(configProperties));
54+
};
3655
}
3756

38-
public class Java8MetricsCondition extends AnyNestedCondition {
57+
static class Java8MetricsCondition extends AnyNestedCondition {
3958
public Java8MetricsCondition() {
4059
super(ConfigurationPhase.PARSE_CONFIGURATION);
4160
}
4261

4362
@ConditionalOnJava(value = JavaVersion.SEVENTEEN, range = ConditionalOnJava.Range.OLDER_THAN)
44-
class OlderThanJava17 {}
63+
static class OlderThanJava17 {}
4564

4665
// GraalVM native image does not support Java 17 metrics yet
4766
@ConditionalOnProperty("org.graalvm.nativeimage.imagecode")
48-
class GraalVM {}
67+
static class GraalVm {}
4968
}
5069
}

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

-64
This file was deleted.

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

-22
This file was deleted.

instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.w
1111
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration,\
1212
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webmvc.SpringWebMvc5InstrumentationAutoConfiguration,\
1313
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.scheduling.SpringSchedulingInstrumentationAutoConfiguration,\
14-
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.RuntimeMetricsAutoConfiguration,\
1514
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java8RuntimeMetricsAutoConfiguration,\
1615
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java17RuntimeMetricsAutoConfiguration
1716

instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,5 @@ io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.w
1111
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web.RestClientInstrumentationAutoConfiguration
1212
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webmvc.SpringWebMvc6InstrumentationAutoConfiguration
1313
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.scheduling.SpringSchedulingInstrumentationAutoConfiguration
14-
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.RuntimeMetricsAutoConfiguration
1514
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java8RuntimeMetricsAutoConfiguration
1615
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics.Java17RuntimeMetricsAutoConfiguration

0 commit comments

Comments
 (0)