Use HttpRouteHolder in spark instrumentation
MODIFY
instrumentation/spark-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/sparkjava/RoutesInstrumentation.java
instrumentation/spark-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/sparkjava/RoutesInstrumentation.java
@@ -10,10 +10,8 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.returns;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
-import io.opentelemetry.api.trace.Span;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
-import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
@@ -40,12 +38,7 @@ public class RoutesInstrumentation implements TypeInstrumentation {
@Advice.OnMethodExit(suppress = Throwable.class)
public static void routeMatchEnricher(@Advice.Return RouteMatch routeMatch) {
-
- Span span = Java8BytecodeBridge.currentSpan();
- if (span != null && routeMatch != null) {
- // TODO should update SERVER span name/route using ServerSpanNaming
- span.updateName(routeMatch.getMatchUri());
- }
+ SparkRouteUpdater.updateHttpRoute(routeMatch);
}
}
}

ADD
instrumentation/spark-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/sparkjava/SparkRouteUpdater.java
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.sparkjava;
+
+import io.opentelemetry.context.Context;
+import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
+import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
+import javax.annotation.Nullable;
+import spark.routematch.RouteMatch;
+
+public final class SparkRouteUpdater {
+
+ public static void updateHttpRoute(@Nullable RouteMatch routeMatch) {
+ if (routeMatch != null) {
+ Context context = Context.current();
+ HttpRouteHolder.updateHttpRoute(
+ context, HttpRouteSource.CONTROLLER, (c, r) -> r.getMatchUri(), routeMatch);
+ }
+ }
+
+ private SparkRouteUpdater() {}
+}

MODIFY
instrumentation/spark-2.3/javaagent/src/test/groovy/SparkJavaBasedTest.groovy
instrumentation/spark-2.3/javaagent/src/test/groovy/SparkJavaBasedTest.groovy
* SPDX-License-Identifier: Apache-2.0
*/
-import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP
-
import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification
import io.opentelemetry.instrumentation.test.utils.PortUtils
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes
@@ -13,6 +11,7 @@ import spark.Spark
import spock.lang.Shared
import static io.opentelemetry.api.trace.SpanKind.SERVER
+import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTransportValues.IP_TCP
class SparkJavaBasedTest extends AgentInstrumentationSpecification {
@@ -48,6 +47,7 @@ class SparkJavaBasedTest extends AgentInstrumentationSpecification {
kind SERVER
hasNoParent()
attributes {
+ "$SemanticAttributes.NET_TRANSPORT" IP_TCP
"$SemanticAttributes.NET_PEER_IP" "127.0.0.1"
"$SemanticAttributes.NET_PEER_PORT" Long
"$SemanticAttributes.HTTP_SCHEME" "http"
@@ -58,7 +58,7 @@ class SparkJavaBasedTest extends AgentInstrumentationSpecification {
"$SemanticAttributes.HTTP_FLAVOR" "1.1"
"$SemanticAttributes.HTTP_USER_AGENT" String
"$SemanticAttributes.HTTP_SERVER_NAME" String
- "$SemanticAttributes.NET_TRANSPORT" IP_TCP
+ "$SemanticAttributes.HTTP_ROUTE" "/param/:param"
}
}
}

Use HttpRouteHolder in spark instrumentation (#5241)