Skip to content

Commit cc33fde

Browse files
committed
Emit both db.collection.name and db.sql.table under database/dup
1 parent 96904fc commit cc33fde

File tree

6 files changed

+28
-34
lines changed

6 files changed

+28
-34
lines changed

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractor.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public final class SqlClientAttributesExtractor<REQUEST, RESPONSE>
3333
AttributeKey.stringKey("db.operation.name");
3434
private static final AttributeKey<String> DB_STATEMENT = AttributeKey.stringKey("db.statement");
3535
private static final AttributeKey<String> DB_QUERY_TEXT = AttributeKey.stringKey("db.query.text");
36+
private static final AttributeKey<String> DB_COLLECTION_NAME =
37+
AttributeKey.stringKey("db.collection.name");
3638

3739
/** Creates the SQL client attributes extractor with default configuration. */
3840
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
@@ -53,15 +55,15 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
5355
// sanitizer is also used to extract operation and table name, so we have it always enable here
5456
private static final SqlStatementSanitizer sanitizer = SqlStatementSanitizer.create(true);
5557

56-
private final AttributeKey<String> dbTableAttribute;
58+
private final AttributeKey<String> oldSemconvTableAttribute;
5759
private final boolean statementSanitizationEnabled;
5860

5961
SqlClientAttributesExtractor(
6062
SqlClientAttributesGetter<REQUEST> getter,
61-
AttributeKey<String> dbTableAttribute,
63+
AttributeKey<String> oldSemconvTableAttribute,
6264
boolean statementSanitizationEnabled) {
6365
super(getter);
64-
this.dbTableAttribute = dbTableAttribute;
66+
this.oldSemconvTableAttribute = oldSemconvTableAttribute;
6567
this.statementSanitizationEnabled = statementSanitizationEnabled;
6668
}
6769

@@ -87,7 +89,12 @@ public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST
8789
internalSet(attributes, DB_OPERATION, operation);
8890
}
8991
if (!SQL_CALL.equals(operation)) {
90-
internalSet(attributes, dbTableAttribute, sanitizedStatement.getMainIdentifier());
92+
if (SemconvStability.emitStableDatabaseSemconv()) {
93+
internalSet(attributes, DB_COLLECTION_NAME, sanitizedStatement.getMainIdentifier());
94+
}
95+
if (SemconvStability.emitOldDatabaseSemconv()) {
96+
internalSet(attributes, oldSemconvTableAttribute, sanitizedStatement.getMainIdentifier());
97+
}
9198
}
9299
}
93100
}

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorBuilder.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,21 @@ public final class SqlClientAttributesExtractorBuilder<REQUEST, RESPONSE> {
1818
private static final AttributeKey<String> DB_SQL_TABLE = AttributeKey.stringKey("db.sql.table");
1919

2020
final SqlClientAttributesGetter<REQUEST> getter;
21-
AttributeKey<String> dbTableAttribute = DB_SQL_TABLE;
21+
AttributeKey<String> oldSemconvTableAttribute = DB_SQL_TABLE;
2222
boolean statementSanitizationEnabled = true;
2323

2424
SqlClientAttributesExtractorBuilder(SqlClientAttributesGetter<REQUEST> getter) {
2525
this.getter = getter;
2626
}
2727

2828
/**
29-
* Configures the extractor to set the table value extracted by the {@link
30-
* SqlClientAttributesExtractor} under the {@code dbTableAttribute} key. By default, the <code>
31-
* db.sql.table</code> attribute is used.
32-
*
33-
* @param dbTableAttribute The {@link AttributeKey} under which the table extracted by the {@link
34-
* SqlClientAttributesExtractor} will be stored.
29+
* @deprecated not needed anymore since the new semantic conventions always use db.collection.name
3530
*/
3631
@CanIgnoreReturnValue
37-
public SqlClientAttributesExtractorBuilder<REQUEST, RESPONSE> setTableAttribute(
38-
AttributeKey<String> dbTableAttribute) {
39-
this.dbTableAttribute = requireNonNull(dbTableAttribute);
32+
@Deprecated
33+
public SqlClientAttributesExtractorBuilder<REQUEST, RESPONSE> setOldSemconvTableAttribute(
34+
AttributeKey<String> oldSemconvTableAttribute) {
35+
this.oldSemconvTableAttribute = requireNonNull(oldSemconvTableAttribute);
4036
return this;
4137
}
4238

@@ -58,6 +54,6 @@ public SqlClientAttributesExtractorBuilder<REQUEST, RESPONSE> setStatementSaniti
5854
*/
5955
public AttributesExtractor<REQUEST, RESPONSE> build() {
6056
return new SqlClientAttributesExtractor<>(
61-
getter, dbTableAttribute, statementSanitizationEnabled);
57+
getter, oldSemconvTableAttribute, statementSanitizationEnabled);
6258
}
6359
}

instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ void shouldNotExtractTableIfAttributeIsNotSet() {
134134
}
135135

136136
@Test
137+
@SuppressWarnings("deprecation") // to support old database semantic conventions
137138
void shouldExtractTableToSpecifiedKey() {
138139
// given
139140
Map<String, String> request = new HashMap<>();
@@ -143,8 +144,7 @@ void shouldExtractTableToSpecifiedKey() {
143144

144145
AttributesExtractor<Map<String, String>, Void> underTest =
145146
SqlClientAttributesExtractor.<Map<String, String>, Void>builder(new TestAttributesGetter())
146-
.setTableAttribute(
147-
SemconvStabilityUtil.getAttributeKey(DbIncubatingAttributes.DB_CASSANDRA_TABLE))
147+
.setOldSemconvTableAttribute(DbIncubatingAttributes.DB_CASSANDRA_TABLE)
148148
.build();
149149

150150
// when

instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77

88
import com.datastax.driver.core.ExecutionInfo;
99
import io.opentelemetry.api.GlobalOpenTelemetry;
10-
import io.opentelemetry.api.common.AttributeKey;
1110
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor;
1211
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor;
1312
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1413
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
15-
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
1614
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor;
1715
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
16+
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
1817

18+
@SuppressWarnings("deprecation") // to support old database semantic conventions
1919
public final class CassandraSingletons {
2020
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.cassandra-3.0";
2121

@@ -33,10 +33,7 @@ public final class CassandraSingletons {
3333
DbClientSpanNameExtractor.create(attributesGetter))
3434
.addAttributesExtractor(
3535
SqlClientAttributesExtractor.builder(attributesGetter)
36-
.setTableAttribute(
37-
SemconvStability.emitStableDatabaseSemconv()
38-
? AttributeKey.stringKey("db.collection.name")
39-
: AttributeKey.stringKey("db.cassandra.table"))
36+
.setOldSemconvTableAttribute(DbIncubatingAttributes.DB_CASSANDRA_TABLE)
4037
.setStatementSanitizationEnabled(
4138
AgentCommonConfig.get().isStatementSanitizationEnabled())
4239
.build())

instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77

88
import com.datastax.oss.driver.api.core.cql.ExecutionInfo;
99
import io.opentelemetry.api.GlobalOpenTelemetry;
10-
import io.opentelemetry.api.common.AttributeKey;
1110
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor;
1211
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor;
1312
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1413
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
15-
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
1614
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor;
1715
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
16+
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
1817

18+
@SuppressWarnings("deprecation") // to support old database semantic conventions
1919
public final class CassandraSingletons {
2020
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.cassandra-4.0";
2121

@@ -32,10 +32,7 @@ public final class CassandraSingletons {
3232
DbClientSpanNameExtractor.create(attributesGetter))
3333
.addAttributesExtractor(
3434
SqlClientAttributesExtractor.builder(attributesGetter)
35-
.setTableAttribute(
36-
SemconvStability.emitStableDatabaseSemconv()
37-
? AttributeKey.stringKey("db.collection.name")
38-
: AttributeKey.stringKey("db.cassandra.table"))
35+
.setOldSemconvTableAttribute(DbIncubatingAttributes.DB_CASSANDRA_TABLE)
3936
.setStatementSanitizationEnabled(
4037
AgentCommonConfig.get().isStatementSanitizationEnabled())
4138
.build())

instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor;
1414
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1515
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
16-
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
1716
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor;
1817

1918
/** A builder of {@link CassandraTelemetry}. */
@@ -53,6 +52,7 @@ public CassandraTelemetry build() {
5352
return new CassandraTelemetry(createInstrumenter(openTelemetry, statementSanitizationEnabled));
5453
}
5554

55+
@SuppressWarnings("deprecation") // to support old database semantic conventions
5656
protected Instrumenter<CassandraRequest, ExecutionInfo> createInstrumenter(
5757
OpenTelemetry openTelemetry, boolean statementSanitizationEnabled) {
5858
CassandraSqlAttributesGetter attributesGetter = new CassandraSqlAttributesGetter();
@@ -61,10 +61,7 @@ protected Instrumenter<CassandraRequest, ExecutionInfo> createInstrumenter(
6161
openTelemetry, INSTRUMENTATION_NAME, DbClientSpanNameExtractor.create(attributesGetter))
6262
.addAttributesExtractor(
6363
SqlClientAttributesExtractor.builder(attributesGetter)
64-
.setTableAttribute(
65-
SemconvStability.emitStableDatabaseSemconv()
66-
? DB_COLLECTION_NAME
67-
: DB_CASSANDRA_TABLE)
64+
.setOldSemconvTableAttribute(DB_CASSANDRA_TABLE)
6865
.setStatementSanitizationEnabled(statementSanitizationEnabled)
6966
.build())
7067
.addAttributesExtractor(

0 commit comments

Comments
 (0)