From f2bb2f3e30362bf117469802449af1c34a61fe36 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 28 Nov 2020 12:25:09 -0800 Subject: [PATCH] Split out methods and opentelemetry-annotations modules (#1787) --- .../TraceAdvice.java | 4 +- .../TraceAnnotationTracer.java | 4 +- ...TraceAnnotationsInstrumentationModule.java | 15 +++---- .../ConfiguredTraceAnnotationsTest.groovy | 35 +--------------- .../src/test/groovy/IncludeTest.groovy | 42 +++++++++++++++++++ .../groovy/TracedMethodsExclusionTest.groovy | 21 ++-------- instrumentation/methods/methods.gradle | 7 ++++ .../instrumentation/methods/MethodAdvice.java | 38 +++++++++++++++++ .../methods/MethodInstrumentationModule.java} | 24 +++-------- .../instrumentation/methods/MethodTracer.java | 21 ++++++++++ .../src/test/groovy/MethodTest.groovy} | 5 ++- .../opentelemetry-annotations-1.0.gradle | 11 +++++ .../otelannotations}/WithSpanAdvice.java | 6 +-- .../WithSpanInstrumentationModule.java} | 10 ++--- .../otelannotations/WithSpanTracer.java} | 12 +++--- .../groovy/WithSpanInstrumentationTest.groovy | 7 +--- .../test/annotation/TracedWithSpan.java | 5 --- .../opentelemetry-api-1.0.gradle | 2 - settings.gradle | 2 + 19 files changed, 164 insertions(+), 107 deletions(-) rename instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/{traceannotation => extannotations}/TraceAdvice.java (84%) rename instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/{traceannotation => extannotations}/TraceAnnotationTracer.java (76%) rename instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/{traceannotation => extannotations}/TraceAnnotationsInstrumentationModule.java (94%) create mode 100644 instrumentation/external-annotations/src/test/groovy/IncludeTest.groovy create mode 100644 instrumentation/methods/methods.gradle create mode 100644 instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodAdvice.java rename instrumentation/{external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceConfigInstrumentationModule.java => methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java} (75%) create mode 100644 instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodTracer.java rename instrumentation/{external-annotations/src/test/groovy/TraceConfigTest.groovy => methods/src/test/groovy/MethodTest.groovy} (82%) create mode 100644 instrumentation/opentelemetry-annotations-1.0/opentelemetry-annotations-1.0.gradle rename instrumentation/{opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations => opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations}/WithSpanAdvice.java (84%) rename instrumentation/{opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/WithSpanAnnotationInstrumentationModule.java => opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanInstrumentationModule.java} (92%) rename instrumentation/{opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/TraceAnnotationTracer.java => opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanTracer.java} (79%) rename instrumentation/{opentelemetry-api-1.0 => opentelemetry-annotations-1.0}/src/test/groovy/WithSpanInstrumentationTest.groovy (90%) rename instrumentation/{opentelemetry-api-1.0 => opentelemetry-annotations-1.0}/src/test/java/io/opentelemetry/test/annotation/TracedWithSpan.java (67%) diff --git a/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAdvice.java b/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAdvice.java similarity index 84% rename from instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAdvice.java rename to instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAdvice.java index bd1df559c2..4ae3942772 100644 --- a/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAdvice.java +++ b/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAdvice.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.traceannotation; +package io.opentelemetry.javaagent.instrumentation.extannotations; -import static io.opentelemetry.javaagent.instrumentation.traceannotation.TraceAnnotationTracer.tracer; +import static io.opentelemetry.javaagent.instrumentation.extannotations.TraceAnnotationTracer.tracer; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Scope; diff --git a/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAnnotationTracer.java b/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAnnotationTracer.java similarity index 76% rename from instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAnnotationTracer.java rename to instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAnnotationTracer.java index 24b0712d04..3d23027f7d 100644 --- a/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAnnotationTracer.java +++ b/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAnnotationTracer.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.traceannotation; +package io.opentelemetry.javaagent.instrumentation.extannotations; import io.opentelemetry.instrumentation.api.tracer.BaseTracer; @@ -16,6 +16,6 @@ public class TraceAnnotationTracer extends BaseTracer { @Override protected String getInstrumentationName() { - return "io.opentelemetry.javaagent.external-annotation"; + return "io.opentelemetry.javaagent.external-annotations"; } } diff --git a/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAnnotationsInstrumentationModule.java b/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAnnotationsInstrumentationModule.java similarity index 94% rename from instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAnnotationsInstrumentationModule.java rename to instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAnnotationsInstrumentationModule.java index ff2a7d892f..e85bb172c3 100644 --- a/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceAnnotationsInstrumentationModule.java +++ b/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/TraceAnnotationsInstrumentationModule.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.traceannotation; +package io.opentelemetry.javaagent.instrumentation.extannotations; import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType; @@ -62,12 +62,13 @@ public class TraceAnnotationsInstrumentationModule extends InstrumentationModule "org.springframework.cloud.sleuth.annotation.NewSpan" }; - private static final String TRACE_ANNOTATIONS_CONFIG = "otel.trace.annotations"; + private static final String TRACE_ANNOTATIONS_CONFIG = + "otel.instrumentation.external-annotations.include"; private static final String TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG = - "otel.trace.annotated.methods.exclude"; + "otel.instrumentation.external-annotations.exclude-methods"; public TraceAnnotationsInstrumentationModule() { - super("trace", "trace-annotation"); + super("external-annotations"); } @Override @@ -83,7 +84,7 @@ public class TraceAnnotationsInstrumentationModule extends InstrumentationModule private final ElementMatcher.Junction excludedMethodsMatcher; public AnnotatedMethodsInstrumentation() { - additionalTraceAnnotations = configureAdditionalTraceAnnotations(); + additionalTraceAnnotations = configureAdditionalTraceAnnotations(Config.get()); if (additionalTraceAnnotations.isEmpty()) { classLoaderOptimization = none(); @@ -124,8 +125,8 @@ public class TraceAnnotationsInstrumentationModule extends InstrumentationModule TraceAdvice.class.getName()); } - private static Set configureAdditionalTraceAnnotations() { - String configString = Config.get().getProperty(TRACE_ANNOTATIONS_CONFIG); + private static Set configureAdditionalTraceAnnotations(Config config) { + String configString = config.getProperty(TRACE_ANNOTATIONS_CONFIG); if (configString == null) { return Collections.unmodifiableSet(Sets.newHashSet(DEFAULT_ANNOTATIONS)); } else if (configString.isEmpty()) { diff --git a/instrumentation/external-annotations/src/test/groovy/ConfiguredTraceAnnotationsTest.groovy b/instrumentation/external-annotations/src/test/groovy/ConfiguredTraceAnnotationsTest.groovy index 743b803883..516c37fea7 100644 --- a/instrumentation/external-annotations/src/test/groovy/ConfiguredTraceAnnotationsTest.groovy +++ b/instrumentation/external-annotations/src/test/groovy/ConfiguredTraceAnnotationsTest.groovy @@ -3,17 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ -import static io.opentelemetry.javaagent.instrumentation.traceannotation.TraceAnnotationsInstrumentationModule.DEFAULT_ANNOTATIONS - import io.opentelemetry.instrumentation.test.AgentTestRunner import io.opentelemetry.instrumentation.test.utils.ConfigUtils -import io.opentelemetry.javaagent.instrumentation.traceannotation.TraceAnnotationsInstrumentationModule import io.opentelemetry.test.annotation.SayTracedHello import java.util.concurrent.Callable class ConfiguredTraceAnnotationsTest extends AgentTestRunner { static final PREVIOUS_CONFIG = ConfigUtils.updateConfigAndResetInstrumentation { - it.setProperty("otel.trace.annotations", "package.Class\$Name;${OuterClass.InterestingMethod.name}") + it.setProperty("otel.instrumentation.external-annotations.include", + "package.Class\$Name;${OuterClass.InterestingMethod.name}") } def specCleanup() { @@ -44,35 +42,6 @@ class ConfiguredTraceAnnotationsTest extends AgentTestRunner { } } - def "test configuration #value"() { - setup: - def previousConfig = ConfigUtils.updateConfig { - if (value) { - it.setProperty("otel.trace.annotations", value) - } else { - it.remove("otel.trace.annotations") - } - } - - expect: - new TraceAnnotationsInstrumentationModule.AnnotatedMethodsInstrumentation().additionalTraceAnnotations == expected.toSet() - - cleanup: - ConfigUtils.setConfig(previousConfig) - - where: - value | expected - null | DEFAULT_ANNOTATIONS.toList() - " " | [] - "some.Invalid[]" | [] - "some.package.ClassName " | ["some.package.ClassName"] - " some.package.Class\$Name" | ["some.package.Class\$Name"] - " ClassName " | ["ClassName"] - "ClassName" | ["ClassName"] - "Class\$1;Class\$2;" | ["Class\$1", "Class\$2"] - "Duplicate ;Duplicate ;Duplicate; " | ["Duplicate"] - } - static class AnnotationTracedCallable implements Callable { @OuterClass.InterestingMethod @Override diff --git a/instrumentation/external-annotations/src/test/groovy/IncludeTest.groovy b/instrumentation/external-annotations/src/test/groovy/IncludeTest.groovy new file mode 100644 index 0000000000..745c79dfb6 --- /dev/null +++ b/instrumentation/external-annotations/src/test/groovy/IncludeTest.groovy @@ -0,0 +1,42 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +import static io.opentelemetry.instrumentation.api.config.Config.normalizePropertyName +import static io.opentelemetry.javaagent.instrumentation.extannotations.TraceAnnotationsInstrumentationModule.DEFAULT_ANNOTATIONS + +import io.opentelemetry.instrumentation.api.config.Config +import io.opentelemetry.javaagent.instrumentation.extannotations.TraceAnnotationsInstrumentationModule +import spock.lang.Specification + +class IncludeTest extends Specification { + + def "test configuration #value"() { + setup: + Config config + if (value) { + config = Config.create([ + (normalizePropertyName("otel.instrumentation.external-annotations.include")): value + ]) + } else { + config = Config.DEFAULT + } + + expect: + TraceAnnotationsInstrumentationModule.AnnotatedMethodsInstrumentation.configureAdditionalTraceAnnotations(config) == expected.toSet() + + where: + value | expected + null | DEFAULT_ANNOTATIONS.toList() + " " | [] + "some.Invalid[]" | [] + "some.package.ClassName " | ["some.package.ClassName"] + " some.package.Class\$Name" | ["some.package.Class\$Name"] + " ClassName " | ["ClassName"] + "ClassName" | ["ClassName"] + "Class\$1;Class\$2;" | ["Class\$1", "Class\$2"] + "Duplicate ;Duplicate ;Duplicate; " | ["Duplicate"] + } + +} diff --git a/instrumentation/external-annotations/src/test/groovy/TracedMethodsExclusionTest.groovy b/instrumentation/external-annotations/src/test/groovy/TracedMethodsExclusionTest.groovy index 505a51c6f8..f1daffe41b 100644 --- a/instrumentation/external-annotations/src/test/groovy/TracedMethodsExclusionTest.groovy +++ b/instrumentation/external-annotations/src/test/groovy/TracedMethodsExclusionTest.groovy @@ -9,8 +9,8 @@ import io.opentracing.contrib.dropwizard.Trace class TracedMethodsExclusionTest extends AgentTestRunner { static final PREVIOUS_CONFIG = ConfigUtils.updateConfigAndResetInstrumentation { - it.setProperty("otel.trace.methods", "${TestClass.name}[included,excluded]") - it.setProperty("otel.trace.annotated.methods.exclude", "${TestClass.name}[excluded,annotatedButExcluded]") + it.setProperty("otel.instrumentation.external-annotations.exclude-methods", + "${TestClass.name}[excluded,annotatedButExcluded]") } def cleanupSpec() { @@ -18,11 +18,6 @@ class TracedMethodsExclusionTest extends AgentTestRunner { } static class TestClass { - //This method is configured to be traced - String included() { - return "Hello!" - } - //This method is not mentioned in any configuration String notMentioned() { return "Hello!" @@ -51,19 +46,11 @@ class TracedMethodsExclusionTest extends AgentTestRunner { //Baseline and assumption validation def "Calling these methods should be traced"() { expect: - new TestClass().included() == "Hello!" new TestClass().annotated() == "Hello!" and: - assertTraces(2) { + assertTraces(1) { trace(0, 1) { - span(0) { - name "TestClass.included" - attributes { - } - } - } - trace(1, 1) { span(0) { name "TestClass.annotated" attributes { @@ -82,7 +69,7 @@ class TracedMethodsExclusionTest extends AgentTestRunner { assertTraces(0) {} } - def "Method which is both included and excluded for tracing should NOT be traced"() { + def "Method which is both annotated and excluded for tracing should NOT be traced"() { expect: new TestClass().excluded() == "Hello!" diff --git a/instrumentation/methods/methods.gradle b/instrumentation/methods/methods.gradle new file mode 100644 index 0000000000..392aee47e8 --- /dev/null +++ b/instrumentation/methods/methods.gradle @@ -0,0 +1,7 @@ +apply from: "$rootDir/gradle/instrumentation.gradle" + +muzzle { + pass { + coreJdk = true + } +} diff --git a/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodAdvice.java b/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodAdvice.java new file mode 100644 index 0000000000..cefaaf5553 --- /dev/null +++ b/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodAdvice.java @@ -0,0 +1,38 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.methods; + +import static io.opentelemetry.javaagent.instrumentation.methods.MethodTracer.tracer; + +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.context.Scope; +import java.lang.reflect.Method; +import net.bytebuddy.asm.Advice; + +public class MethodAdvice { + + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void onEnter( + @Advice.Origin Method method, + @Advice.Local("otelSpan") Span span, + @Advice.Local("otelScope") Scope scope) { + span = tracer().startSpan(method); + scope = span.makeCurrent(); + } + + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + public static void stopSpan( + @Advice.Local("otelSpan") Span span, + @Advice.Local("otelScope") Scope scope, + @Advice.Thrown Throwable throwable) { + scope.close(); + if (throwable != null) { + tracer().endExceptionally(span, throwable); + } else { + tracer().end(span); + } + } +} diff --git a/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceConfigInstrumentationModule.java b/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java similarity index 75% rename from instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceConfigInstrumentationModule.java rename to instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java index eef995a9ca..cc4a39624b 100644 --- a/instrumentation/external-annotations/src/main/java/io/opentelemetry/javaagent/instrumentation/traceannotation/TraceConfigInstrumentationModule.java +++ b/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.traceannotation; +package io.opentelemetry.javaagent.instrumentation.methods; import static io.opentelemetry.javaagent.tooling.ClassLoaderMatcher.hasClassesNamed; import static io.opentelemetry.javaagent.tooling.bytebuddy.matcher.AgentElementMatchers.safeHasSuperType; @@ -33,30 +33,18 @@ import net.bytebuddy.matcher.ElementMatcher; * super class. */ @AutoService(InstrumentationModule.class) -public class TraceConfigInstrumentationModule extends InstrumentationModule { +public class MethodInstrumentationModule extends InstrumentationModule { - private static final String TRACE_METHODS_CONFIG = "otel.trace.methods"; - private static final String TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG = - "otel.trace.annotated.methods.exclude"; + private static final String TRACE_METHODS_CONFIG = "otel.instrumentation.methods.include"; private final List typeInstrumentations; - public TraceConfigInstrumentationModule() { - super("trace", "trace-config"); + public MethodInstrumentationModule() { + super("methods"); Map> classMethodsToTrace = MethodsConfigurationParser.parse(Config.get().getProperty(TRACE_METHODS_CONFIG)); - Map> excludedMethods = - MethodsConfigurationParser.parse( - Config.get().getProperty(TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG)); - for (Map.Entry> entry : excludedMethods.entrySet()) { - Set tracedMethods = classMethodsToTrace.get(entry.getKey()); - if (tracedMethods != null) { - tracedMethods.removeAll(entry.getValue()); - } - } - typeInstrumentations = classMethodsToTrace.entrySet().stream() .filter(e -> !e.getValue().isEmpty()) @@ -99,7 +87,7 @@ public class TraceConfigInstrumentationModule extends InstrumentationModule { } } - return Collections.singletonMap(methodMatchers, TraceAdvice.class.getName()); + return Collections.singletonMap(methodMatchers, MethodAdvice.class.getName()); } } } diff --git a/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodTracer.java b/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodTracer.java new file mode 100644 index 0000000000..701981c75d --- /dev/null +++ b/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodTracer.java @@ -0,0 +1,21 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.methods; + +import io.opentelemetry.instrumentation.api.tracer.BaseTracer; + +public class MethodTracer extends BaseTracer { + private static final MethodTracer TRACER = new MethodTracer(); + + public static MethodTracer tracer() { + return TRACER; + } + + @Override + protected String getInstrumentationName() { + return "io.opentelemetry.javaagent.external-annotations"; + } +} diff --git a/instrumentation/external-annotations/src/test/groovy/TraceConfigTest.groovy b/instrumentation/methods/src/test/groovy/MethodTest.groovy similarity index 82% rename from instrumentation/external-annotations/src/test/groovy/TraceConfigTest.groovy rename to instrumentation/methods/src/test/groovy/MethodTest.groovy index bc443757f0..b4a9b16fbc 100644 --- a/instrumentation/external-annotations/src/test/groovy/TraceConfigTest.groovy +++ b/instrumentation/methods/src/test/groovy/MethodTest.groovy @@ -7,9 +7,10 @@ import io.opentelemetry.instrumentation.test.AgentTestRunner import io.opentelemetry.instrumentation.test.utils.ConfigUtils import java.util.concurrent.Callable -class TraceConfigTest extends AgentTestRunner { +class MethodTest extends AgentTestRunner { static final PREVIOUS_CONFIG = ConfigUtils.updateConfigAndResetInstrumentation { - it.setProperty("otel.trace.methods", "package.ClassName[method1,method2];${ConfigTracedCallable.name}[call]") + it.setProperty("otel.instrumentation.methods.include", + "package.ClassName[method1,method2];${ConfigTracedCallable.name}[call]") } def cleanupSpec() { diff --git a/instrumentation/opentelemetry-annotations-1.0/opentelemetry-annotations-1.0.gradle b/instrumentation/opentelemetry-annotations-1.0/opentelemetry-annotations-1.0.gradle new file mode 100644 index 0000000000..ccb966a18f --- /dev/null +++ b/instrumentation/opentelemetry-annotations-1.0/opentelemetry-annotations-1.0.gradle @@ -0,0 +1,11 @@ +apply from: "$rootDir/gradle/instrumentation.gradle" + +dependencies { + // this instrumentation needs to do similar shading dance as opentelemetry-api-1.0 because + // the @WithSpan annotation references the OpenTelemetry API's Span.Kind class + // + // see the comment in opentelemetry-api-1.0.gradle for more details + compileOnly project(path: ':opentelemetry-ext-annotations-shaded-for-instrumenting', configuration: 'shadow') + + testImplementation project(path: ':opentelemetry-ext-annotations-shaded-for-instrumenting', configuration: 'shadow') +} diff --git a/instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/WithSpanAdvice.java b/instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanAdvice.java similarity index 84% rename from instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/WithSpanAdvice.java rename to instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanAdvice.java index 825dc9a4c5..b7cdffff4e 100644 --- a/instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/WithSpanAdvice.java +++ b/instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanAdvice.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.anotations; +package io.opentelemetry.javaagent.instrumentation.otelannotations; -import static io.opentelemetry.javaagent.instrumentation.opentelemetryapi.anotations.TraceAnnotationTracer.tracer; +import static io.opentelemetry.javaagent.instrumentation.otelannotations.WithSpanTracer.tracer; import application.io.opentelemetry.extension.annotations.WithSpan; import io.opentelemetry.api.trace.Span; @@ -16,7 +16,7 @@ import net.bytebuddy.asm.Advice; /** * Instrumentation for methods annotated with {@link WithSpan} annotation. * - * @see WithSpanAnnotationInstrumentationModule + * @see WithSpanInstrumentationModule */ public class WithSpanAdvice { diff --git a/instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/WithSpanAnnotationInstrumentationModule.java b/instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanInstrumentationModule.java similarity index 92% rename from instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/WithSpanAnnotationInstrumentationModule.java rename to instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanInstrumentationModule.java index 7bdbbcfd5f..a242efbfbc 100644 --- a/instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/WithSpanAnnotationInstrumentationModule.java +++ b/instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanInstrumentationModule.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.anotations; +package io.opentelemetry.javaagent.instrumentation.otelannotations; import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; @@ -32,13 +32,13 @@ import net.bytebuddy.matcher.ElementMatchers; /** Instrumentation for methods annotated with {@link WithSpan} annotation. */ @AutoService(InstrumentationModule.class) -public class WithSpanAnnotationInstrumentationModule extends InstrumentationModule { +public class WithSpanInstrumentationModule extends InstrumentationModule { private static final String TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG = - "otel.trace.annotated.methods.exclude"; + "otel.instrumentation.opentelemetry-annotations.exclude-methods"; - public WithSpanAnnotationInstrumentationModule() { - super("with-span-annotation"); + public WithSpanInstrumentationModule() { + super("opentelemetry-annotations"); } @Override diff --git a/instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/TraceAnnotationTracer.java b/instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanTracer.java similarity index 79% rename from instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/TraceAnnotationTracer.java rename to instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanTracer.java index fb9e3f8bc9..c460efc0c5 100644 --- a/instrumentation/opentelemetry-api-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/anotations/TraceAnnotationTracer.java +++ b/instrumentation/opentelemetry-annotations-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanTracer.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.anotations; +package io.opentelemetry.javaagent.instrumentation.otelannotations; import application.io.opentelemetry.api.trace.Span; import application.io.opentelemetry.extension.annotations.WithSpan; @@ -13,14 +13,14 @@ import java.lang.reflect.Method; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TraceAnnotationTracer extends BaseTracer { - private static final TraceAnnotationTracer TRACER = new TraceAnnotationTracer(); +public class WithSpanTracer extends BaseTracer { + private static final WithSpanTracer TRACER = new WithSpanTracer(); - public static TraceAnnotationTracer tracer() { + public static WithSpanTracer tracer() { return TRACER; } - private static final Logger log = LoggerFactory.getLogger(TraceAnnotationTracer.class); + private static final Logger log = LoggerFactory.getLogger(WithSpanTracer.class); /** * This method is used to generate an acceptable span (operation) name based on a given method @@ -52,6 +52,6 @@ public class TraceAnnotationTracer extends BaseTracer { @Override protected String getInstrumentationName() { - return "io.opentelemetry.javaagent.opentelemetry-api"; + return "io.opentelemetry.javaagent.opentelemetry-annotations"; } } diff --git a/instrumentation/opentelemetry-api-1.0/src/test/groovy/WithSpanInstrumentationTest.groovy b/instrumentation/opentelemetry-annotations-1.0/src/test/groovy/WithSpanInstrumentationTest.groovy similarity index 90% rename from instrumentation/opentelemetry-api-1.0/src/test/groovy/WithSpanInstrumentationTest.groovy rename to instrumentation/opentelemetry-annotations-1.0/src/test/groovy/WithSpanInstrumentationTest.groovy index 169efd3d5f..b4d568e794 100644 --- a/instrumentation/opentelemetry-api-1.0/src/test/groovy/WithSpanInstrumentationTest.groovy +++ b/instrumentation/opentelemetry-annotations-1.0/src/test/groovy/WithSpanInstrumentationTest.groovy @@ -13,7 +13,8 @@ import io.opentelemetry.test.annotation.TracedWithSpan */ class WithSpanInstrumentationTest extends AgentTestRunner { static final PREVIOUS_CONFIG = ConfigUtils.updateConfigAndResetInstrumentation { - it.setProperty("otel.trace.annotated.methods.exclude", "${TracedWithSpan.name}[ignored]") + it.setProperty("otel.instrumentation.opentelemetry-annotations.exclude-methods", + "${TracedWithSpan.name}[ignored]") } def cleanupSpec() { @@ -33,7 +34,6 @@ class WithSpanInstrumentationTest extends AgentTestRunner { hasNoParent() errored false attributes { - "providerAttr" "Otel" } } } @@ -52,7 +52,6 @@ class WithSpanInstrumentationTest extends AgentTestRunner { hasNoParent() errored false attributes { - "providerAttr" "Otel" } } } @@ -72,7 +71,6 @@ class WithSpanInstrumentationTest extends AgentTestRunner { hasNoParent() errored false attributes { - "providerAttr" "Otel" } } } @@ -88,5 +86,4 @@ class WithSpanInstrumentationTest extends AgentTestRunner { Thread.sleep(500) // sleep a bit just to make sure no span is captured assertTraces(0) {} } - } diff --git a/instrumentation/opentelemetry-api-1.0/src/test/java/io/opentelemetry/test/annotation/TracedWithSpan.java b/instrumentation/opentelemetry-annotations-1.0/src/test/java/io/opentelemetry/test/annotation/TracedWithSpan.java similarity index 67% rename from instrumentation/opentelemetry-api-1.0/src/test/java/io/opentelemetry/test/annotation/TracedWithSpan.java rename to instrumentation/opentelemetry-annotations-1.0/src/test/java/io/opentelemetry/test/annotation/TracedWithSpan.java index 75a07d3637..572245f1e0 100644 --- a/instrumentation/opentelemetry-api-1.0/src/test/java/io/opentelemetry/test/annotation/TracedWithSpan.java +++ b/instrumentation/opentelemetry-annotations-1.0/src/test/java/io/opentelemetry/test/annotation/TracedWithSpan.java @@ -5,7 +5,6 @@ package io.opentelemetry.test.annotation; -import application.io.opentelemetry.api.trace.Span; import application.io.opentelemetry.api.trace.Span.Kind; import application.io.opentelemetry.extension.annotations.WithSpan; @@ -13,25 +12,21 @@ public class TracedWithSpan { @WithSpan public String otel() { - Span.current().setAttribute("providerAttr", "Otel"); return "hello!"; } @WithSpan("manualName") public String namedOtel() { - Span.current().setAttribute("providerAttr", "Otel"); return "hello!"; } @WithSpan public String ignored() { - Span.current().setAttribute("providerAttr", "Otel"); return "hello!"; } @WithSpan(kind = Kind.PRODUCER) public String oneOfAKind() { - Span.current().setAttribute("providerAttr", "Otel"); return "hello!"; } } diff --git a/instrumentation/opentelemetry-api-1.0/opentelemetry-api-1.0.gradle b/instrumentation/opentelemetry-api-1.0/opentelemetry-api-1.0.gradle index 759aaa2229..98ae9c0197 100644 --- a/instrumentation/opentelemetry-api-1.0/opentelemetry-api-1.0.gradle +++ b/instrumentation/opentelemetry-api-1.0/opentelemetry-api-1.0.gradle @@ -20,10 +20,8 @@ dependencies { // and in the code "io.opentelemetry.*" refers to the (shaded) OpenTelemetry API that is used by // the agent (as those references will later be shaded) compileOnly project(path: ':opentelemetry-api-shaded-for-instrumenting', configuration: 'shadow') - compileOnly project(path: ':opentelemetry-ext-annotations-shaded-for-instrumenting', configuration: 'shadow') // using OpenTelemetry SDK to make sure that instrumentation doesn't cause // OpenTelemetrySdk.getTracerProvider() to throw ClassCastException testImplementation project(path: ':opentelemetry-sdk-shaded-for-instrumenting', configuration: 'shadow') - testImplementation project(path: ':opentelemetry-ext-annotations-shaded-for-instrumenting', configuration: 'shadow') } diff --git a/settings.gradle b/settings.gradle index 297caa81f7..09f8359c5c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -139,6 +139,7 @@ include ':instrumentation:log4j:log4j-2-testing' include ':instrumentation:logback:logback-1.0:javaagent' include ':instrumentation:logback:logback-1.0:library' include ':instrumentation:logback:logback-1.0:testing' +include ':instrumentation:methods' include ':instrumentation:mongo:mongo-3.1' include ':instrumentation:mongo:mongo-3.7' include ':instrumentation:mongo:mongo-async-3.3' @@ -149,6 +150,7 @@ include ':instrumentation:netty:netty-4.0' include ':instrumentation:netty:netty-4.1' include ':instrumentation:okhttp:okhttp-2.2' include ':instrumentation:okhttp:okhttp-3.0' +include ':instrumentation:opentelemetry-annotations-1.0' include ':instrumentation:opentelemetry-api-1.0' include ':instrumentation:oshi:javaagent' include ':instrumentation:oshi:library'