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_STATEMENT = AttributeKey.stringKey("db.statement");
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
private static final String REDIS = "redis";
@ -313,6 +315,16 @@ final class OpenTelemetryTracing implements Tracing {
argsString = value;
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) {
span.setAttribute(key, value);
} 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.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.api.StatefulRedisConnection;
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
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) {
List<AttributeAssertion> result = new ArrayList<>(Arrays.asList(assertions));
if (Boolean.getBoolean("testLatestDeps")) {
result.add(equalTo(DB_NAMESPACE, "0"));
if (SemconvStability.emitStableDatabaseSemconv()) {
result.add(equalTo(DB_NAMESPACE, "0"));
} else {
result.add(equalTo(DB_REDIS_DATABASE_INDEX, 0));
}
}
return result;
}