From bc7fd5439dc3e8522baa0012c9c7f44791fc64d0 Mon Sep 17 00:00:00 2001 From: cleverchuk Date: Wed, 16 Oct 2024 10:01:19 -0400 Subject: [PATCH] NH-93561: add `sw` span --- gradle.properties | 2 +- .../JdbcConnectionInstrumentation.java | 27 +++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index c13eff28..3b204dec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,4 +21,4 @@ systemProp.org.gradle.internal.repository.initial.backoff=500 # Project properties provides a central place for shared property among subprojects otel.agent.version=2.8.0 otel.sdk.version=1.42.1 -swo.agent.version=2.8.0 +swo.agent.version=2.8.1-jdbc diff --git a/instrumentation/jdbc/src/main/java/com/solarwinds/opentelemetry/instrumentation/JdbcConnectionInstrumentation.java b/instrumentation/jdbc/src/main/java/com/solarwinds/opentelemetry/instrumentation/JdbcConnectionInstrumentation.java index 3fc85034..af275141 100644 --- a/instrumentation/jdbc/src/main/java/com/solarwinds/opentelemetry/instrumentation/JdbcConnectionInstrumentation.java +++ b/instrumentation/jdbc/src/main/java/com/solarwinds/opentelemetry/instrumentation/JdbcConnectionInstrumentation.java @@ -28,8 +28,15 @@ import com.solarwinds.joboe.config.ConfigManager; import com.solarwinds.joboe.config.ConfigProperty; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanBuilder; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import io.opentelemetry.semconv.SemanticAttributes; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -85,8 +92,24 @@ public static class PrepareAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static void injectComment(@Advice.Argument(value = 0, readOnly = false) String sql) { - sql = TraceContextInjector.inject(currentContext(), sql); - StatementTracer.writeStackTraceSpec(currentContext()); + if (sql.contains("traceparent")) { + return; + } + + Tracer tracer = GlobalOpenTelemetry.getTracer("com.solarwinds.jdbc", "1.0"); + SpanBuilder spanBuilder = + tracer + .spanBuilder("sw.jdbc.context") + .setAttribute(SemanticAttributes.DB_STATEMENT, sql) + .setSpanKind(SpanKind.INTERNAL); + + Span span = spanBuilder.startSpan(); + try (Scope scope = span.makeCurrent()) { + sql = TraceContextInjector.inject(currentContext(), sql); + StatementTracer.writeStackTraceSpec(currentContext()); + } finally { + span.end(); + } } } }