Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ dependencies {
// needed for the Spring Boot 3 support
implementation(project(":instrumentation:spring:spring-webmvc:spring-webmvc-6.0:library"))

// give access to common classes, e.g. InstrumentationConfigUtil
// give access to common classes
add("javaSpring3CompileOnly", files(sourceSets.main.get().output.classesDirs))
add("javaSpring3CompileOnly", "org.springframework.boot:spring-boot-starter-web:3.2.4")
add("javaSpring3CompileOnly", "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DbConfig;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetry;
import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetryBuilder;
import io.opentelemetry.instrumentation.jdbc.datasource.internal.Experimental;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
Expand Down Expand Up @@ -64,7 +64,7 @@ public Object postProcessAfterInitialization(Object bean, String beanName) {
JdbcTelemetryBuilder builder =
JdbcTelemetry.builder(openTelemetry)
.setQuerySanitizationEnabled(
InstrumentationConfigUtil.isQuerySanitizationEnabled(openTelemetry, "jdbc"))
DbConfig.isQuerySanitizationEnabled(openTelemetry, "jdbc"))
.setCaptureQueryParameters(
config.getBoolean("capture_query_parameters/development", false))
.setTransactionInstrumenterEnabled(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

import com.mongodb.MongoClientSettings;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DbConfig;
import io.opentelemetry.instrumentation.mongo.v3_1.MongoTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer;
import org.springframework.context.annotation.Bean;
Expand All @@ -33,7 +33,7 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) {
builder.addCommandListener(
MongoTelemetry.builder(openTelemetry)
.setQuerySanitizationEnabled(
InstrumentationConfigUtil.isQuerySanitizationEnabled(openTelemetry, "mongo"))
DbConfig.isQuerySanitizationEnabled(openTelemetry, "mongo"))
.build()
.createCommandListener());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.r2dbc;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DbConfig;
import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import io.r2dbc.spi.ConnectionFactory;
import io.r2dbc.spi.ConnectionFactoryOptions;
import org.springframework.aop.scope.ScopedProxyUtils;
Expand All @@ -29,8 +29,7 @@ public Object postProcessAfterInitialization(Object bean, String beanName) {
ConnectionFactory connectionFactory = (ConnectionFactory) bean;
OpenTelemetry openTelemetry = openTelemetryProvider.getObject();
return R2dbcTelemetry.builder(openTelemetry)
.setQuerySanitizationEnabled(
InstrumentationConfigUtil.isQuerySanitizationEnabled(openTelemetry, "r2dbc"))
.setQuerySanitizationEnabled(DbConfig.isQuerySanitizationEnabled(openTelemetry, "r2dbc"))
.build()
.wrapConnectionFactory(connectionFactory, getConnectionFactoryOptions(connectionFactory));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry;
import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil;
import java.util.List;
Expand All @@ -22,10 +21,7 @@ private RestTemplateInstrumentation() {}
static RestTemplate addIfNotPresent(RestTemplate restTemplate, OpenTelemetry openTelemetry) {

ClientHttpRequestInterceptor instrumentationInterceptor =
InstrumentationConfigUtil.configureClientBuilder(
openTelemetry,
SpringWebTelemetry.builder(openTelemetry),
WebTelemetryUtil.getBuilderExtractor())
WebTelemetryUtil.applyCommonConfig(SpringWebTelemetry.builder(openTelemetry), openTelemetry)
.build()
.createInterceptor();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webflux;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetry;
import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxServerTelemetry;
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.SpringWebfluxBuilderUtil;
Expand All @@ -32,18 +31,14 @@ final class WebClientBeanPostProcessor implements BeanPostProcessor {
}

static SpringWebfluxClientTelemetry getWebfluxClientTelemetry(OpenTelemetry openTelemetry) {
return InstrumentationConfigUtil.configureClientBuilder(
openTelemetry,
SpringWebfluxClientTelemetry.builder(openTelemetry),
SpringWebfluxBuilderUtil.getClientBuilderExtractor())
return SpringWebfluxBuilderUtil.applyClientCommonConfig(
SpringWebfluxClientTelemetry.builder(openTelemetry), openTelemetry)
.build();
}

static SpringWebfluxServerTelemetry getWebfluxServerTelemetry(OpenTelemetry openTelemetry) {
return InstrumentationConfigUtil.configureServerBuilder(
openTelemetry,
SpringWebfluxServerTelemetry.builder(openTelemetry),
SpringWebfluxBuilderUtil.getServerBuilderExtractor())
return SpringWebfluxBuilderUtil.applyServerCommonConfig(
SpringWebfluxServerTelemetry.builder(openTelemetry), openTelemetry)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetry;
import io.opentelemetry.instrumentation.spring.webmvc.v5_3.internal.SpringMvcBuilderUtil;
import javax.servlet.Filter;
Expand All @@ -28,10 +27,8 @@ public class SpringWebMvc5InstrumentationAutoConfiguration {

@Bean
Filter otelWebMvcFilter(OpenTelemetry openTelemetry) {
return InstrumentationConfigUtil.configureServerBuilder(
openTelemetry,
SpringWebMvcTelemetry.builder(openTelemetry),
SpringMvcBuilderUtil.getBuilderExtractor())
return SpringMvcBuilderUtil.applyCommonConfig(
SpringWebMvcTelemetry.builder(openTelemetry), openTelemetry)
.build()
.createServletFilter();
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry;
import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil;
import java.util.List;
Expand Down Expand Up @@ -59,10 +58,8 @@ private static boolean isInterceptorNotPresent(
}

static ClientHttpRequestInterceptor getInterceptor(OpenTelemetry openTelemetry) {
return InstrumentationConfigUtil.configureClientBuilder(
openTelemetry,
SpringWebTelemetry.builder(openTelemetry),
WebTelemetryUtil.getBuilderExtractor())
return WebTelemetryUtil.applyCommonConfig(
SpringWebTelemetry.builder(openTelemetry), openTelemetry)
.build()
.createInterceptor();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetry;
import io.opentelemetry.instrumentation.spring.webmvc.v6_0.internal.SpringMvcBuilderUtil;
import jakarta.servlet.Filter;
Expand All @@ -28,10 +27,8 @@ public class SpringWebMvc6InstrumentationAutoConfiguration {

@Bean
Filter otelWebMvcFilter(OpenTelemetry openTelemetry) {
return InstrumentationConfigUtil.configureServerBuilder(
openTelemetry,
SpringWebMvcTelemetry.builder(openTelemetry),
SpringMvcBuilderUtil.getBuilderExtractor())
return SpringMvcBuilderUtil.applyCommonConfig(
SpringWebMvcTelemetry.builder(openTelemetry), openTelemetry)
.build()
.createServletFilter();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

import com.mongodb.MongoClientSettings;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DbConfig;
import io.opentelemetry.instrumentation.mongo.v3_1.MongoTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.mongodb.autoconfigure.MongoClientSettingsBuilderCustomizer;
import org.springframework.context.annotation.Bean;
Expand All @@ -30,7 +30,7 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) {
builder.addCommandListener(
MongoTelemetry.builder(openTelemetry)
.setQuerySanitizationEnabled(
InstrumentationConfigUtil.isQuerySanitizationEnabled(openTelemetry, "mongo"))
DbConfig.isQuerySanitizationEnabled(openTelemetry, "mongo"))
.build()
.createCommandListener());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web;

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil;
import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry;
import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil;
import java.util.List;
Expand Down Expand Up @@ -59,10 +58,8 @@ private static boolean isInterceptorNotPresent(
}

static ClientHttpRequestInterceptor getInterceptor(OpenTelemetry openTelemetry) {
return InstrumentationConfigUtil.configureClientBuilder(
openTelemetry,
SpringWebTelemetry.builder(openTelemetry),
WebTelemetryUtil.getBuilderExtractor())
return WebTelemetryUtil.applyCommonConfig(
SpringWebTelemetry.builder(openTelemetry), openTelemetry)
.build()
.createInterceptor();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,44 @@

package io.opentelemetry.instrumentation.spring.web.v3_1.internal;

import static java.util.Objects.requireNonNull;

import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder;
import io.opentelemetry.instrumentation.api.internal.Initializer;
import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig;
import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetryBuilder;
import java.util.function.Function;
import javax.annotation.Nullable;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpResponse;

/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
* Back-channel between the {@code spring-web-3.1} library and the {@code spring-boot-autoconfigure}
* starter, used to configure the {@code DefaultHttpClientInstrumenterBuilder} held in a private
* field of {@link SpringWebTelemetryBuilder} without exposing it as public API.
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
public class WebTelemetryUtil {
// allows access to the private field for the spring starter
public final class WebTelemetryUtil {
@Nullable
private static volatile Function<
SpringWebTelemetryBuilder,
DefaultHttpClientInstrumenterBuilder<HttpRequest, ClientHttpResponse>>
builderExtractor;

public static Function<
SpringWebTelemetryBuilder,
DefaultHttpClientInstrumenterBuilder<HttpRequest, ClientHttpResponse>>
getBuilderExtractor() {
return builderExtractor;
@CanIgnoreReturnValue
public static SpringWebTelemetryBuilder applyCommonConfig(
SpringWebTelemetryBuilder builder, OpenTelemetry openTelemetry) {
// builderExtractor is guaranteed non-null because the builder class registers it during
// static initialization, before a builder instance can be passed here
requireNonNull(builderExtractor, "builderExtractor")
.apply(builder)
.configure(new CommonConfig(openTelemetry));
return builder;
}

@Initializer
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea is that since static initialization of SpringWebTelemetryBuilder calls setBuilderExtractor it is impossible to create and instance of SpringWebTelemetryBuilder so that the builderExtractor would be null.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added comments

the reason I prefer this compared to using @Initializer is that there's no enforcement of @Initializer, so it's basically just a suppression mechanism

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added requireNonNull() to make it clearer

public static void setBuilderExtractor(
Function<
SpringWebTelemetryBuilder,
Expand Down
Loading
Loading