From 0f49e96768d646cfac183f382e413a16eec4fda7 Mon Sep 17 00:00:00 2001 From: Hemasekhar Puchuginjala Date: Tue, 5 May 2026 18:55:41 +0530 Subject: [PATCH] fix: inject Dev UI tracer into core engine for embedded telemetry --- core/src/main/java/com/google/adk/telemetry/Tracing.java | 8 +++++++- .../com/google/adk/web/config/OpenTelemetryConfig.java | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/google/adk/telemetry/Tracing.java b/core/src/main/java/com/google/adk/telemetry/Tracing.java index 589215073..e86975647 100644 --- a/core/src/main/java/com/google/adk/telemetry/Tracing.java +++ b/core/src/main/java/com/google/adk/telemetry/Tracing.java @@ -133,7 +133,7 @@ public class Tracing { AttributeKey.stringKey("gcp.vertex.agent.data"); @SuppressWarnings("NonFinalStaticField") - private static Tracer tracer = GlobalOpenTelemetry.getTracer("gcp.vertex.agent"); + private static volatile Tracer tracer = GlobalOpenTelemetry.getTracer("gcp.vertex.agent"); private static final boolean CAPTURE_MESSAGE_CONTENT_IN_SPANS = Boolean.parseBoolean( @@ -141,6 +141,12 @@ public class Tracing { private Tracing() {} + public static void setTracer(Tracer customTracer) { + if (customTracer != null) { + tracer = customTracer; + } + } + private static void setInvocationAttributes( Span span, InvocationContext invocationContext, String eventId) { span.setAttribute(ADK_INVOCATION_ID, invocationContext.invocationId()); diff --git a/dev/src/main/java/com/google/adk/web/config/OpenTelemetryConfig.java b/dev/src/main/java/com/google/adk/web/config/OpenTelemetryConfig.java index b2d6429dc..79da1a584 100644 --- a/dev/src/main/java/com/google/adk/web/config/OpenTelemetryConfig.java +++ b/dev/src/main/java/com/google/adk/web/config/OpenTelemetryConfig.java @@ -16,6 +16,7 @@ package com.google.adk.web.config; +import com.google.adk.telemetry.Tracing; import com.google.adk.web.service.ApiServerSpanExporter; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; @@ -64,6 +65,9 @@ public OpenTelemetry openTelemetrySdk(SdkTracerProvider sdkTracerProvider) { // If we get here, it's already set, so just return a new instance without global // registration otelLog.debug("OpenTelemetry already registered globally, creating non-global instance."); + OpenTelemetrySdk sdk = + OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider).build(); + Tracing.setTracer(sdk.getTracer("gcp.vertex.agent")); return OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider).build(); } catch (IllegalStateException e) { // GlobalOpenTelemetry hasn't been set yet, safe to register globally @@ -71,6 +75,7 @@ public OpenTelemetry openTelemetrySdk(SdkTracerProvider sdkTracerProvider) { OpenTelemetrySdk otelSdk = OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider).buildAndRegisterGlobal(); Runtime.getRuntime().addShutdownHook(new Thread(otelSdk::close)); + Tracing.setTracer(otelSdk.getTracer("gcp.vertex.agent")); return otelSdk; } }