diff --git a/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/RpcCodeAttributesGetter.java b/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/RpcCodeAttributesGetter.java new file mode 100644 index 000000000000..e5cd3009ab12 --- /dev/null +++ b/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/RpcCodeAttributesGetter.java @@ -0,0 +1,21 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.vaadin; + +import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesGetter; + +public class RpcCodeAttributesGetter implements CodeAttributesGetter { + + @Override + public Class getCodeClass(VaadinRpcRequest request) { + return request.getRpcInvocationHandler().getClass(); + } + + @Override + public String getMethodName(VaadinRpcRequest request) { + return request.getMethodName(); + } +} diff --git a/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/VaadinSingletons.java b/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/VaadinSingletons.java index 8f125b19d922..d7e41033dd72 100644 --- a/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/VaadinSingletons.java +++ b/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/VaadinSingletons.java @@ -50,10 +50,12 @@ public class VaadinSingletons { context.with(REQUEST_HANDLER_CONTEXT_KEY, true)) .buildInstrumenter(); + RpcCodeAttributesGetter rpcCodeAttributesGetter = new RpcCodeAttributesGetter(); RPC_INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, VaadinSingletons::rpcSpanName) .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .addAttributesExtractor(CodeAttributesExtractor.create(rpcCodeAttributesGetter)) .buildInstrumenter(); SERVICE_INSTRUMENTER = diff --git a/instrumentation/vaadin-14.2/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/AbstractVaadinTest.java b/instrumentation/vaadin-14.2/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/AbstractVaadinTest.java index f80635f5cae2..3ec889bfae80 100644 --- a/instrumentation/vaadin-14.2/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/AbstractVaadinTest.java +++ b/instrumentation/vaadin-14.2/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/AbstractVaadinTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.vaadin; +import static io.opentelemetry.instrumentation.testing.junit.code.SemconvCodeStabilityUtil.codeFunctionAssertions; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static org.awaitility.Awaitility.await; @@ -170,7 +171,11 @@ private void assertButtonClick() { assertThat(spans.get(spans.size() - 1)) .hasName("EventRpcHandler.handle/click") .hasParent(spans.get(spans.size() - 2)) - .hasKind(SpanKind.INTERNAL); + .hasKind(SpanKind.INTERNAL) + .hasAttributesSatisfyingExactly( + codeFunctionAssertions( + "com.vaadin.flow.server.communication.rpc.EventRpcHandler", + "handle")); }); }); }