From 087a9cbc4eb575ba6996e7d5526d3fc56df9466f Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 9 Nov 2020 18:46:26 -0800 Subject: [PATCH] Fix dropwizard instrumentation (#1607) * Fix dropwizard instrumentation * Fix others too --- .../dropwizardviews/DropwizardTracer.java | 26 +++++++++++++++++++ .../DropwizardViewInstrumentationModule.java | 26 ++++++++----------- .../v3_3/HibernateInstrumentationModule.java | 1 + .../v4_0/HibernateInstrumentationModule.java | 1 + .../v3_8/NettyInstrumentationModule.java | 3 ++- 5 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 instrumentation/dropwizard-views-0.7/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardTracer.java diff --git a/instrumentation/dropwizard-views-0.7/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardTracer.java b/instrumentation/dropwizard-views-0.7/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardTracer.java new file mode 100644 index 0000000000..514e3a8ec6 --- /dev/null +++ b/instrumentation/dropwizard-views-0.7/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardTracer.java @@ -0,0 +1,26 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.dropwizardviews; + +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.instrumentation.api.tracer.BaseTracer; + +public class DropwizardTracer extends BaseTracer { + private static final DropwizardTracer TRACER = new DropwizardTracer(); + + public static DropwizardTracer tracer() { + return TRACER; + } + + public Span startSpan(String spanName) { + return super.startSpan(spanName, Span.Kind.INTERNAL); + } + + @Override + protected String getInstrumentationName() { + return "io.opentelemetry.auto.dropwizard-views-0.7"; + } +} diff --git a/instrumentation/dropwizard-views-0.7/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardViewInstrumentationModule.java b/instrumentation/dropwizard-views-0.7/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardViewInstrumentationModule.java index 52bafe1c3a..8866a214fa 100644 --- a/instrumentation/dropwizard-views-0.7/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardViewInstrumentationModule.java +++ b/instrumentation/dropwizard-views-0.7/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardViewInstrumentationModule.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.dropwizardviews; +import static io.opentelemetry.javaagent.instrumentation.dropwizardviews.DropwizardTracer.tracer; import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.implementsInterface; import static java.util.Collections.singletonList; @@ -16,11 +17,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; import io.dropwizard.views.View; -import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.StatusCode; -import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.instrumentation.api.decorator.BaseDecorator; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; import io.opentelemetry.javaagent.instrumentation.api.SpanWithScope; import io.opentelemetry.javaagent.tooling.InstrumentationModule; @@ -43,6 +40,11 @@ public final class DropwizardViewInstrumentationModule extends InstrumentationMo return singletonList(new ViewRendererInstrumentation()); } + @Override + public String[] helperClassNames() { + return new String[] {packageName + ".DropwizardTracer"}; + } + private static final class ViewRendererInstrumentation implements TypeInstrumentation { @Override public ElementMatcher classLoaderMatcher() { @@ -67,19 +69,13 @@ public final class DropwizardViewInstrumentationModule extends InstrumentationMo } public static class RenderAdvice { - private static final Tracer TRACER = - OpenTelemetry.getGlobalTracer("io.opentelemetry.auto.dropwizard-views-0.7"); - - public static Tracer tracer() { - return TRACER; - } @Advice.OnMethodEnter(suppress = Throwable.class) public static SpanWithScope onEnter(@Advice.Argument(0) View view) { if (!Java8BytecodeBridge.currentSpan().getSpanContext().isValid()) { return null; } - Span span = tracer().spanBuilder("Render " + view.getTemplateName()).startSpan(); + Span span = tracer().startSpan("Render " + view.getTemplateName()); return new SpanWithScope(span, span.makeCurrent()); } @@ -90,11 +86,11 @@ public final class DropwizardViewInstrumentationModule extends InstrumentationMo return; } Span span = spanWithScope.getSpan(); - if (throwable != null) { - span.setStatus(StatusCode.ERROR); - BaseDecorator.addThrowable(span, throwable); + if (throwable == null) { + tracer().end(span); + } else { + tracer().endExceptionally(span, throwable); } - span.end(); spanWithScope.closeScope(); } } diff --git a/instrumentation/hibernate/hibernate-3.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/HibernateInstrumentationModule.java b/instrumentation/hibernate/hibernate-3.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/HibernateInstrumentationModule.java index 16c8492592..33c3db2b25 100644 --- a/instrumentation/hibernate/hibernate-3.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/HibernateInstrumentationModule.java +++ b/instrumentation/hibernate/hibernate-3.3/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/HibernateInstrumentationModule.java @@ -28,6 +28,7 @@ public class HibernateInstrumentationModule extends InstrumentationModule { return new String[] { "io.opentelemetry.javaagent.instrumentation.hibernate.SessionMethodUtils", "io.opentelemetry.javaagent.instrumentation.hibernate.HibernateDecorator", + packageName + ".V3Advice", }; } diff --git a/instrumentation/hibernate/hibernate-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/HibernateInstrumentationModule.java b/instrumentation/hibernate/hibernate-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/HibernateInstrumentationModule.java index 88e18f0d14..0e0c162cdc 100644 --- a/instrumentation/hibernate/hibernate-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/HibernateInstrumentationModule.java +++ b/instrumentation/hibernate/hibernate-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/HibernateInstrumentationModule.java @@ -28,6 +28,7 @@ public class HibernateInstrumentationModule extends InstrumentationModule { return new String[] { "io.opentelemetry.javaagent.instrumentation.hibernate.SessionMethodUtils", "io.opentelemetry.javaagent.instrumentation.hibernate.HibernateDecorator", + packageName + ".V4Advice", }; } diff --git a/instrumentation/netty/netty-3.8/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyInstrumentationModule.java b/instrumentation/netty/netty-3.8/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyInstrumentationModule.java index 8ce1b4559d..bea143594d 100644 --- a/instrumentation/netty/netty-3.8/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyInstrumentationModule.java +++ b/instrumentation/netty/netty-3.8/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/NettyInstrumentationModule.java @@ -39,7 +39,8 @@ public class NettyInstrumentationModule extends InstrumentationModule { packageName + ".server.NettyRequestExtractAdapter", packageName + ".server.HttpServerRequestTracingHandler", packageName + ".server.HttpServerResponseTracingHandler", - packageName + ".server.HttpServerTracingHandler" + packageName + ".server.HttpServerTracingHandler", + packageName + ".AbstractNettyAdvice" }; }