Skip to content

Commit

Permalink
minor refactoring and adds testInstrumentation
Browse files Browse the repository at this point in the history
  • Loading branch information
Abhishekkr3003 committed Nov 9, 2023
1 parent faf4a92 commit a03903c
Show file tree
Hide file tree
Showing 17 changed files with 124 additions and 91 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

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

import static io.opentelemetry.instrumentation.api.instrumenter.db.DbMessageSizeUtil.getMessageSize;
Expand Down Expand Up @@ -31,20 +36,17 @@ public final class AerospikeMetrics implements OperationListener {
private final LongCounter responseCounter;
private final LongUpDownCounter concurrencyUpDownCounter;
private final DoubleHistogram clientLatencyHistogram;

@SuppressWarnings("unused")
private final DoubleHistogram recordSizeHistogram;

private AerospikeMetrics(Meter meter) {
LongCounterBuilder requestCounterBuilder =
meter
.counterBuilder("aerospike.requests")
.setDescription("Aerospike Calls");
meter.counterBuilder("aerospike.requests").setDescription("Aerospike Calls");
AerospikeMetricsAdvice.applyRequestCounterAdvice(requestCounterBuilder);
requestCounter = requestCounterBuilder.build();
LongCounterBuilder responseCounterBuilder =
meter
.counterBuilder("aerospike.response")
.setDescription("Aerospike Responses");
meter.counterBuilder("aerospike.response").setDescription("Aerospike Responses");
AerospikeMetricsAdvice.applyResponseCounterAdvice(responseCounterBuilder);
responseCounter = responseCounterBuilder.build();
LongUpDownCounterBuilder concurrencyUpDownCounterBuilder =
Expand Down Expand Up @@ -73,7 +75,6 @@ public static OperationMetrics get() {
return AerospikeMetrics::new;
}


@Override
public Context onStart(Context context, Attributes startAttributes, long startNanos) {
requestCounter.add(1, startAttributes, context);
Expand All @@ -97,9 +98,7 @@ public void onEnd(Context context, Attributes endAttributes, long endNanos) {
Attributes mergedAttributes = state.startAttributes().toBuilder().putAll(endAttributes).build();
responseCounter.add(1, mergedAttributes, context);
clientLatencyHistogram.record(
(endNanos - state.startTimeNanos()) / NANOS_PER_MS,
mergedAttributes,
context);
(endNanos - state.startTimeNanos()) / NANOS_PER_MS, mergedAttributes, context);
Long requestBodySize = getMessageSize(mergedAttributes);
if (requestBodySize != null) {
recordSizeHistogram.record(requestBodySize, mergedAttributes, context);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

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

import io.opentelemetry.api.common.AttributeKey;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

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

import static io.opentelemetry.api.common.AttributeKey.longKey;
Expand All @@ -13,13 +18,12 @@ private AerospikeSemanticAttributes() {}
public static final AttributeKey<String> AEROSPIKE_NAMESPACE = stringKey("aerospike.namespace");
public static final AttributeKey<String> AEROSPIKE_SET_NAME = stringKey("aerospike.set.name");
public static final AttributeKey<String> AEROSPIKE_USER_KEY = stringKey("aerospike.user.key");
public static final AttributeKey<Long> AEROSPIKE_TRANSFER_SIZE = longKey(
"aerospike.transfer.size");
public static final AttributeKey<Long> AEROSPIKE_TRANSFER_SIZE =
longKey("aerospike.transfer.size");

public static final class DbSystemValues {
public static final String AEROSPIKE = "aerospike";

private DbSystemValues() {}
}

}
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

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

import io.opentelemetry.api.common.AttributeKey;
Expand All @@ -24,4 +29,3 @@ private static <T> T getAttribute(AttributeKey<T> key, Attributes... attributesL

private DbMessageSizeUtil() {}
}

Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ dependencies {

compileOnly("com.google.auto.value:auto-value-annotations")
annotationProcessor("com.google.auto.value:auto-value")
testInstrumentation(project(":instrumentation:aerospike-client:aerospike-client-7.1:javaagent"))
}

tasks {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.aerospike_client.v7_1;

import com.aerospike.client.AerospikeException;
Expand All @@ -8,37 +13,40 @@
import io.opentelemetry.instrumentation.api.instrumenter.db.AerospikeSemanticAttributes;
import javax.annotation.Nullable;

public class AerospikeClientAttributeExtractor implements
AttributesExtractor<AerospikeRequest, Void> {
public class AerospikeClientAttributeExtractor
implements AttributesExtractor<AerospikeRequest, Void> {

@Override
public void onStart(AttributesBuilder attributes, Context parentContext,
AerospikeRequest aerospikeRequest) {
public void onStart(
AttributesBuilder attributes, Context parentContext, AerospikeRequest aerospikeRequest) {
attributes.put(
AerospikeSemanticAttributes.AEROSPIKE_NAMESPACE,
aerospikeRequest.getNamespace());
AerospikeSemanticAttributes.AEROSPIKE_NAMESPACE, aerospikeRequest.getNamespace());
attributes.put(AerospikeSemanticAttributes.AEROSPIKE_SET_NAME, aerospikeRequest.getSet());
attributes.put(AerospikeSemanticAttributes.AEROSPIKE_USER_KEY, aerospikeRequest.getUserKey());
}

@Override
public void onEnd(AttributesBuilder attributes, Context context,
AerospikeRequest aerospikeRequest, @Nullable Void unused, @Nullable Throwable error) {
attributes.put(AerospikeSemanticAttributes.AEROSPIKE_STATUS,
aerospikeRequest.getStatus().name());
public void onEnd(
AttributesBuilder attributes,
Context context,
AerospikeRequest aerospikeRequest,
@Nullable Void unused,
@Nullable Throwable error) {
attributes.put(
AerospikeSemanticAttributes.AEROSPIKE_STATUS, aerospikeRequest.getStatus().name());
if (error != null) {
if (error instanceof AerospikeException) {
AerospikeException aerospikeException = (AerospikeException) error;
attributes.put(AerospikeSemanticAttributes.AEROSPIKE_ERROR_CODE,
aerospikeException.getResultCode());
attributes.put(
AerospikeSemanticAttributes.AEROSPIKE_ERROR_CODE, aerospikeException.getResultCode());
} else {
attributes.put(AerospikeSemanticAttributes.AEROSPIKE_ERROR_CODE, ResultCode.CLIENT_ERROR);
}
} else {
attributes.put(AerospikeSemanticAttributes.AEROSPIKE_ERROR_CODE, ResultCode.OK);
if (aerospikeRequest.getSize() != null) {
attributes.put(AerospikeSemanticAttributes.AEROSPIKE_TRANSFER_SIZE,
aerospikeRequest.getSize());
attributes.put(
AerospikeSemanticAttributes.AEROSPIKE_TRANSFER_SIZE, aerospikeRequest.getSize());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ public List<TypeInstrumentation> typeInstrumentations() {
new TransferSizeIntrumentation(),
new AsyncCommandInstrumentation(),
new AsyncHandlerInstrumentation(),
new AsyncScanAllCommandInstrumentation()
);
new AsyncScanAllCommandInstrumentation());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ public abstract class AerospikeRequest {
private Status status;

public static AerospikeRequest create(String operation, Key key) {
return new AutoValue_AerospikeRequest(operation, key.namespace, key.setName, key.userKey.toString());
return new AutoValue_AerospikeRequest(
operation, key.namespace, key.setName, key.userKey.toString());
}

public static AerospikeRequest create(String operation, String namespace, String set) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;

public final class AerospikeRequestContext {
private static final ThreadLocal<AerospikeRequestContext> contextThreadLocal = new ThreadLocal<>();
private static final ThreadLocal<AerospikeRequestContext> contextThreadLocal =
new ThreadLocal<>();
private AerospikeRequest request;
private Context context;

Expand All @@ -34,7 +35,9 @@ public static AerospikeRequestContext current() {
}

public void endSpan(
Instrumenter<AerospikeRequest, Void> instrumenter, Context context, AerospikeRequest request,
Instrumenter<AerospikeRequest, Void> instrumenter,
Context context,
AerospikeRequest request,
Throwable throwable) {
instrumenter.end(context, request, null, throwable);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,15 @@
public class AsyncCommandInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
return hasSuperClass(named("com.aerospike.client.async.AsyncCommand").and(
not(named("com.aerospike.client.command.Command"))));
return hasSuperClass(
named("com.aerospike.client.async.AsyncCommand")
.and(not(named("com.aerospike.client.command.Command"))));
}

@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
isConstructor()
.and(isPublic()),
this.getClass().getName() + "$ConstructorAdvice");
isConstructor().and(isPublic()), this.getClass().getName() + "$ConstructorAdvice");
}

@SuppressWarnings("unused")
Expand All @@ -59,21 +58,21 @@ public static void onExit(
if (key == null) {
return;
}
VirtualField<Command, AerospikeRequestContext> virtualField = VirtualField.find(Command.class,
AerospikeRequestContext.class);
VirtualField<Command, AerospikeRequestContext> virtualField =
VirtualField.find(Command.class, AerospikeRequestContext.class);
AerospikeRequestContext requestContext = virtualField.get(command);
if (requestContext != null) {
return;
}
Context parentContext = currentContext();
request = AerospikeRequest.create(command.getClass().getSimpleName().toUpperCase(Locale.ROOT),
key);
request =
AerospikeRequest.create(command.getClass().getSimpleName().toUpperCase(Locale.ROOT), key);
if (!instrumenter().shouldStart(parentContext, request)) {
return;
}
context = instrumenter().start(parentContext, request);
AerospikeRequestContext aerospikeRequestContext = AerospikeRequestContext.attach(request,
context);
AerospikeRequestContext aerospikeRequestContext =
AerospikeRequestContext.attach(request, context);
scope = context.makeCurrent();

virtualField.set(command, aerospikeRequestContext);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,7 @@ public ElementMatcher<TypeDescription> typeMatcher() {
@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
named("onSuccess")
.and(takesNoArguments())
.and(isProtected()),
named("onSuccess").and(takesNoArguments()).and(isProtected()),
this.getClass().getName() + "$OnSuccessAdvice");
transformer.applyAdviceToMethod(
named("onFailure")
Expand All @@ -50,8 +48,8 @@ public static class OnSuccessAdvice {

@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void onExit(@Advice.Thrown Throwable throwable, @Advice.This Command command) {
VirtualField<Command, AerospikeRequestContext> virtualField = VirtualField.find(Command.class,
AerospikeRequestContext.class);
VirtualField<Command, AerospikeRequestContext> virtualField =
VirtualField.find(Command.class, AerospikeRequestContext.class);
AerospikeRequestContext requestContext = virtualField.get(command);
virtualField.set(command, null);
if (requestContext != null) {
Expand All @@ -76,8 +74,8 @@ public static class OnFailureAdvice {

@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void onExit(@Advice.Thrown Throwable throwable, @Advice.This Command command) {
VirtualField<Command, AerospikeRequestContext> virtualField = VirtualField.find(Command.class,
AerospikeRequestContext.class);
VirtualField<Command, AerospikeRequestContext> virtualField =
VirtualField.find(Command.class, AerospikeRequestContext.class);
AerospikeRequestContext requestContext = virtualField.get(command);
virtualField.set(command, null);
if (requestContext != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,9 @@ public ElementMatcher<TypeDescription> typeMatcher() {
@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
isConstructor()
.and(isPublic()),
this.getClass().getName() + "$ConstructorAdvice");
isConstructor().and(isPublic()), this.getClass().getName() + "$ConstructorAdvice");
transformer.applyAdviceToMethod(
named("onSuccess")
.and(takesNoArguments())
.and(isProtected()),
named("onSuccess").and(takesNoArguments()).and(isProtected()),
this.getClass().getName() + "$OnSuccessAdvice");
transformer.applyAdviceToMethod(
named("onFailure")
Expand All @@ -61,23 +57,24 @@ public static void onExit(
@Advice.Local("otelScope") Scope scope,
@Advice.Argument(4) String namespace,
@Advice.Argument(5) String setName) {
VirtualField<AsyncScanPartitionExecutor, AerospikeRequestContext> virtualField = VirtualField.find(
AsyncScanPartitionExecutor.class,
AerospikeRequestContext.class);
VirtualField<AsyncScanPartitionExecutor, AerospikeRequestContext> virtualField =
VirtualField.find(AsyncScanPartitionExecutor.class, AerospikeRequestContext.class);
AerospikeRequestContext requestContext = virtualField.get(asyncScanPartitionExecutor);
if (requestContext != null) {
return;
}
Context parentContext = currentContext();
request = AerospikeRequest.create(
asyncScanPartitionExecutor.getClass().getSimpleName().toUpperCase(Locale.ROOT),
namespace, setName);
request =
AerospikeRequest.create(
asyncScanPartitionExecutor.getClass().getSimpleName().toUpperCase(Locale.ROOT),
namespace,
setName);
if (!instrumenter().shouldStart(parentContext, request)) {
return;
}
context = instrumenter().start(parentContext, request);
AerospikeRequestContext aerospikeRequestContext = AerospikeRequestContext.attach(request,
context);
AerospikeRequestContext aerospikeRequestContext =
AerospikeRequestContext.attach(request, context);
scope = context.makeCurrent();

virtualField.set(asyncScanPartitionExecutor, aerospikeRequestContext);
Expand All @@ -91,11 +88,11 @@ public static void onExit(
public static class OnSuccessAdvice {

@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void onExit(@Advice.Thrown Throwable throwable,
public static void onExit(
@Advice.Thrown Throwable throwable,
@Advice.This AsyncScanPartitionExecutor asyncScanPartitionExecutor) {
VirtualField<AsyncScanPartitionExecutor, AerospikeRequestContext> virtualField = VirtualField.find(
AsyncScanPartitionExecutor.class,
AerospikeRequestContext.class);
VirtualField<AsyncScanPartitionExecutor, AerospikeRequestContext> virtualField =
VirtualField.find(AsyncScanPartitionExecutor.class, AerospikeRequestContext.class);
AerospikeRequestContext requestContext = virtualField.get(asyncScanPartitionExecutor);
virtualField.set(asyncScanPartitionExecutor, null);
if (requestContext != null) {
Expand All @@ -119,11 +116,11 @@ public static void onExit(@Advice.Thrown Throwable throwable,
public static class OnFailureAdvice {

@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void onExit(@Advice.Thrown Throwable throwable,
public static void onExit(
@Advice.Thrown Throwable throwable,
@Advice.This AsyncScanPartitionExecutor asyncScanPartitionExecutor) {
VirtualField<AsyncScanPartitionExecutor, AerospikeRequestContext> virtualField = VirtualField.find(
AsyncScanPartitionExecutor.class,
AerospikeRequestContext.class);
VirtualField<AsyncScanPartitionExecutor, AerospikeRequestContext> virtualField =
VirtualField.find(AsyncScanPartitionExecutor.class, AerospikeRequestContext.class);
AerospikeRequestContext requestContext = virtualField.get(asyncScanPartitionExecutor);
virtualField.set(asyncScanPartitionExecutor, null);
if (requestContext != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@
import java.net.InetSocketAddress;
import javax.annotation.Nullable;

final class NetworkAttributesGetter implements
ServerAttributesGetter<AerospikeRequest, Void>,
io.opentelemetry.instrumentation.api.instrumenter.network.NetworkAttributesGetter<AerospikeRequest, Void> {
final class NetworkAttributesGetter
implements ServerAttributesGetter<AerospikeRequest, Void>,
io.opentelemetry.instrumentation.api.instrumenter.network.NetworkAttributesGetter<
AerospikeRequest, Void> {

@Override
@Nullable
public InetSocketAddress getNetworkPeerInetSocketAddress(AerospikeRequest aerospikeRequest,
@Nullable Void unused) {
public InetSocketAddress getNetworkPeerInetSocketAddress(
AerospikeRequest aerospikeRequest, @Nullable Void unused) {
Node node = aerospikeRequest.getNode();
if (node != null) {
return node.getAddress();
Expand Down
Loading

0 comments on commit a03903c

Please sign in to comment.