Skip to content

Commit

Permalink
move client instrumentation from library to javaagent
Browse files Browse the repository at this point in the history
  • Loading branch information
chenlujjj committed Jan 22, 2025
1 parent c5f1862 commit b40f27d
Show file tree
Hide file tree
Showing 13 changed files with 125 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -23,7 +23,7 @@ public String getService(JsonRpcClientRequest request) {
if (request.getMethod() != null) {
return request.getMethod().getDeclaringClass().getName();
}
return "NOT_AVAILABLE";
return null;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* 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.context.propagation.ContextPropagators;
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<JsonRpcClientRequest, JsonRpcClientResponse> clientInstrumenter;

JsonRpcClientTelemetry(
Instrumenter<JsonRpcClientRequest, JsonRpcClientResponse> clientInstrumenter,
ContextPropagators propagators) {
this.clientInstrumenter = clientInstrumenter;
}

public Instrumenter<JsonRpcClientRequest, JsonRpcClientResponse> getClientInstrumenter() {
return clientInstrumenter;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* 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<? super JsonRpcClientRequest, ? super JsonRpcClientResponse>>
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<? super JsonRpcClientRequest, ? super JsonRpcClientResponse>
attributesExtractor) {
additionalClientExtractors.add(attributesExtractor);
return this;
}

public JsonRpcClientTelemetry build() {
SpanNameExtractor<JsonRpcClientRequest> clientSpanNameExtractor =
new JsonRpcClientSpanNameExtractor();

InstrumenterBuilder<JsonRpcClientRequest, JsonRpcClientResponse> 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()),
openTelemetry.getPropagators());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -19,10 +17,13 @@ public final class JsonRpcSingletons {
public static final Instrumenter<JsonRpcClientRequest, JsonRpcClientResponse> 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() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,33 +10,24 @@
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;

public final class JsonRpcTelemetry {
public static JsonRpcTelemetry create(OpenTelemetry openTelemetry) {
public final class JsonRpcServerTelemetry {
public static JsonRpcServerTelemetry create(OpenTelemetry openTelemetry) {
return builder(openTelemetry).build();
}

public static JsonRpcTelemetryBuilder builder(OpenTelemetry openTelemetry) {
return new JsonRpcTelemetryBuilder(openTelemetry);
public static JsonRpcServerTelemetryBuilder builder(OpenTelemetry openTelemetry) {
return new JsonRpcServerTelemetryBuilder(openTelemetry);
}

private final Instrumenter<JsonRpcServerRequest, JsonRpcServerResponse> serverInstrumenter;
private final Instrumenter<JsonRpcClientRequest, JsonRpcClientResponse> clientInstrumenter;
private final ContextPropagators propagators;

JsonRpcTelemetry(
JsonRpcServerTelemetry(
Instrumenter<JsonRpcServerRequest, JsonRpcServerResponse> serverInstrumenter,
Instrumenter<JsonRpcClientRequest, JsonRpcClientResponse> clientInstrumenter,
ContextPropagators propagators) {
this.serverInstrumenter = serverInstrumenter;
this.clientInstrumenter = clientInstrumenter;
this.propagators = propagators;
}

public InvocationListener newServerInvocationListener() {
return new OpenTelemetryJsonRpcInvocationListener(serverInstrumenter);
}

public Instrumenter<JsonRpcClientRequest, JsonRpcClientResponse> getClientInstrumenter() {
return clientInstrumenter;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<? super JsonRpcClientRequest, ? super JsonRpcClientResponse>>
additionalClientExtractors = new ArrayList<>();
private final List<
AttributesExtractor<? super JsonRpcServerRequest, ? super JsonRpcServerResponse>>
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<? super JsonRpcClientRequest, ? super JsonRpcClientResponse>
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<? super JsonRpcServerRequest, ? super JsonRpcServerResponse>
attributesExtractor) {
additionalServerExtractors.add(attributesExtractor);
return this;
}

public JsonRpcTelemetry build() {
SpanNameExtractor<JsonRpcClientRequest> clientSpanNameExtractor =
new JsonRpcClientSpanNameExtractor();
public JsonRpcServerTelemetry build() {
SpanNameExtractor<JsonRpcServerRequest> serverSpanNameExtractor =
new JsonRpcServerSpanNameExtractor();

InstrumenterBuilder<JsonRpcClientRequest, JsonRpcClientResponse> clientInstrumenterBuilder =
Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor);

InstrumenterBuilder<JsonRpcServerRequest, JsonRpcServerResponse> 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)
Expand All @@ -92,9 +60,8 @@ public JsonRpcTelemetry build() {
.addAttributesExtractors(additionalServerExtractors)
.addOperationMetrics(RpcServerMetrics.get());

return new JsonRpcTelemetry(
return new JsonRpcServerTelemetry(
serverInstrumenterBuilder.buildServerInstrumenter(JsonRpcServerRequestGetter.INSTANCE),
clientInstrumenterBuilder.buildInstrumenter(SpanKindExtractor.alwaysClient()),
openTelemetry.getPropagators());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}

0 comments on commit b40f27d

Please sign in to comment.