Skip to content

Commit 18d5fef

Browse files
committed
move otel autoconfigure out of the braintrust sdk
1 parent e3ca227 commit 18d5fef

3 files changed

Lines changed: 56 additions & 0 deletions

File tree

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package dev.braintrust.agent;
2+
3+
import com.google.auto.service.AutoService;
4+
import dev.braintrust.Braintrust;
5+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
6+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
7+
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
8+
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
9+
import java.util.concurrent.atomic.AtomicInteger;
10+
import lombok.extern.slf4j.Slf4j;
11+
12+
@Slf4j
13+
@AutoService(AutoConfigurationCustomizerProvider.class)
14+
public class OtelAutoConfig implements AutoConfigurationCustomizerProvider {
15+
@Override
16+
public void customize(AutoConfigurationCustomizer autoConfiguration) {
17+
autoConfiguration.addTracerProviderCustomizer(
18+
((sdkTracerProviderBuilder, configProperties) -> {
19+
try {
20+
var bridgeClass =
21+
OtelAutoConfig.class
22+
.getClassLoader()
23+
.loadClass("dev.braintrust.bootstrap.BraintrustBridge");
24+
AtomicInteger otelInstallCount =
25+
(AtomicInteger)
26+
bridgeClass.getDeclaredField("otelInstallCount").get(null);
27+
if (!otelInstallCount.compareAndSet(0, 1)) {
28+
log.warn(
29+
"otel install invoked more than once. This should not happen."
30+
+ " Bailing.");
31+
return sdkTracerProviderBuilder;
32+
}
33+
} catch (ClassNotFoundException e) {
34+
// running without autoinstrumentation
35+
} catch (Exception e) {
36+
log.info(
37+
"failed to invoke autoinstrumention bridge. Non-fatal. Continuing",
38+
e);
39+
}
40+
Braintrust.get()
41+
.openTelemetryEnable(
42+
sdkTracerProviderBuilder,
43+
SdkLoggerProvider.builder(),
44+
SdkMeterProvider.builder());
45+
return sdkTracerProviderBuilder;
46+
}));
47+
}
48+
}

braintrust-otel-extension/build.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ evaluationDependsOn(':braintrust-sdk')
2525

2626
dependencies {
2727
implementation project(':braintrust-sdk')
28+
29+
// OTel SDK + autoconfigure SPI — needed to compile OtelAutoConfig.
30+
// At runtime these are provided by the OTel Java agent, so they are compileOnly.
31+
compileOnly "io.opentelemetry:opentelemetry-sdk:${otelVersion}"
32+
compileOnly "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:${otelVersion}"
33+
34+
// SLF4J API — needed at compile time for Lombok's @Slf4j annotation.
35+
compileOnly "org.slf4j:slf4j-api:${slf4jVersion}"
2836
}
2937

3038
jar {

braintrust-sdk/src/main/java/dev/braintrust/OtelAutoConfig.java renamed to braintrust-otel-extension/src/main/java/dev/braintrust/OtelAutoConfig.java

File renamed without changes.

0 commit comments

Comments
 (0)