Skip to content

Commit 38d6dc4

Browse files
committed
progress
1 parent 5b1236d commit 38d6dc4

File tree

8 files changed

+94
-55
lines changed

8 files changed

+94
-55
lines changed

instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,13 @@ dependencies {
123123
add("javaSpring4CompileOnly", "org.springframework.boot:spring-boot-starter-web:4.0.0")
124124
add("javaSpring4CompileOnly", "org.springframework.boot:spring-boot-starter-data-jdbc:4.0.0")
125125
add("javaSpring4CompileOnly", "org.springframework.boot:spring-boot-starter-kafka:4.0.0")
126+
add("javaSpring4CompileOnly", "org.springframework.boot:spring-boot-starter-micrometer:4.0.0")
126127
add("javaSpring4CompileOnly", "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
127128
add("javaSpring4CompileOnly", "jakarta.servlet:jakarta.servlet-api:6.1.0")
128129
add("javaSpring4CompileOnly", project(":instrumentation:spring:spring-web:spring-web-3.1:library"))
129130
add("javaSpring4CompileOnly", project(":instrumentation:spring:spring-webmvc:spring-webmvc-6.0:library"))
130131
add("javaSpring4CompileOnly", project(":instrumentation:kafka:kafka-clients:kafka-clients-2.6:library"))
132+
add("javaSpring4CompileOnly", project(":instrumentation:micrometer:micrometer-1.5:library"))
131133
add("javaSpring4CompileOnly", project(":instrumentation:spring:spring-kafka-2.7:library"))
132134

133135
// tests don't work with spring boot 4 yet

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.springframework.beans.factory.ObjectProvider;
1313
import org.springframework.boot.autoconfigure.AutoConfiguration;
1414
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
15+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
1516
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
1617
import org.springframework.context.annotation.Bean;
1718
import org.springframework.context.annotation.Configuration;
@@ -23,6 +24,8 @@
2324
@ConditionalOnEnabledInstrumentation(module = "jdbc")
2425
@AutoConfiguration(after = DataSourceAutoConfiguration.class)
2526
@ConditionalOnBean({DataSource.class})
27+
@ConditionalOnMissingClass(
28+
"org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration")
2629
@Configuration(proxyBeanMethods = false)
2730
public class JdbcInstrumentationAutoConfiguration {
2831

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry;
1313
import org.springframework.beans.factory.ObjectProvider;
1414
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
15+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
1516
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1617
import org.springframework.boot.autoconfigure.kafka.DefaultKafkaProducerFactoryCustomizer;
1718
import org.springframework.context.annotation.Bean;
@@ -29,7 +30,7 @@
2930
ConcurrentKafkaListenerContainerFactory.class,
3031
DefaultKafkaProducerFactoryCustomizer.class
3132
})
32-
@org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass(
33+
@ConditionalOnMissingClass(
3334
"org.springframework.boot.kafka.autoconfigure.DefaultKafkaProducerFactoryCustomizer")
3435
@Configuration
3536
public class KafkaInstrumentationAutoConfiguration {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.jdbc;
7+
8+
import io.opentelemetry.api.OpenTelemetry;
9+
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
10+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
11+
import javax.sql.DataSource;
12+
import org.springframework.beans.factory.ObjectProvider;
13+
import org.springframework.boot.autoconfigure.AutoConfiguration;
14+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
15+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
16+
import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;
17+
import org.springframework.context.annotation.Bean;
18+
import org.springframework.context.annotation.Configuration;
19+
20+
/**
21+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
22+
* any time.
23+
*/
24+
@ConditionalOnEnabledInstrumentation(module = "jdbc")
25+
@AutoConfiguration(after = DataSourceAutoConfiguration.class)
26+
@ConditionalOnBean({DataSource.class})
27+
@ConditionalOnMissingClass(
28+
"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration")
29+
@Configuration(proxyBeanMethods = false)
30+
public class JdbcInstrumentationSpringBoot4AutoConfiguration {
31+
32+
// For error prone
33+
public JdbcInstrumentationSpringBoot4AutoConfiguration() {}
34+
35+
@Bean
36+
// static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning
37+
static DataSourcePostProcessor dataSourcePostProcessor(
38+
ObjectProvider<OpenTelemetry> openTelemetryProvider,
39+
ObjectProvider<InstrumentationConfig> configProvider) {
40+
return new DataSourcePostProcessor(openTelemetryProvider, configProvider);
41+
}
42+
}

instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationSpringBoot4AutoConfiguration.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.springframework.beans.factory.ObjectProvider;
1414
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
1515
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
16+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
1617
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1718
import org.springframework.boot.kafka.autoconfigure.DefaultKafkaProducerFactoryCustomizer;
1819
import org.springframework.context.annotation.Bean;
@@ -21,8 +22,8 @@
2122
import org.springframework.kafka.core.KafkaTemplate;
2223

2324
/**
24-
* Spring Boot 4+ specific Kafka instrumentation auto-configuration. This class is internal and is
25-
* hence not for public use. Its APIs are unstable and can change at any time.
25+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
26+
* any time.
2627
*/
2728
@ConditionalOnEnabledInstrumentation(module = "kafka")
2829
@ConditionalOnClass({
@@ -31,6 +32,8 @@
3132
DefaultKafkaProducerFactoryCustomizer.class
3233
})
3334
@ConditionalOnMissingBean(name = "otelKafkaProducerFactoryCustomizer")
35+
@ConditionalOnMissingClass(
36+
"org.springframework.boot.autoconfigure.kafka.DefaultKafkaProducerFactoryCustomizer")
3437
@Configuration
3538
public class KafkaInstrumentationSpringBoot4AutoConfiguration {
3639

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.micrometer;
7+
8+
import io.micrometer.core.instrument.Clock;
9+
import io.micrometer.core.instrument.MeterRegistry;
10+
import io.opentelemetry.api.OpenTelemetry;
11+
import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry;
12+
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
13+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
14+
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
15+
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
16+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
17+
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
18+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
19+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
20+
import org.springframework.context.annotation.Bean;
21+
import org.springframework.context.annotation.Configuration;
22+
23+
/**
24+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
25+
* any time.
26+
*/
27+
@ConditionalOnEnabledInstrumentation(module = "micrometer", enabledByDefault = false)
28+
@AutoConfigureAfter({MetricsAutoConfiguration.class, OpenTelemetryAutoConfiguration.class})
29+
@AutoConfigureBefore(CompositeMeterRegistryAutoConfiguration.class)
30+
@ConditionalOnBean(Clock.class)
31+
@ConditionalOnClass(MeterRegistry.class)
32+
@Configuration
33+
public class MicrometerBridgeAutoConfiguration {
34+
35+
@Bean
36+
MeterRegistry otelMeterRegistry(OpenTelemetry openTelemetry, Clock micrometerClock) {
37+
return OpenTelemetryMeterRegistry.builder(openTelemetry).setClock(micrometerClock).build();
38+
}
39+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.k
55
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.mongo.MongoClientInstrumentationAutoConfiguration
66
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration
77
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.jdbc.JdbcInstrumentationAutoConfiguration
8+
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.jdbc.JdbcInstrumentationSpringBoot4AutoConfiguration
89
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.micrometer.MicrometerBridgeAutoConfiguration
910
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.r2dbc.R2dbcInstrumentationAutoConfiguration
1011
io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web.SpringWebInstrumentationAutoConfiguration

instrumentation/spring/spring-boot-autoconfigure/src/testSpring4/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation7AutoConfigurationTest.java

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

0 commit comments

Comments
 (0)