Map lettuce 5.1 `db.namespace` to `db.name` (unless using experimental database semconv stability opt-in) (#12609)

This commit is contained in:
Trask Stalnaker 2024-11-12 18:51:24 -08:00 committed by GitHub
parent cd65f9aa88
commit 5059f9a0fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 1 deletions

View File

@ -43,6 +43,8 @@ final class OpenTelemetryTracing implements Tracing {
private static final AttributeKey<String> DB_SYSTEM = AttributeKey.stringKey("db.system"); private static final AttributeKey<String> DB_SYSTEM = AttributeKey.stringKey("db.system");
private static final AttributeKey<String> DB_STATEMENT = AttributeKey.stringKey("db.statement"); private static final AttributeKey<String> DB_STATEMENT = AttributeKey.stringKey("db.statement");
private static final AttributeKey<String> DB_QUERY_TEXT = AttributeKey.stringKey("db.query.text"); private static final AttributeKey<String> DB_QUERY_TEXT = AttributeKey.stringKey("db.query.text");
private static final AttributeKey<Long> DB_REDIS_DATABASE_INDEX =
AttributeKey.longKey("db.redis.database_index");
// copied from DbIncubatingAttributes.DbSystemIncubatingValues // copied from DbIncubatingAttributes.DbSystemIncubatingValues
private static final String REDIS = "redis"; private static final String REDIS = "redis";
@ -313,6 +315,16 @@ final class OpenTelemetryTracing implements Tracing {
argsString = value; argsString = value;
return this; return this;
} }
if (key.equals("db.namespace") && SemconvStability.emitOldDatabaseSemconv()) {
// map backwards into db.redis.database.index
long val = Long.parseLong(value);
if (span != null) {
span.setAttribute(DB_REDIS_DATABASE_INDEX, val);
} else {
spanBuilder.setAttribute(DB_REDIS_DATABASE_INDEX, val);
}
return this;
}
if (span != null) { if (span != null) {
span.setAttribute(key, value); span.setAttribute(key, value);
} else { } else {

View File

@ -7,9 +7,11 @@ package io.opentelemetry.instrumentation.lettuce.v5_1;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE;
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_REDIS_DATABASE_INDEX;
import io.lettuce.core.RedisClient; import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.StatefulRedisConnection;
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension; import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion; import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
@ -80,10 +82,15 @@ abstract class AbstractLettuceClientTest {
} }
} }
@SuppressWarnings("deprecation") // using deprecated semconv
protected static List<AttributeAssertion> addExtraAttributes(AttributeAssertion... assertions) { protected static List<AttributeAssertion> addExtraAttributes(AttributeAssertion... assertions) {
List<AttributeAssertion> result = new ArrayList<>(Arrays.asList(assertions)); List<AttributeAssertion> result = new ArrayList<>(Arrays.asList(assertions));
if (Boolean.getBoolean("testLatestDeps")) { if (Boolean.getBoolean("testLatestDeps")) {
if (SemconvStability.emitStableDatabaseSemconv()) {
result.add(equalTo(DB_NAMESPACE, "0")); result.add(equalTo(DB_NAMESPACE, "0"));
} else {
result.add(equalTo(DB_REDIS_DATABASE_INDEX, 0));
}
} }
return result; return result;
} }