From 436aeaf99adb3eb14ea63036c9c75837202165cb Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 30 Aug 2021 09:02:59 -0700 Subject: [PATCH] Another ClassValue optimization (#4013) * Another ClassValue optimization * Spotless --- .../HandlerAdapterInstrumentation.java | 3 ++- .../springwebmvc/IsGrailsHandler.java | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/IsGrailsHandler.java diff --git a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/HandlerAdapterInstrumentation.java b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/HandlerAdapterInstrumentation.java index 2438db45c5..23d89a7770 100644 --- a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/HandlerAdapterInstrumentation.java +++ b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/HandlerAdapterInstrumentation.java @@ -8,6 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.springwebmvc; import static io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming.Source.CONTROLLER; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; +import static io.opentelemetry.javaagent.instrumentation.springwebmvc.IsGrailsHandler.isGrailsHandler; import static io.opentelemetry.javaagent.instrumentation.springwebmvc.SpringWebMvcSingletons.handlerInstrumenter; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; @@ -60,7 +61,7 @@ public class HandlerAdapterInstrumentation implements TypeInstrumentation { @Advice.Local("otelContext") Context context, @Advice.Local("otelScope") Scope scope) { // TODO (trask) should there be a way to customize Instrumenter.shouldStart()? - if (handler.getClass().getName().startsWith("org.grails.")) { + if (isGrailsHandler(handler)) { // skip creating handler span for grails, grails instrumentation will take care of it return; } diff --git a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/IsGrailsHandler.java b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/IsGrailsHandler.java new file mode 100644 index 0000000000..f3a35cfd6b --- /dev/null +++ b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/IsGrailsHandler.java @@ -0,0 +1,23 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.springwebmvc; + +public final class IsGrailsHandler { + + private static final ClassValue cache = + new ClassValue() { + @Override + protected Boolean computeValue(Class type) { + return type.getName().startsWith("org.grails."); + } + }; + + public static boolean isGrailsHandler(Object handler) { + return cache.get(handler.getClass()); + } + + private IsGrailsHandler() {} +}