From ebccd4686f4c6a576365ec13057d3124f0daf2c1 Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Fri, 28 Jan 2022 12:16:12 +0100 Subject: [PATCH] Log a warning whenever GlobalOpenTelemetry.set() is called --- .../OpenTelemetryInstrumentation.java | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/OpenTelemetryInstrumentation.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/OpenTelemetryInstrumentation.java index dff235834e34..bc3811055ce2 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/OpenTelemetryInstrumentation.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/OpenTelemetryInstrumentation.java @@ -8,6 +8,8 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isStatic; import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.returns; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; @@ -15,6 +17,7 @@ import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; +import org.slf4j.LoggerFactory; // Our convention for accessing agent package @SuppressWarnings("UnnecessarilyFullyQualified") @@ -28,12 +31,23 @@ public ElementMatcher typeMatcher() { @Override public void transform(TypeTransformer transformer) { transformer.applyAdviceToMethod( - isMethod().and(isStatic()).and(named("get")).and(takesArguments(0)), - OpenTelemetryInstrumentation.class.getName() + "$GetGlobalOpenTelemetryAdvice"); + isMethod() + .and(isStatic()) + .and(named("get")) + .and(takesArguments(0)) + .and(returns(named("application.io.opentelemetry.api.OpenTelemetry"))), + OpenTelemetryInstrumentation.class.getName() + "$GetAdvice"); + transformer.applyAdviceToMethod( + isMethod() + .and(isStatic()) + .and(named("set")) + .and(takesArguments(1)) + .and(takesArgument(0, named("application.io.opentelemetry.api.OpenTelemetry"))), + OpenTelemetryInstrumentation.class.getName() + "$SetAdvice"); } @SuppressWarnings("unused") - public static class GetGlobalOpenTelemetryAdvice { + public static class GetAdvice { @Advice.OnMethodEnter(skipOn = Advice.OnDefaultValue.class) public static Object onEnter() { @@ -47,4 +61,18 @@ public static void methodExit( openTelemetry = ApplicationOpenTelemetry.INSTANCE; } } + + @SuppressWarnings("unused") + public static class SetAdvice { + + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void onEnter() { + LoggerFactory.getLogger(application.io.opentelemetry.api.GlobalOpenTelemetry.class) + .warn( + "You are currently using the OpenTelemetry Instrumentation Java Agent;" + + " all GlobalOpenTelemetry.set calls are ignored - the agent provides" + + " the global OpenTelemetry object used by your application.", + new Throwable()); + } + } }