diff --git a/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboInstrumentationModule.java b/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboInstrumentationModule.java index c5f0b5641e94..b353997ea93b 100644 --- a/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboInstrumentationModule.java +++ b/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboInstrumentationModule.java @@ -44,7 +44,11 @@ public ElementMatcher.Junction classLoaderMatcher() { public void injectClasses(ClassInjector injector) { injector .proxyBuilder( - "io.opentelemetry.javaagent.instrumentation.apachedubbo.v2_7.OpenTelemetryFilter") + "io.opentelemetry.javaagent.instrumentation.apachedubbo.v2_7.OpenTelemetryClientFilter") + .inject(InjectionMode.CLASS_ONLY); + injector + .proxyBuilder( + "io.opentelemetry.javaagent.instrumentation.apachedubbo.v2_7.OpenTelemetryServerFilter") .inject(InjectionMode.CLASS_ONLY); } diff --git a/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryFilter.java b/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryClientFilter.java similarity index 88% rename from instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryFilter.java rename to instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryClientFilter.java index 550f469ad9df..5680dd8860bf 100644 --- a/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryFilter.java +++ b/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryClientFilter.java @@ -16,12 +16,12 @@ import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Result; -@Activate(group = {"consumer", "provider"}) -public class OpenTelemetryFilter implements Filter { +@Activate(group = {"consumer"}) +public class OpenTelemetryClientFilter implements Filter { private final Filter delegate; - public OpenTelemetryFilter() { + public OpenTelemetryClientFilter() { delegate = DubboTelemetry.builder(GlobalOpenTelemetry.get()) .addAttributesExtractor( @@ -29,7 +29,7 @@ public OpenTelemetryFilter() { new DubboClientNetworkAttributesGetter(), AgentCommonConfig.get().getPeerServiceResolver())) .build() - .newFilter(); + .newClientFilter(); } @Override diff --git a/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryServerFilter.java b/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryServerFilter.java new file mode 100644 index 000000000000..0ac0fc17c836 --- /dev/null +++ b/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/OpenTelemetryServerFilter.java @@ -0,0 +1,39 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.apachedubbo.v2_7; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.apachedubbo.v2_7.DubboTelemetry; +import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboClientNetworkAttributesGetter; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +import org.apache.dubbo.common.extension.Activate; +import org.apache.dubbo.rpc.Filter; +import org.apache.dubbo.rpc.Invocation; +import org.apache.dubbo.rpc.Invoker; +import org.apache.dubbo.rpc.Result; + +@Activate(group = {"provider"}) +public class OpenTelemetryServerFilter implements Filter { + + private final Filter delegate; + + public OpenTelemetryServerFilter() { + delegate = + DubboTelemetry.builder(GlobalOpenTelemetry.get()) + .addAttributesExtractor( + PeerServiceAttributesExtractor.create( + new DubboClientNetworkAttributesGetter(), + AgentCommonConfig.get().getPeerServiceResolver())) + .build() + .newServerFilter(); + } + + @Override + public Result invoke(Invoker invoker, Invocation invocation) { + return delegate.invoke(invoker, invocation); + } +} diff --git a/instrumentation/apache-dubbo-2.7/javaagent/src/main/resources/apache-dubbo-2.7/META-INF/org.apache.dubbo.rpc.Filter b/instrumentation/apache-dubbo-2.7/javaagent/src/main/resources/apache-dubbo-2.7/META-INF/org.apache.dubbo.rpc.Filter index c4d39b0b344f..f76248783a71 100644 --- a/instrumentation/apache-dubbo-2.7/javaagent/src/main/resources/apache-dubbo-2.7/META-INF/org.apache.dubbo.rpc.Filter +++ b/instrumentation/apache-dubbo-2.7/javaagent/src/main/resources/apache-dubbo-2.7/META-INF/org.apache.dubbo.rpc.Filter @@ -1 +1,2 @@ -io.opentelemetry.javaagent.instrumentation.apachedubbo.v2_7.OpenTelemetryFilter \ No newline at end of file +io.opentelemetry.javaagent.instrumentation.apachedubbo.v2_7.OpenTelemetryClientFilter +io.opentelemetry.javaagent.instrumentation.apachedubbo.v2_7.OpenTelemetryServerFilter diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetry.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetry.java index 982ab442d27f..a59b81d83c5c 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetry.java +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetry.java @@ -26,6 +26,7 @@ public static DubboTelemetryBuilder builder(OpenTelemetry openTelemetry) { } private final Instrumenter serverInstrumenter; + private final Instrumenter clientInstrumenter; DubboTelemetry( @@ -35,8 +36,13 @@ public static DubboTelemetryBuilder builder(OpenTelemetry openTelemetry) { this.clientInstrumenter = clientInstrumenter; } - /** Returns a new Dubbo {@link Filter} that traces Dubbo RPC invocations. */ - public Filter newFilter() { - return new TracingFilter(serverInstrumenter, clientInstrumenter); + /** Returns a new Dubbo client {@link Filter} that traces Dubbo RPC invocations. */ + public Filter newClientFilter() { + return new TracingFilter(clientInstrumenter, true); + } + + /** Returns a new Dubbo server {@link Filter} that traces Dubbo RPC invocations. */ + public Filter newServerFilter() { + return new TracingFilter(serverInstrumenter, false); } } diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryFilter.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryClientFilter.java similarity index 80% rename from instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryFilter.java rename to instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryClientFilter.java index 8cf99f56d89a..49f480429c88 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryFilter.java +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryClientFilter.java @@ -12,13 +12,13 @@ import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Result; -@Activate(group = {"consumer", "provider"}) -public final class OpenTelemetryFilter implements Filter { +@Activate(group = {"consumer"}) +public final class OpenTelemetryClientFilter implements Filter { private final Filter delegate; - public OpenTelemetryFilter() { - delegate = DubboTelemetry.create(GlobalOpenTelemetry.get()).newFilter(); + public OpenTelemetryClientFilter() { + delegate = DubboTelemetry.create(GlobalOpenTelemetry.get()).newClientFilter(); } @Override diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryServerFilter.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryServerFilter.java new file mode 100644 index 000000000000..06e8fd402395 --- /dev/null +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/OpenTelemetryServerFilter.java @@ -0,0 +1,28 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.apachedubbo.v2_7; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import org.apache.dubbo.common.extension.Activate; +import org.apache.dubbo.rpc.Filter; +import org.apache.dubbo.rpc.Invocation; +import org.apache.dubbo.rpc.Invoker; +import org.apache.dubbo.rpc.Result; + +@Activate(group = {"provider"}) +public final class OpenTelemetryServerFilter implements Filter { + + private final Filter delegate; + + public OpenTelemetryServerFilter() { + delegate = DubboTelemetry.create(GlobalOpenTelemetry.get()).newServerFilter(); + } + + @Override + public Result invoke(Invoker invoker, Invocation invocation) { + return delegate.invoke(invoker, invocation); + } +} diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/TracingFilter.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/TracingFilter.java index d3d239096bb1..36fe35c678cc 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/TracingFilter.java +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/TracingFilter.java @@ -18,14 +18,12 @@ final class TracingFilter implements Filter { - private final Instrumenter serverInstrumenter; - private final Instrumenter clientInstrumenter; + private final Instrumenter instrumenter; + private final boolean isClient; - TracingFilter( - Instrumenter serverInstrumenter, - Instrumenter clientInstrumenter) { - this.serverInstrumenter = serverInstrumenter; - this.clientInstrumenter = clientInstrumenter; + TracingFilter(Instrumenter instrumenter, boolean isClient) { + this.instrumenter = instrumenter; + this.isClient = isClient; } @Override @@ -40,9 +38,6 @@ public Result invoke(Invoker invoker, Invocation invocation) { return invoker.invoke(invocation); } - boolean isServer = rpcContext.isProviderSide(); - Instrumenter instrumenter = - isServer ? serverInstrumenter : clientInstrumenter; Context parentContext = Context.current(); DubboRequest request = DubboRequest.create((RpcInvocation) invocation, rpcContext); @@ -55,7 +50,7 @@ public Result invoke(Invoker invoker, Invocation invocation) { boolean isSynchronous = true; try (Scope ignored = context.makeCurrent()) { result = invoker.invoke(invocation); - if (!isServer) { + if (isClient) { CompletableFuture future = rpcContext.getCompletableFuture(); if (future != null) { isSynchronous = false; diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/resources/META-INF/services/org.apache.dubbo.rpc.Filter b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/resources/META-INF/services/org.apache.dubbo.rpc.Filter index 42297d5caab4..250516c0dc0b 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/resources/META-INF/services/org.apache.dubbo.rpc.Filter +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/resources/META-INF/services/org.apache.dubbo.rpc.Filter @@ -1 +1,2 @@ -io.opentelemetry.instrumentation.apachedubbo.v2_7.OpenTelemetryFilter \ No newline at end of file +io.opentelemetry.instrumentation.apachedubbo.v2_7.OpenTelemetryClientFilter +io.opentelemetry.instrumentation.apachedubbo.v2_7.OpenTelemetryServerFilter