From 7716367c29b1c7b12714d6168e01f643f66b2012 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 13 Jan 2025 14:55:01 +0100 Subject: [PATCH 01/15] add lettuce db client metrics --- .../lettuce/v5_1/TracingHolder.java | 5 ++ .../lettuce/v5_1/LettuceTelemetry.java | 10 +++- .../lettuce/v5_1/LettuceTelemetryBuilder.java | 17 ++++++- .../lettuce/v5_1/OpenTelemetryTracing.java | 50 ++++++++++++++----- .../v5_1/AbstractLettuceSyncClientTest.java | 16 ++++++ 5 files changed, 83 insertions(+), 15 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java index 7b354788b5f9..479c2ec1d6c6 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.api.internal.OperationMetricsUtil.NOOP_OPERATION_LISTENER; + import io.lettuce.core.tracing.Tracing; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.lettuce.v5_1.LettuceTelemetry; @@ -15,6 +17,9 @@ public final class TracingHolder { public static final Tracing TRACING = LettuceTelemetry.builder(GlobalOpenTelemetry.get()) .setStatementSanitizationEnabled(AgentCommonConfig.get().isStatementSanitizationEnabled()) + .setMetrics( + meter -> + NOOP_OPERATION_LISTENER) // javaagent uses bytecode instrumentation for metrics .build() .newTracing(); diff --git a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetry.java b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetry.java index 665f5f236fb3..3dbf0234ea53 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetry.java +++ b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetry.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.api.trace.TracerBuilder; import io.opentelemetry.instrumentation.api.incubator.semconv.db.RedisCommandSanitizer; +import io.opentelemetry.instrumentation.api.instrumenter.OperationListener; import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties; /** Entrypoint for instrumenting Lettuce or clients. */ @@ -31,8 +32,13 @@ public static LettuceTelemetryBuilder builder(OpenTelemetry openTelemetry) { private final Tracer tracer; private final RedisCommandSanitizer sanitizer; + private final OperationListener metrics; - LettuceTelemetry(OpenTelemetry openTelemetry, boolean statementSanitizationEnabled) { + LettuceTelemetry( + OpenTelemetry openTelemetry, + boolean statementSanitizationEnabled, + OperationListener metrics) { + this.metrics = metrics; TracerBuilder tracerBuilder = openTelemetry.tracerBuilder(INSTRUMENTATION_NAME); String version = EmbeddedInstrumentationProperties.findVersion(INSTRUMENTATION_NAME); if (version != null) { @@ -47,6 +53,6 @@ public static LettuceTelemetryBuilder builder(OpenTelemetry openTelemetry) { * io.lettuce.core.resource.ClientResources.Builder#tracing(Tracing)}. */ public Tracing newTracing() { - return new OpenTelemetryTracing(tracer, sanitizer); + return new OpenTelemetryTracing(tracer, sanitizer, metrics); } } diff --git a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java index d86c3f77628b..d36b76e59240 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java +++ b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java @@ -5,8 +5,12 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.lettuce.v5_1.LettuceTelemetry.INSTRUMENTATION_NAME; + import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; +import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics; /** A builder of {@link LettuceTelemetry}. */ public final class LettuceTelemetryBuilder { @@ -14,9 +18,11 @@ public final class LettuceTelemetryBuilder { private final OpenTelemetry openTelemetry; private boolean statementSanitizationEnabled = true; + private OperationMetrics metrics; LettuceTelemetryBuilder(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; + metrics = DbClientMetrics.get(); } /** @@ -31,11 +37,20 @@ public LettuceTelemetryBuilder setStatementSanitizationEnabled( return this; } + @CanIgnoreReturnValue + public LettuceTelemetryBuilder setMetrics(OperationMetrics metrics) { + this.metrics = metrics; + return this; + } + /** * Returns a new {@link LettuceTelemetry} with the settings of this {@link * LettuceTelemetryBuilder}. */ public LettuceTelemetry build() { - return new LettuceTelemetry(openTelemetry, statementSanitizationEnabled); + return new LettuceTelemetry( + openTelemetry, + statementSanitizationEnabled, + metrics.create(openTelemetry.getMeterProvider().get(INSTRUMENTATION_NAME))); } } diff --git a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java index 3b2e06f3b64e..4fedb7c3d2fd 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java +++ b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java @@ -27,6 +27,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.incubator.semconv.db.RedisCommandSanitizer; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.OperationListener; import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; @@ -54,8 +55,11 @@ final class OpenTelemetryTracing implements Tracing { NetworkAttributesExtractor.create(new LettuceServerAttributesGetter()); private final TracerProvider tracerProvider; - OpenTelemetryTracing(io.opentelemetry.api.trace.Tracer tracer, RedisCommandSanitizer sanitizer) { - this.tracerProvider = new OpenTelemetryTracerProvider(tracer, sanitizer); + OpenTelemetryTracing( + io.opentelemetry.api.trace.Tracer tracer, + RedisCommandSanitizer sanitizer, + OperationListener metrics) { + this.tracerProvider = new OpenTelemetryTracerProvider(tracer, sanitizer, metrics); } @Override @@ -93,8 +97,10 @@ private static class OpenTelemetryTracerProvider implements TracerProvider { private final Tracer openTelemetryTracer; OpenTelemetryTracerProvider( - io.opentelemetry.api.trace.Tracer tracer, RedisCommandSanitizer sanitizer) { - openTelemetryTracer = new OpenTelemetryTracer(tracer, sanitizer); + io.opentelemetry.api.trace.Tracer tracer, + RedisCommandSanitizer sanitizer, + OperationListener metrics) { + openTelemetryTracer = new OpenTelemetryTracer(tracer, sanitizer, metrics); } @Override @@ -135,10 +141,15 @@ private static class OpenTelemetryTracer extends Tracer { private final io.opentelemetry.api.trace.Tracer tracer; private final RedisCommandSanitizer sanitizer; + private final OperationListener metrics; - OpenTelemetryTracer(io.opentelemetry.api.trace.Tracer tracer, RedisCommandSanitizer sanitizer) { + OpenTelemetryTracer( + io.opentelemetry.api.trace.Tracer tracer, + RedisCommandSanitizer sanitizer, + OperationListener metrics) { this.tracer = tracer; this.sanitizer = sanitizer; + this.metrics = metrics; } @Override @@ -165,7 +176,7 @@ private OpenTelemetrySpan nextSpan(Context context) { .setSpanKind(SpanKind.CLIENT) .setParent(context) .setAttribute(DB_SYSTEM, REDIS); - return new OpenTelemetrySpan(context, spanBuilder, sanitizer); + return new OpenTelemetrySpan(context, spanBuilder, sanitizer, metrics); } } @@ -178,18 +189,26 @@ private static class OpenTelemetrySpan extends Tracer.Span { private final Context context; private final SpanBuilder spanBuilder; private final RedisCommandSanitizer sanitizer; + private final OperationListener metrics; @Nullable private String name; @Nullable private List events; @Nullable private Throwable error; @Nullable private Span span; + private long spanStartTime; + private final AttributesBuilder attributesBuilder = Attributes.builder(); @Nullable private List argsList; @Nullable private String argsString; - OpenTelemetrySpan(Context context, SpanBuilder spanBuilder, RedisCommandSanitizer sanitizer) { + OpenTelemetrySpan( + Context context, + SpanBuilder spanBuilder, + RedisCommandSanitizer sanitizer, + OperationListener metrics) { this.context = context; this.spanBuilder = spanBuilder; this.sanitizer = sanitizer; + this.metrics = metrics; } @Override @@ -218,11 +237,13 @@ private void fillEndpoint(OpenTelemetryEndpoint endpoint) { Context currentContext = span == null ? context : context.with(span); serverAttributesExtractor.onStart(attributesBuilder, currentContext, endpoint); networkAttributesExtractor.onEnd(attributesBuilder, currentContext, endpoint, null, null); + Attributes attributes = attributesBuilder.build(); if (span != null) { - span.setAllAttributes(attributesBuilder.build()); + span.setAllAttributes(attributes); } else { - spanBuilder.setAllAttributes(attributesBuilder.build()); + spanBuilder.setAllAttributes(attributes); } + attributesBuilder.putAll(attributes); } // Added and called in 6.0+ @@ -231,6 +252,7 @@ private void fillEndpoint(OpenTelemetryEndpoint endpoint) { @SuppressWarnings("UnusedMethod") public synchronized Tracer.Span start(RedisCommand command) { start(); + long startTime = System.nanoTime(); Span span = this.span; if (span == null) { @@ -258,7 +280,7 @@ public synchronized Tracer.Span start(RedisCommand command) { } } - finish(span); + finish(span, startTime); }); } @@ -270,6 +292,7 @@ public synchronized Tracer.Span start(RedisCommand command) { @CanIgnoreReturnValue public synchronized Tracer.Span start() { span = spanBuilder.startSpan(); + spanStartTime = System.nanoTime(); if (name != null) { span.updateName(name); } @@ -330,6 +353,7 @@ public synchronized Tracer.Span tag(String key, String value) { } else { spanBuilder.setAttribute(key, value); } + attributesBuilder.put(key, value); return this; } @@ -347,16 +371,18 @@ public synchronized Tracer.Span error(Throwable throwable) { @Override public synchronized void finish() { if (span != null) { - finish(span); + finish(span, spanStartTime); } } - private void finish(Span span) { + private void finish(Span span, long startTime) { if (name != null) { String statement = sanitizer.sanitize(name, argsList != null ? argsList : splitArgs(argsString)); if (SemconvStability.emitStableDatabaseSemconv()) { span.setAttribute(DB_QUERY_TEXT, statement); + Context c = metrics.onStart(Context.current(), Attributes.empty(), startTime); + metrics.onEnd(c, attributesBuilder.build(), System.nanoTime()); } if (SemconvStability.emitOldDatabaseSemconv()) { span.setAttribute(DB_STATEMENT, statement); diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index f09ec6b687c2..a780822954f2 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -13,6 +14,9 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static java.nio.charset.StandardCharsets.UTF_8; @@ -135,6 +139,18 @@ void testSetCommand() { .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); + + assertDurationMetric( + testing(), + "io.opentelemetry.lettuce-5.1", + DB_SYSTEM, + DB_COLLECTION_NAME, + DB_NAMESPACE, + DB_OPERATION_NAME); + // + // testing().waitAndAssertMetrics(metric -> + // OpenTelemetryAssertions.assertThat(metric) + // .hasName("db.client.operation.duration")); } @Test From 02643e37f2dc61d2d9c1336da2a166846c0d3a46 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 13 Jan 2025 15:01:05 +0100 Subject: [PATCH 02/15] format --- .../lettuce/v5_1/AbstractLettuceSyncClientTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index a780822954f2..b86ddfc69c28 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -147,10 +147,6 @@ void testSetCommand() { DB_COLLECTION_NAME, DB_NAMESPACE, DB_OPERATION_NAME); - // - // testing().waitAndAssertMetrics(metric -> - // OpenTelemetryAssertions.assertThat(metric) - // .hasName("db.client.operation.duration")); } @Test From 44e34c8cbf18fbef02208e3b57377e6038baefca Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 13 Jan 2025 17:04:43 +0100 Subject: [PATCH 03/15] add lettuce db client metrics --- .../javaagent/instrumentation/lettuce/v5_1/TracingHolder.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java index 479c2ec1d6c6..0c402348d18b 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v5_1; -import static io.opentelemetry.instrumentation.api.internal.OperationMetricsUtil.NOOP_OPERATION_LISTENER; import io.lettuce.core.tracing.Tracing; import io.opentelemetry.api.GlobalOpenTelemetry; @@ -17,9 +16,6 @@ public final class TracingHolder { public static final Tracing TRACING = LettuceTelemetry.builder(GlobalOpenTelemetry.get()) .setStatementSanitizationEnabled(AgentCommonConfig.get().isStatementSanitizationEnabled()) - .setMetrics( - meter -> - NOOP_OPERATION_LISTENER) // javaagent uses bytecode instrumentation for metrics .build() .newTracing(); From eb1f24cba654234b325acb4e895b4d02bae25306 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 13 Jan 2025 17:04:52 +0100 Subject: [PATCH 04/15] add lettuce db client metrics --- .../javaagent/instrumentation/lettuce/v5_1/TracingHolder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java index 0c402348d18b..7b354788b5f9 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v5_1; - import io.lettuce.core.tracing.Tracing; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.lettuce.v5_1.LettuceTelemetry; From 0abac7c5d93c474d366c946826ddf6f135ada9fd Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 14 Jan 2025 15:12:18 +0100 Subject: [PATCH 05/15] add lettuce db client metrics --- .../lettuce/v5_1/OpenTelemetryTracing.java | 10 ++++++---- .../lettuce/v5_1/AbstractLettuceSyncClientTest.java | 10 ++++------ .../testing/junit/db/DbClientMetricsTestUtil.java | 2 ++ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java index 4fedb7c3d2fd..fa4029b05714 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java +++ b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java @@ -196,7 +196,7 @@ private static class OpenTelemetrySpan extends Tracer.Span { @Nullable private Throwable error; @Nullable private Span span; private long spanStartTime; - private final AttributesBuilder attributesBuilder = Attributes.builder(); + private final AttributesBuilder attributesBuilder = Attributes.builder().put(DB_SYSTEM, REDIS); @Nullable private List argsList; @Nullable private String argsString; @@ -243,7 +243,7 @@ private void fillEndpoint(OpenTelemetryEndpoint endpoint) { } else { spanBuilder.setAllAttributes(attributes); } - attributesBuilder.putAll(attributes); + this.attributesBuilder.putAll(attributes); } // Added and called in 6.0+ @@ -381,8 +381,10 @@ private void finish(Span span, long startTime) { sanitizer.sanitize(name, argsList != null ? argsList : splitArgs(argsString)); if (SemconvStability.emitStableDatabaseSemconv()) { span.setAttribute(DB_QUERY_TEXT, statement); - Context c = metrics.onStart(Context.current(), Attributes.empty(), startTime); - metrics.onEnd(c, attributesBuilder.build(), System.nanoTime()); + metrics.onEnd( + metrics.onStart(Context.current(), Attributes.empty(), startTime), + attributesBuilder.build(), + System.nanoTime()); } if (SemconvStability.emitOldDatabaseSemconv()) { span.setAttribute(DB_STATEMENT, statement); diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index b86ddfc69c28..fc26bf167b71 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -14,9 +14,6 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static java.nio.charset.StandardCharsets.UTF_8; @@ -144,9 +141,10 @@ void testSetCommand() { testing(), "io.opentelemetry.lettuce-5.1", DB_SYSTEM, - DB_COLLECTION_NAME, - DB_NAMESPACE, - DB_OPERATION_NAME); + SERVER_ADDRESS, + SERVER_PORT, + NETWORK_PEER_ADDRESS, + NETWORK_PEER_PORT); } @Test diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index 40f2832790c7..0cd0157aebcb 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -19,6 +19,8 @@ public static void assertDurationMetric( InstrumentationExtension testing, String instrumentationName, AttributeKey... expectedKeys) { + // db.system is required - see https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration + assertThat(expectedKeys).extracting(AttributeKey::getKey).contains("db.system"); if (!emitStableDatabaseSemconv()) { return; } From a5ae6ec9190a5253cf54a57d85618bbdc98915d3 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 14 Jan 2025 16:49:14 +0100 Subject: [PATCH 06/15] add lettuce db client metrics --- .../v5_1/AbstractLettuceSyncClientTest.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index fc26bf167b71..f79f8494a81a 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -14,6 +14,7 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static java.nio.charset.StandardCharsets.UTF_8; @@ -30,9 +31,13 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.test.utils.PortUtils; +import java.io.Serializable; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Base64; +import java.util.List; import java.util.Map; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -137,14 +142,16 @@ void testSetCommand() { event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); + List> expected = + new ArrayList<>( + Arrays.asList( + DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT)); + if (Boolean.getBoolean("testLatestDeps")) { + expected.add(DB_NAMESPACE); + } assertDurationMetric( testing(), - "io.opentelemetry.lettuce-5.1", - DB_SYSTEM, - SERVER_ADDRESS, - SERVER_PORT, - NETWORK_PEER_ADDRESS, - NETWORK_PEER_PORT); + "io.opentelemetry.lettuce-5.1", expected.toArray(new AttributeKey[0])); } @Test From 234ec9c67fc1bc977d0e026e105f2382072d4bc3 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 14 Jan 2025 17:27:54 +0100 Subject: [PATCH 07/15] format --- .../lettuce/v5_1/AbstractLettuceSyncClientTest.java | 3 +-- .../testing/junit/db/DbClientMetricsTestUtil.java | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index f79f8494a81a..594706575aef 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -150,8 +150,7 @@ void testSetCommand() { expected.add(DB_NAMESPACE); } assertDurationMetric( - testing(), - "io.opentelemetry.lettuce-5.1", expected.toArray(new AttributeKey[0])); + testing(), "io.opentelemetry.lettuce-5.1", expected.toArray(new AttributeKey[0])); } @Test diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index 0cd0157aebcb..9ef39494d68e 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -19,7 +19,8 @@ public static void assertDurationMetric( InstrumentationExtension testing, String instrumentationName, AttributeKey... expectedKeys) { - // db.system is required - see https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration + // db.system is required - see + // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration assertThat(expectedKeys).extracting(AttributeKey::getKey).contains("db.system"); if (!emitStableDatabaseSemconv()) { return; From 7ad3cf5a8e06eb089eb959563273b3254ca20b05 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 15 Jan 2025 12:01:40 +0100 Subject: [PATCH 08/15] fix warning --- .../jdbc/test/JdbcInstrumentationTest.java | 9 ++++----- .../jdbc/datasource/JdbcTelemetryTest.java | 7 ++----- .../jedis/v3_0/Jedis30ClientTest.java | 14 ++++++++------ .../v5_1/AbstractLettuceSyncClientTest.java | 6 ++---- .../testing/junit/db/DbClientMetricsTestUtil.java | 3 ++- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java index 3589be3c1b74..b0ee6fc11009 100644 --- a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java +++ b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java @@ -383,13 +383,12 @@ public void testBasicStatement( assertDurationMetric( testing, "io.opentelemetry.jdbc", - DB_SYSTEM, - DB_COLLECTION_NAME, - DB_NAMESPACE, - DB_OPERATION_NAME); + Arrays.asList(DB_SYSTEM, DB_COLLECTION_NAME, DB_NAMESPACE, DB_OPERATION_NAME)); } else { assertDurationMetric( - testing, "io.opentelemetry.jdbc", DB_SYSTEM, DB_OPERATION_NAME, DB_NAMESPACE); + testing, + "io.opentelemetry.jdbc", + Arrays.asList(DB_SYSTEM, DB_OPERATION_NAME, DB_NAMESPACE)); } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index dacd4b177934..d1243db081d2 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -24,6 +24,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; +import java.util.Arrays; import javax.sql.DataSource; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -54,11 +55,7 @@ void buildWithDefaults() throws SQLException { assertDurationMetric( testing, "io.opentelemetry.jdbc", - DB_NAMESPACE, - DB_OPERATION_NAME, - DB_SYSTEM, - SERVER_ADDRESS, - SERVER_PORT); + Arrays.asList(DB_NAMESPACE, DB_OPERATION_NAME, DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT)); } @Test diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java index 65578e6141c9..3f2ca169a025 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java @@ -25,6 +25,7 @@ import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.Arrays; import org.assertj.core.api.AbstractLongAssert; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -94,12 +95,13 @@ void setCommand() { assertDurationMetric( testing, "io.opentelemetry.jedis-3.0", - DB_OPERATION_NAME, - DB_SYSTEM, - SERVER_ADDRESS, - SERVER_PORT, - NETWORK_PEER_ADDRESS, - NETWORK_PEER_PORT); + Arrays.asList( + DB_OPERATION_NAME, + DB_SYSTEM, + SERVER_ADDRESS, + SERVER_PORT, + NETWORK_PEER_ADDRESS, + NETWORK_PEER_PORT)); } @Test diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index 594706575aef..6846c0ea413d 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -31,7 +31,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.test.utils.PortUtils; -import java.io.Serializable; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; @@ -142,15 +141,14 @@ void testSetCommand() { event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); - List> expected = + List> expected = new ArrayList<>( Arrays.asList( DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT)); if (Boolean.getBoolean("testLatestDeps")) { expected.add(DB_NAMESPACE); } - assertDurationMetric( - testing(), "io.opentelemetry.lettuce-5.1", expected.toArray(new AttributeKey[0])); + assertDurationMetric(testing(), "io.opentelemetry.lettuce-5.1", expected); } @Test diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index 9ef39494d68e..c57add6c8ff4 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import java.util.List; public class DbClientMetricsTestUtil { @@ -18,7 +19,7 @@ private DbClientMetricsTestUtil() {} public static void assertDurationMetric( InstrumentationExtension testing, String instrumentationName, - AttributeKey... expectedKeys) { + List> expectedKeys) { // db.system is required - see // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration assertThat(expectedKeys).extracting(AttributeKey::getKey).contains("db.system"); From 02c35cb6042ffb4f4ffd9b954e7d9a8bd067375b Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 15 Jan 2025 17:27:52 +0100 Subject: [PATCH 09/15] Update instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java Co-authored-by: Steve Rao --- .../lettuce/v5_1/AbstractLettuceSyncClientTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index 6846c0ea413d..7ccd4812e924 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -142,9 +142,8 @@ void testSetCommand() { event -> event.hasName("redis.encode.end")))); List> expected = - new ArrayList<>( - Arrays.asList( - DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT)); + Arrays.asList( + DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT); if (Boolean.getBoolean("testLatestDeps")) { expected.add(DB_NAMESPACE); } From 9052b0acb8837d6aa1ed761089cba5ff0901d20c Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 15 Jan 2025 17:30:39 +0100 Subject: [PATCH 10/15] Revert "Update instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java" This reverts commit 02c35cb6042ffb4f4ffd9b954e7d9a8bd067375b. --- .../lettuce/v5_1/AbstractLettuceSyncClientTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index 7ccd4812e924..6846c0ea413d 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -142,8 +142,9 @@ void testSetCommand() { event -> event.hasName("redis.encode.end")))); List> expected = - Arrays.asList( - DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT); + new ArrayList<>( + Arrays.asList( + DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT)); if (Boolean.getBoolean("testLatestDeps")) { expected.add(DB_NAMESPACE); } From ecc7d61ac8948442d1f476dce7bae7154be3ac0a Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 15 Jan 2025 17:33:58 +0100 Subject: [PATCH 11/15] format --- .../jdbc/test/JdbcInstrumentationTest.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java index b0ee6fc11009..e048312599c5 100644 --- a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java +++ b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java @@ -48,7 +48,6 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -383,12 +382,10 @@ public void testBasicStatement( assertDurationMetric( testing, "io.opentelemetry.jdbc", - Arrays.asList(DB_SYSTEM, DB_COLLECTION_NAME, DB_NAMESPACE, DB_OPERATION_NAME)); + asList(DB_SYSTEM, DB_COLLECTION_NAME, DB_NAMESPACE, DB_OPERATION_NAME)); } else { assertDurationMetric( - testing, - "io.opentelemetry.jdbc", - Arrays.asList(DB_SYSTEM, DB_OPERATION_NAME, DB_NAMESPACE)); + testing, "io.opentelemetry.jdbc", asList(DB_SYSTEM, DB_OPERATION_NAME, DB_NAMESPACE)); } } @@ -979,7 +976,7 @@ void testGetConnection( trace -> { List> assertions = new ArrayList<>( - Arrays.asList( + asList( span1 -> span1.hasName("parent").hasKind(SpanKind.INTERNAL).hasNoParent(), span1 -> span1 From d2091d2b93bfec5bb4012360c946db875c2864db Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 16 Jan 2025 11:10:03 +0100 Subject: [PATCH 12/15] remove unneeded method --- .../lettuce/v5_1/LettuceTelemetryBuilder.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java index d36b76e59240..b4675da6b849 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java +++ b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java @@ -37,11 +37,6 @@ public LettuceTelemetryBuilder setStatementSanitizationEnabled( return this; } - @CanIgnoreReturnValue - public LettuceTelemetryBuilder setMetrics(OperationMetrics metrics) { - this.metrics = metrics; - return this; - } /** * Returns a new {@link LettuceTelemetry} with the settings of this {@link From 7677129ecbfa11b8af25dbac26633a4921bec3da Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 16 Jan 2025 12:08:08 +0100 Subject: [PATCH 13/15] pr review --- .../jdbc/test/JdbcInstrumentationTest.java | 7 +++++-- .../jdbc/datasource/JdbcTelemetryTest.java | 7 +++++-- .../jedis/v3_0/Jedis30ClientTest.java | 14 ++++++-------- .../lettuce/v5_1/LettuceTelemetryBuilder.java | 6 +----- .../v5_1/AbstractLettuceSyncClientTest.java | 7 ++++++- .../testing/junit/db/DbClientMetricsTestUtil.java | 3 +-- 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java index e048312599c5..77286017dd8d 100644 --- a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java +++ b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java @@ -382,10 +382,13 @@ public void testBasicStatement( assertDurationMetric( testing, "io.opentelemetry.jdbc", - asList(DB_SYSTEM, DB_COLLECTION_NAME, DB_NAMESPACE, DB_OPERATION_NAME)); + DB_SYSTEM, + DB_COLLECTION_NAME, + DB_NAMESPACE, + DB_OPERATION_NAME); } else { assertDurationMetric( - testing, "io.opentelemetry.jdbc", asList(DB_SYSTEM, DB_OPERATION_NAME, DB_NAMESPACE)); + testing, "io.opentelemetry.jdbc", DB_SYSTEM, DB_OPERATION_NAME, DB_NAMESPACE); } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index d1243db081d2..dacd4b177934 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -24,7 +24,6 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; -import java.util.Arrays; import javax.sql.DataSource; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -55,7 +54,11 @@ void buildWithDefaults() throws SQLException { assertDurationMetric( testing, "io.opentelemetry.jdbc", - Arrays.asList(DB_NAMESPACE, DB_OPERATION_NAME, DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT)); + DB_NAMESPACE, + DB_OPERATION_NAME, + DB_SYSTEM, + SERVER_ADDRESS, + SERVER_PORT); } @Test diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java index 3f2ca169a025..65578e6141c9 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java @@ -25,7 +25,6 @@ import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import java.net.InetAddress; import java.net.UnknownHostException; -import java.util.Arrays; import org.assertj.core.api.AbstractLongAssert; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -95,13 +94,12 @@ void setCommand() { assertDurationMetric( testing, "io.opentelemetry.jedis-3.0", - Arrays.asList( - DB_OPERATION_NAME, - DB_SYSTEM, - SERVER_ADDRESS, - SERVER_PORT, - NETWORK_PEER_ADDRESS, - NETWORK_PEER_PORT)); + DB_OPERATION_NAME, + DB_SYSTEM, + SERVER_ADDRESS, + SERVER_PORT, + NETWORK_PEER_ADDRESS, + NETWORK_PEER_PORT); } @Test diff --git a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java index b4675da6b849..d44ab73e0586 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java +++ b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/LettuceTelemetryBuilder.java @@ -10,7 +10,6 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; -import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics; /** A builder of {@link LettuceTelemetry}. */ public final class LettuceTelemetryBuilder { @@ -18,11 +17,9 @@ public final class LettuceTelemetryBuilder { private final OpenTelemetry openTelemetry; private boolean statementSanitizationEnabled = true; - private OperationMetrics metrics; LettuceTelemetryBuilder(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; - metrics = DbClientMetrics.get(); } /** @@ -37,7 +34,6 @@ public LettuceTelemetryBuilder setStatementSanitizationEnabled( return this; } - /** * Returns a new {@link LettuceTelemetry} with the settings of this {@link * LettuceTelemetryBuilder}. @@ -46,6 +42,6 @@ public LettuceTelemetry build() { return new LettuceTelemetry( openTelemetry, statementSanitizationEnabled, - metrics.create(openTelemetry.getMeterProvider().get(INSTRUMENTATION_NAME))); + DbClientMetrics.get().create(openTelemetry.getMeterProvider().get(INSTRUMENTATION_NAME))); } } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index 6846c0ea413d..9b1231ed3708 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -148,7 +148,12 @@ void testSetCommand() { if (Boolean.getBoolean("testLatestDeps")) { expected.add(DB_NAMESPACE); } - assertDurationMetric(testing(), "io.opentelemetry.lettuce-5.1", expected); + assertDurationMetric(testing(), "io.opentelemetry.lettuce-5.1", toArray(expected)); + } + + @SuppressWarnings("rawtypes") + private static AttributeKey[] toArray(List> expected) { + return expected.toArray(new AttributeKey[0]); } @Test diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index c57add6c8ff4..9ef39494d68e 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -10,7 +10,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; -import java.util.List; public class DbClientMetricsTestUtil { @@ -19,7 +18,7 @@ private DbClientMetricsTestUtil() {} public static void assertDurationMetric( InstrumentationExtension testing, String instrumentationName, - List> expectedKeys) { + AttributeKey... expectedKeys) { // db.system is required - see // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration assertThat(expectedKeys).extracting(AttributeKey::getKey).contains("db.system"); From 892774c00a1d93d7888122c410a3461f178143cb Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 16 Jan 2025 14:32:27 +0100 Subject: [PATCH 14/15] pr review --- .../lettuce/v5_1/AbstractLettuceSyncClientTest.java | 4 ++-- .../testing/junit/db/DbClientMetricsTestUtil.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index 9b1231ed3708..460ed827a85f 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -18,6 +18,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static java.nio.charset.StandardCharsets.UTF_8; +import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -34,7 +35,6 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Base64; import java.util.List; import java.util.Map; @@ -143,7 +143,7 @@ void testSetCommand() { List> expected = new ArrayList<>( - Arrays.asList( + asList( DB_SYSTEM, SERVER_ADDRESS, SERVER_PORT, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT)); if (Boolean.getBoolean("testLatestDeps")) { expected.add(DB_NAMESPACE); diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index 9ef39494d68e..9bfff8d60b5f 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -7,6 +7,7 @@ import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; @@ -21,7 +22,7 @@ public static void assertDurationMetric( AttributeKey... expectedKeys) { // db.system is required - see // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration - assertThat(expectedKeys).extracting(AttributeKey::getKey).contains("db.system"); + assertThat(expectedKeys).extracting(AttributeKey::getKey).contains(DB_SYSTEM.getKey()); if (!emitStableDatabaseSemconv()) { return; } From 560ae5b215b8d1c0dae3f18a8fc5c8eacbd4a124 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 17 Jan 2025 12:56:11 +0100 Subject: [PATCH 15/15] pr review --- .../lettuce/v5_1/OpenTelemetryTracing.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java index fa4029b05714..2fee8305d91a 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java +++ b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java @@ -195,7 +195,7 @@ private static class OpenTelemetrySpan extends Tracer.Span { @Nullable private List events; @Nullable private Throwable error; @Nullable private Span span; - private long spanStartTime; + private long spanStartNanos; private final AttributesBuilder attributesBuilder = Attributes.builder().put(DB_SYSTEM, REDIS); @Nullable private List argsList; @Nullable private String argsString; @@ -252,7 +252,7 @@ private void fillEndpoint(OpenTelemetryEndpoint endpoint) { @SuppressWarnings("UnusedMethod") public synchronized Tracer.Span start(RedisCommand command) { start(); - long startTime = System.nanoTime(); + long startNanos = System.nanoTime(); Span span = this.span; if (span == null) { @@ -280,7 +280,7 @@ public synchronized Tracer.Span start(RedisCommand command) { } } - finish(span, startTime); + finish(span, startNanos); }); } @@ -292,7 +292,7 @@ public synchronized Tracer.Span start(RedisCommand command) { @CanIgnoreReturnValue public synchronized Tracer.Span start() { span = spanBuilder.startSpan(); - spanStartTime = System.nanoTime(); + spanStartNanos = System.nanoTime(); if (name != null) { span.updateName(name); } @@ -371,7 +371,7 @@ public synchronized Tracer.Span error(Throwable throwable) { @Override public synchronized void finish() { if (span != null) { - finish(span, spanStartTime); + finish(span, spanStartNanos); } }