Skip to content

Commit

Permalink
go back to RpcAttributesGetter
Browse files Browse the repository at this point in the history
  • Loading branch information
Mateusz Rzeszutek committed Mar 16, 2022
1 parent 526c7cc commit d648f03
Show file tree
Hide file tree
Showing 19 changed files with 61 additions and 121 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,23 @@

package io.opentelemetry.instrumentation.api.instrumenter.rpc;

import javax.annotation.Nullable;

/**
* An interface for getting RPC client attributes.
* An interface for getting RPC attributes.
*
* <p>Instrumentation authors will create implementations of this interface for their specific
* library/framework. It will be used by the {@link RpcClientAttributesExtractor} or {@link
* RpcServerAttributesExtractor} to obtain the various RPC attributes in a type-generic way.
*/
public interface RpcClientAttributesGetter<REQUEST> extends RpcCommonAttributesGetter<REQUEST> {}
public interface RpcAttributesGetter<REQUEST> {

@Nullable
String system(REQUEST request);

@Nullable
String service(REQUEST request);

@Nullable
String method(REQUEST request);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,19 @@
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md">RPC
* client attributes</a>.
*
* <p>This class delegates to a type-specific {@link RpcCommonAttributesGetter} for individual
* attribute extraction from request/response objects.
* <p>This class delegates to a type-specific {@link RpcAttributesGetter} for individual attribute
* extraction from request/response objects.
*/
public final class RpcClientAttributesExtractor<REQUEST, RESPONSE>
extends RpcCommonAttributesExtractor<REQUEST, RESPONSE> implements SpanKeyProvider {

/** Creates the RPC client attributes extractor. */
public static <REQUEST, RESPONSE> RpcClientAttributesExtractor<REQUEST, RESPONSE> create(
RpcClientAttributesGetter<REQUEST> getter) {
RpcAttributesGetter<REQUEST> getter) {
return new RpcClientAttributesExtractor<>(getter);
}

private RpcClientAttributesExtractor(RpcCommonAttributesGetter<REQUEST> getter) {
private RpcClientAttributesExtractor(RpcAttributesGetter<REQUEST> getter) {
super(getter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
abstract class RpcCommonAttributesExtractor<REQUEST, RESPONSE>
implements AttributesExtractor<REQUEST, RESPONSE> {

private final RpcCommonAttributesGetter<REQUEST> getter;
private final RpcAttributesGetter<REQUEST> getter;

RpcCommonAttributesExtractor(RpcCommonAttributesGetter<REQUEST> getter) {
RpcCommonAttributesExtractor(RpcAttributesGetter<REQUEST> getter) {
this.getter = getter;
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,19 @@
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md">RPC
* server attributes</a>.
*
* <p>This class delegates to a type-specific {@link RpcCommonAttributesGetter} for individual
* attribute extraction from request/response objects.
* <p>This class delegates to a type-specific {@link RpcAttributesGetter} for individual attribute
* extraction from request/response objects.
*/
public final class RpcServerAttributesExtractor<REQUEST, RESPONSE>
extends RpcCommonAttributesExtractor<REQUEST, RESPONSE> {

/** Creates the RPC server attributes extractor. */
public static <REQUEST, RESPONSE> RpcServerAttributesExtractor<REQUEST, RESPONSE> create(
RpcServerAttributesGetter<REQUEST> getter) {
RpcAttributesGetter<REQUEST> getter) {
return new RpcServerAttributesExtractor<>(getter);
}

private RpcServerAttributesExtractor(RpcCommonAttributesGetter<REQUEST> getter) {
private RpcServerAttributesExtractor(RpcAttributesGetter<REQUEST> getter) {
super(getter);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,13 @@ public final class RpcSpanNameExtractor<REQUEST> implements SpanNameExtractor<RE
* conventions: {@code <rpc.service>/<rpc.method>}.
*/
public static <REQUEST> SpanNameExtractor<REQUEST> create(
RpcClientAttributesGetter<REQUEST> getter) {
return new RpcSpanNameExtractor<>(getter);
RpcAttributesGetter<REQUEST> attributesExtractor) {
return new RpcSpanNameExtractor<>(attributesExtractor);
}

/**
* Returns a {@link SpanNameExtractor} that constructs the span name according to RPC semantic
* conventions: {@code <rpc.service>/<rpc.method>}.
*/
public static <REQUEST> SpanNameExtractor<REQUEST> create(
RpcServerAttributesGetter<REQUEST> getter) {
return new RpcSpanNameExtractor<>(getter);
}

private final RpcCommonAttributesGetter<REQUEST> getter;
private final RpcAttributesGetter<REQUEST> getter;

private RpcSpanNameExtractor(RpcCommonAttributesGetter<REQUEST> getter) {
private RpcSpanNameExtractor(RpcAttributesGetter<REQUEST> getter) {
this.getter = getter;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@

class RpcAttributesExtractorTest {

enum TestGetter
implements
RpcClientAttributesGetter<Map<String, String>>,
RpcServerAttributesGetter<Map<String, String>> {
enum TestGetter implements RpcAttributesGetter<Map<String, String>> {
INSTANCE;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,68 +6,49 @@
package io.opentelemetry.instrumentation.api.instrumenter.rpc;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
class RpcSpanNameExtractorTest {

@ParameterizedTest
@ArgumentsSource(Args.class)
void normal(
RpcCommonAttributesGetter<RpcRequest> getter, SpanNameExtractor<RpcRequest> extractor) {
@Mock RpcAttributesGetter<RpcRequest> getter;

@Test
void normal() {
RpcRequest request = new RpcRequest();

when(getter.service(request)).thenReturn("my.Service");
when(getter.method(request)).thenReturn("Method");

SpanNameExtractor<RpcRequest> extractor = RpcSpanNameExtractor.create(getter);
assertThat(extractor.extract(request)).isEqualTo("my.Service/Method");
}

@ParameterizedTest
@ArgumentsSource(Args.class)
void serviceNull(
RpcCommonAttributesGetter<RpcRequest> getter, SpanNameExtractor<RpcRequest> extractor) {
@Test
void serviceNull() {
RpcRequest request = new RpcRequest();

when(getter.method(request)).thenReturn("Method");

SpanNameExtractor<RpcRequest> extractor = RpcSpanNameExtractor.create(getter);
assertThat(extractor.extract(request)).isEqualTo("RPC request");
}

@ParameterizedTest
@ArgumentsSource(Args.class)
void methodNull(
RpcCommonAttributesGetter<RpcRequest> getter, SpanNameExtractor<RpcRequest> extractor) {
@Test
void methodNull() {
RpcRequest request = new RpcRequest();

when(getter.service(request)).thenReturn("my.Service");

SpanNameExtractor<RpcRequest> extractor = RpcSpanNameExtractor.create(getter);
assertThat(extractor.extract(request)).isEqualTo("RPC request");
}

static final class Args implements ArgumentsProvider {

@SuppressWarnings("unchecked")
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
RpcServerAttributesGetter<RpcRequest> serverGetter = mock(RpcServerAttributesGetter.class);
RpcClientAttributesGetter<RpcRequest> clientGetter = mock(RpcClientAttributesGetter.class);
return Stream.of(
Arguments.of(serverGetter, RpcSpanNameExtractor.create(serverGetter)),
Arguments.of(clientGetter, RpcSpanNameExtractor.create(clientGetter)));
}
}

static class RpcRequest {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@

package io.opentelemetry.instrumentation.apachedubbo.v2_7;

import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;

enum DubboRpcAttributesGetter
implements RpcClientAttributesGetter<DubboRequest>, RpcServerAttributesGetter<DubboRequest> {
enum DubboRpcAttributesGetter implements RpcAttributesGetter<DubboRequest> {
INSTANCE;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcSpanNameExtractor;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
Expand Down Expand Up @@ -58,7 +57,7 @@ public DubboTracingBuilder addAttributesExtractor(
public DubboTracing build() {
DubboRpcAttributesGetter rpcAttributesGetter = DubboRpcAttributesGetter.INSTANCE;
SpanNameExtractor<DubboRequest> spanNameExtractor =
RpcSpanNameExtractor.create((RpcClientAttributesGetter<DubboRequest>) rpcAttributesGetter);
RpcSpanNameExtractor.create(rpcAttributesGetter);
DubboNetClientAttributesGetter netClientAttributesGetter = new DubboNetClientAttributesGetter();

InstrumenterBuilder<DubboRequest, Result> serverInstrumenterBuilder =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
package io.opentelemetry.instrumentation.awssdk.v1_11;

import com.amazonaws.Request;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;

enum AwsSdkRpcAttributesGetter implements RpcClientAttributesGetter<Request<?>> {
enum AwsSdkRpcAttributesGetter implements RpcAttributesGetter<Request<?>> {
INSTANCE;

private static final ClassValue<String> OPERATION_NAME =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

package io.opentelemetry.instrumentation.awssdk.v2_2;

import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute;

enum AwsSdkRpcAttributesGetter implements RpcClientAttributesGetter<ExecutionAttributes> {
enum AwsSdkRpcAttributesGetter implements RpcAttributesGetter<ExecutionAttributes> {
INSTANCE;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@

package io.opentelemetry.instrumentation.grpc.v1_6;

import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;
import javax.annotation.Nullable;

enum GrpcRpcAttributesGetter
implements RpcClientAttributesGetter<GrpcRequest>, RpcServerAttributesGetter<GrpcRequest> {
enum GrpcRpcAttributesGetter implements RpcAttributesGetter<GrpcRequest> {
INSTANCE;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

package io.opentelemetry.javaagent.instrumentation.gwt;

import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;
import java.lang.reflect.Method;

enum GwtRpcAttributesGetter implements RpcServerAttributesGetter<Method> {
enum GwtRpcAttributesGetter implements RpcAttributesGetter<Method> {
INSTANCE;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

package io.opentelemetry.javaagent.instrumentation.rmi.client;

import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;
import java.lang.reflect.Method;

enum RmiClientAttributesGetter implements RpcClientAttributesGetter<Method> {
enum RmiClientAttributesGetter implements RpcAttributesGetter<Method> {
INSTANCE;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

package io.opentelemetry.javaagent.instrumentation.rmi.server;

import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;
import io.opentelemetry.instrumentation.api.util.ClassAndMethod;

enum RmiServerAttributesGetter implements RpcServerAttributesGetter<ClassAndMethod> {
enum RmiServerAttributesGetter implements RpcAttributesGetter<ClassAndMethod> {
INSTANCE;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

package io.opentelemetry.javaagent.instrumentation.springrmi.client;

import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;
import java.lang.reflect.Method;

public enum ClientAttributesGetter implements RpcClientAttributesGetter<Method> {
public enum ClientAttributesGetter implements RpcAttributesGetter<Method> {
INSTANCE;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

package io.opentelemetry.javaagent.instrumentation.springrmi.server;

import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcAttributesGetter;
import io.opentelemetry.instrumentation.api.util.ClassAndMethod;

public enum ServerAttributesGetter implements RpcServerAttributesGetter<ClassAndMethod> {
public enum ServerAttributesGetter implements RpcAttributesGetter<ClassAndMethod> {
INSTANCE;

@Override
Expand Down

0 comments on commit d648f03

Please sign in to comment.