From 0190c13027a15d9f67ba73761c359d0156a58439 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Tue, 7 Jan 2025 18:44:33 +0800 Subject: [PATCH 01/17] feat: support instrumentation for jsonrpc4j --- .../jsonrpc4j-1.6/javaagent/build.gradle.kts | 29 ++++++ .../JsonRpcClientBuilderInstrumentation.java | 87 +++++++++++++++++ .../v1_6/JsonRpcInstrumentationModule.java | 24 +++++ .../JsonRpcServerBuilderInstrumentation.java | 52 ++++++++++ .../jsonrpc4j/v1_6/JsonRpcSingletons.java | 29 ++++++ ...ServiceExporterBuilderInstrumentation.java | 50 ++++++++++ .../jsonrpc4j/v1_6/AgentJsonRpcTest.java | 29 ++++++ .../jsonrpc4j-1.6/library/build.gradle.kts | 14 +++ .../JsonRpcClientAttributesExtractor.java | 33 +++++++ .../v1_6/JsonRpcClientAttributesGetter.java | 25 +++++ .../v1_6/JsonRpcClientSpanNameExtractor.java | 10 ++ .../jsonrpc4j/v1_6/JsonRpcRequest.java | 27 ++++++ .../jsonrpc4j/v1_6/JsonRpcRequestGetter.java | 20 ++++ .../jsonrpc4j/v1_6/JsonRpcResponse.java | 29 ++++++ .../JsonRpcServerAttributesExtractor.java | 52 ++++++++++ .../v1_6/JsonRpcServerAttributesGetter.java | 25 +++++ .../v1_6/JsonRpcServerSpanNameExtractor.java | 10 ++ .../JsonRpcServerSpanStatusExtractor.java | 31 ++++++ .../jsonrpc4j/v1_6/JsonRpcTelemetry.java | 37 ++++++++ .../v1_6/JsonRpcTelemetryBuilder.java | 94 +++++++++++++++++++ ...penTelemetryJsonRpcInvocationListener.java | 65 +++++++++++++ .../jsonrpc4j/v1_6/SimpleJsonRpcRequest.java | 21 +++++ .../jsonrpc4j/v1_6/SimpleJsonRpcResponse.java | 15 +++ .../jsonrpc4j/v1_6/LibraryJsonRpcTest.java | 27 ++++++ .../jsonrpc4j-1.6/testing/build.gradle.kts | 18 ++++ .../jsonrpc4j/v1_6/AbstractJsonRpcTest.java | 90 ++++++++++++++++++ .../jsonrpc4j/v1_6/CalculatorService.java | 10 ++ .../jsonrpc4j/v1_6/CalculatorServiceImpl.java | 13 +++ settings.gradle.kts | 3 + 29 files changed, 969 insertions(+) create mode 100644 instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts create mode 100644 instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java create mode 100644 instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java create mode 100644 instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java create mode 100644 instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java create mode 100644 instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java create mode 100644 instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/build.gradle.kts create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java create mode 100644 instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts create mode 100644 instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java create mode 100644 instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java create mode 100644 instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts new file mode 100644 index 000000000000..77b5ef767523 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + id("otel.javaagent-instrumentation") +} + +muzzle { + pass { + group.set("com.github.briandilley.jsonrpc4j") + module.set("jsonrpc4j") + versions.set("[1.6,)") + assertInverse.set(true) + } +} + +val jsonrpcVersion = "1.6" + +dependencies { + implementation(project(":instrumentation:jsonrpc4j-1.6:library")) + implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") + testImplementation(project(":instrumentation:jsonrpc4j-1.6:testing")) +} + + +tasks { + test { + systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) + jvmArgs("-Dotel.javaagent.experimental.thread-propagation-debugger.enabled=false") + jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") + } +} diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java new file mode 100644 index 000000000000..0aa92b064b85 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java @@ -0,0 +1,87 @@ +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; + +import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext; +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; +import static net.bytebuddy.matcher.ElementMatchers.isMethod; +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.context.Context; +import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcResponse; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.matcher.ElementMatcher; + +public class JsonRpcClientBuilderInstrumentation implements TypeInstrumentation { + + @Override + public ElementMatcher classLoaderOptimization() { + return hasClassesNamed("com.googlecode.jsonrpc4j.IJsonRpcClient"); + } + + @Override + public ElementMatcher typeMatcher() { + // match JsonRpcHttpClient and JsonRpcRestClient + return implementsInterface(named("com.googlecode.jsonrpc4j.IJsonRpcClient")); + } + + @Override + public void transform(TypeTransformer transformer) { + transformer.applyAdviceToMethod( + isMethod() + .and(named("invoke")) + .and(takesArguments(4)) + .and(takesArgument(0, String.class)) + .and(takesArgument(1, Object.class)) + .and(takesArgument(2, named("java.lang.reflect.Type"))) + .and(takesArgument(3, named("java.util.Map"))) + .and(returns(Object.class)), + this.getClass().getName() + "$InvokeAdvice"); + } + + @SuppressWarnings("unused") + public static class InvokeAdvice { + + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void onEnter( + @Advice.Argument(0) String methodName, + @Advice.Argument(1) Object argument, + @Advice.Local("otelContext") Context context, + @Advice.Local("otelScope") Scope scope) { + Context parentContext = currentContext(); + SimpleJsonRpcRequest request = new SimpleJsonRpcRequest( + methodName, + argument + ); + if (!JsonRpcSingletons.CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { + return; + } + + context = JsonRpcSingletons.CLIENT_INSTRUMENTER.start(parentContext, request); + scope = context.makeCurrent(); + } + + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + public static void onExit( + @Advice.Argument(0) String methodName, + @Advice.Argument(1) Object argument, + @Advice.Return Object result, + @Advice.Thrown Throwable throwable, + @Advice.Local("otelContext") Context context, + @Advice.Local("otelScope") Scope scope) { + if (scope == null) { + return; + } + + scope.close(); + JsonRpcSingletons.CLIENT_INSTRUMENTER.end(context, new SimpleJsonRpcRequest(methodName, argument), new SimpleJsonRpcResponse(result), throwable); + } + } +} diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java new file mode 100644 index 000000000000..a663dc8e0a15 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java @@ -0,0 +1,24 @@ +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; + +import static java.util.Arrays.asList; + +import com.google.auto.service.AutoService; +import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import java.util.List; + +@AutoService(InstrumentationModule.class) +public class JsonRpcInstrumentationModule extends InstrumentationModule { + public JsonRpcInstrumentationModule() { + super("jsonrpc4j", "jsonrpc4j-1.6"); + } + + @Override + public List typeInstrumentations() { + return asList( + new JsonRpcServerBuilderInstrumentation(), + new JsonServiceExporterBuilderInstrumentation(), + new JsonRpcClientBuilderInstrumentation() + ); + } +} diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java new file mode 100644 index 000000000000..677b951d8c5d --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java @@ -0,0 +1,52 @@ +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; + +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static net.bytebuddy.matcher.ElementMatchers.isConstructor; +import static net.bytebuddy.matcher.ElementMatchers.named; + +import com.googlecode.jsonrpc4j.InvocationListener; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import net.bytebuddy.description.type.TypeDescription; +import io.opentelemetry.instrumentation.api.util.VirtualField; +import net.bytebuddy.matcher.ElementMatcher; +import com.googlecode.jsonrpc4j.JsonRpcBasicServer; +import net.bytebuddy.asm.Advice; + +public class JsonRpcServerBuilderInstrumentation implements TypeInstrumentation { + + + @Override + public ElementMatcher classLoaderOptimization() { + return hasClassesNamed("com.googlecode.jsonrpc4j.JsonRpcBasicServer"); + } + + @Override + public ElementMatcher typeMatcher() { + return named("com.googlecode.jsonrpc4j.JsonRpcBasicServer"); + } + + @Override + public void transform(TypeTransformer transformer) { + transformer.applyAdviceToMethod( + isConstructor(), + this.getClass().getName() + "$ConstructorAdvice"); + } + + @SuppressWarnings("unused") + public static class ConstructorAdvice { + + @Advice.OnMethodExit(suppress = Throwable.class) + public static void setInvocationListener( + @Advice.This JsonRpcBasicServer jsonRpcServer, + @Advice.FieldValue("invocationListener") InvocationListener invocationListener) { + VirtualField instrumented = + VirtualField.find(JsonRpcBasicServer.class, Boolean.class); + if (!Boolean.TRUE.equals(instrumented.get(jsonRpcServer))) { + jsonRpcServer.setInvocationListener(JsonRpcSingletons.SERVER_INVOCATION_LISTENER); + instrumented.set(jsonRpcServer, true); + } + } + } + +} diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java new file mode 100644 index 000000000000..e63109db170f --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java @@ -0,0 +1,29 @@ +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; + +import com.googlecode.jsonrpc4j.InvocationListener; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.JsonRpcTelemetry; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcResponse; + + +public final class JsonRpcSingletons { + + public static final InvocationListener SERVER_INVOCATION_LISTENER; + + public static final Instrumenter CLIENT_INSTRUMENTER; + + + static { + JsonRpcTelemetry telemetry = + JsonRpcTelemetry.builder(GlobalOpenTelemetry.get()) + .build(); + + SERVER_INVOCATION_LISTENER = telemetry.newServerInvocationListener(); + CLIENT_INSTRUMENTER = telemetry.getClientInstrumenter(); + } + + + private JsonRpcSingletons() {} +} diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java new file mode 100644 index 000000000000..a69587bccc24 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java @@ -0,0 +1,50 @@ +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; + +import com.googlecode.jsonrpc4j.JsonRpcServer; +import com.googlecode.jsonrpc4j.spring.JsonServiceExporter; +import io.opentelemetry.instrumentation.api.util.VirtualField; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.matcher.ElementMatcher; + + +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static net.bytebuddy.matcher.ElementMatchers.isMethod; +import static net.bytebuddy.matcher.ElementMatchers.named; + +public class JsonServiceExporterBuilderInstrumentation implements TypeInstrumentation { + @Override + public ElementMatcher classLoaderOptimization() { + return hasClassesNamed("com.googlecode.jsonrpc4j.spring.JsonServiceExporter"); + } + + @Override + public ElementMatcher typeMatcher() { + return named("com.googlecode.jsonrpc4j.spring.JsonServiceExporter"); + } + + @Override + public void transform(TypeTransformer transformer) { + transformer.applyAdviceToMethod( + isMethod().and(named("exportService")), + this.getClass().getName() + "$ExportAdvice"); + } + + @SuppressWarnings("unused") + public static class ExportAdvice { + + @Advice.OnMethodExit(suppress = Throwable.class) + public static void setInvocationListener( + @Advice.This JsonServiceExporter exporter, + @Advice.FieldValue("jsonRpcServer") JsonRpcServer jsonRpcServer) { + VirtualField instrumented = + VirtualField.find(JsonRpcServer.class, Boolean.class); + if (!Boolean.TRUE.equals(instrumented.get(jsonRpcServer))) { + jsonRpcServer.setInvocationListener(JsonRpcSingletons.SERVER_INVOCATION_LISTENER); + instrumented.set(jsonRpcServer, true); + } + } + } +} diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java new file mode 100644 index 000000000000..0012d13dff88 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java @@ -0,0 +1,29 @@ +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; + +import com.googlecode.jsonrpc4j.JsonRpcBasicServer; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.AbstractJsonRpcTest; +import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import org.junit.jupiter.api.extension.RegisterExtension; + +public class AgentJsonRpcTest extends AbstractJsonRpcTest { + + + @RegisterExtension + static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + + + @Override + protected InstrumentationExtension testing() { + return testing; + } + + @Override + protected JsonRpcBasicServer configureServer(JsonRpcBasicServer server) { + return server; + } + + + + +} diff --git a/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts new file mode 100644 index 000000000000..36e5872e74e4 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + id("otel.library-instrumentation") +} + +val jsonrpcVersion = "1.6" +val jacksonVersion = "2.13.3" + +dependencies { + implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") + + implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") + + testImplementation(project(":instrumentation:jsonrpc4j-1.6:testing")) +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java new file mode 100644 index 000000000000..495935bc0456 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java @@ -0,0 +1,33 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import javax.annotation.Nullable; + +// Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ +final class JsonRpcClientAttributesExtractor implements AttributesExtractor { + +// private final JsonRpcClientAttributesGetter getter; +// +// +// JsonRpcClientAttributesExtractor(JsonRpcClientAttributesGetter getter) { +// this.getter = getter; +// } + + @Override + public void onStart(AttributesBuilder attributes, Context parentContext, + SimpleJsonRpcRequest jsonRpcRequest) { + attributes.put("rpc.jsonrpc.version", "2.0"); + } + + @Override + public void onEnd( + AttributesBuilder attributes, + Context context, + SimpleJsonRpcRequest jsonRpcRequest, + @Nullable SimpleJsonRpcResponse jsonRpcResponse, + @Nullable Throwable error) { + + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java new file mode 100644 index 000000000000..1d3f6eb654ba --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java @@ -0,0 +1,25 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; + +// Check https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes +// Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ +public enum JsonRpcClientAttributesGetter implements RpcAttributesGetter { + INSTANCE; + + @Override + public String getSystem(SimpleJsonRpcRequest request) { + return "jsonrpc"; + } + + @Override + public String getService(SimpleJsonRpcRequest request) { + // TODO + return "NOT_IMPLEMENTED"; + } + + @Override + public String getMethod(SimpleJsonRpcRequest request) { + return request.getMethodName(); + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java new file mode 100644 index 000000000000..9ae18cd74687 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java @@ -0,0 +1,10 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; + +public class JsonRpcClientSpanNameExtractor implements SpanNameExtractor { + @Override + public String extract(SimpleJsonRpcRequest request) { + return request.getMethodName(); + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java new file mode 100644 index 000000000000..4cbebce1ea4b --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java @@ -0,0 +1,27 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import java.lang.reflect.Method; +import java.util.List; +import com.fasterxml.jackson.databind.JsonNode; + +public final class JsonRpcRequest { + + private final Method method; + private final List arguments; + + JsonRpcRequest(Method method, List arguments) { + this.method = method; + this.arguments = arguments; + } + + + public Method getMethod() { + return method; + } + + public List getArguments() { + return arguments; + } + + +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java new file mode 100644 index 000000000000..579b616e475c --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java @@ -0,0 +1,20 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import io.opentelemetry.context.propagation.TextMapGetter; +import javax.annotation.Nullable; +import java.util.ArrayList; + +enum JsonRpcRequestGetter implements TextMapGetter { + INSTANCE; + + @Override + public Iterable keys(JsonRpcRequest request) { + return new ArrayList<>(); + } + + @Override + @Nullable + public String get(@Nullable JsonRpcRequest request, String key) { + return null; + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java new file mode 100644 index 000000000000..ed9e244cb366 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java @@ -0,0 +1,29 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import java.lang.reflect.Method; +import java.util.List; +import com.fasterxml.jackson.databind.JsonNode; + +public final class JsonRpcResponse { + private final Method method; + private final List params; + private final Object result; + + JsonRpcResponse(Method method, List params, Object result) { + this.method = method; + this.params = params; + this.result = result; + } + + public Method getMethod() { + return method; + } + + public List getParams() { + return params; + } + + public Object getResult() { + return result; + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java new file mode 100644 index 000000000000..5e51dd2a77dd --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java @@ -0,0 +1,52 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import com.googlecode.jsonrpc4j.AnnotationsErrorResolver; +import com.googlecode.jsonrpc4j.DefaultErrorResolver; +import com.googlecode.jsonrpc4j.ErrorResolver; +import com.googlecode.jsonrpc4j.MultipleErrorResolver; +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import javax.annotation.Nullable; + +// Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ +final class JsonRpcServerAttributesExtractor implements AttributesExtractor { + + private static final AttributeKey RPC_JSONRPC_ERROR_CODE = + AttributeKey.longKey("rpc.jsonrpc.error_code"); + + private static final AttributeKey RPC_JSONRPC_ERROR_MESSAGE = + AttributeKey.stringKey("rpc.jsonrpc.error_message"); + +// private final JsonRpcServerAttributesGetter getter; +// +// +// JsonRpcServerAttributesExtractor(JsonRpcServerAttributesGetter getter) { +// this.getter = getter; +// } + + @Override + public void onStart(AttributesBuilder attributes, Context parentContext, + JsonRpcRequest jsonRpcRequest) { + attributes.put("rpc.jsonrpc.version", "2.0"); + } + + @Override + public void onEnd( + AttributesBuilder attributes, + Context context, + JsonRpcRequest jsonRpcRequest, + @Nullable JsonRpcResponse jsonRpcResponse, + @Nullable Throwable error) { + // use the DEFAULT_ERROR_RESOLVER to extract error code and message + if (error != null) { + ErrorResolver errorResolver = new MultipleErrorResolver(AnnotationsErrorResolver.INSTANCE, DefaultErrorResolver.INSTANCE); + ErrorResolver.JsonError jsonError = errorResolver.resolveError(error, jsonRpcRequest.getMethod(), jsonRpcRequest.getArguments()); + attributes.put(RPC_JSONRPC_ERROR_CODE, jsonError.code); + attributes.put(RPC_JSONRPC_ERROR_MESSAGE, jsonError.message); + } else { + attributes.put(RPC_JSONRPC_ERROR_CODE, ErrorResolver.JsonError.OK.code); + } + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java new file mode 100644 index 000000000000..52b3beebddf2 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java @@ -0,0 +1,25 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import com.googlecode.jsonrpc4j.JsonRpcService; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; + +// Check https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes +// Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ +public enum JsonRpcServerAttributesGetter implements RpcAttributesGetter { + INSTANCE; + + @Override + public String getSystem(JsonRpcRequest request) { + return "jsonrpc"; + } + + @Override + public String getService(JsonRpcRequest request) { + return request.getMethod().getDeclaringClass().getAnnotation(JsonRpcService.class).value(); + } + + @Override + public String getMethod(JsonRpcRequest request) { + return request.getMethod().getName(); + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java new file mode 100644 index 000000000000..244172bbd7d5 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java @@ -0,0 +1,10 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; + +public class JsonRpcServerSpanNameExtractor implements SpanNameExtractor { + @Override + public String extract(JsonRpcRequest request) { + return request.getMethod().getName(); + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java new file mode 100644 index 000000000000..90220d9c0bcd --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java @@ -0,0 +1,31 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; +import javax.annotation.Nullable; + +public enum JsonRpcServerSpanStatusExtractor implements SpanStatusExtractor { + + INSTANCE; + + /** + * Extracts the status from the response and sets it to the {@code spanStatusBuilder}. + */ + @Override + public void extract(SpanStatusBuilder spanStatusBuilder, JsonRpcRequest jsonRpcRequest, + @Nullable JsonRpcResponse jsonRpcResponse, @Nullable Throwable error) { + if (error == null) { + spanStatusBuilder.setStatus(StatusCode.OK); + } + + // treat client invalid input as OK + if (error instanceof JsonParseException || error instanceof JsonMappingException) { + spanStatusBuilder.setStatus(StatusCode.OK); + } + + spanStatusBuilder.setStatus(StatusCode.ERROR); + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java new file mode 100644 index 000000000000..d93e175b83e7 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java @@ -0,0 +1,37 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + + +import com.googlecode.jsonrpc4j.InvocationListener; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; + +public final class JsonRpcTelemetry { + public static JsonRpcTelemetry create(OpenTelemetry openTelemetry) { + return builder(openTelemetry).build(); + } + + public static JsonRpcTelemetryBuilder builder(OpenTelemetry openTelemetry) { + return new JsonRpcTelemetryBuilder(openTelemetry); + } + + private final Instrumenter serverInstrumenter; + private final Instrumenter clientInstrumenter; + + JsonRpcTelemetry( + Instrumenter serverInstrumenter, + Instrumenter clientInstrumenter, + ContextPropagators propagators) { + this.serverInstrumenter = serverInstrumenter; + this.clientInstrumenter = clientInstrumenter; + } + + + public InvocationListener newServerInvocationListener() { + return new OpenTelemetryJsonRpcInvocationListener(serverInstrumenter); + } + + public Instrumenter getClientInstrumenter() { + return clientInstrumenter; + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java new file mode 100644 index 000000000000..ecd8046357a3 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java @@ -0,0 +1,94 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientMetrics; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcServerAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcServerMetrics; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import java.util.ArrayList; +import java.util.List; + +public class JsonRpcTelemetryBuilder { + + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jsonrpc4j-1.6"; + + private final OpenTelemetry openTelemetry; + + private final List> + additionalClientExtractors = new ArrayList<>(); + private final List> + additionalServerExtractors = new ArrayList<>(); + + JsonRpcTelemetryBuilder(OpenTelemetry openTelemetry) { + this.openTelemetry = openTelemetry; + } + + + /** + * Adds an extra client-only {@link AttributesExtractor} to invoke to set attributes to + * instrumented items. The {@link AttributesExtractor} will be executed after all default + * extractors. + */ + @CanIgnoreReturnValue + public JsonRpcTelemetryBuilder addClientAttributeExtractor( + AttributesExtractor attributesExtractor) { + additionalClientExtractors.add(attributesExtractor); + return this; + } + + /** + * Adds an extra server-only {@link AttributesExtractor} to invoke to set attributes to + * instrumented items. The {@link AttributesExtractor} will be executed after all default + * extractors. + */ + @CanIgnoreReturnValue + public JsonRpcTelemetryBuilder addServerAttributeExtractor( + AttributesExtractor attributesExtractor) { + additionalServerExtractors.add(attributesExtractor); + return this; + } + + + + + public JsonRpcTelemetry build() { + SpanNameExtractor clientSpanNameExtractor = new JsonRpcClientSpanNameExtractor(); + SpanNameExtractor serverSpanNameExtractor = new JsonRpcServerSpanNameExtractor(); + + InstrumenterBuilder clientInstrumenterBuilder = + Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor); + + InstrumenterBuilder serverInstrumenterBuilder = + Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, serverSpanNameExtractor); + + JsonRpcServerAttributesGetter serverRpcAttributesGetter = JsonRpcServerAttributesGetter.INSTANCE; + JsonRpcClientAttributesGetter clientRpcAttributesGetter = JsonRpcClientAttributesGetter.INSTANCE; + + clientInstrumenterBuilder + .addAttributesExtractor(RpcClientAttributesExtractor.create(clientRpcAttributesGetter)) + .addAttributesExtractors(additionalClientExtractors) + .addAttributesExtractor(new JsonRpcClientAttributesExtractor()) + .addOperationMetrics(RpcClientMetrics.get()); + + serverInstrumenterBuilder + .setSpanStatusExtractor(JsonRpcServerSpanStatusExtractor.INSTANCE) + .addAttributesExtractor(RpcServerAttributesExtractor.create(serverRpcAttributesGetter)) + .addAttributesExtractor(new JsonRpcServerAttributesExtractor()) + .addAttributesExtractors(additionalServerExtractors) + .addOperationMetrics(RpcServerMetrics.get()); + + return new JsonRpcTelemetry( + serverInstrumenterBuilder.buildServerInstrumenter(JsonRpcRequestGetter.INSTANCE), + clientInstrumenterBuilder.buildInstrumenter(SpanKindExtractor.alwaysClient()), + openTelemetry.getPropagators() + ); + + } + +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java new file mode 100644 index 000000000000..02246113fe7d --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java @@ -0,0 +1,65 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import com.fasterxml.jackson.databind.JsonNode; +import com.googlecode.jsonrpc4j.InvocationListener; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import java.lang.reflect.Method; +import java.util.List; + +public final class OpenTelemetryJsonRpcInvocationListener implements InvocationListener { + + private final Instrumenter serverInstrumenter; + + private static final ThreadLocal threadLocalContext = new ThreadLocal<>(); + private static final ThreadLocal threadLocalScope = new ThreadLocal<>(); + + public OpenTelemetryJsonRpcInvocationListener( + Instrumenter serverInstrumenter) { + this.serverInstrumenter = serverInstrumenter; + } + + /** + * This method will be invoked prior to a JSON-RPC service being invoked. + * + * @param method is the method that will be invoked. + * @param arguments are the arguments that will be passed to the method when it is invoked. + */ + @Override + public void willInvoke(Method method, List arguments) { +// System.out.printf("inside willInvoke: method is %s, arguments are %s \n", method.getName(), arguments.toString()); + Context parentContext = Context.current(); + JsonRpcRequest request = new JsonRpcRequest(method, arguments); + if (!serverInstrumenter.shouldStart(parentContext, request)) { + return; + } + + Context context = serverInstrumenter.start(parentContext, request); + threadLocalContext.set(context); + threadLocalScope.set(context.makeCurrent()); + } + + /** + * This method will be invoked after a JSON-RPC service has been invoked. + * + * @param method is the method that will was invoked. + * @param arguments are the arguments that were be passed to the method when it is invoked. + * @param result is the result of the method invocation. If an error arose, this value will be + * null. + * @param t is the throwable that was thrown from the invocation, if no error arose, this value + * will be null. + * @param duration is approximately the number of milliseconds that elapsed during which the method was invoked. + */ + @Override + public void didInvoke(Method method, List arguments, Object result, Throwable t, + long duration) { +// System.out.printf("inside didInvoke: method is %s, arguments are %s \n", method.getName(), arguments.toString()); + JsonRpcRequest request = new JsonRpcRequest(method, arguments); + JsonRpcResponse response = new JsonRpcResponse(method, arguments, result); + threadLocalScope.get().close(); + serverInstrumenter.end(threadLocalContext.get(), request, response, t); + threadLocalContext.remove(); + threadLocalScope.remove(); + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java new file mode 100644 index 000000000000..bef6d86f32bb --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java @@ -0,0 +1,21 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + + +public final class SimpleJsonRpcRequest { + + private final String methodName; + private final Object argument; + + public SimpleJsonRpcRequest(String methodName, Object argument) { + this.methodName = methodName; + this.argument = argument; + } + + public String getMethodName() { + return methodName; + } + + public Object getArgument() { + return argument; + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java new file mode 100644 index 000000000000..8992955cb302 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java @@ -0,0 +1,15 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +public final class SimpleJsonRpcResponse { + + private final Object result; + + + public SimpleJsonRpcResponse(Object result) { + this.result = result; + } + + public Object getResult() { + return result; + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java b/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java new file mode 100644 index 000000000000..39d7c847d290 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java @@ -0,0 +1,27 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import com.googlecode.jsonrpc4j.JsonRpcBasicServer; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; +import org.junit.jupiter.api.extension.RegisterExtension; + +public class LibraryJsonRpcTest extends AbstractJsonRpcTest { + + @RegisterExtension + static InstrumentationExtension testing = LibraryInstrumentationExtension.create(); + + @Override + protected InstrumentationExtension testing() { + return testing; + } + + @Override + protected JsonRpcBasicServer configureServer(JsonRpcBasicServer server) { + server.setInvocationListener( + JsonRpcTelemetry.builder(testing.getOpenTelemetry()) + .build() + .newServerInvocationListener()); + return server; + } + +} diff --git a/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts new file mode 100644 index 000000000000..93ff1ba0d961 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + id("otel.java-conventions") +} + +val jsonrpcVersion = "1.6" + +dependencies { + api(project(":testing-common")) + + implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") + implementation("com.fasterxml.jackson.core:jackson-databind:2.13.3") + + + // ... +} + + + diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java new file mode 100644 index 000000000000..8e36255adab6 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java @@ -0,0 +1,90 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_JSONRPC_ERROR_CODE; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_JSONRPC_VERSION; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SYSTEM; +import static java.nio.charset.StandardCharsets.UTF_8; + +import com.googlecode.jsonrpc4j.JsonRpcBasicServer; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.testing.internal.jackson.databind.JsonNode; +import io.opentelemetry.testing.internal.jackson.databind.ObjectMapper; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +@SuppressWarnings("deprecation") // using deprecated semconv +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public abstract class AbstractJsonRpcTest { + + protected abstract InstrumentationExtension testing(); + + protected abstract JsonRpcBasicServer configureServer(JsonRpcBasicServer server); + + + @Test + void testServer() throws IOException { + CalculatorService calculator = new CalculatorServiceImpl(); + JsonRpcBasicServer server = configureServer(new JsonRpcBasicServer(calculator, CalculatorService.class)); + + JsonNode response = testing() + .runWithSpan( + "parent", + () -> { + InputStream inputStream = new ByteArrayInputStream("{\"jsonrpc\":\"2.0\",\"method\":\"add\",\"params\":[1,2],\"id\":1}".getBytes(UTF_8)); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + server.handleRequest(inputStream, outputStream); + + // Read the JsonNode from the InputStream + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readTree(new ByteArrayInputStream(outputStream.toByteArray())); + }); + + assertThat(response.get("result").asInt()).isEqualTo(3); + + testing() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent").hasKind(SpanKind.INTERNAL).hasNoParent(), + span -> + span.hasName("add") + .hasKind(SpanKind.SERVER) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "jsonrpc"), + equalTo(RPC_JSONRPC_VERSION, "2.0"), + equalTo(RPC_SERVICE, "/calculator"), + equalTo(RPC_METHOD, "add"), + equalTo(RPC_JSONRPC_ERROR_CODE, 0L)))); + testing() + .waitAndAssertMetrics( + "io.opentelemetry.jsonrpc4j-1.6", + "rpc.server.duration", + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfying( + equalTo(RPC_METHOD, "add"), + equalTo(RPC_SERVICE, "/calculator"), + equalTo(RPC_SYSTEM, "jsonrpc") + ))))); + + + } + +} diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java new file mode 100644 index 000000000000..c86fe23fae47 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java @@ -0,0 +1,10 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import com.googlecode.jsonrpc4j.JsonRpcService; + +@JsonRpcService("/calculator") +public interface CalculatorService { + int add(int a, int b) throws Throwable; + + int subtract(int a, int b) throws Throwable; +} diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java new file mode 100644 index 000000000000..c02aeac56784 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java @@ -0,0 +1,13 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +public class CalculatorServiceImpl implements CalculatorService { + @Override + public int add(int a, int b) { + return a + b; + } + + @Override + public int subtract(int a, int b) { + return a - b; + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 0e4cda313a8d..624f4df4eacb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -345,6 +345,9 @@ include(":instrumentation:jsf:jsf-mojarra-3.0:javaagent") include(":instrumentation:jsf:jsf-myfaces-1.2:javaagent") include(":instrumentation:jsf:jsf-myfaces-3.0:javaagent") include(":instrumentation:jsp-2.3:javaagent") +include(":instrumentation:jsonrpc4j-1.6:javaagent") +include(":instrumentation:jsonrpc4j-1.6:library") +include(":instrumentation:jsonrpc4j-1.6:testing") include(":instrumentation:kafka:kafka-clients:kafka-clients-0.11:bootstrap") include(":instrumentation:kafka:kafka-clients:kafka-clients-0.11:javaagent") include(":instrumentation:kafka:kafka-clients:kafka-clients-0.11:testing") From 7781c8c1ab9b29ed4ecc0adde85aa91ed75214a0 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 8 Jan 2025 01:13:58 +0800 Subject: [PATCH 02/17] inject trace data to headers --- .../v1_6/JsonRpcClientBuilderInstrumentation.java | 10 ++++++++-- .../jsonrpc4j/v1_6/JsonRpcSingletons.java | 3 +++ .../jsonrpc4j/v1_6/HeadersSetter.java | 14 ++++++++++++++ .../jsonrpc4j/v1_6/JsonRpcTelemetry.java | 6 ++++++ .../jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java | 3 --- 5 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java index 0aa92b064b85..e55a6214102d 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java @@ -1,6 +1,5 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; -import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -11,6 +10,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.HeadersSetter; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; @@ -18,6 +18,7 @@ import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; +import java.util.Map; public class JsonRpcClientBuilderInstrumentation implements TypeInstrumentation { @@ -53,9 +54,10 @@ public static class InvokeAdvice { public static void onEnter( @Advice.Argument(0) String methodName, @Advice.Argument(1) Object argument, + @Advice.Argument(3) Map extraHeaders, @Advice.Local("otelContext") Context context, @Advice.Local("otelScope") Scope scope) { - Context parentContext = currentContext(); + Context parentContext = Context.current(); SimpleJsonRpcRequest request = new SimpleJsonRpcRequest( methodName, argument @@ -65,6 +67,8 @@ public static void onEnter( } context = JsonRpcSingletons.CLIENT_INSTRUMENTER.start(parentContext, request); + JsonRpcSingletons.PROPAGATORS.getTextMapPropagator().inject(context, extraHeaders, HeadersSetter.INSTANCE); + scope = context.makeCurrent(); } @@ -72,6 +76,7 @@ public static void onEnter( public static void onExit( @Advice.Argument(0) String methodName, @Advice.Argument(1) Object argument, + @Advice.Argument(3) Map extraHeaders, @Advice.Return Object result, @Advice.Thrown Throwable throwable, @Advice.Local("otelContext") Context context, @@ -82,6 +87,7 @@ public static void onExit( scope.close(); JsonRpcSingletons.CLIENT_INSTRUMENTER.end(context, new SimpleJsonRpcRequest(methodName, argument), new SimpleJsonRpcResponse(result), throwable); + System.out.println(extraHeaders); } } } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java index e63109db170f..633d0ba563c4 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java @@ -2,6 +2,7 @@ import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.JsonRpcTelemetry; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; @@ -14,6 +15,7 @@ public final class JsonRpcSingletons { public static final Instrumenter CLIENT_INSTRUMENTER; + public static final ContextPropagators PROPAGATORS; static { JsonRpcTelemetry telemetry = @@ -22,6 +24,7 @@ public final class JsonRpcSingletons { SERVER_INVOCATION_LISTENER = telemetry.newServerInvocationListener(); CLIENT_INSTRUMENTER = telemetry.getClientInstrumenter(); + PROPAGATORS = telemetry.getPropagators(); } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java new file mode 100644 index 000000000000..557e06a14bd4 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java @@ -0,0 +1,14 @@ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; + +import io.opentelemetry.context.propagation.TextMapSetter; +import java.util.Map; + +public enum HeadersSetter implements TextMapSetter> { + INSTANCE; + + @Override + public void set(Map carrier, String key, String value) { + assert carrier != null; + carrier.put(key, value); + } +} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java index d93e175b83e7..3bfed476383f 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java @@ -17,6 +17,7 @@ public static JsonRpcTelemetryBuilder builder(OpenTelemetry openTelemetry) { private final Instrumenter serverInstrumenter; private final Instrumenter clientInstrumenter; + private final ContextPropagators propagators; JsonRpcTelemetry( Instrumenter serverInstrumenter, @@ -24,6 +25,7 @@ public static JsonRpcTelemetryBuilder builder(OpenTelemetry openTelemetry) { ContextPropagators propagators) { this.serverInstrumenter = serverInstrumenter; this.clientInstrumenter = clientInstrumenter; + this.propagators = propagators; } @@ -34,4 +36,8 @@ public InvocationListener newServerInvocationListener() { public Instrumenter getClientInstrumenter() { return clientInstrumenter; } + + public ContextPropagators getPropagators() { + return propagators; + } } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java index ecd8046357a3..347daec9b1f0 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java @@ -54,9 +54,6 @@ public JsonRpcTelemetryBuilder addServerAttributeExtractor( return this; } - - - public JsonRpcTelemetry build() { SpanNameExtractor clientSpanNameExtractor = new JsonRpcClientSpanNameExtractor(); SpanNameExtractor serverSpanNameExtractor = new JsonRpcServerSpanNameExtractor(); From b859165160e7d4674ff0d97a84404bc2fb67b265 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 8 Jan 2025 10:33:30 +0800 Subject: [PATCH 03/17] fix style --- .../jsonrpc4j-1.6/javaagent/build.gradle.kts | 1 - .../JsonRpcClientBuilderInstrumentation.java | 26 ++++++++++++------- .../v1_6/JsonRpcInstrumentationModule.java | 8 ++++-- .../JsonRpcServerBuilderInstrumentation.java | 16 +++++++----- .../jsonrpc4j/v1_6/JsonRpcSingletons.java | 11 ++++---- ...ServiceExporterBuilderInstrumentation.java | 17 +++++++----- .../jsonrpc4j/v1_6/AgentJsonRpcTest.java | 11 ++++---- 7 files changed, 53 insertions(+), 37 deletions(-) diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts index 77b5ef767523..72ca19de8a32 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts @@ -19,7 +19,6 @@ dependencies { testImplementation(project(":instrumentation:jsonrpc4j-1.6:testing")) } - tasks { test { systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java index e55a6214102d..4f54ab1e0a6f 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; @@ -15,10 +20,10 @@ import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import java.util.Map; public class JsonRpcClientBuilderInstrumentation implements TypeInstrumentation { @@ -37,8 +42,8 @@ public ElementMatcher typeMatcher() { public void transform(TypeTransformer transformer) { transformer.applyAdviceToMethod( isMethod() - .and(named("invoke")) - .and(takesArguments(4)) + .and(named("invoke")) + .and(takesArguments(4)) .and(takesArgument(0, String.class)) .and(takesArgument(1, Object.class)) .and(takesArgument(2, named("java.lang.reflect.Type"))) @@ -58,16 +63,15 @@ public static void onEnter( @Advice.Local("otelContext") Context context, @Advice.Local("otelScope") Scope scope) { Context parentContext = Context.current(); - SimpleJsonRpcRequest request = new SimpleJsonRpcRequest( - methodName, - argument - ); + SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(methodName, argument); if (!JsonRpcSingletons.CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { return; } context = JsonRpcSingletons.CLIENT_INSTRUMENTER.start(parentContext, request); - JsonRpcSingletons.PROPAGATORS.getTextMapPropagator().inject(context, extraHeaders, HeadersSetter.INSTANCE); + JsonRpcSingletons.PROPAGATORS + .getTextMapPropagator() + .inject(context, extraHeaders, HeadersSetter.INSTANCE); scope = context.makeCurrent(); } @@ -86,7 +90,11 @@ public static void onExit( } scope.close(); - JsonRpcSingletons.CLIENT_INSTRUMENTER.end(context, new SimpleJsonRpcRequest(methodName, argument), new SimpleJsonRpcResponse(result), throwable); + JsonRpcSingletons.CLIENT_INSTRUMENTER.end( + context, + new SimpleJsonRpcRequest(methodName, argument), + new SimpleJsonRpcResponse(result), + throwable); System.out.println(extraHeaders); } } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java index a663dc8e0a15..4af2d29a8b80 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; import static java.util.Arrays.asList; @@ -18,7 +23,6 @@ public List typeInstrumentations() { return asList( new JsonRpcServerBuilderInstrumentation(), new JsonServiceExporterBuilderInstrumentation(), - new JsonRpcClientBuilderInstrumentation() - ); + new JsonRpcClientBuilderInstrumentation()); } } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java index 677b951d8c5d..fbc00b2fad85 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; @@ -5,17 +10,16 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import com.googlecode.jsonrpc4j.InvocationListener; +import com.googlecode.jsonrpc4j.JsonRpcBasicServer; +import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; -import io.opentelemetry.instrumentation.api.util.VirtualField; import net.bytebuddy.matcher.ElementMatcher; -import com.googlecode.jsonrpc4j.JsonRpcBasicServer; -import net.bytebuddy.asm.Advice; public class JsonRpcServerBuilderInstrumentation implements TypeInstrumentation { - @Override public ElementMatcher classLoaderOptimization() { return hasClassesNamed("com.googlecode.jsonrpc4j.JsonRpcBasicServer"); @@ -29,8 +33,7 @@ public ElementMatcher typeMatcher() { @Override public void transform(TypeTransformer transformer) { transformer.applyAdviceToMethod( - isConstructor(), - this.getClass().getName() + "$ConstructorAdvice"); + isConstructor(), this.getClass().getName() + "$ConstructorAdvice"); } @SuppressWarnings("unused") @@ -48,5 +51,4 @@ public static void setInvocationListener( } } } - } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java index 633d0ba563c4..fd9885c2c8dd 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; import com.googlecode.jsonrpc4j.InvocationListener; @@ -8,7 +13,6 @@ import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcResponse; - public final class JsonRpcSingletons { public static final InvocationListener SERVER_INVOCATION_LISTENER; @@ -18,15 +22,12 @@ public final class JsonRpcSingletons { public static final ContextPropagators PROPAGATORS; static { - JsonRpcTelemetry telemetry = - JsonRpcTelemetry.builder(GlobalOpenTelemetry.get()) - .build(); + JsonRpcTelemetry telemetry = JsonRpcTelemetry.builder(GlobalOpenTelemetry.get()).build(); SERVER_INVOCATION_LISTENER = telemetry.newServerInvocationListener(); CLIENT_INSTRUMENTER = telemetry.getClientInstrumenter(); PROPAGATORS = telemetry.getPropagators(); } - private JsonRpcSingletons() {} } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java index a69587bccc24..346a095e79f1 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java @@ -1,5 +1,14 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static net.bytebuddy.matcher.ElementMatchers.isMethod; +import static net.bytebuddy.matcher.ElementMatchers.named; + import com.googlecode.jsonrpc4j.JsonRpcServer; import com.googlecode.jsonrpc4j.spring.JsonServiceExporter; import io.opentelemetry.instrumentation.api.util.VirtualField; @@ -9,11 +18,6 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; - -import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.named; - public class JsonServiceExporterBuilderInstrumentation implements TypeInstrumentation { @Override public ElementMatcher classLoaderOptimization() { @@ -28,8 +32,7 @@ public ElementMatcher typeMatcher() { @Override public void transform(TypeTransformer transformer) { transformer.applyAdviceToMethod( - isMethod().and(named("exportService")), - this.getClass().getName() + "$ExportAdvice"); + isMethod().and(named("exportService")), this.getClass().getName() + "$ExportAdvice"); } @SuppressWarnings("unused") diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java index 0012d13dff88..26e85daf86dc 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; import com.googlecode.jsonrpc4j.JsonRpcBasicServer; @@ -8,11 +13,9 @@ public class AgentJsonRpcTest extends AbstractJsonRpcTest { - @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); - @Override protected InstrumentationExtension testing() { return testing; @@ -22,8 +25,4 @@ protected InstrumentationExtension testing() { protected JsonRpcBasicServer configureServer(JsonRpcBasicServer server) { return server; } - - - - } From 466971e5e93df565ef1fd76a14aa2aa554faa41a Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 8 Jan 2025 11:01:17 +0800 Subject: [PATCH 04/17] fix style --- .../JsonRpcClientBuilderInstrumentation.java | 1 - .../jsonrpc4j/v1_6/HeadersSetter.java | 5 +++ .../JsonRpcClientAttributesExtractor.java | 28 +++++++------ .../v1_6/JsonRpcClientAttributesGetter.java | 8 +++- .../v1_6/JsonRpcClientSpanNameExtractor.java | 5 +++ .../jsonrpc4j/v1_6/JsonRpcRequest.java | 10 +++-- .../jsonrpc4j/v1_6/JsonRpcRequestGetter.java | 7 +++- .../jsonrpc4j/v1_6/JsonRpcResponse.java | 7 +++- .../JsonRpcServerAttributesExtractor.java | 32 +++++++++----- .../v1_6/JsonRpcServerAttributesGetter.java | 8 +++- .../v1_6/JsonRpcServerSpanNameExtractor.java | 5 +++ .../JsonRpcServerSpanStatusExtractor.java | 20 +++++---- .../jsonrpc4j/v1_6/JsonRpcTelemetry.java | 7 +++- .../v1_6/JsonRpcTelemetryBuilder.java | 29 ++++++++----- ...penTelemetryJsonRpcInvocationListener.java | 26 +++++++----- .../jsonrpc4j/v1_6/SimpleJsonRpcRequest.java | 6 ++- .../jsonrpc4j/v1_6/SimpleJsonRpcResponse.java | 6 ++- .../jsonrpc4j/v1_6/LibraryJsonRpcTest.java | 10 +++-- .../jsonrpc4j-1.6/testing/build.gradle.kts | 4 -- .../jsonrpc4j/v1_6/AbstractJsonRpcTest.java | 42 +++++++++++-------- .../jsonrpc4j/v1_6/CalculatorService.java | 5 +++ .../jsonrpc4j/v1_6/CalculatorServiceImpl.java | 7 +++- 22 files changed, 186 insertions(+), 92 deletions(-) diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java index 4f54ab1e0a6f..6437a086c1fa 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java @@ -95,7 +95,6 @@ public static void onExit( new SimpleJsonRpcRequest(methodName, argument), new SimpleJsonRpcResponse(result), throwable); - System.out.println(extraHeaders); } } } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java index 557e06a14bd4..5b047fe9859f 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import io.opentelemetry.context.propagation.TextMapSetter; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java index 495935bc0456..c8cf78866981 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import io.opentelemetry.api.common.AttributesBuilder; @@ -6,18 +11,19 @@ import javax.annotation.Nullable; // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ -final class JsonRpcClientAttributesExtractor implements AttributesExtractor { +final class JsonRpcClientAttributesExtractor + implements AttributesExtractor { -// private final JsonRpcClientAttributesGetter getter; -// -// -// JsonRpcClientAttributesExtractor(JsonRpcClientAttributesGetter getter) { -// this.getter = getter; -// } + // private final JsonRpcClientAttributesGetter getter; + // + // + // JsonRpcClientAttributesExtractor(JsonRpcClientAttributesGetter getter) { + // this.getter = getter; + // } @Override - public void onStart(AttributesBuilder attributes, Context parentContext, - SimpleJsonRpcRequest jsonRpcRequest) { + public void onStart( + AttributesBuilder attributes, Context parentContext, SimpleJsonRpcRequest jsonRpcRequest) { attributes.put("rpc.jsonrpc.version", "2.0"); } @@ -27,7 +33,5 @@ public void onEnd( Context context, SimpleJsonRpcRequest jsonRpcRequest, @Nullable SimpleJsonRpcResponse jsonRpcResponse, - @Nullable Throwable error) { - - } + @Nullable Throwable error) {} } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java index 1d3f6eb654ba..f093969cef99 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java @@ -1,8 +1,14 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; -// Check https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes +// Check +// https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ public enum JsonRpcClientAttributesGetter implements RpcAttributesGetter { INSTANCE; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java index 9ae18cd74687..2c1b9f05f5dc 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java index 4cbebce1ea4b..2ad802f4b07f 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java @@ -1,8 +1,13 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +import com.fasterxml.jackson.databind.JsonNode; import java.lang.reflect.Method; import java.util.List; -import com.fasterxml.jackson.databind.JsonNode; public final class JsonRpcRequest { @@ -14,7 +19,6 @@ public final class JsonRpcRequest { this.arguments = arguments; } - public Method getMethod() { return method; } @@ -22,6 +26,4 @@ public Method getMethod() { public List getArguments() { return arguments; } - - } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java index 579b616e475c..31346fd994eb 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java @@ -1,8 +1,13 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import io.opentelemetry.context.propagation.TextMapGetter; -import javax.annotation.Nullable; import java.util.ArrayList; +import javax.annotation.Nullable; enum JsonRpcRequestGetter implements TextMapGetter { INSTANCE; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java index ed9e244cb366..54b349e7bfbf 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java @@ -1,8 +1,13 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +import com.fasterxml.jackson.databind.JsonNode; import java.lang.reflect.Method; import java.util.List; -import com.fasterxml.jackson.databind.JsonNode; public final class JsonRpcResponse { private final Method method; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java index 5e51dd2a77dd..57fb8c3311d3 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import com.googlecode.jsonrpc4j.AnnotationsErrorResolver; @@ -11,7 +16,8 @@ import javax.annotation.Nullable; // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ -final class JsonRpcServerAttributesExtractor implements AttributesExtractor { +final class JsonRpcServerAttributesExtractor + implements AttributesExtractor { private static final AttributeKey RPC_JSONRPC_ERROR_CODE = AttributeKey.longKey("rpc.jsonrpc.error_code"); @@ -19,16 +25,16 @@ final class JsonRpcServerAttributesExtractor implements AttributesExtractor RPC_JSONRPC_ERROR_MESSAGE = AttributeKey.stringKey("rpc.jsonrpc.error_message"); -// private final JsonRpcServerAttributesGetter getter; -// -// -// JsonRpcServerAttributesExtractor(JsonRpcServerAttributesGetter getter) { -// this.getter = getter; -// } + // private final JsonRpcServerAttributesGetter getter; + // + // + // JsonRpcServerAttributesExtractor(JsonRpcServerAttributesGetter getter) { + // this.getter = getter; + // } @Override - public void onStart(AttributesBuilder attributes, Context parentContext, - JsonRpcRequest jsonRpcRequest) { + public void onStart( + AttributesBuilder attributes, Context parentContext, JsonRpcRequest jsonRpcRequest) { attributes.put("rpc.jsonrpc.version", "2.0"); } @@ -41,8 +47,12 @@ public void onEnd( @Nullable Throwable error) { // use the DEFAULT_ERROR_RESOLVER to extract error code and message if (error != null) { - ErrorResolver errorResolver = new MultipleErrorResolver(AnnotationsErrorResolver.INSTANCE, DefaultErrorResolver.INSTANCE); - ErrorResolver.JsonError jsonError = errorResolver.resolveError(error, jsonRpcRequest.getMethod(), jsonRpcRequest.getArguments()); + ErrorResolver errorResolver = + new MultipleErrorResolver( + AnnotationsErrorResolver.INSTANCE, DefaultErrorResolver.INSTANCE); + ErrorResolver.JsonError jsonError = + errorResolver.resolveError( + error, jsonRpcRequest.getMethod(), jsonRpcRequest.getArguments()); attributes.put(RPC_JSONRPC_ERROR_CODE, jsonError.code); attributes.put(RPC_JSONRPC_ERROR_MESSAGE, jsonError.message); } else { diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java index 52b3beebddf2..a730e3f4529c 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java @@ -1,9 +1,15 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import com.googlecode.jsonrpc4j.JsonRpcService; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; -// Check https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes +// Check +// https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ public enum JsonRpcServerAttributesGetter implements RpcAttributesGetter { INSTANCE; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java index 244172bbd7d5..385f8f2a00c8 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java index 90220d9c0bcd..ad16b605fa15 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import com.fasterxml.jackson.core.JsonParseException; @@ -7,16 +12,17 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; import javax.annotation.Nullable; -public enum JsonRpcServerSpanStatusExtractor implements SpanStatusExtractor { - +public enum JsonRpcServerSpanStatusExtractor + implements SpanStatusExtractor { INSTANCE; - /** - * Extracts the status from the response and sets it to the {@code spanStatusBuilder}. - */ + /** Extracts the status from the response and sets it to the {@code spanStatusBuilder}. */ @Override - public void extract(SpanStatusBuilder spanStatusBuilder, JsonRpcRequest jsonRpcRequest, - @Nullable JsonRpcResponse jsonRpcResponse, @Nullable Throwable error) { + public void extract( + SpanStatusBuilder spanStatusBuilder, + JsonRpcRequest jsonRpcRequest, + @Nullable JsonRpcResponse jsonRpcResponse, + @Nullable Throwable error) { if (error == null) { spanStatusBuilder.setStatus(StatusCode.OK); } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java index 3bfed476383f..741863f4bde7 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java @@ -1,5 +1,9 @@ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.OpenTelemetry; @@ -28,7 +32,6 @@ public static JsonRpcTelemetryBuilder builder(OpenTelemetry openTelemetry) { this.propagators = propagators; } - public InvocationListener newServerInvocationListener() { return new OpenTelemetryJsonRpcInvocationListener(serverInstrumenter); } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java index 347daec9b1f0..23d879b81f1e 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -20,7 +25,8 @@ public class JsonRpcTelemetryBuilder { private final OpenTelemetry openTelemetry; - private final List> + private final List< + AttributesExtractor> additionalClientExtractors = new ArrayList<>(); private final List> additionalServerExtractors = new ArrayList<>(); @@ -29,7 +35,6 @@ public class JsonRpcTelemetryBuilder { this.openTelemetry = openTelemetry; } - /** * Adds an extra client-only {@link AttributesExtractor} to invoke to set attributes to * instrumented items. The {@link AttributesExtractor} will be executed after all default @@ -37,7 +42,8 @@ public class JsonRpcTelemetryBuilder { */ @CanIgnoreReturnValue public JsonRpcTelemetryBuilder addClientAttributeExtractor( - AttributesExtractor attributesExtractor) { + AttributesExtractor + attributesExtractor) { additionalClientExtractors.add(attributesExtractor); return this; } @@ -55,8 +61,10 @@ public JsonRpcTelemetryBuilder addServerAttributeExtractor( } public JsonRpcTelemetry build() { - SpanNameExtractor clientSpanNameExtractor = new JsonRpcClientSpanNameExtractor(); - SpanNameExtractor serverSpanNameExtractor = new JsonRpcServerSpanNameExtractor(); + SpanNameExtractor clientSpanNameExtractor = + new JsonRpcClientSpanNameExtractor(); + SpanNameExtractor serverSpanNameExtractor = + new JsonRpcServerSpanNameExtractor(); InstrumenterBuilder clientInstrumenterBuilder = Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor); @@ -64,8 +72,10 @@ public JsonRpcTelemetry build() { InstrumenterBuilder serverInstrumenterBuilder = Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, serverSpanNameExtractor); - JsonRpcServerAttributesGetter serverRpcAttributesGetter = JsonRpcServerAttributesGetter.INSTANCE; - JsonRpcClientAttributesGetter clientRpcAttributesGetter = JsonRpcClientAttributesGetter.INSTANCE; + JsonRpcServerAttributesGetter serverRpcAttributesGetter = + JsonRpcServerAttributesGetter.INSTANCE; + JsonRpcClientAttributesGetter clientRpcAttributesGetter = + JsonRpcClientAttributesGetter.INSTANCE; clientInstrumenterBuilder .addAttributesExtractor(RpcClientAttributesExtractor.create(clientRpcAttributesGetter)) @@ -83,9 +93,6 @@ public JsonRpcTelemetry build() { return new JsonRpcTelemetry( serverInstrumenterBuilder.buildServerInstrumenter(JsonRpcRequestGetter.INSTANCE), clientInstrumenterBuilder.buildInstrumenter(SpanKindExtractor.alwaysClient()), - openTelemetry.getPropagators() - ); - + openTelemetry.getPropagators()); } - } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java index 02246113fe7d..db4e20de8c2f 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import com.fasterxml.jackson.databind.JsonNode; @@ -23,12 +28,11 @@ public OpenTelemetryJsonRpcInvocationListener( /** * This method will be invoked prior to a JSON-RPC service being invoked. * - * @param method is the method that will be invoked. + * @param method is the method that will be invoked. * @param arguments are the arguments that will be passed to the method when it is invoked. */ @Override public void willInvoke(Method method, List arguments) { -// System.out.printf("inside willInvoke: method is %s, arguments are %s \n", method.getName(), arguments.toString()); Context parentContext = Context.current(); JsonRpcRequest request = new JsonRpcRequest(method, arguments); if (!serverInstrumenter.shouldStart(parentContext, request)) { @@ -43,18 +47,18 @@ public void willInvoke(Method method, List arguments) { /** * This method will be invoked after a JSON-RPC service has been invoked. * - * @param method is the method that will was invoked. + * @param method is the method that will was invoked. * @param arguments are the arguments that were be passed to the method when it is invoked. - * @param result is the result of the method invocation. If an error arose, this value will be - * null. - * @param t is the throwable that was thrown from the invocation, if no error arose, this value - * will be null. - * @param duration is approximately the number of milliseconds that elapsed during which the method was invoked. + * @param result is the result of the method invocation. If an error arose, this value will be + * null. + * @param t is the throwable that was thrown from the invocation, if no error arose, this value + * will be null. + * @param duration is approximately the number of milliseconds that elapsed during which the + * method was invoked. */ @Override - public void didInvoke(Method method, List arguments, Object result, Throwable t, - long duration) { -// System.out.printf("inside didInvoke: method is %s, arguments are %s \n", method.getName(), arguments.toString()); + public void didInvoke( + Method method, List arguments, Object result, Throwable t, long duration) { JsonRpcRequest request = new JsonRpcRequest(method, arguments); JsonRpcResponse response = new JsonRpcResponse(method, arguments, result); threadLocalScope.get().close(); diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java index bef6d86f32bb..173e2804526a 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java @@ -1,5 +1,9 @@ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ +package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; public final class SimpleJsonRpcRequest { diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java index 8992955cb302..ebc8205cff54 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java @@ -1,10 +1,14 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; public final class SimpleJsonRpcResponse { private final Object result; - public SimpleJsonRpcResponse(Object result) { this.result = result; } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java b/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java index 39d7c847d290..c48a16fe2ffa 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import com.googlecode.jsonrpc4j.JsonRpcBasicServer; @@ -18,10 +23,7 @@ protected InstrumentationExtension testing() { @Override protected JsonRpcBasicServer configureServer(JsonRpcBasicServer server) { server.setInvocationListener( - JsonRpcTelemetry.builder(testing.getOpenTelemetry()) - .build() - .newServerInvocationListener()); + JsonRpcTelemetry.builder(testing.getOpenTelemetry()).build().newServerInvocationListener()); return server; } - } diff --git a/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts index 93ff1ba0d961..17fd42a71594 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts @@ -10,9 +10,5 @@ dependencies { implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") implementation("com.fasterxml.jackson.core:jackson-databind:2.13.3") - // ... } - - - diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java index 8e36255adab6..73cb15a36279 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; @@ -29,24 +34,29 @@ public abstract class AbstractJsonRpcTest { protected abstract JsonRpcBasicServer configureServer(JsonRpcBasicServer server); - @Test void testServer() throws IOException { CalculatorService calculator = new CalculatorServiceImpl(); - JsonRpcBasicServer server = configureServer(new JsonRpcBasicServer(calculator, CalculatorService.class)); + JsonRpcBasicServer server = + configureServer(new JsonRpcBasicServer(calculator, CalculatorService.class)); - JsonNode response = testing() - .runWithSpan( - "parent", - () -> { - InputStream inputStream = new ByteArrayInputStream("{\"jsonrpc\":\"2.0\",\"method\":\"add\",\"params\":[1,2],\"id\":1}".getBytes(UTF_8)); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - server.handleRequest(inputStream, outputStream); + JsonNode response = + testing() + .runWithSpan( + "parent", + () -> { + InputStream inputStream = + new ByteArrayInputStream( + "{\"jsonrpc\":\"2.0\",\"method\":\"add\",\"params\":[1,2],\"id\":1}" + .getBytes(UTF_8)); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + server.handleRequest(inputStream, outputStream); - // Read the JsonNode from the InputStream - ObjectMapper objectMapper = new ObjectMapper(); - return objectMapper.readTree(new ByteArrayInputStream(outputStream.toByteArray())); - }); + // Read the JsonNode from the InputStream + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readTree( + new ByteArrayInputStream(outputStream.toByteArray())); + }); assertThat(response.get("result").asInt()).isEqualTo(3); @@ -81,10 +91,6 @@ void testServer() throws IOException { point.hasAttributesSatisfying( equalTo(RPC_METHOD, "add"), equalTo(RPC_SERVICE, "/calculator"), - equalTo(RPC_SYSTEM, "jsonrpc") - ))))); - - + equalTo(RPC_SYSTEM, "jsonrpc")))))); } - } diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java index c86fe23fae47..0afa70753390 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java +++ b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import com.googlecode.jsonrpc4j.JsonRpcService; diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java index c02aeac56784..5f0fb2b474d4 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java +++ b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java @@ -1,6 +1,11 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; -public class CalculatorServiceImpl implements CalculatorService { +public class CalculatorServiceImpl implements CalculatorService { @Override public int add(int a, int b) { return a + b; From a5e1a43d48587d4a0ff5f2880569b4deef1d600a Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 8 Jan 2025 20:03:38 +0800 Subject: [PATCH 05/17] resolve some comments --- .../jsonrpc4j-1.6/javaagent/build.gradle.kts | 2 +- ...java => JsonRpcClientInstrumentation.java} | 14 ++--- .../v1_6/JsonRpcInstrumentationModule.java | 5 +- ...java => JsonRpcServerInstrumentation.java} | 36 +++++++++++-- .../jsonrpc4j/v1_6/JsonRpcSingletons.java | 4 -- ...ServiceExporterBuilderInstrumentation.java | 53 ------------------- .../jsonrpc4j-1.6/library/build.gradle.kts | 2 +- .../jsonrpc4j/v1_6/HeadersSetter.java | 19 ------- .../JsonRpcClientAttributesExtractor.java | 7 --- .../JsonRpcServerAttributesExtractor.java | 7 --- .../v1_6/JsonRpcServerAttributesGetter.java | 3 +- 11 files changed, 42 insertions(+), 110 deletions(-) rename instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/{JsonRpcClientBuilderInstrumentation.java => JsonRpcClientInstrumentation.java} (86%) rename instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/{JsonRpcServerBuilderInstrumentation.java => JsonRpcServerInstrumentation.java} (53%) delete mode 100644 instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java delete mode 100644 instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts index 72ca19de8a32..db5746f18fa3 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts @@ -15,7 +15,7 @@ val jsonrpcVersion = "1.6" dependencies { implementation(project(":instrumentation:jsonrpc4j-1.6:library")) - implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") + library("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") testImplementation(project(":instrumentation:jsonrpc4j-1.6:testing")) } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java similarity index 86% rename from instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java rename to instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java index 6437a086c1fa..9509cab9cc74 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientBuilderInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java @@ -7,6 +7,7 @@ import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; +import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6.JsonRpcSingletons.CLIENT_INSTRUMENTER; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -15,7 +16,6 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.HeadersSetter; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; @@ -25,7 +25,7 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -public class JsonRpcClientBuilderInstrumentation implements TypeInstrumentation { +public class JsonRpcClientInstrumentation implements TypeInstrumentation { @Override public ElementMatcher classLoaderOptimization() { @@ -64,15 +64,11 @@ public static void onEnter( @Advice.Local("otelScope") Scope scope) { Context parentContext = Context.current(); SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(methodName, argument); - if (!JsonRpcSingletons.CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { + if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { return; } - context = JsonRpcSingletons.CLIENT_INSTRUMENTER.start(parentContext, request); - JsonRpcSingletons.PROPAGATORS - .getTextMapPropagator() - .inject(context, extraHeaders, HeadersSetter.INSTANCE); - + context = CLIENT_INSTRUMENTER.start(parentContext, request); scope = context.makeCurrent(); } @@ -90,7 +86,7 @@ public static void onExit( } scope.close(); - JsonRpcSingletons.CLIENT_INSTRUMENTER.end( + CLIENT_INSTRUMENTER.end( context, new SimpleJsonRpcRequest(methodName, argument), new SimpleJsonRpcResponse(result), diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java index 4af2d29a8b80..d85b7d133b75 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java @@ -20,9 +20,6 @@ public JsonRpcInstrumentationModule() { @Override public List typeInstrumentations() { - return asList( - new JsonRpcServerBuilderInstrumentation(), - new JsonServiceExporterBuilderInstrumentation(), - new JsonRpcClientBuilderInstrumentation()); + return asList(new JsonRpcServerInstrumentation(), new JsonRpcClientInstrumentation()); } } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java similarity index 53% rename from instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java rename to instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java index fbc00b2fad85..74d18989e000 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerBuilderInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java @@ -7,18 +7,21 @@ import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; +import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; import com.googlecode.jsonrpc4j.InvocationListener; import com.googlecode.jsonrpc4j.JsonRpcBasicServer; +import com.googlecode.jsonrpc4j.MultipleInvocationListener; import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.implementation.bytecode.assign.Assigner; import net.bytebuddy.matcher.ElementMatcher; -public class JsonRpcServerBuilderInstrumentation implements TypeInstrumentation { +public class JsonRpcServerInstrumentation implements TypeInstrumentation { @Override public ElementMatcher classLoaderOptimization() { @@ -34,6 +37,10 @@ public ElementMatcher typeMatcher() { public void transform(TypeTransformer transformer) { transformer.applyAdviceToMethod( isConstructor(), this.getClass().getName() + "$ConstructorAdvice"); + + transformer.applyAdviceToMethod( + isMethod().and(named("setInvocationListener")), + this.getClass().getName() + "$SetInvocationListenerAdvice"); } @SuppressWarnings("unused") @@ -42,11 +49,34 @@ public static class ConstructorAdvice { @Advice.OnMethodExit(suppress = Throwable.class) public static void setInvocationListener( @Advice.This JsonRpcBasicServer jsonRpcServer, - @Advice.FieldValue("invocationListener") InvocationListener invocationListener) { + @Advice.FieldValue(value = "invocationListener", readOnly = false) + InvocationListener invocationListener) { + invocationListener = JsonRpcSingletons.SERVER_INVOCATION_LISTENER; + } + } + + @SuppressWarnings("unused") + public static class SetInvocationListenerAdvice { + + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void setInvocationListener( + @Advice.This JsonRpcBasicServer jsonRpcServer, + @Advice.Argument(value = 0, readOnly = false, typing = Assigner.Typing.DYNAMIC) + InvocationListener invocationListener) { VirtualField instrumented = VirtualField.find(JsonRpcBasicServer.class, Boolean.class); if (!Boolean.TRUE.equals(instrumented.get(jsonRpcServer))) { - jsonRpcServer.setInvocationListener(JsonRpcSingletons.SERVER_INVOCATION_LISTENER); + if (invocationListener == null) { + invocationListener = JsonRpcSingletons.SERVER_INVOCATION_LISTENER; + } else if (invocationListener instanceof MultipleInvocationListener) { + ((MultipleInvocationListener) invocationListener) + .addInvocationListener(JsonRpcSingletons.SERVER_INVOCATION_LISTENER); + } else { + invocationListener = + new MultipleInvocationListener( + invocationListener, JsonRpcSingletons.SERVER_INVOCATION_LISTENER); + } + instrumented.set(jsonRpcServer, true); } } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java index fd9885c2c8dd..157ef8dcbf45 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java @@ -7,7 +7,6 @@ import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.JsonRpcTelemetry; import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; @@ -19,14 +18,11 @@ public final class JsonRpcSingletons { public static final Instrumenter CLIENT_INSTRUMENTER; - public static final ContextPropagators PROPAGATORS; - static { JsonRpcTelemetry telemetry = JsonRpcTelemetry.builder(GlobalOpenTelemetry.get()).build(); SERVER_INVOCATION_LISTENER = telemetry.newServerInvocationListener(); CLIENT_INSTRUMENTER = telemetry.getClientInstrumenter(); - PROPAGATORS = telemetry.getPropagators(); } private JsonRpcSingletons() {} diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java deleted file mode 100644 index 346a095e79f1..000000000000 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonServiceExporterBuilderInstrumentation.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; - -import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.named; - -import com.googlecode.jsonrpc4j.JsonRpcServer; -import com.googlecode.jsonrpc4j.spring.JsonServiceExporter; -import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.matcher.ElementMatcher; - -public class JsonServiceExporterBuilderInstrumentation implements TypeInstrumentation { - @Override - public ElementMatcher classLoaderOptimization() { - return hasClassesNamed("com.googlecode.jsonrpc4j.spring.JsonServiceExporter"); - } - - @Override - public ElementMatcher typeMatcher() { - return named("com.googlecode.jsonrpc4j.spring.JsonServiceExporter"); - } - - @Override - public void transform(TypeTransformer transformer) { - transformer.applyAdviceToMethod( - isMethod().and(named("exportService")), this.getClass().getName() + "$ExportAdvice"); - } - - @SuppressWarnings("unused") - public static class ExportAdvice { - - @Advice.OnMethodExit(suppress = Throwable.class) - public static void setInvocationListener( - @Advice.This JsonServiceExporter exporter, - @Advice.FieldValue("jsonRpcServer") JsonRpcServer jsonRpcServer) { - VirtualField instrumented = - VirtualField.find(JsonRpcServer.class, Boolean.class); - if (!Boolean.TRUE.equals(instrumented.get(jsonRpcServer))) { - jsonRpcServer.setInvocationListener(JsonRpcSingletons.SERVER_INVOCATION_LISTENER); - instrumented.set(jsonRpcServer, true); - } - } - } -} diff --git a/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts index 36e5872e74e4..1fc139a66739 100644 --- a/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts @@ -6,7 +6,7 @@ val jsonrpcVersion = "1.6" val jacksonVersion = "2.13.3" dependencies { - implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") + library("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java deleted file mode 100644 index 5b047fe9859f..000000000000 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/HeadersSetter.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; - -import io.opentelemetry.context.propagation.TextMapSetter; -import java.util.Map; - -public enum HeadersSetter implements TextMapSetter> { - INSTANCE; - - @Override - public void set(Map carrier, String key, String value) { - assert carrier != null; - carrier.put(key, value); - } -} diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java index c8cf78866981..92cc42760706 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java @@ -14,13 +14,6 @@ final class JsonRpcClientAttributesExtractor implements AttributesExtractor { - // private final JsonRpcClientAttributesGetter getter; - // - // - // JsonRpcClientAttributesExtractor(JsonRpcClientAttributesGetter getter) { - // this.getter = getter; - // } - @Override public void onStart( AttributesBuilder attributes, Context parentContext, SimpleJsonRpcRequest jsonRpcRequest) { diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java index 57fb8c3311d3..238542f0a538 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java @@ -25,13 +25,6 @@ final class JsonRpcServerAttributesExtractor private static final AttributeKey RPC_JSONRPC_ERROR_MESSAGE = AttributeKey.stringKey("rpc.jsonrpc.error_message"); - // private final JsonRpcServerAttributesGetter getter; - // - // - // JsonRpcServerAttributesExtractor(JsonRpcServerAttributesGetter getter) { - // this.getter = getter; - // } - @Override public void onStart( AttributesBuilder attributes, Context parentContext, JsonRpcRequest jsonRpcRequest) { diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java index a730e3f4529c..f2c0467b8d84 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; -import com.googlecode.jsonrpc4j.JsonRpcService; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; // Check @@ -21,7 +20,7 @@ public String getSystem(JsonRpcRequest request) { @Override public String getService(JsonRpcRequest request) { - return request.getMethod().getDeclaringClass().getAnnotation(JsonRpcService.class).value(); + return request.getMethod().getDeclaringClass().getName(); } @Override From 6f501401cb2a37a490374e016cd1ed488a17da11 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 8 Jan 2025 20:12:50 +0800 Subject: [PATCH 06/17] server span name follow convention --- .../v1_6/JsonRpcServerSpanNameExtractor.java | 5 ++++- .../jsonrpc4j/v1_6/AbstractJsonRpcTest.java | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java index 385f8f2a00c8..79f6d29a1017 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java @@ -6,10 +6,13 @@ package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import java.lang.reflect.Method; public class JsonRpcServerSpanNameExtractor implements SpanNameExtractor { + // Follow https://opentelemetry.io/docs/specs/semconv/rpc/rpc-spans/#span-name @Override public String extract(JsonRpcRequest request) { - return request.getMethod().getName(); + Method method = request.getMethod(); + return String.format("%s/%s", method.getDeclaringClass().getName(), method.getName()); } } diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java index 73cb15a36279..72fe8c1e0442 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java @@ -66,13 +66,16 @@ void testServer() throws IOException { trace.hasSpansSatisfyingExactly( span -> span.hasName("parent").hasKind(SpanKind.INTERNAL).hasNoParent(), span -> - span.hasName("add") + span.hasName( + "io.opentelemetry.instrumentation.jsonrpc4j.v1_6.CalculatorService/add") .hasKind(SpanKind.SERVER) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "jsonrpc"), equalTo(RPC_JSONRPC_VERSION, "2.0"), - equalTo(RPC_SERVICE, "/calculator"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.jsonrpc4j.v1_6.CalculatorService"), equalTo(RPC_METHOD, "add"), equalTo(RPC_JSONRPC_ERROR_CODE, 0L)))); testing() @@ -90,7 +93,9 @@ void testServer() throws IOException { point -> point.hasAttributesSatisfying( equalTo(RPC_METHOD, "add"), - equalTo(RPC_SERVICE, "/calculator"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.jsonrpc4j.v1_6.CalculatorService"), equalTo(RPC_SYSTEM, "jsonrpc")))))); } } From 51534a45df2ff79cfef6de9511f8788180902572 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 8 Jan 2025 23:14:48 +0800 Subject: [PATCH 07/17] fix style --- .../jsonrpc4j-1.6/javaagent/build.gradle.kts | 8 +++----- .../v1_6/JsonRpcClientInstrumentation.java | 11 +---------- .../v1_6/JsonRpcServerInstrumentation.java | 10 +++++----- .../jsonrpc4j/v1_6/AgentJsonRpcTest.java | 2 +- .../jsonrpc4j-1.6/library/build.gradle.kts | 5 ++--- .../v1_6/JsonRpcClientAttributesGetter.java | 5 ++++- .../jsonrpc4j/v1_6/SimpleJsonRpcRequest.java | 13 +++++++++++++ .../jsonrpc4j-1.6/testing/build.gradle.kts | 3 +-- 8 files changed, 30 insertions(+), 27 deletions(-) diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts index db5746f18fa3..c46ec610b3d2 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts @@ -11,18 +11,16 @@ muzzle { } } -val jsonrpcVersion = "1.6" - dependencies { implementation(project(":instrumentation:jsonrpc4j-1.6:library")) - library("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") + + library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.6") + testImplementation(project(":instrumentation:jsonrpc4j-1.6:testing")) } tasks { test { - systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) jvmArgs("-Dotel.javaagent.experimental.thread-propagation-debugger.enabled=false") - jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") } } diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java index 9509cab9cc74..3c6e552fd020 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java @@ -61,16 +61,7 @@ public static void onEnter( @Advice.Argument(1) Object argument, @Advice.Argument(3) Map extraHeaders, @Advice.Local("otelContext") Context context, - @Advice.Local("otelScope") Scope scope) { - Context parentContext = Context.current(); - SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(methodName, argument); - if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { - return; - } - - context = CLIENT_INSTRUMENTER.start(parentContext, request); - scope = context.makeCurrent(); - } + @Advice.Local("otelScope") Scope scope) {} @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java index 74d18989e000..e1e48c9d9fde 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6.JsonRpcSingletons.SERVER_INVOCATION_LISTENER; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -51,7 +52,7 @@ public static void setInvocationListener( @Advice.This JsonRpcBasicServer jsonRpcServer, @Advice.FieldValue(value = "invocationListener", readOnly = false) InvocationListener invocationListener) { - invocationListener = JsonRpcSingletons.SERVER_INVOCATION_LISTENER; + invocationListener = SERVER_INVOCATION_LISTENER; } } @@ -67,14 +68,13 @@ public static void setInvocationListener( VirtualField.find(JsonRpcBasicServer.class, Boolean.class); if (!Boolean.TRUE.equals(instrumented.get(jsonRpcServer))) { if (invocationListener == null) { - invocationListener = JsonRpcSingletons.SERVER_INVOCATION_LISTENER; + invocationListener = SERVER_INVOCATION_LISTENER; } else if (invocationListener instanceof MultipleInvocationListener) { ((MultipleInvocationListener) invocationListener) - .addInvocationListener(JsonRpcSingletons.SERVER_INVOCATION_LISTENER); + .addInvocationListener(SERVER_INVOCATION_LISTENER); } else { invocationListener = - new MultipleInvocationListener( - invocationListener, JsonRpcSingletons.SERVER_INVOCATION_LISTENER); + new MultipleInvocationListener(invocationListener, SERVER_INVOCATION_LISTENER); } instrumented.set(jsonRpcServer, true); diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java b/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java index 26e85daf86dc..de74aa73ad38 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java @@ -11,7 +11,7 @@ import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import org.junit.jupiter.api.extension.RegisterExtension; -public class AgentJsonRpcTest extends AbstractJsonRpcTest { +class AgentJsonRpcTest extends AbstractJsonRpcTest { @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); diff --git a/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts index 1fc139a66739..c290a83ac682 100644 --- a/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts @@ -2,13 +2,12 @@ plugins { id("otel.library-instrumentation") } -val jsonrpcVersion = "1.6" val jacksonVersion = "2.13.3" dependencies { - library("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") + library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.6") - implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") + library("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") testImplementation(project(":instrumentation:jsonrpc4j-1.6:testing")) } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java index f093969cef99..bc36a0e0a8b5 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java @@ -21,7 +21,10 @@ public String getSystem(SimpleJsonRpcRequest request) { @Override public String getService(SimpleJsonRpcRequest request) { // TODO - return "NOT_IMPLEMENTED"; + if (request.getMethod() != null) { + return request.getMethod().getDeclaringClass().getName(); + } + return "NOT_AVAILABLE"; } @Override diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java index 173e2804526a..8f0193bb461e 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java +++ b/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java @@ -5,16 +5,25 @@ package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +import java.lang.reflect.Method; + public final class SimpleJsonRpcRequest { private final String methodName; private final Object argument; + private Method method; public SimpleJsonRpcRequest(String methodName, Object argument) { this.methodName = methodName; this.argument = argument; } + public SimpleJsonRpcRequest(Method method, Object argument) { + this.method = method; + this.methodName = method.getName(); + this.argument = argument; + } + public String getMethodName() { return methodName; } @@ -22,4 +31,8 @@ public String getMethodName() { public Object getArgument() { return argument; } + + public Method getMethod() { + return method; + } } diff --git a/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts b/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts index 17fd42a71594..a3d3679e3ccd 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts @@ -8,7 +8,6 @@ dependencies { api(project(":testing-common")) implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") - implementation("com.fasterxml.jackson.core:jackson-databind:2.13.3") - // ... + implementation("com.fasterxml.jackson.core:jackson-databind:2.13.3") } From c8cd1093dc7c4ecd7d676cb90ab8a8ee95320342 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Thu, 9 Jan 2025 13:07:30 +0800 Subject: [PATCH 08/17] update supported-libraryies.md --- docs/supported-libraries.md | 1 + .../javaagent/build.gradle.kts | 8 ++++---- .../jsonrpc4j/v1_3}/JsonRpcClientInstrumentation.java | 8 ++++---- .../jsonrpc4j/v1_3}/JsonRpcInstrumentationModule.java | 4 ++-- .../jsonrpc4j/v1_3}/JsonRpcServerInstrumentation.java | 4 ++-- .../jsonrpc4j/v1_3}/JsonRpcSingletons.java | 8 ++++---- .../jsonrpc4j/v1_3}/AgentJsonRpcTest.java | 4 ++-- .../library/build.gradle.kts | 4 ++-- .../v1_3}/JsonRpcClientAttributesExtractor.java | 2 +- .../jsonrpc4j/v1_3}/JsonRpcClientAttributesGetter.java | 2 +- .../v1_3}/JsonRpcClientSpanNameExtractor.java | 2 +- .../jsonrpc4j/v1_3}/JsonRpcRequest.java | 2 +- .../jsonrpc4j/v1_3}/JsonRpcRequestGetter.java | 2 +- .../jsonrpc4j/v1_3}/JsonRpcResponse.java | 2 +- .../v1_3}/JsonRpcServerAttributesExtractor.java | 2 +- .../jsonrpc4j/v1_3}/JsonRpcServerAttributesGetter.java | 2 +- .../v1_3}/JsonRpcServerSpanNameExtractor.java | 2 +- .../v1_3}/JsonRpcServerSpanStatusExtractor.java | 2 +- .../jsonrpc4j/v1_3}/JsonRpcTelemetry.java | 2 +- .../jsonrpc4j/v1_3}/JsonRpcTelemetryBuilder.java | 4 ++-- .../v1_3}/OpenTelemetryJsonRpcInvocationListener.java | 2 +- .../jsonrpc4j/v1_3}/SimpleJsonRpcRequest.java | 2 +- .../jsonrpc4j/v1_3}/SimpleJsonRpcResponse.java | 2 +- .../jsonrpc4j/v1_3}/LibraryJsonRpcTest.java | 2 +- .../testing/build.gradle.kts | 2 +- .../jsonrpc4j/v1_3}/AbstractJsonRpcTest.java | 10 +++++----- .../jsonrpc4j/v1_3}/CalculatorService.java | 2 +- .../jsonrpc4j/v1_3}/CalculatorServiceImpl.java | 2 +- settings.gradle.kts | 6 +++--- 29 files changed, 49 insertions(+), 48 deletions(-) rename instrumentation/{jsonrpc4j-1.6 => jsonrpc4j-1.3}/javaagent/build.gradle.kts (59%) rename instrumentation/{jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3}/JsonRpcClientInstrumentation.java (94%) rename instrumentation/{jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3}/JsonRpcInstrumentationModule.java (94%) rename instrumentation/{jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3}/JsonRpcServerInstrumentation.java (98%) rename instrumentation/{jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3}/JsonRpcSingletons.java (81%) rename instrumentation/{jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3}/AgentJsonRpcTest.java (92%) rename instrumentation/{jsonrpc4j-1.6 => jsonrpc4j-1.3}/library/build.gradle.kts (58%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcClientAttributesExtractor.java (94%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcClientAttributesGetter.java (94%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcClientSpanNameExtractor.java (86%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcRequest.java (90%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcRequestGetter.java (89%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcResponse.java (92%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcServerAttributesExtractor.java (97%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcServerAttributesGetter.java (93%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcServerSpanNameExtractor.java (90%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcServerSpanStatusExtractor.java (95%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcTelemetry.java (96%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/JsonRpcTelemetryBuilder.java (98%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/OpenTelemetryJsonRpcInvocationListener.java (97%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/SimpleJsonRpcRequest.java (92%) rename instrumentation/{jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/SimpleJsonRpcResponse.java (83%) rename instrumentation/{jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/LibraryJsonRpcTest.java (93%) rename instrumentation/{jsonrpc4j-1.6 => jsonrpc4j-1.3}/testing/build.gradle.kts (89%) rename instrumentation/{jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/AbstractJsonRpcTest.java (94%) rename instrumentation/{jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/CalculatorService.java (83%) rename instrumentation/{jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6 => jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3}/CalculatorServiceImpl.java (83%) diff --git a/docs/supported-libraries.md b/docs/supported-libraries.md index 6cddd284af7d..597562c7f1fd 100644 --- a/docs/supported-libraries.md +++ b/docs/supported-libraries.md @@ -90,6 +90,7 @@ These are the supported libraries and frameworks: | [Jedis](https://github.com/xetorthio/jedis) | 1.4+ | N/A | [Database Client Spans] | | [JMS](https://javaee.github.io/javaee-spec/javadocs/javax/jms/package-summary.html) | 1.1+ | N/A | [Messaging Spans] | | [Jodd Http](https://http.jodd.org/) | 4.2+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] | +| [JSON-RPC](https://github.com/briandilley/jsonrpc4j) | 1.6.0 | N/A | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] | | [JSP](https://javaee.github.io/javaee-spec/javadocs/javax/servlet/jsp/package-summary.html) | 2.3.x only | N/A | Controller Spans [3] | | [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) | 1.0+ | N/A | Context propagation | | [Ktor](https://github.com/ktorio/ktor) | 1.0+ | [opentelemetry-ktor-1.0](../instrumentation/ktor/ktor-1.0/library),
[opentelemetry-ktor-2.0](../instrumentation/ktor/ktor-2.0/library),
[opentelemetry-ktor-3.0](../instrumentation/ktor/ktor-3.0/library) | [HTTP Client Spans], [HTTP Client Metrics], [HTTP Server Spans], [HTTP Server Metrics] | diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts b/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts similarity index 59% rename from instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts rename to instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts index c46ec610b3d2..0fa473ae49cd 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts @@ -6,17 +6,17 @@ muzzle { pass { group.set("com.github.briandilley.jsonrpc4j") module.set("jsonrpc4j") - versions.set("[1.6,)") + versions.set("[1.3.3,)") assertInverse.set(true) } } dependencies { - implementation(project(":instrumentation:jsonrpc4j-1.6:library")) + implementation(project(":instrumentation:jsonrpc4j-1.3:library")) - library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.6") + library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.3.3") - testImplementation(project(":instrumentation:jsonrpc4j-1.6:testing")) + testImplementation(project(":instrumentation:jsonrpc4j-1.3:testing")) } tasks { diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java similarity index 94% rename from instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java index 3c6e552fd020..db080c6fdded 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcClientInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; -import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6.JsonRpcSingletons.CLIENT_INSTRUMENTER; +import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3.JsonRpcSingletons.CLIENT_INSTRUMENTER; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -16,8 +16,8 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcResponse; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcRequest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import java.util.Map; diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcInstrumentationModule.java similarity index 94% rename from instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcInstrumentationModule.java index d85b7d133b75..ede1b7ceb340 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcInstrumentationModule.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcInstrumentationModule.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import static java.util.Arrays.asList; @@ -15,7 +15,7 @@ @AutoService(InstrumentationModule.class) public class JsonRpcInstrumentationModule extends InstrumentationModule { public JsonRpcInstrumentationModule() { - super("jsonrpc4j", "jsonrpc4j-1.6"); + super("jsonrpc4j", "jsonrpc4j-1.3"); } @Override diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcServerInstrumentation.java similarity index 98% rename from instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcServerInstrumentation.java index e1e48c9d9fde..da97523bca72 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcServerInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcServerInstrumentation.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; -import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6.JsonRpcSingletons.SERVER_INVOCATION_LISTENER; +import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3.JsonRpcSingletons.SERVER_INVOCATION_LISTENER; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java similarity index 81% rename from instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java index 157ef8dcbf45..43b1e6ce490a 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/JsonRpcSingletons.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java @@ -3,14 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.JsonRpcTelemetry; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcRequest; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.SimpleJsonRpcResponse; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcTelemetry; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcRequest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcResponse; public final class JsonRpcSingletons { diff --git a/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/AgentJsonRpcTest.java similarity index 92% rename from instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/AgentJsonRpcTest.java index de74aa73ad38..57ba6e371908 100644 --- a/instrumentation/jsonrpc4j-1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_6/AgentJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/AgentJsonRpcTest.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import com.googlecode.jsonrpc4j.JsonRpcBasicServer; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_6.AbstractJsonRpcTest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.AbstractJsonRpcTest; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import org.junit.jupiter.api.extension.RegisterExtension; diff --git a/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts b/instrumentation/jsonrpc4j-1.3/library/build.gradle.kts similarity index 58% rename from instrumentation/jsonrpc4j-1.6/library/build.gradle.kts rename to instrumentation/jsonrpc4j-1.3/library/build.gradle.kts index c290a83ac682..345f9d27f44f 100644 --- a/instrumentation/jsonrpc4j-1.6/library/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.3/library/build.gradle.kts @@ -5,9 +5,9 @@ plugins { val jacksonVersion = "2.13.3" dependencies { - library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.6") + library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.3.3") library("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") - testImplementation(project(":instrumentation:jsonrpc4j-1.6:testing")) + testImplementation(project(":instrumentation:jsonrpc4j-1.3:testing")) } diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java similarity index 94% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java index 92cc42760706..5696bf2ee898 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java similarity index 94% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java index bc36a0e0a8b5..b36a66a0f153 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java similarity index 86% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java index 2c1b9f05f5dc..3e58eea59a12 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcClientSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequest.java similarity index 90% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequest.java index 2ad802f4b07f..bfa0f49b0168 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequest.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.fasterxml.jackson.databind.JsonNode; import java.lang.reflect.Method; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequestGetter.java similarity index 89% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequestGetter.java index 31346fd994eb..8f3fd51f9b27 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcRequestGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequestGetter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.context.propagation.TextMapGetter; import java.util.ArrayList; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcResponse.java similarity index 92% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcResponse.java index 54b349e7bfbf..9279e492d324 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcResponse.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcResponse.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.fasterxml.jackson.databind.JsonNode; import java.lang.reflect.Method; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java similarity index 97% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java index 238542f0a538..36c46eaa2e1c 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.googlecode.jsonrpc4j.AnnotationsErrorResolver; import com.googlecode.jsonrpc4j.DefaultErrorResolver; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java similarity index 93% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java index f2c0467b8d84..bd69490a944a 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java similarity index 90% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java index 79f6d29a1017..0639a40cc891 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import java.lang.reflect.Method; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java similarity index 95% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java index ad16b605fa15..27509950f1e7 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcServerSpanStatusExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java similarity index 96% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java index 741863f4bde7..0c54be195e7d 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetry.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.OpenTelemetry; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java similarity index 98% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java index 23d879b81f1e..74fdaf810988 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/JsonRpcTelemetryBuilder.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; @@ -21,7 +21,7 @@ public class JsonRpcTelemetryBuilder { - private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jsonrpc4j-1.6"; + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jsonrpc4j-1.3"; private final OpenTelemetry openTelemetry; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java similarity index 97% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java index db4e20de8c2f..a7337f224140 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/OpenTelemetryJsonRpcInvocationListener.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.fasterxml.jackson.databind.JsonNode; import com.googlecode.jsonrpc4j.InvocationListener; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcRequest.java similarity index 92% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcRequest.java index 8f0193bb461e..4d1a09d678a6 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcRequest.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcRequest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import java.lang.reflect.Method; diff --git a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcResponse.java similarity index 83% rename from instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcResponse.java index ebc8205cff54..e1ea2ac8666e 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/SimpleJsonRpcResponse.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcResponse.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; public final class SimpleJsonRpcResponse { diff --git a/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java b/instrumentation/jsonrpc4j-1.3/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/LibraryJsonRpcTest.java similarity index 93% rename from instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java rename to instrumentation/jsonrpc4j-1.3/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/LibraryJsonRpcTest.java index c48a16fe2ffa..63e017601813 100644 --- a/instrumentation/jsonrpc4j-1.6/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/LibraryJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/LibraryJsonRpcTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.googlecode.jsonrpc4j.JsonRpcBasicServer; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; diff --git a/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts b/instrumentation/jsonrpc4j-1.3/testing/build.gradle.kts similarity index 89% rename from instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts rename to instrumentation/jsonrpc4j-1.3/testing/build.gradle.kts index a3d3679e3ccd..35775d794a20 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.3/testing/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("otel.java-conventions") } -val jsonrpcVersion = "1.6" +val jsonrpcVersion = "1.3.3" dependencies { api(project(":testing-common")) diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java b/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/AbstractJsonRpcTest.java similarity index 94% rename from instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java rename to instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/AbstractJsonRpcTest.java index 72fe8c1e0442..51c79dbd9071 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/AbstractJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/AbstractJsonRpcTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -67,7 +67,7 @@ void testServer() throws IOException { span -> span.hasName("parent").hasKind(SpanKind.INTERNAL).hasNoParent(), span -> span.hasName( - "io.opentelemetry.instrumentation.jsonrpc4j.v1_6.CalculatorService/add") + "io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorService/add") .hasKind(SpanKind.SERVER) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -75,12 +75,12 @@ void testServer() throws IOException { equalTo(RPC_JSONRPC_VERSION, "2.0"), equalTo( RPC_SERVICE, - "io.opentelemetry.instrumentation.jsonrpc4j.v1_6.CalculatorService"), + "io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorService"), equalTo(RPC_METHOD, "add"), equalTo(RPC_JSONRPC_ERROR_CODE, 0L)))); testing() .waitAndAssertMetrics( - "io.opentelemetry.jsonrpc4j-1.6", + "io.opentelemetry.jsonrpc4j-1.3", "rpc.server.duration", metrics -> metrics.anySatisfy( @@ -95,7 +95,7 @@ void testServer() throws IOException { equalTo(RPC_METHOD, "add"), equalTo( RPC_SERVICE, - "io.opentelemetry.instrumentation.jsonrpc4j.v1_6.CalculatorService"), + "io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorService"), equalTo(RPC_SYSTEM, "jsonrpc")))))); } } diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java b/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/CalculatorService.java similarity index 83% rename from instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java rename to instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/CalculatorService.java index 0afa70753390..8821b7d2b858 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorService.java +++ b/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/CalculatorService.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import com.googlecode.jsonrpc4j.JsonRpcService; diff --git a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java b/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/CalculatorServiceImpl.java similarity index 83% rename from instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java rename to instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/CalculatorServiceImpl.java index 5f0fb2b474d4..c01b9c99996c 100644 --- a/instrumentation/jsonrpc4j-1.6/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_6/CalculatorServiceImpl.java +++ b/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/CalculatorServiceImpl.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_6; +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; public class CalculatorServiceImpl implements CalculatorService { @Override diff --git a/settings.gradle.kts b/settings.gradle.kts index 624f4df4eacb..5a7294e49e90 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -345,9 +345,9 @@ include(":instrumentation:jsf:jsf-mojarra-3.0:javaagent") include(":instrumentation:jsf:jsf-myfaces-1.2:javaagent") include(":instrumentation:jsf:jsf-myfaces-3.0:javaagent") include(":instrumentation:jsp-2.3:javaagent") -include(":instrumentation:jsonrpc4j-1.6:javaagent") -include(":instrumentation:jsonrpc4j-1.6:library") -include(":instrumentation:jsonrpc4j-1.6:testing") +include(":instrumentation:jsonrpc4j-1.3:javaagent") +include(":instrumentation:jsonrpc4j-1.3:library") +include(":instrumentation:jsonrpc4j-1.3:testing") include(":instrumentation:kafka:kafka-clients:kafka-clients-0.11:bootstrap") include(":instrumentation:kafka:kafka-clients:kafka-clients-0.11:javaagent") include(":instrumentation:kafka:kafka-clients:kafka-clients-0.11:testing") From c20644b003a795f0c728b9f49f7cfba5bad05833 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Tue, 14 Jan 2025 15:51:10 +0800 Subject: [PATCH 09/17] try to support proxy client --- .../v1_3/JsonRpcClientInstrumentation.java | 11 +- .../v1_3/JsonRpcInstrumentationModule.java | 5 +- .../v1_3/JsonRpcProxyInstrumentation.java | 105 ++++++++++++++++++ .../v1_3/JsonRpcClientAttributesGetter.java | 1 - .../v1_3/JsonRpcClientSpanNameExtractor.java | 7 +- 5 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java index db080c6fdded..5a985825c8db 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java @@ -61,7 +61,16 @@ public static void onEnter( @Advice.Argument(1) Object argument, @Advice.Argument(3) Map extraHeaders, @Advice.Local("otelContext") Context context, - @Advice.Local("otelScope") Scope scope) {} + @Advice.Local("otelScope") Scope scope) { + Context parentContext = Context.current(); + SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(methodName, argument); + if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { + return; + } + + context = CLIENT_INSTRUMENTER.start(parentContext, request); + scope = context.makeCurrent(); + } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcInstrumentationModule.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcInstrumentationModule.java index ede1b7ceb340..7905681868de 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcInstrumentationModule.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcInstrumentationModule.java @@ -20,6 +20,9 @@ public JsonRpcInstrumentationModule() { @Override public List typeInstrumentations() { - return asList(new JsonRpcServerInstrumentation(), new JsonRpcClientInstrumentation()); + return asList( + new JsonRpcServerInstrumentation(), + new JsonRpcClientInstrumentation(), + new JsonRpcProxyInstrumentation()); } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java new file mode 100644 index 000000000000..9f29f6b98e69 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java @@ -0,0 +1,105 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; + +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3.JsonRpcSingletons.CLIENT_INSTRUMENTER; +import static net.bytebuddy.matcher.ElementMatchers.isMethod; +import static net.bytebuddy.matcher.ElementMatchers.isPrivate; +import static net.bytebuddy.matcher.ElementMatchers.isStatic; +import static net.bytebuddy.matcher.ElementMatchers.named; + +import com.googlecode.jsonrpc4j.IJsonRpcClient; +import com.googlecode.jsonrpc4j.ReflectionUtil; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcRequest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcResponse; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.Map; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.matcher.ElementMatcher; + +public class JsonRpcProxyInstrumentation implements TypeInstrumentation { + + @Override + public ElementMatcher classLoaderOptimization() { + return hasClassesNamed("com.googlecode.jsonrpc4j.ProxyUtil"); + } + + @Override + public ElementMatcher typeMatcher() { + return named("com.googlecode.jsonrpc4j.ProxyUtil"); + } + + @Override + public void transform(TypeTransformer transformer) { + transformer.applyAdviceToMethod( + isMethod().and(isStatic()).and(isPrivate()).and(named("createClientProxy")), + this.getClass().getName() + "$CreateClientProxyAdvice"); + } + + @SuppressWarnings({"unused", "unchecked"}) + public static class CreateClientProxyAdvice { + + @Advice.OnMethodExit(suppress = Throwable.class) + public static void onExit( + @Advice.Argument(0) ClassLoader classLoader, + @Advice.Argument(1) Class proxyInterface, + @Advice.Argument(2) IJsonRpcClient client, + @Advice.Argument(3) Map extraHeaders, + @Advice.Return(readOnly = false) Object proxy) { + + proxy = + (T) + Proxy.newProxyInstance( + classLoader, + new Class[] {proxyInterface}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { + + Object arguments = ReflectionUtil.parseArguments(method, args); + String methodName = method.getName(); // todo + + // before invoke + Context parentContext = Context.current(); + SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(method, args); + if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { + return client.invoke( + methodName, arguments, method.getGenericReturnType(), extraHeaders); + } + + Context context = CLIENT_INSTRUMENTER.start(parentContext, request); + Scope scope = context.makeCurrent(); + try { + Object result = + client.invoke( + methodName, arguments, method.getGenericReturnType(), extraHeaders); + scope.close(); + CLIENT_INSTRUMENTER.end( + context, + new SimpleJsonRpcRequest(method, args), + new SimpleJsonRpcResponse(result), + null); + return result; + } catch (Throwable t) { + // after invoke + scope.close(); + CLIENT_INSTRUMENTER.end(context, request, null, t); + throw t; + } + } + }); + } + } +} diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java index b36a66a0f153..c85de10f4d5c 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java @@ -20,7 +20,6 @@ public String getSystem(SimpleJsonRpcRequest request) { @Override public String getService(SimpleJsonRpcRequest request) { - // TODO if (request.getMethod() != null) { return request.getMethod().getDeclaringClass().getName(); } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java index 3e58eea59a12..a4ab989eef58 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java @@ -6,10 +6,15 @@ package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import java.lang.reflect.Method; public class JsonRpcClientSpanNameExtractor implements SpanNameExtractor { @Override public String extract(SimpleJsonRpcRequest request) { - return request.getMethodName(); + if (request.getMethod() == null) { + return request.getMethodName(); + } + Method method = request.getMethod(); + return String.format("%s/%s", method.getDeclaringClass().getName(), method.getName()); } } From 527b244ffefc45e42f34adf98926eff4fd95d466 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Tue, 14 Jan 2025 15:57:31 +0800 Subject: [PATCH 10/17] update supported-libraries.md --- docs/supported-libraries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/supported-libraries.md b/docs/supported-libraries.md index 597562c7f1fd..54a25f62542c 100644 --- a/docs/supported-libraries.md +++ b/docs/supported-libraries.md @@ -90,7 +90,7 @@ These are the supported libraries and frameworks: | [Jedis](https://github.com/xetorthio/jedis) | 1.4+ | N/A | [Database Client Spans] | | [JMS](https://javaee.github.io/javaee-spec/javadocs/javax/jms/package-summary.html) | 1.1+ | N/A | [Messaging Spans] | | [Jodd Http](https://http.jodd.org/) | 4.2+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] | -| [JSON-RPC](https://github.com/briandilley/jsonrpc4j) | 1.6.0 | N/A | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] | +| [JSON-RPC](https://github.com/briandilley/jsonrpc4j) | 1.3.3+ | N/A | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] | | [JSP](https://javaee.github.io/javaee-spec/javadocs/javax/servlet/jsp/package-summary.html) | 2.3.x only | N/A | Controller Spans [3] | | [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) | 1.0+ | N/A | Context propagation | | [Ktor](https://github.com/ktorio/ktor) | 1.0+ | [opentelemetry-ktor-1.0](../instrumentation/ktor/ktor-1.0/library),
[opentelemetry-ktor-2.0](../instrumentation/ktor/ktor-2.0/library),
[opentelemetry-ktor-3.0](../instrumentation/ktor/ktor-3.0/library) | [HTTP Client Spans], [HTTP Client Metrics], [HTTP Server Spans], [HTTP Server Metrics] | From 12e289d6352ac294c96c645a43642f9661e76741 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Tue, 14 Jan 2025 16:07:16 +0800 Subject: [PATCH 11/17] add README.md for library --- .../jsonrpc4j-1.3/library/README.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 instrumentation/jsonrpc4j-1.3/library/README.md diff --git a/instrumentation/jsonrpc4j-1.3/library/README.md b/instrumentation/jsonrpc4j-1.3/library/README.md new file mode 100644 index 000000000000..17174b9bf00c --- /dev/null +++ b/instrumentation/jsonrpc4j-1.3/library/README.md @@ -0,0 +1,39 @@ +# Library Instrumentation for jsonrpc4j 1.3.3+ + +Provides OpenTelemetry instrumentation for [jsonrpc4j](https://github.com/briandilley/jsonrpc4j) server. + +## Quickstart + +### Add the following dependencies to your project + +Replace `OPENTELEMETRY_VERSION` with the [latest release](https://search.maven.org/search?q=g:io.opentelemetry.instrumentation%20AND%20a:opentelemetry-jsonrpc4j-1.3). + +For Maven, add the following to your `pom.xml` dependencies: + +```xml + + + io.opentelemetry.instrumentation + opentelemetry-jsonrpc4j-1.3 + OPENTELEMETRY_VERSION + + +``` + +For Gradle, add the following to your dependencies: + +```groovy +implementation("io.opentelemetry.instrumentation:opentelemetry-jsonrpc4j-1.3:OPENTELEMETRY_VERSION") +``` + +### Usage + +The instrumentation library provides the implementation of `InvocationListener` to provide OpenTelemetry-based spans and context propagation. + +```java +// For server-side, attatch the invocation listener to your service. +JsonRpcBasicServer configureServer(OpenTelemetry openTelemetry, JsonRpcBasicServer server) { + JsonRpcTelemetry jsonrpcTelemetry = JsonRpcTelemetry.create(openTelemetry); + return server.setInvocationListener(jsonrpcTelemetry.newServerInvocationListener()); +} +``` From 974c31541e9e9fff7be3a80c24fe169575248a10 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Tue, 14 Jan 2025 19:48:04 +0800 Subject: [PATCH 12/17] support instrument proxy client --- .../v1_3/JsonRpcProxyInstrumentation.java | 54 ++----------------- .../jsonrpc4j/v1_3/JsonRpcSingletons.java | 52 ++++++++++++++++++ 2 files changed, 55 insertions(+), 51 deletions(-) diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java index 9f29f6b98e69..4941ba36506d 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java @@ -6,23 +6,14 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; -import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3.JsonRpcSingletons.CLIENT_INSTRUMENTER; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPrivate; import static net.bytebuddy.matcher.ElementMatchers.isStatic; import static net.bytebuddy.matcher.ElementMatchers.named; import com.googlecode.jsonrpc4j.IJsonRpcClient; -import com.googlecode.jsonrpc4j.ReflectionUtil; -import io.opentelemetry.context.Context; -import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcRequest; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -47,7 +38,7 @@ public void transform(TypeTransformer transformer) { this.getClass().getName() + "$CreateClientProxyAdvice"); } - @SuppressWarnings({"unused", "unchecked"}) + @SuppressWarnings({"unused"}) public static class CreateClientProxyAdvice { @Advice.OnMethodExit(suppress = Throwable.class) @@ -59,47 +50,8 @@ public static void onExit( @Advice.Return(readOnly = false) Object proxy) { proxy = - (T) - Proxy.newProxyInstance( - classLoader, - new Class[] {proxyInterface}, - new InvocationHandler() { - @Override - public Object invoke(Object proxy, Method method, Object[] args) - throws Throwable { - - Object arguments = ReflectionUtil.parseArguments(method, args); - String methodName = method.getName(); // todo - - // before invoke - Context parentContext = Context.current(); - SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(method, args); - if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { - return client.invoke( - methodName, arguments, method.getGenericReturnType(), extraHeaders); - } - - Context context = CLIENT_INSTRUMENTER.start(parentContext, request); - Scope scope = context.makeCurrent(); - try { - Object result = - client.invoke( - methodName, arguments, method.getGenericReturnType(), extraHeaders); - scope.close(); - CLIENT_INSTRUMENTER.end( - context, - new SimpleJsonRpcRequest(method, args), - new SimpleJsonRpcResponse(result), - null); - return result; - } catch (Throwable t) { - // after invoke - scope.close(); - CLIENT_INSTRUMENTER.end(context, request, null, t); - throw t; - } - } - }); + JsonRpcSingletons.instrumentCreateClientProxy( + classLoader, proxyInterface, client, extraHeaders, proxy); } } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java index 43b1e6ce490a..1085b9e4e400 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java @@ -5,12 +5,19 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; +import com.googlecode.jsonrpc4j.IJsonRpcClient; import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcTelemetry; import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcRequest; import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcResponse; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.Map; public final class JsonRpcSingletons { @@ -26,4 +33,49 @@ public final class JsonRpcSingletons { } private JsonRpcSingletons() {} + + @SuppressWarnings({"unchecked"}) + public static T instrumentCreateClientProxy( + ClassLoader classLoader, + Class proxyInterface, + IJsonRpcClient client, + Map extraHeaders, + Object proxy) { + + return (T) + Proxy.newProxyInstance( + classLoader, + new Class[] {proxyInterface}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy1, Method method, Object[] args) throws Throwable { + // before invoke + Context parentContext = Context.current(); + SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(method, args); + if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { + return method.invoke(proxy, args); + } + + Context context = CLIENT_INSTRUMENTER.start(parentContext, request); + Scope scope = context.makeCurrent(); + try { + Object result = method.invoke(proxy, args); + // after invoke + scope.close(); + CLIENT_INSTRUMENTER.end( + context, + new SimpleJsonRpcRequest(method, args), + new SimpleJsonRpcResponse(result), + null); + return result; + + } catch (Throwable t) { + // after invoke + scope.close(); + CLIENT_INSTRUMENTER.end(context, request, null, t); + throw t; + } + } + }); + } } From 06f0869e0199f4ff659ff92af6c576ff2f49f5a5 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 15 Jan 2025 22:32:20 +0800 Subject: [PATCH 13/17] add test for proxy client --- .../jsonrpc4j-1.3/javaagent/build.gradle.kts | 8 ++ .../v1_3/JsonRpcClientInstrumentation.java | 10 +- .../v1_3/JsonRpcProxyInstrumentation.java | 72 ++++++++++- .../jsonrpc4j/v1_3/JsonRpcSingletons.java | 58 +-------- .../jsonrpc4j/v1_3/AgentJsonRpcTest.java | 116 ++++++++++++++++++ .../jsonrpc4j/v1_3/JettyServer.java | 89 ++++++++++++++ .../JsonRpcClientAttributesExtractor.java | 8 +- .../v1_3/JsonRpcClientAttributesGetter.java | 8 +- ...Request.java => JsonRpcClientRequest.java} | 6 +- ...sponse.java => JsonRpcClientResponse.java} | 4 +- .../v1_3/JsonRpcClientSpanNameExtractor.java | 4 +- .../JsonRpcServerAttributesExtractor.java | 12 +- .../v1_3/JsonRpcServerAttributesGetter.java | 8 +- ...Request.java => JsonRpcServerRequest.java} | 4 +- ...r.java => JsonRpcServerRequestGetter.java} | 6 +- ...sponse.java => JsonRpcServerResponse.java} | 4 +- .../v1_3/JsonRpcServerSpanNameExtractor.java | 4 +- .../JsonRpcServerSpanStatusExtractor.java | 6 +- .../jsonrpc4j/v1_3/JsonRpcTelemetry.java | 10 +- .../v1_3/JsonRpcTelemetryBuilder.java | 20 +-- ...penTelemetryJsonRpcInvocationListener.java | 10 +- 21 files changed, 349 insertions(+), 118 deletions(-) create mode 100644 instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JettyServer.java rename instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/{SimpleJsonRpcRequest.java => JsonRpcClientRequest.java} (78%) rename instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/{SimpleJsonRpcResponse.java => JsonRpcClientResponse.java} (74%) rename instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/{JsonRpcRequest.java => JsonRpcServerRequest.java} (82%) rename instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/{JsonRpcRequestGetter.java => JsonRpcServerRequestGetter.java} (63%) rename instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/{JsonRpcResponse.java => JsonRpcServerResponse.java} (83%) diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts b/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts index 0fa473ae49cd..34a4315d8acd 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts @@ -17,6 +17,14 @@ dependencies { library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.3.3") testImplementation(project(":instrumentation:jsonrpc4j-1.3:testing")) + + testImplementation("com.fasterxml.jackson.core:jackson-databind:2.13.3") + + testImplementation("org.eclipse.jetty:jetty-server:9.4.49.v20220914") + + testImplementation("org.eclipse.jetty:jetty-servlet:9.4.49.v20220914") + + testImplementation("javax.portlet:portlet-api:2.0") } tasks { diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java index 5a985825c8db..605c241a9507 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java @@ -16,8 +16,8 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcRequest; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcResponse; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientRequest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import java.util.Map; @@ -63,7 +63,7 @@ public static void onEnter( @Advice.Local("otelContext") Context context, @Advice.Local("otelScope") Scope scope) { Context parentContext = Context.current(); - SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(methodName, argument); + JsonRpcClientRequest request = new JsonRpcClientRequest(methodName, argument); if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { return; } @@ -88,8 +88,8 @@ public static void onExit( scope.close(); CLIENT_INSTRUMENTER.end( context, - new SimpleJsonRpcRequest(methodName, argument), - new SimpleJsonRpcResponse(result), + new JsonRpcClientRequest(methodName, argument), + new JsonRpcClientResponse(result), throwable); } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java index 4941ba36506d..a04e074d2f00 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java @@ -6,14 +6,22 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3.JsonRpcSingletons.CLIENT_INSTRUMENTER; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPrivate; import static net.bytebuddy.matcher.ElementMatchers.isStatic; import static net.bytebuddy.matcher.ElementMatchers.named; import com.googlecode.jsonrpc4j.IJsonRpcClient; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientRequest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -49,9 +57,67 @@ public static void onExit( @Advice.Argument(3) Map extraHeaders, @Advice.Return(readOnly = false) Object proxy) { - proxy = - JsonRpcSingletons.instrumentCreateClientProxy( - classLoader, proxyInterface, client, extraHeaders, proxy); + proxy = instrumentCreateClientProxy(classLoader, proxyInterface, client, extraHeaders, proxy); + } + + private static Object proxyObjectMethods(Method method, Object proxyObject, Object[] args) { + String name = method.getName(); + switch (name) { + case "toString": + return proxyObject.getClass().getName() + "@" + System.identityHashCode(proxyObject); + case "hashCode": + return System.identityHashCode(proxyObject); + case "equals": + return proxyObject == args[0]; + default: + throw new IllegalArgumentException( + method.getName() + " is not a member of java.lang.Object"); + } + } + + @SuppressWarnings({"unchecked"}) + public static T instrumentCreateClientProxy( + ClassLoader classLoader, + Class proxyInterface, + IJsonRpcClient client, + Map extraHeaders, + Object proxy) { + + return (T) + Proxy.newProxyInstance( + classLoader, + new Class[] {proxyInterface}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy1, Method method, Object[] args) throws Throwable { + // before invoke + Context parentContext = Context.current(); + JsonRpcClientRequest request = new JsonRpcClientRequest(method, args); + if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { + return method.invoke(proxy, args); + } + + Context context = CLIENT_INSTRUMENTER.start(parentContext, request); + Scope scope = context.makeCurrent(); + try { + Object result = method.invoke(proxy, args); + // after invoke + scope.close(); + CLIENT_INSTRUMENTER.end( + context, + new JsonRpcClientRequest(method, args), + new JsonRpcClientResponse(result), + null); + return result; + + } catch (Throwable t) { + // after invoke + scope.close(); + CLIENT_INSTRUMENTER.end(context, request, null, t); + throw t; + } + } + }); } } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java index 1085b9e4e400..85c9dc33c2a8 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java @@ -5,25 +5,18 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; -import com.googlecode.jsonrpc4j.IJsonRpcClient; import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.context.Context; -import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientRequest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientResponse; import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcTelemetry; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcRequest; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.SimpleJsonRpcResponse; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.util.Map; public final class JsonRpcSingletons { public static final InvocationListener SERVER_INVOCATION_LISTENER; - public static final Instrumenter CLIENT_INSTRUMENTER; + public static final Instrumenter CLIENT_INSTRUMENTER; static { JsonRpcTelemetry telemetry = JsonRpcTelemetry.builder(GlobalOpenTelemetry.get()).build(); @@ -33,49 +26,4 @@ public final class JsonRpcSingletons { } private JsonRpcSingletons() {} - - @SuppressWarnings({"unchecked"}) - public static T instrumentCreateClientProxy( - ClassLoader classLoader, - Class proxyInterface, - IJsonRpcClient client, - Map extraHeaders, - Object proxy) { - - return (T) - Proxy.newProxyInstance( - classLoader, - new Class[] {proxyInterface}, - new InvocationHandler() { - @Override - public Object invoke(Object proxy1, Method method, Object[] args) throws Throwable { - // before invoke - Context parentContext = Context.current(); - SimpleJsonRpcRequest request = new SimpleJsonRpcRequest(method, args); - if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { - return method.invoke(proxy, args); - } - - Context context = CLIENT_INSTRUMENTER.start(parentContext, request); - Scope scope = context.makeCurrent(); - try { - Object result = method.invoke(proxy, args); - // after invoke - scope.close(); - CLIENT_INSTRUMENTER.end( - context, - new SimpleJsonRpcRequest(method, args), - new SimpleJsonRpcResponse(result), - null); - return result; - - } catch (Throwable t) { - // after invoke - scope.close(); - CLIENT_INSTRUMENTER.end(context, request, null, t); - throw t; - } - } - }); - } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/AgentJsonRpcTest.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/AgentJsonRpcTest.java index 57ba6e371908..cac7e9e20d72 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/AgentJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/AgentJsonRpcTest.java @@ -5,10 +5,31 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_JSONRPC_VERSION; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE; +import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SYSTEM; + +import com.fasterxml.jackson.databind.ObjectMapper; import com.googlecode.jsonrpc4j.JsonRpcBasicServer; +import com.googlecode.jsonrpc4j.JsonRpcHttpClient; +import com.googlecode.jsonrpc4j.ProxyUtil; +import com.googlecode.jsonrpc4j.spring.rest.JsonRpcRestClient; +import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.AbstractJsonRpcTest; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorService; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorServiceImpl; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; class AgentJsonRpcTest extends AbstractJsonRpcTest { @@ -25,4 +46,99 @@ protected InstrumentationExtension testing() { protected JsonRpcBasicServer configureServer(JsonRpcBasicServer server) { return server; } + + @Test + void testClient() throws Throwable { + CalculatorService clientProxy = + ProxyUtil.createClientProxy( + this.getClass().getClassLoader(), CalculatorService.class, getHttpClient()); + int res = + testing() + .runWithSpan( + "parent", + () -> { + return clientProxy.add(1, 2); + }); + + assertThat(res).isEqualTo(3); + + testing() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent").hasKind(SpanKind.INTERNAL).hasNoParent(), + span -> + span.hasName( + "io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorService/add") + .hasKind(SpanKind.CLIENT) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "jsonrpc"), + equalTo(RPC_JSONRPC_VERSION, "2.0"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorService"), + equalTo(RPC_METHOD, "add"))), + trace -> trace.hasSpansSatisfyingExactly(span -> span.hasKind(SpanKind.SERVER))); + + testing() + .waitAndAssertMetrics( + "io.opentelemetry.jsonrpc4j-1.3", + "rpc.client.duration", + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfying( + equalTo(RPC_METHOD, "add"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorService"), + equalTo(RPC_SYSTEM, "jsonrpc")))))); + } + + private JettyServer jettyServer; + + @BeforeAll + public void setup() throws Exception { + this.jettyServer = createServer(); + } + + private static JettyServer createServer() throws Exception { + JettyServer jettyServer = new JettyServer(CalculatorServiceImpl.class); + jettyServer.startup(); + return jettyServer; + } + + protected JsonRpcRestClient getClient() throws MalformedURLException { + return getClient(JettyServer.SERVLET); + } + + protected JsonRpcRestClient getClient(String servlet) throws MalformedURLException { + return new JsonRpcRestClient(new URL(jettyServer.getCustomServerUrlString(servlet))); + } + + protected JsonRpcHttpClient getHttpClient() throws MalformedURLException { + Map header = new HashMap<>(); + return new JsonRpcHttpClient( + new ObjectMapper(), + new URL(jettyServer.getCustomServerUrlString(JettyServer.SERVLET)), + header); + } + + protected JsonRpcHttpClient getHttpClient(String servlet) throws MalformedURLException { + Map header = new HashMap<>(); + return new JsonRpcHttpClient( + new ObjectMapper(), new URL(jettyServer.getCustomServerUrlString(servlet)), header); + } + + @AfterAll + public void teardown() throws Exception { + jettyServer.stop(); + } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JettyServer.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JettyServer.java new file mode 100644 index 000000000000..2a8a474da755 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JettyServer.java @@ -0,0 +1,89 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; + +import com.googlecode.jsonrpc4j.AnnotationsErrorResolver; +import com.googlecode.jsonrpc4j.JsonRpcServer; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.Random; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; + +@SuppressWarnings("WeakerAccess") +public class JettyServer implements AutoCloseable { + + public static final String DEFAULT_LOCAL_HOSTNAME = "127.0.0.1"; + + public static final String SERVLET = "someSunnyServlet"; + private static final String PROTOCOL = "http"; + + private final Class service; + + private Server jetty; + private int port; + + JettyServer(Class service) { + this.service = service; + } + + public String getCustomServerUrlString(String servletName) { + return PROTOCOL + "://" + DEFAULT_LOCAL_HOSTNAME + ":" + port + "/" + servletName; + } + + public void startup() throws Exception { + port = 10000 + new Random().nextInt(30000); + jetty = new Server(port); + ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); + context.setContextPath("/"); + jetty.setHandler(context); + ServletHolder servlet = context.addServlet(JsonRpcTestServlet.class, "/" + SERVLET); + servlet.setInitParameter("class", service.getCanonicalName()); + jetty.start(); + } + + @Override + public void close() throws Exception { + this.stop(); + } + + public void stop() throws Exception { + jetty.stop(); + } + + public static class JsonRpcTestServlet extends HttpServlet { + + static final long serialVersionUID = 1L; + private transient JsonRpcServer jsonRpcServer; + + @Override + public void init() throws ServletException { + try { + Class svcClass = Class.forName(getInitParameter("class")); + Object instance = svcClass.getConstructor().newInstance(); + jsonRpcServer = new JsonRpcServer(instance); + jsonRpcServer.setErrorResolver(AnnotationsErrorResolver.INSTANCE); + } catch (ClassNotFoundException + | NoSuchMethodException + | InstantiationException + | InvocationTargetException + | IllegalAccessException e) { + throw new ServletException(e); + } + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + jsonRpcServer.handle(request, response); + } + } +} diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java index 5696bf2ee898..17cf2914e6dc 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java @@ -12,11 +12,11 @@ // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ final class JsonRpcClientAttributesExtractor - implements AttributesExtractor { + implements AttributesExtractor { @Override public void onStart( - AttributesBuilder attributes, Context parentContext, SimpleJsonRpcRequest jsonRpcRequest) { + AttributesBuilder attributes, Context parentContext, JsonRpcClientRequest jsonRpcRequest) { attributes.put("rpc.jsonrpc.version", "2.0"); } @@ -24,7 +24,7 @@ public void onStart( public void onEnd( AttributesBuilder attributes, Context context, - SimpleJsonRpcRequest jsonRpcRequest, - @Nullable SimpleJsonRpcResponse jsonRpcResponse, + JsonRpcClientRequest jsonRpcRequest, + @Nullable JsonRpcClientResponse jsonRpcResponse, @Nullable Throwable error) {} } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java index c85de10f4d5c..49a9735fc759 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java @@ -10,16 +10,16 @@ // Check // https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ -public enum JsonRpcClientAttributesGetter implements RpcAttributesGetter { +public enum JsonRpcClientAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override - public String getSystem(SimpleJsonRpcRequest request) { + public String getSystem(JsonRpcClientRequest request) { return "jsonrpc"; } @Override - public String getService(SimpleJsonRpcRequest request) { + public String getService(JsonRpcClientRequest request) { if (request.getMethod() != null) { return request.getMethod().getDeclaringClass().getName(); } @@ -27,7 +27,7 @@ public String getService(SimpleJsonRpcRequest request) { } @Override - public String getMethod(SimpleJsonRpcRequest request) { + public String getMethod(JsonRpcClientRequest request) { return request.getMethodName(); } } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcRequest.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java similarity index 78% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcRequest.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java index 4d1a09d678a6..a7882ff6abc6 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcRequest.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java @@ -7,18 +7,18 @@ import java.lang.reflect.Method; -public final class SimpleJsonRpcRequest { +public final class JsonRpcClientRequest { private final String methodName; private final Object argument; private Method method; - public SimpleJsonRpcRequest(String methodName, Object argument) { + public JsonRpcClientRequest(String methodName, Object argument) { this.methodName = methodName; this.argument = argument; } - public SimpleJsonRpcRequest(Method method, Object argument) { + public JsonRpcClientRequest(Method method, Object argument) { this.method = method; this.methodName = method.getName(); this.argument = argument; diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcResponse.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java similarity index 74% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcResponse.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java index e1ea2ac8666e..ac2108909b8f 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/SimpleJsonRpcResponse.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java @@ -5,11 +5,11 @@ package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; -public final class SimpleJsonRpcResponse { +public final class JsonRpcClientResponse { private final Object result; - public SimpleJsonRpcResponse(Object result) { + public JsonRpcClientResponse(Object result) { this.result = result; } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java index a4ab989eef58..d0970ad4ca7a 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java @@ -8,9 +8,9 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import java.lang.reflect.Method; -public class JsonRpcClientSpanNameExtractor implements SpanNameExtractor { +public class JsonRpcClientSpanNameExtractor implements SpanNameExtractor { @Override - public String extract(SimpleJsonRpcRequest request) { + public String extract(JsonRpcClientRequest request) { if (request.getMethod() == null) { return request.getMethodName(); } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java index 36c46eaa2e1c..adeb8c0e6f3f 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java @@ -17,7 +17,7 @@ // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ final class JsonRpcServerAttributesExtractor - implements AttributesExtractor { + implements AttributesExtractor { private static final AttributeKey RPC_JSONRPC_ERROR_CODE = AttributeKey.longKey("rpc.jsonrpc.error_code"); @@ -27,7 +27,9 @@ final class JsonRpcServerAttributesExtractor @Override public void onStart( - AttributesBuilder attributes, Context parentContext, JsonRpcRequest jsonRpcRequest) { + AttributesBuilder attributes, + Context parentContext, + JsonRpcServerRequest jsonRpcServerRequest) { attributes.put("rpc.jsonrpc.version", "2.0"); } @@ -35,8 +37,8 @@ public void onStart( public void onEnd( AttributesBuilder attributes, Context context, - JsonRpcRequest jsonRpcRequest, - @Nullable JsonRpcResponse jsonRpcResponse, + JsonRpcServerRequest jsonRpcServerRequest, + @Nullable JsonRpcServerResponse jsonRpcServerResponse, @Nullable Throwable error) { // use the DEFAULT_ERROR_RESOLVER to extract error code and message if (error != null) { @@ -45,7 +47,7 @@ public void onEnd( AnnotationsErrorResolver.INSTANCE, DefaultErrorResolver.INSTANCE); ErrorResolver.JsonError jsonError = errorResolver.resolveError( - error, jsonRpcRequest.getMethod(), jsonRpcRequest.getArguments()); + error, jsonRpcServerRequest.getMethod(), jsonRpcServerRequest.getArguments()); attributes.put(RPC_JSONRPC_ERROR_CODE, jsonError.code); attributes.put(RPC_JSONRPC_ERROR_MESSAGE, jsonError.message); } else { diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java index bd69490a944a..9e61b42c073a 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java @@ -10,21 +10,21 @@ // Check // https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ -public enum JsonRpcServerAttributesGetter implements RpcAttributesGetter { +public enum JsonRpcServerAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override - public String getSystem(JsonRpcRequest request) { + public String getSystem(JsonRpcServerRequest request) { return "jsonrpc"; } @Override - public String getService(JsonRpcRequest request) { + public String getService(JsonRpcServerRequest request) { return request.getMethod().getDeclaringClass().getName(); } @Override - public String getMethod(JsonRpcRequest request) { + public String getMethod(JsonRpcServerRequest request) { return request.getMethod().getName(); } } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequest.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequest.java similarity index 82% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequest.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequest.java index bfa0f49b0168..65c96abea75d 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequest.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequest.java @@ -9,12 +9,12 @@ import java.lang.reflect.Method; import java.util.List; -public final class JsonRpcRequest { +public final class JsonRpcServerRequest { private final Method method; private final List arguments; - JsonRpcRequest(Method method, List arguments) { + JsonRpcServerRequest(Method method, List arguments) { this.method = method; this.arguments = arguments; } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequestGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequestGetter.java similarity index 63% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequestGetter.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequestGetter.java index 8f3fd51f9b27..381b19f5851d 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcRequestGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequestGetter.java @@ -9,17 +9,17 @@ import java.util.ArrayList; import javax.annotation.Nullable; -enum JsonRpcRequestGetter implements TextMapGetter { +enum JsonRpcServerRequestGetter implements TextMapGetter { INSTANCE; @Override - public Iterable keys(JsonRpcRequest request) { + public Iterable keys(JsonRpcServerRequest request) { return new ArrayList<>(); } @Override @Nullable - public String get(@Nullable JsonRpcRequest request, String key) { + public String get(@Nullable JsonRpcServerRequest request, String key) { return null; } } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcResponse.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerResponse.java similarity index 83% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcResponse.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerResponse.java index 9279e492d324..1eb99a28afc2 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcResponse.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerResponse.java @@ -9,12 +9,12 @@ import java.lang.reflect.Method; import java.util.List; -public final class JsonRpcResponse { +public final class JsonRpcServerResponse { private final Method method; private final List params; private final Object result; - JsonRpcResponse(Method method, List params, Object result) { + JsonRpcServerResponse(Method method, List params, Object result) { this.method = method; this.params = params; this.result = result; diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java index 0639a40cc891..6c95126372a6 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java @@ -8,10 +8,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import java.lang.reflect.Method; -public class JsonRpcServerSpanNameExtractor implements SpanNameExtractor { +public class JsonRpcServerSpanNameExtractor implements SpanNameExtractor { // Follow https://opentelemetry.io/docs/specs/semconv/rpc/rpc-spans/#span-name @Override - public String extract(JsonRpcRequest request) { + public String extract(JsonRpcServerRequest request) { Method method = request.getMethod(); return String.format("%s/%s", method.getDeclaringClass().getName(), method.getName()); } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java index 27509950f1e7..3cdfaec03ce7 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java @@ -13,15 +13,15 @@ import javax.annotation.Nullable; public enum JsonRpcServerSpanStatusExtractor - implements SpanStatusExtractor { + implements SpanStatusExtractor { INSTANCE; /** Extracts the status from the response and sets it to the {@code spanStatusBuilder}. */ @Override public void extract( SpanStatusBuilder spanStatusBuilder, - JsonRpcRequest jsonRpcRequest, - @Nullable JsonRpcResponse jsonRpcResponse, + JsonRpcServerRequest jsonRpcServerRequest, + @Nullable JsonRpcServerResponse jsonRpcServerResponse, @Nullable Throwable error) { if (error == null) { spanStatusBuilder.setStatus(StatusCode.OK); diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java index 0c54be195e7d..f81265157438 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java @@ -19,13 +19,13 @@ public static JsonRpcTelemetryBuilder builder(OpenTelemetry openTelemetry) { return new JsonRpcTelemetryBuilder(openTelemetry); } - private final Instrumenter serverInstrumenter; - private final Instrumenter clientInstrumenter; + private final Instrumenter serverInstrumenter; + private final Instrumenter clientInstrumenter; private final ContextPropagators propagators; JsonRpcTelemetry( - Instrumenter serverInstrumenter, - Instrumenter clientInstrumenter, + Instrumenter serverInstrumenter, + Instrumenter clientInstrumenter, ContextPropagators propagators) { this.serverInstrumenter = serverInstrumenter; this.clientInstrumenter = clientInstrumenter; @@ -36,7 +36,7 @@ public InvocationListener newServerInvocationListener() { return new OpenTelemetryJsonRpcInvocationListener(serverInstrumenter); } - public Instrumenter getClientInstrumenter() { + public Instrumenter getClientInstrumenter() { return clientInstrumenter; } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java index 74fdaf810988..aeb6da585f90 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java @@ -26,9 +26,10 @@ public class JsonRpcTelemetryBuilder { private final OpenTelemetry openTelemetry; private final List< - AttributesExtractor> + AttributesExtractor> additionalClientExtractors = new ArrayList<>(); - private final List> + private final List< + AttributesExtractor> additionalServerExtractors = new ArrayList<>(); JsonRpcTelemetryBuilder(OpenTelemetry openTelemetry) { @@ -42,7 +43,7 @@ public class JsonRpcTelemetryBuilder { */ @CanIgnoreReturnValue public JsonRpcTelemetryBuilder addClientAttributeExtractor( - AttributesExtractor + AttributesExtractor attributesExtractor) { additionalClientExtractors.add(attributesExtractor); return this; @@ -55,21 +56,22 @@ public JsonRpcTelemetryBuilder addClientAttributeExtractor( */ @CanIgnoreReturnValue public JsonRpcTelemetryBuilder addServerAttributeExtractor( - AttributesExtractor attributesExtractor) { + AttributesExtractor + attributesExtractor) { additionalServerExtractors.add(attributesExtractor); return this; } public JsonRpcTelemetry build() { - SpanNameExtractor clientSpanNameExtractor = + SpanNameExtractor clientSpanNameExtractor = new JsonRpcClientSpanNameExtractor(); - SpanNameExtractor serverSpanNameExtractor = + SpanNameExtractor serverSpanNameExtractor = new JsonRpcServerSpanNameExtractor(); - InstrumenterBuilder clientInstrumenterBuilder = + InstrumenterBuilder clientInstrumenterBuilder = Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor); - InstrumenterBuilder serverInstrumenterBuilder = + InstrumenterBuilder serverInstrumenterBuilder = Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, serverSpanNameExtractor); JsonRpcServerAttributesGetter serverRpcAttributesGetter = @@ -91,7 +93,7 @@ public JsonRpcTelemetry build() { .addOperationMetrics(RpcServerMetrics.get()); return new JsonRpcTelemetry( - serverInstrumenterBuilder.buildServerInstrumenter(JsonRpcRequestGetter.INSTANCE), + serverInstrumenterBuilder.buildServerInstrumenter(JsonRpcServerRequestGetter.INSTANCE), clientInstrumenterBuilder.buildInstrumenter(SpanKindExtractor.alwaysClient()), openTelemetry.getPropagators()); } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java index a7337f224140..70490fad5a01 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java @@ -15,13 +15,13 @@ public final class OpenTelemetryJsonRpcInvocationListener implements InvocationListener { - private final Instrumenter serverInstrumenter; + private final Instrumenter serverInstrumenter; private static final ThreadLocal threadLocalContext = new ThreadLocal<>(); private static final ThreadLocal threadLocalScope = new ThreadLocal<>(); public OpenTelemetryJsonRpcInvocationListener( - Instrumenter serverInstrumenter) { + Instrumenter serverInstrumenter) { this.serverInstrumenter = serverInstrumenter; } @@ -34,7 +34,7 @@ public OpenTelemetryJsonRpcInvocationListener( @Override public void willInvoke(Method method, List arguments) { Context parentContext = Context.current(); - JsonRpcRequest request = new JsonRpcRequest(method, arguments); + JsonRpcServerRequest request = new JsonRpcServerRequest(method, arguments); if (!serverInstrumenter.shouldStart(parentContext, request)) { return; } @@ -59,8 +59,8 @@ public void willInvoke(Method method, List arguments) { @Override public void didInvoke( Method method, List arguments, Object result, Throwable t, long duration) { - JsonRpcRequest request = new JsonRpcRequest(method, arguments); - JsonRpcResponse response = new JsonRpcResponse(method, arguments, result); + JsonRpcServerRequest request = new JsonRpcServerRequest(method, arguments); + JsonRpcServerResponse response = new JsonRpcServerResponse(method, arguments, result); threadLocalScope.get().close(); serverInstrumenter.end(threadLocalContext.get(), request, response, t); threadLocalContext.remove(); From c5f18628fb7e11a9808049eefcc770031fd4b640 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Tue, 21 Jan 2025 21:11:17 +0800 Subject: [PATCH 14/17] resolve some comments --- docs/supported-libraries.md | 2 +- .../jsonrpc4j-1.3/javaagent/build.gradle.kts | 10 ----- .../v1_3/JsonRpcClientInstrumentation.java | 15 +++---- .../v1_3/JsonRpcProxyInstrumentation.java | 44 +++++++------------ .../v1_3/JsonRpcServerInstrumentation.java | 33 ++++---------- .../jsonrpc4j/v1_3/JettyServer.java | 7 ++- .../jsonrpc4j-1.3/library/build.gradle.kts | 5 +-- .../JsonRpcClientAttributesExtractor.java | 7 ++- .../v1_3/JsonRpcClientAttributesGetter.java | 2 +- .../v1_3/JsonRpcClientSpanNameExtractor.java | 2 +- .../JsonRpcServerAttributesExtractor.java | 8 ++-- .../v1_3/JsonRpcServerAttributesGetter.java | 2 +- .../jsonrpc4j/v1_3/JsonRpcServerRequest.java | 2 +- .../jsonrpc4j/v1_3/JsonRpcServerResponse.java | 2 +- .../v1_3/JsonRpcServerSpanNameExtractor.java | 2 +- .../JsonRpcServerSpanStatusExtractor.java | 16 +++---- .../jsonrpc4j/v1_3/JsonRpcTelemetry.java | 4 -- ...penTelemetryJsonRpcInvocationListener.java | 2 +- .../jsonrpc4j-1.3/testing/build.gradle.kts | 5 +-- .../jsonrpc4j/v1_3/AbstractJsonRpcTest.java | 5 +-- 20 files changed, 61 insertions(+), 114 deletions(-) diff --git a/docs/supported-libraries.md b/docs/supported-libraries.md index 54a25f62542c..3758008a9104 100644 --- a/docs/supported-libraries.md +++ b/docs/supported-libraries.md @@ -90,7 +90,7 @@ These are the supported libraries and frameworks: | [Jedis](https://github.com/xetorthio/jedis) | 1.4+ | N/A | [Database Client Spans] | | [JMS](https://javaee.github.io/javaee-spec/javadocs/javax/jms/package-summary.html) | 1.1+ | N/A | [Messaging Spans] | | [Jodd Http](https://http.jodd.org/) | 4.2+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] | -| [JSON-RPC](https://github.com/briandilley/jsonrpc4j) | 1.3.3+ | N/A | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] | +| [JSON-RPC for Java](https://github.com/briandilley/jsonrpc4j) | 1.3.3+ | N/A | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] | | [JSP](https://javaee.github.io/javaee-spec/javadocs/javax/servlet/jsp/package-summary.html) | 2.3.x only | N/A | Controller Spans [3] | | [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) | 1.0+ | N/A | Context propagation | | [Ktor](https://github.com/ktorio/ktor) | 1.0+ | [opentelemetry-ktor-1.0](../instrumentation/ktor/ktor-1.0/library),
[opentelemetry-ktor-2.0](../instrumentation/ktor/ktor-2.0/library),
[opentelemetry-ktor-3.0](../instrumentation/ktor/ktor-3.0/library) | [HTTP Client Spans], [HTTP Client Metrics], [HTTP Server Spans], [HTTP Server Metrics] | diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts b/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts index 34a4315d8acd..8ea048096456 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.3/javaagent/build.gradle.kts @@ -17,18 +17,8 @@ dependencies { library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.3.3") testImplementation(project(":instrumentation:jsonrpc4j-1.3:testing")) - testImplementation("com.fasterxml.jackson.core:jackson-databind:2.13.3") - testImplementation("org.eclipse.jetty:jetty-server:9.4.49.v20220914") - testImplementation("org.eclipse.jetty:jetty-servlet:9.4.49.v20220914") - testImplementation("javax.portlet:portlet-api:2.0") } - -tasks { - test { - jvmArgs("-Dotel.javaagent.experimental.thread-propagation-debugger.enabled=false") - } -} diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java index 605c241a9507..d846ad0e1504 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java @@ -20,6 +20,7 @@ import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import java.lang.reflect.Type; import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -46,8 +47,8 @@ public void transform(TypeTransformer transformer) { .and(takesArguments(4)) .and(takesArgument(0, String.class)) .and(takesArgument(1, Object.class)) - .and(takesArgument(2, named("java.lang.reflect.Type"))) - .and(takesArgument(3, named("java.util.Map"))) + .and(takesArgument(2, Type.class)) + .and(takesArgument(3, Map.class)) .and(returns(Object.class)), this.getClass().getName() + "$InvokeAdvice"); } @@ -60,10 +61,11 @@ public static void onEnter( @Advice.Argument(0) String methodName, @Advice.Argument(1) Object argument, @Advice.Argument(3) Map extraHeaders, + @Advice.Local("otelRequest") JsonRpcClientRequest request, @Advice.Local("otelContext") Context context, @Advice.Local("otelScope") Scope scope) { Context parentContext = Context.current(); - JsonRpcClientRequest request = new JsonRpcClientRequest(methodName, argument); + request = new JsonRpcClientRequest(methodName, argument); if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { return; } @@ -79,6 +81,7 @@ public static void onExit( @Advice.Argument(3) Map extraHeaders, @Advice.Return Object result, @Advice.Thrown Throwable throwable, + @Advice.Local("otelRequest") JsonRpcClientRequest request, @Advice.Local("otelContext") Context context, @Advice.Local("otelScope") Scope scope) { if (scope == null) { @@ -86,11 +89,7 @@ public static void onExit( } scope.close(); - CLIENT_INSTRUMENTER.end( - context, - new JsonRpcClientRequest(methodName, argument), - new JsonRpcClientResponse(result), - throwable); + CLIENT_INSTRUMENTER.end(context, request, new JsonRpcClientResponse(result), throwable); } } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java index a04e074d2f00..5787536548c5 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java @@ -20,6 +20,7 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Map; @@ -60,21 +61,6 @@ public static void onExit( proxy = instrumentCreateClientProxy(classLoader, proxyInterface, client, extraHeaders, proxy); } - private static Object proxyObjectMethods(Method method, Object proxyObject, Object[] args) { - String name = method.getName(); - switch (name) { - case "toString": - return proxyObject.getClass().getName() + "@" + System.identityHashCode(proxyObject); - case "hashCode": - return System.identityHashCode(proxyObject); - case "equals": - return proxyObject == args[0]; - default: - throw new IllegalArgumentException( - method.getName() + " is not a member of java.lang.Object"); - } - } - @SuppressWarnings({"unchecked"}) public static T instrumentCreateClientProxy( ClassLoader classLoader, @@ -94,28 +80,28 @@ public Object invoke(Object proxy1, Method method, Object[] args) throws Throwab Context parentContext = Context.current(); JsonRpcClientRequest request = new JsonRpcClientRequest(method, args); if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { - return method.invoke(proxy, args); + try { + return method.invoke(proxy, args); + } catch (InvocationTargetException exception) { + throw exception.getCause(); + } } Context context = CLIENT_INSTRUMENTER.start(parentContext, request); - Scope scope = context.makeCurrent(); - try { - Object result = method.invoke(proxy, args); - // after invoke - scope.close(); - CLIENT_INSTRUMENTER.end( - context, - new JsonRpcClientRequest(method, args), - new JsonRpcClientResponse(result), - null); - return result; - + Object result; + try (Scope scope = context.makeCurrent()) { + result = method.invoke(proxy, args); } catch (Throwable t) { // after invoke - scope.close(); CLIENT_INSTRUMENTER.end(context, request, null, t); throw t; } + CLIENT_INSTRUMENTER.end( + context, + new JsonRpcClientRequest(method, args), + new JsonRpcClientResponse(result), + null); + return result; } }); } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcServerInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcServerInstrumentation.java index da97523bca72..6a645dbaaff8 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcServerInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcServerInstrumentation.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; -import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3.JsonRpcSingletons.SERVER_INVOCATION_LISTENER; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -14,21 +13,14 @@ import com.googlecode.jsonrpc4j.InvocationListener; import com.googlecode.jsonrpc4j.JsonRpcBasicServer; import com.googlecode.jsonrpc4j.MultipleInvocationListener; -import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.implementation.bytecode.assign.Assigner; import net.bytebuddy.matcher.ElementMatcher; public class JsonRpcServerInstrumentation implements TypeInstrumentation { - @Override - public ElementMatcher classLoaderOptimization() { - return hasClassesNamed("com.googlecode.jsonrpc4j.JsonRpcBasicServer"); - } - @Override public ElementMatcher typeMatcher() { return named("com.googlecode.jsonrpc4j.JsonRpcBasicServer"); @@ -62,22 +54,15 @@ public static class SetInvocationListenerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static void setInvocationListener( @Advice.This JsonRpcBasicServer jsonRpcServer, - @Advice.Argument(value = 0, readOnly = false, typing = Assigner.Typing.DYNAMIC) - InvocationListener invocationListener) { - VirtualField instrumented = - VirtualField.find(JsonRpcBasicServer.class, Boolean.class); - if (!Boolean.TRUE.equals(instrumented.get(jsonRpcServer))) { - if (invocationListener == null) { - invocationListener = SERVER_INVOCATION_LISTENER; - } else if (invocationListener instanceof MultipleInvocationListener) { - ((MultipleInvocationListener) invocationListener) - .addInvocationListener(SERVER_INVOCATION_LISTENER); - } else { - invocationListener = - new MultipleInvocationListener(invocationListener, SERVER_INVOCATION_LISTENER); - } - - instrumented.set(jsonRpcServer, true); + @Advice.Argument(value = 0, readOnly = false) InvocationListener invocationListener) { + if (invocationListener == null) { + invocationListener = SERVER_INVOCATION_LISTENER; + } else if (invocationListener instanceof MultipleInvocationListener) { + ((MultipleInvocationListener) invocationListener) + .addInvocationListener(SERVER_INVOCATION_LISTENER); + } else if (invocationListener != SERVER_INVOCATION_LISTENER) { + invocationListener = + new MultipleInvocationListener(invocationListener, SERVER_INVOCATION_LISTENER); } } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JettyServer.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JettyServer.java index 2a8a474da755..1afa637013a1 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JettyServer.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JettyServer.java @@ -9,16 +9,15 @@ import com.googlecode.jsonrpc4j.JsonRpcServer; import java.io.IOException; import java.lang.reflect.InvocationTargetException; -import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; -@SuppressWarnings("WeakerAccess") public class JettyServer implements AutoCloseable { public static final String DEFAULT_LOCAL_HOSTNAME = "127.0.0.1"; @@ -40,14 +39,14 @@ public String getCustomServerUrlString(String servletName) { } public void startup() throws Exception { - port = 10000 + new Random().nextInt(30000); - jetty = new Server(port); + jetty = new Server(0); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); context.setContextPath("/"); jetty.setHandler(context); ServletHolder servlet = context.addServlet(JsonRpcTestServlet.class, "/" + SERVLET); servlet.setInitParameter("class", service.getCanonicalName()); jetty.start(); + port = ((ServerConnector) jetty.getConnectors()[0]).getLocalPort(); } @Override diff --git a/instrumentation/jsonrpc4j-1.3/library/build.gradle.kts b/instrumentation/jsonrpc4j-1.3/library/build.gradle.kts index 345f9d27f44f..0b5ddb64a5b1 100644 --- a/instrumentation/jsonrpc4j-1.3/library/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.3/library/build.gradle.kts @@ -2,12 +2,9 @@ plugins { id("otel.library-instrumentation") } -val jacksonVersion = "2.13.3" - dependencies { library("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.3.3") - - library("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") + library("com.fasterxml.jackson.core:jackson-databind") testImplementation(project(":instrumentation:jsonrpc4j-1.3:testing")) } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java index 17cf2914e6dc..626d0cc3be1a 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; +import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; @@ -14,10 +15,14 @@ final class JsonRpcClientAttributesExtractor implements AttributesExtractor { + // copied from RpcIncubatingAttributes + private static final AttributeKey RPC_JSONRPC_VERSION = + AttributeKey.stringKey("rpc.jsonrpc.version"); + @Override public void onStart( AttributesBuilder attributes, Context parentContext, JsonRpcClientRequest jsonRpcRequest) { - attributes.put("rpc.jsonrpc.version", "2.0"); + attributes.put(RPC_JSONRPC_VERSION, "2.0"); } @Override diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java index 49a9735fc759..f84ce8105d77 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java @@ -10,7 +10,7 @@ // Check // https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ -public enum JsonRpcClientAttributesGetter implements RpcAttributesGetter { +enum JsonRpcClientAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java index d0970ad4ca7a..d462a1cd8a7e 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java @@ -8,7 +8,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import java.lang.reflect.Method; -public class JsonRpcClientSpanNameExtractor implements SpanNameExtractor { +final class JsonRpcClientSpanNameExtractor implements SpanNameExtractor { @Override public String extract(JsonRpcClientRequest request) { if (request.getMethod() == null) { diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java index adeb8c0e6f3f..66b060bf3d1f 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesExtractor.java @@ -19,18 +19,20 @@ final class JsonRpcServerAttributesExtractor implements AttributesExtractor { + // copied from RpcIncubatingAttributes private static final AttributeKey RPC_JSONRPC_ERROR_CODE = AttributeKey.longKey("rpc.jsonrpc.error_code"); - private static final AttributeKey RPC_JSONRPC_ERROR_MESSAGE = AttributeKey.stringKey("rpc.jsonrpc.error_message"); + private static final AttributeKey RPC_JSONRPC_VERSION = + AttributeKey.stringKey("rpc.jsonrpc.version"); @Override public void onStart( AttributesBuilder attributes, Context parentContext, JsonRpcServerRequest jsonRpcServerRequest) { - attributes.put("rpc.jsonrpc.version", "2.0"); + attributes.put(RPC_JSONRPC_VERSION, "2.0"); } @Override @@ -50,8 +52,6 @@ public void onEnd( error, jsonRpcServerRequest.getMethod(), jsonRpcServerRequest.getArguments()); attributes.put(RPC_JSONRPC_ERROR_CODE, jsonError.code); attributes.put(RPC_JSONRPC_ERROR_MESSAGE, jsonError.message); - } else { - attributes.put(RPC_JSONRPC_ERROR_CODE, ErrorResolver.JsonError.OK.code); } } } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java index 9e61b42c073a..a9c4d3ea92af 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerAttributesGetter.java @@ -10,7 +10,7 @@ // Check // https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-metrics.md#attributes // Check https://opentelemetry.io/docs/specs/semconv/rpc/json-rpc/ -public enum JsonRpcServerAttributesGetter implements RpcAttributesGetter { +enum JsonRpcServerAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequest.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequest.java index 65c96abea75d..2f0435e343a2 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequest.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerRequest.java @@ -9,7 +9,7 @@ import java.lang.reflect.Method; import java.util.List; -public final class JsonRpcServerRequest { +final class JsonRpcServerRequest { private final Method method; private final List arguments; diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerResponse.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerResponse.java index 1eb99a28afc2..419ae0f23b58 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerResponse.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerResponse.java @@ -9,7 +9,7 @@ import java.lang.reflect.Method; import java.util.List; -public final class JsonRpcServerResponse { +final class JsonRpcServerResponse { private final Method method; private final List params; private final Object result; diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java index 6c95126372a6..774f1630e0e8 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanNameExtractor.java @@ -8,7 +8,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import java.lang.reflect.Method; -public class JsonRpcServerSpanNameExtractor implements SpanNameExtractor { +final class JsonRpcServerSpanNameExtractor implements SpanNameExtractor { // Follow https://opentelemetry.io/docs/specs/semconv/rpc/rpc-spans/#span-name @Override public String extract(JsonRpcServerRequest request) { diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java index 3cdfaec03ce7..eba1352798b5 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerSpanStatusExtractor.java @@ -12,7 +12,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; import javax.annotation.Nullable; -public enum JsonRpcServerSpanStatusExtractor +enum JsonRpcServerSpanStatusExtractor implements SpanStatusExtractor { INSTANCE; @@ -23,15 +23,11 @@ public void extract( JsonRpcServerRequest jsonRpcServerRequest, @Nullable JsonRpcServerResponse jsonRpcServerResponse, @Nullable Throwable error) { - if (error == null) { - spanStatusBuilder.setStatus(StatusCode.OK); + // do not treat client invalid input as server error + if ((error != null) + && !(error instanceof JsonParseException) + && !(error instanceof JsonMappingException)) { + spanStatusBuilder.setStatus(StatusCode.ERROR); } - - // treat client invalid input as OK - if (error instanceof JsonParseException || error instanceof JsonMappingException) { - spanStatusBuilder.setStatus(StatusCode.OK); - } - - spanStatusBuilder.setStatus(StatusCode.ERROR); } } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java index f81265157438..a626a42b100d 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java @@ -39,8 +39,4 @@ public InvocationListener newServerInvocationListener() { public Instrumenter getClientInstrumenter() { return clientInstrumenter; } - - public ContextPropagators getPropagators() { - return propagators; - } } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java index 70490fad5a01..c7b5a703e4e8 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java @@ -13,7 +13,7 @@ import java.lang.reflect.Method; import java.util.List; -public final class OpenTelemetryJsonRpcInvocationListener implements InvocationListener { +final class OpenTelemetryJsonRpcInvocationListener implements InvocationListener { private final Instrumenter serverInstrumenter; diff --git a/instrumentation/jsonrpc4j-1.3/testing/build.gradle.kts b/instrumentation/jsonrpc4j-1.3/testing/build.gradle.kts index 35775d794a20..6596b86cc674 100644 --- a/instrumentation/jsonrpc4j-1.3/testing/build.gradle.kts +++ b/instrumentation/jsonrpc4j-1.3/testing/build.gradle.kts @@ -2,12 +2,9 @@ plugins { id("otel.java-conventions") } -val jsonrpcVersion = "1.3.3" - dependencies { api(project(":testing-common")) - implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:$jsonrpcVersion") - + implementation("com.github.briandilley.jsonrpc4j:jsonrpc4j:1.3.3") implementation("com.fasterxml.jackson.core:jackson-databind:2.13.3") } diff --git a/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/AbstractJsonRpcTest.java b/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/AbstractJsonRpcTest.java index 51c79dbd9071..a7aaff5ebaf4 100644 --- a/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/AbstractJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.3/testing/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/AbstractJsonRpcTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; -import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_JSONRPC_ERROR_CODE; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_JSONRPC_VERSION; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE; @@ -26,7 +25,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -@SuppressWarnings("deprecation") // using deprecated semconv @TestInstance(TestInstance.Lifecycle.PER_CLASS) public abstract class AbstractJsonRpcTest { @@ -76,8 +74,7 @@ void testServer() throws IOException { equalTo( RPC_SERVICE, "io.opentelemetry.instrumentation.jsonrpc4j.v1_3.CalculatorService"), - equalTo(RPC_METHOD, "add"), - equalTo(RPC_JSONRPC_ERROR_CODE, 0L)))); + equalTo(RPC_METHOD, "add")))); testing() .waitAndAssertMetrics( "io.opentelemetry.jsonrpc4j-1.3", From 7972e68ce2c9db342cde42c61998beda150561a9 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 22 Jan 2025 14:04:22 +0800 Subject: [PATCH 15/17] move client instrumentation from library to javaagent --- .../JsonRpcClientAttributesExtractor.java | 2 +- .../v1_3/JsonRpcClientAttributesGetter.java | 4 +- .../v1_3/JsonRpcClientInstrumentation.java | 2 - .../jsonrpc4j/v1_3/JsonRpcClientRequest.java | 2 +- .../jsonrpc4j/v1_3/JsonRpcClientResponse.java | 2 +- .../v1_3/JsonRpcClientSpanNameExtractor.java | 2 +- .../v1_3/JsonRpcClientTelemetry.java | 30 +++++++++ .../v1_3/JsonRpcClientTelemetryBuilder.java | 66 +++++++++++++++++++ .../v1_3/JsonRpcProxyInstrumentation.java | 2 - .../jsonrpc4j/v1_3/JsonRpcSingletons.java | 13 ++-- .../v1_3/JsonRpcServerTelemetry.java | 31 +++++++++ ...ava => JsonRpcServerTelemetryBuilder.java} | 46 ++----------- .../jsonrpc4j/v1_3/JsonRpcTelemetry.java | 42 ------------ .../jsonrpc4j/v1_3/LibraryJsonRpcTest.java | 4 +- 14 files changed, 149 insertions(+), 99 deletions(-) rename instrumentation/jsonrpc4j-1.3/{library/src/main/java/io/opentelemetry => javaagent/src/main/java/io/opentelemetry/javaagent}/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java (94%) rename instrumentation/jsonrpc4j-1.3/{library/src/main/java/io/opentelemetry => javaagent/src/main/java/io/opentelemetry/javaagent}/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java (90%) rename instrumentation/jsonrpc4j-1.3/{library/src/main/java/io/opentelemetry => javaagent/src/main/java/io/opentelemetry/javaagent}/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java (91%) rename instrumentation/jsonrpc4j-1.3/{library/src/main/java/io/opentelemetry => javaagent/src/main/java/io/opentelemetry/javaagent}/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java (81%) rename instrumentation/jsonrpc4j-1.3/{library/src/main/java/io/opentelemetry => javaagent/src/main/java/io/opentelemetry/javaagent}/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java (89%) create mode 100644 instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientTelemetry.java create mode 100644 instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientTelemetryBuilder.java create mode 100644 instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerTelemetry.java rename instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/{JsonRpcTelemetryBuilder.java => JsonRpcServerTelemetryBuilder.java} (54%) delete mode 100644 instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java similarity index 94% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java index 626d0cc3be1a..7aa70422bb11 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.AttributesBuilder; diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java similarity index 90% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java index f84ce8105d77..8cd2c482e513 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientAttributesGetter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; @@ -23,7 +23,7 @@ public String getService(JsonRpcClientRequest request) { if (request.getMethod() != null) { return request.getMethod().getDeclaringClass().getName(); } - return "NOT_AVAILABLE"; + return null; } @Override diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java index d846ad0e1504..50dfc6b1748f 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientInstrumentation.java @@ -16,8 +16,6 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientRequest; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import java.lang.reflect.Type; diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java similarity index 91% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java index a7882ff6abc6..b567d39d4131 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientRequest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import java.lang.reflect.Method; diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java similarity index 81% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java index ac2108909b8f..bee409965d27 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientResponse.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; public final class JsonRpcClientResponse { diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java similarity index 89% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java rename to instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java index d462a1cd8a7e..67cf84ae61fa 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientSpanNameExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import java.lang.reflect.Method; diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientTelemetry.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientTelemetry.java new file mode 100644 index 000000000000..be0baebe08c1 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientTelemetry.java @@ -0,0 +1,30 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; + +public final class JsonRpcClientTelemetry { + public static JsonRpcClientTelemetry create(OpenTelemetry openTelemetry) { + return builder(openTelemetry).build(); + } + + public static JsonRpcClientTelemetryBuilder builder(OpenTelemetry openTelemetry) { + return new JsonRpcClientTelemetryBuilder(openTelemetry); + } + + private final Instrumenter clientInstrumenter; + + JsonRpcClientTelemetry( + Instrumenter clientInstrumenter) { + this.clientInstrumenter = clientInstrumenter; + } + + public Instrumenter getClientInstrumenter() { + return clientInstrumenter; + } +} diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientTelemetryBuilder.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientTelemetryBuilder.java new file mode 100644 index 000000000000..d21ad895d32a --- /dev/null +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcClientTelemetryBuilder.java @@ -0,0 +1,66 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientMetrics; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import java.util.ArrayList; +import java.util.List; + +public class JsonRpcClientTelemetryBuilder { + + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jsonrpc4j-1.3"; + + private final OpenTelemetry openTelemetry; + + private final List< + AttributesExtractor> + additionalClientExtractors = new ArrayList<>(); + + JsonRpcClientTelemetryBuilder(OpenTelemetry openTelemetry) { + this.openTelemetry = openTelemetry; + } + + /** + * Adds an extra client-only {@link AttributesExtractor} to invoke to set attributes to + * instrumented items. The {@link AttributesExtractor} will be executed after all default + * extractors. + */ + @CanIgnoreReturnValue + public JsonRpcClientTelemetryBuilder addClientAttributeExtractor( + AttributesExtractor + attributesExtractor) { + additionalClientExtractors.add(attributesExtractor); + return this; + } + + public JsonRpcClientTelemetry build() { + SpanNameExtractor clientSpanNameExtractor = + new JsonRpcClientSpanNameExtractor(); + + InstrumenterBuilder clientInstrumenterBuilder = + Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor); + + JsonRpcClientAttributesGetter clientRpcAttributesGetter = + JsonRpcClientAttributesGetter.INSTANCE; + + clientInstrumenterBuilder + .addAttributesExtractor(RpcClientAttributesExtractor.create(clientRpcAttributesGetter)) + .addAttributesExtractors(additionalClientExtractors) + .addAttributesExtractor(new JsonRpcClientAttributesExtractor()) + .addOperationMetrics(RpcClientMetrics.get()); + + return new JsonRpcClientTelemetry( + clientInstrumenterBuilder.buildInstrumenter(SpanKindExtractor.alwaysClient())); + } +} diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java index 5787536548c5..7a14f3b83819 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java @@ -15,8 +15,6 @@ import com.googlecode.jsonrpc4j.IJsonRpcClient; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientRequest; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientResponse; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import java.lang.reflect.InvocationHandler; diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java index 85c9dc33c2a8..c09c745cf126 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java @@ -8,9 +8,7 @@ import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientRequest; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcClientResponse; -import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcTelemetry; +import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcServerTelemetry; public final class JsonRpcSingletons { @@ -19,10 +17,13 @@ public final class JsonRpcSingletons { public static final Instrumenter CLIENT_INSTRUMENTER; static { - JsonRpcTelemetry telemetry = JsonRpcTelemetry.builder(GlobalOpenTelemetry.get()).build(); + JsonRpcServerTelemetry serverTelemetry = + JsonRpcServerTelemetry.builder(GlobalOpenTelemetry.get()).build(); + JsonRpcClientTelemetry clientTelemetry = + JsonRpcClientTelemetry.builder(GlobalOpenTelemetry.get()).build(); - SERVER_INVOCATION_LISTENER = telemetry.newServerInvocationListener(); - CLIENT_INSTRUMENTER = telemetry.getClientInstrumenter(); + SERVER_INVOCATION_LISTENER = serverTelemetry.newServerInvocationListener(); + CLIENT_INSTRUMENTER = clientTelemetry.getClientInstrumenter(); } private JsonRpcSingletons() {} diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerTelemetry.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerTelemetry.java new file mode 100644 index 000000000000..5b3a0cb83237 --- /dev/null +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerTelemetry.java @@ -0,0 +1,31 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; + +import com.googlecode.jsonrpc4j.InvocationListener; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; + +public final class JsonRpcServerTelemetry { + public static JsonRpcServerTelemetry create(OpenTelemetry openTelemetry) { + return builder(openTelemetry).build(); + } + + public static JsonRpcServerTelemetryBuilder builder(OpenTelemetry openTelemetry) { + return new JsonRpcServerTelemetryBuilder(openTelemetry); + } + + private final Instrumenter serverInstrumenter; + + JsonRpcServerTelemetry( + Instrumenter serverInstrumenter) { + this.serverInstrumenter = serverInstrumenter; + } + + public InvocationListener newServerInvocationListener() { + return new OpenTelemetryJsonRpcInvocationListener(serverInstrumenter); + } +} diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerTelemetryBuilder.java similarity index 54% rename from instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java rename to instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerTelemetryBuilder.java index aeb6da585f90..b4cabd03d13d 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetryBuilder.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcServerTelemetryBuilder.java @@ -7,83 +7,51 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientAttributesExtractor; -import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcServerAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; -import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import java.util.ArrayList; import java.util.List; -public class JsonRpcTelemetryBuilder { +public class JsonRpcServerTelemetryBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jsonrpc4j-1.3"; private final OpenTelemetry openTelemetry; - private final List< - AttributesExtractor> - additionalClientExtractors = new ArrayList<>(); private final List< AttributesExtractor> additionalServerExtractors = new ArrayList<>(); - JsonRpcTelemetryBuilder(OpenTelemetry openTelemetry) { + JsonRpcServerTelemetryBuilder(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; } - /** - * Adds an extra client-only {@link AttributesExtractor} to invoke to set attributes to - * instrumented items. The {@link AttributesExtractor} will be executed after all default - * extractors. - */ - @CanIgnoreReturnValue - public JsonRpcTelemetryBuilder addClientAttributeExtractor( - AttributesExtractor - attributesExtractor) { - additionalClientExtractors.add(attributesExtractor); - return this; - } - /** * Adds an extra server-only {@link AttributesExtractor} to invoke to set attributes to * instrumented items. The {@link AttributesExtractor} will be executed after all default * extractors. */ @CanIgnoreReturnValue - public JsonRpcTelemetryBuilder addServerAttributeExtractor( + public JsonRpcServerTelemetryBuilder addServerAttributeExtractor( AttributesExtractor attributesExtractor) { additionalServerExtractors.add(attributesExtractor); return this; } - public JsonRpcTelemetry build() { - SpanNameExtractor clientSpanNameExtractor = - new JsonRpcClientSpanNameExtractor(); + public JsonRpcServerTelemetry build() { SpanNameExtractor serverSpanNameExtractor = new JsonRpcServerSpanNameExtractor(); - InstrumenterBuilder clientInstrumenterBuilder = - Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor); - InstrumenterBuilder serverInstrumenterBuilder = Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, serverSpanNameExtractor); JsonRpcServerAttributesGetter serverRpcAttributesGetter = JsonRpcServerAttributesGetter.INSTANCE; - JsonRpcClientAttributesGetter clientRpcAttributesGetter = - JsonRpcClientAttributesGetter.INSTANCE; - - clientInstrumenterBuilder - .addAttributesExtractor(RpcClientAttributesExtractor.create(clientRpcAttributesGetter)) - .addAttributesExtractors(additionalClientExtractors) - .addAttributesExtractor(new JsonRpcClientAttributesExtractor()) - .addOperationMetrics(RpcClientMetrics.get()); serverInstrumenterBuilder .setSpanStatusExtractor(JsonRpcServerSpanStatusExtractor.INSTANCE) @@ -92,9 +60,7 @@ public JsonRpcTelemetry build() { .addAttributesExtractors(additionalServerExtractors) .addOperationMetrics(RpcServerMetrics.get()); - return new JsonRpcTelemetry( - serverInstrumenterBuilder.buildServerInstrumenter(JsonRpcServerRequestGetter.INSTANCE), - clientInstrumenterBuilder.buildInstrumenter(SpanKindExtractor.alwaysClient()), - openTelemetry.getPropagators()); + return new JsonRpcServerTelemetry( + serverInstrumenterBuilder.buildServerInstrumenter(JsonRpcServerRequestGetter.INSTANCE)); } } diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java deleted file mode 100644 index a626a42b100d..000000000000 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/JsonRpcTelemetry.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.jsonrpc4j.v1_3; - -import com.googlecode.jsonrpc4j.InvocationListener; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.context.propagation.ContextPropagators; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; - -public final class JsonRpcTelemetry { - public static JsonRpcTelemetry create(OpenTelemetry openTelemetry) { - return builder(openTelemetry).build(); - } - - public static JsonRpcTelemetryBuilder builder(OpenTelemetry openTelemetry) { - return new JsonRpcTelemetryBuilder(openTelemetry); - } - - private final Instrumenter serverInstrumenter; - private final Instrumenter clientInstrumenter; - private final ContextPropagators propagators; - - JsonRpcTelemetry( - Instrumenter serverInstrumenter, - Instrumenter clientInstrumenter, - ContextPropagators propagators) { - this.serverInstrumenter = serverInstrumenter; - this.clientInstrumenter = clientInstrumenter; - this.propagators = propagators; - } - - public InvocationListener newServerInvocationListener() { - return new OpenTelemetryJsonRpcInvocationListener(serverInstrumenter); - } - - public Instrumenter getClientInstrumenter() { - return clientInstrumenter; - } -} diff --git a/instrumentation/jsonrpc4j-1.3/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/LibraryJsonRpcTest.java b/instrumentation/jsonrpc4j-1.3/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/LibraryJsonRpcTest.java index 63e017601813..f6c592185fb9 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/LibraryJsonRpcTest.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/test/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/LibraryJsonRpcTest.java @@ -23,7 +23,9 @@ protected InstrumentationExtension testing() { @Override protected JsonRpcBasicServer configureServer(JsonRpcBasicServer server) { server.setInvocationListener( - JsonRpcTelemetry.builder(testing.getOpenTelemetry()).build().newServerInvocationListener()); + JsonRpcServerTelemetry.builder(testing.getOpenTelemetry()) + .build() + .newServerInvocationListener()); return server; } } From 8536218af7b734f14e8b4612b61ce08d124ce623 Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 22 Jan 2025 20:01:17 +0800 Subject: [PATCH 16/17] fix failed testss --- .../v1_3/JsonRpcProxyInstrumentation.java | 53 +------------------ .../jsonrpc4j/v1_3/JsonRpcSingletons.java | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java index 7a14f3b83819..19f414eb228e 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcProxyInstrumentation.java @@ -6,21 +6,15 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; -import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3.JsonRpcSingletons.CLIENT_INSTRUMENTER; +import static io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3.JsonRpcSingletons.instrumentCreateClientProxy; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPrivate; import static net.bytebuddy.matcher.ElementMatchers.isStatic; import static net.bytebuddy.matcher.ElementMatchers.named; import com.googlecode.jsonrpc4j.IJsonRpcClient; -import io.opentelemetry.context.Context; -import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -58,50 +52,5 @@ public static void onExit( proxy = instrumentCreateClientProxy(classLoader, proxyInterface, client, extraHeaders, proxy); } - - @SuppressWarnings({"unchecked"}) - public static T instrumentCreateClientProxy( - ClassLoader classLoader, - Class proxyInterface, - IJsonRpcClient client, - Map extraHeaders, - Object proxy) { - - return (T) - Proxy.newProxyInstance( - classLoader, - new Class[] {proxyInterface}, - new InvocationHandler() { - @Override - public Object invoke(Object proxy1, Method method, Object[] args) throws Throwable { - // before invoke - Context parentContext = Context.current(); - JsonRpcClientRequest request = new JsonRpcClientRequest(method, args); - if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { - try { - return method.invoke(proxy, args); - } catch (InvocationTargetException exception) { - throw exception.getCause(); - } - } - - Context context = CLIENT_INSTRUMENTER.start(parentContext, request); - Object result; - try (Scope scope = context.makeCurrent()) { - result = method.invoke(proxy, args); - } catch (Throwable t) { - // after invoke - CLIENT_INSTRUMENTER.end(context, request, null, t); - throw t; - } - CLIENT_INSTRUMENTER.end( - context, - new JsonRpcClientRequest(method, args), - new JsonRpcClientResponse(result), - null); - return result; - } - }); - } } } diff --git a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java index c09c745cf126..5773986b2f43 100644 --- a/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java +++ b/instrumentation/jsonrpc4j-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsonrpc4j/v1_3/JsonRpcSingletons.java @@ -5,10 +5,18 @@ package io.opentelemetry.javaagent.instrumentation.jsonrpc4j.v1_3; +import com.googlecode.jsonrpc4j.IJsonRpcClient; import com.googlecode.jsonrpc4j.InvocationListener; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.jsonrpc4j.v1_3.JsonRpcServerTelemetry; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.Map; public final class JsonRpcSingletons { @@ -26,5 +34,50 @@ public final class JsonRpcSingletons { CLIENT_INSTRUMENTER = clientTelemetry.getClientInstrumenter(); } + @SuppressWarnings({"unchecked"}) + public static T instrumentCreateClientProxy( + ClassLoader classLoader, + Class proxyInterface, + IJsonRpcClient client, + Map extraHeaders, + Object proxy) { + + return (T) + Proxy.newProxyInstance( + classLoader, + new Class[] {proxyInterface}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy1, Method method, Object[] args) throws Throwable { + // before invoke + Context parentContext = Context.current(); + JsonRpcClientRequest request = new JsonRpcClientRequest(method, args); + if (!CLIENT_INSTRUMENTER.shouldStart(parentContext, request)) { + try { + return method.invoke(proxy, args); + } catch (InvocationTargetException exception) { + throw exception.getCause(); + } + } + + Context context = CLIENT_INSTRUMENTER.start(parentContext, request); + Object result; + try (Scope scope = context.makeCurrent()) { + result = method.invoke(proxy, args); + } catch (Throwable t) { + // after invoke + CLIENT_INSTRUMENTER.end(context, request, null, t); + throw t; + } + CLIENT_INSTRUMENTER.end( + context, + new JsonRpcClientRequest(method, args), + new JsonRpcClientResponse(result), + null); + return result; + } + }); + } + private JsonRpcSingletons() {} } From bfb152ea0a739a16e3028a29da6c663392ee231b Mon Sep 17 00:00:00 2001 From: chenlujjj <953546398@qq.com> Date: Wed, 22 Jan 2025 20:23:46 +0800 Subject: [PATCH 17/17] use one threadlocal in OpenTelemetryJsonRpcInvocationListener --- ...penTelemetryJsonRpcInvocationListener.java | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java index c7b5a703e4e8..b9c442eaa3b4 100644 --- a/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java +++ b/instrumentation/jsonrpc4j-1.3/library/src/main/java/io/opentelemetry/instrumentation/jsonrpc4j/v1_3/OpenTelemetryJsonRpcInvocationListener.java @@ -15,10 +15,33 @@ final class OpenTelemetryJsonRpcInvocationListener implements InvocationListener { + static class JsonRpcContext { + private final Context context; + private final Scope scope; + private final JsonRpcServerRequest request; + + JsonRpcContext(Context context, Scope scope, JsonRpcServerRequest request) { + this.context = context; + this.scope = scope; + this.request = request; + } + + Context getContext() { + return context; + } + + Scope getScope() { + return scope; + } + + JsonRpcServerRequest getRequest() { + return request; + } + } + private final Instrumenter serverInstrumenter; - private static final ThreadLocal threadLocalContext = new ThreadLocal<>(); - private static final ThreadLocal threadLocalScope = new ThreadLocal<>(); + private static final ThreadLocal threadLocalContext = new ThreadLocal<>(); public OpenTelemetryJsonRpcInvocationListener( Instrumenter serverInstrumenter) { @@ -40,8 +63,8 @@ public void willInvoke(Method method, List arguments) { } Context context = serverInstrumenter.start(parentContext, request); - threadLocalContext.set(context); - threadLocalScope.set(context.makeCurrent()); + Scope scope = context.makeCurrent(); + threadLocalContext.set(new JsonRpcContext(context, scope, request)); } /** @@ -59,11 +82,10 @@ public void willInvoke(Method method, List arguments) { @Override public void didInvoke( Method method, List arguments, Object result, Throwable t, long duration) { - JsonRpcServerRequest request = new JsonRpcServerRequest(method, arguments); JsonRpcServerResponse response = new JsonRpcServerResponse(method, arguments, result); - threadLocalScope.get().close(); - serverInstrumenter.end(threadLocalContext.get(), request, response, t); + threadLocalContext.get().getScope().close(); + serverInstrumenter.end( + threadLocalContext.get().getContext(), threadLocalContext.get().getRequest(), response, t); threadLocalContext.remove(); - threadLocalScope.remove(); } }