Skip to content

Commit 3c6b8ec

Browse files
committed
Prefactor DbInfo
1 parent 6288a7d commit 3c6b8ec

35 files changed

+2904
-1323
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static <REQUEST, RESPONSE> void onStartCommon(
108108
if (emitOldDatabaseSemconv()) {
109109
attributes.put(DB_SYSTEM, getter.getDbSystem(request));
110110
attributes.put(DB_USER, getter.getUser(request));
111-
attributes.put(DB_NAME, getter.getDbNamespace(request));
111+
attributes.put(DB_NAME, getter.getDbName(request));
112112
attributes.put(DB_CONNECTION_STRING, getter.getConnectionString(request));
113113
attributes.put(DB_STATEMENT, getter.getDbQueryText(request));
114114
attributes.put(DB_OPERATION, getter.getDbOperationName(request));

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,17 @@ default String getDbSystem(REQUEST request) {
5555
@Nullable
5656
String getDbNamespace(REQUEST request);
5757

58+
/**
59+
* Returns the old db.name value. This is only used for old semantic conventions.
60+
*
61+
* @deprecated Use {@link #getDbNamespace(Object)} instead.
62+
*/
63+
@Deprecated // to be removed in 3.0
64+
@Nullable
65+
default String getDbName(REQUEST request) {
66+
return getDbNamespace(request);
67+
}
68+
5869
/**
5970
* Returns the database user name. This is only used for old semantic conventions.
6071
*

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

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ private GenericDbClientSpanNameExtractor(DbClientAttributesGetter<REQUEST, ?> ge
155155
this.getter = getter;
156156
}
157157

158+
@SuppressWarnings("deprecation") // getDbName is used for old semconv span names
158159
@Override
159160
public String extract(REQUEST request) {
160161
if (emitStableDatabaseSemconv()) {
@@ -165,9 +166,9 @@ public String extract(REQUEST request) {
165166
String operationName = getter.getDbOperationName(request);
166167
return computeSpanNameStable(getter, request, operationName, null, null);
167168
}
168-
String namespace = getter.getDbNamespace(request);
169+
String dbName = getter.getDbName(request);
169170
String operationName = getter.getDbOperationName(request);
170-
return computeSpanName(namespace, operationName, null, null);
171+
return computeSpanName(dbName, operationName, null, null);
171172
}
172173
}
173174

@@ -180,9 +181,9 @@ private SqlClientSpanNameExtractor(SqlClientAttributesGetter<REQUEST, ?> getter)
180181
this.getter = getter;
181182
}
182183

184+
@SuppressWarnings("deprecation") // getDbName is used for old semconv span names
183185
@Override
184186
public String extract(REQUEST request) {
185-
String namespace = getter.getDbNamespace(request);
186187
SqlDialect dialect = getter.getSqlDialect(request);
187188
Collection<String> rawQueryTexts = getter.getRawQueryTexts(request);
188189

@@ -195,18 +196,20 @@ public String extract(REQUEST request) {
195196
String operationName = getter.getDbOperationName(request);
196197
return computeSpanNameStable(getter, request, operationName, null, null);
197198
}
199+
String dbName = getter.getDbName(request);
198200
String operationName = getter.getDbOperationName(request);
199-
return computeSpanName(namespace, operationName, null, null);
201+
return computeSpanName(dbName, operationName, null, null);
200202
}
201203

202204
if (!emitStableDatabaseSemconv()) {
205+
String dbName = getter.getDbName(request);
203206
if (rawQueryTexts.size() > 1) { // for backcompat(?)
204-
return computeSpanName(namespace, null, null, null);
207+
return computeSpanName(dbName, null, null, null);
205208
}
206209
SqlQuery analyzedQuery =
207210
SqlQueryAnalyzerUtil.analyze(rawQueryTexts.iterator().next(), dialect);
208211
return computeSpanName(
209-
namespace,
212+
dbName,
210213
analyzedQuery.getOperationName(),
211214
analyzedQuery.getCollectionName(),
212215
analyzedQuery.getStoredProcedureName());
@@ -256,14 +259,15 @@ private GenericOldSemconvSqlClientSpanNameExtractor(
256259
this.sqlDelegate = new SqlClientSpanNameExtractor<>(getter);
257260
}
258261

262+
@SuppressWarnings("deprecation") // getDbName is used for old semconv span names
259263
@Override
260264
public String extract(REQUEST request) {
261265
if (emitStableDatabaseSemconv()) {
262266
return sqlDelegate.extract(request);
263267
}
264-
// For old semconv, use the generic span name format (operation + namespace)
268+
// For old semconv, use the generic span name format (operation + db.name)
265269
// without collection name to preserve backward compatibility
266-
String namespace = getter.getDbNamespace(request);
270+
String dbName = getter.getDbName(request);
267271
Collection<String> rawQueryTexts = getter.getRawQueryTexts(request);
268272
String operationName = null;
269273
if (rawQueryTexts.size() == 1) {
@@ -275,7 +279,7 @@ public String extract(REQUEST request) {
275279
if (operationName == null) {
276280
operationName = getter.getDbOperationName(request);
277281
}
278-
return computeSpanName(namespace, operationName, null, null);
282+
return computeSpanName(dbName, operationName, null, null);
279283
}
280284
}
281285
}

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

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.instrumentation.api.incubator.semconv.db;
77

88
import static io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlDialect.DOUBLE_QUOTES_ARE_STRING_LITERALS;
9+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitOldDatabaseSemconv;
910
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
1011
import static java.util.Collections.emptyList;
1112
import static java.util.Collections.singleton;
@@ -22,6 +23,7 @@
2223
import org.mockito.Mock;
2324
import org.mockito.junit.jupiter.MockitoExtension;
2425

26+
@SuppressWarnings("deprecation") // getDbName is used for old semconv span names
2527
@ExtendWith(MockitoExtension.class)
2628
class DbClientSpanNameExtractorTest {
2729
@Mock DbClientAttributesGetter<DbRequest, Void> dbAttributesGetter;
@@ -42,7 +44,9 @@ void shouldExtractFullSpanName() {
4244

4345
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
4446
.thenReturn(singleton("SELECT * from table"));
45-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
47+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
48+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
49+
}
4650

4751
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(sqlAttributesGetter);
4852

@@ -61,7 +65,9 @@ void shouldSkipNamespaceIfTableAlreadyHasNamespacePrefix() {
6165

6266
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
6367
.thenReturn(singleton("SELECT * from another.table"));
64-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
68+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
69+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
70+
}
6571

6672
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(sqlAttributesGetter);
6773

@@ -95,7 +101,12 @@ void shouldExtractOperationAndName() {
95101
DbRequest dbRequest = new DbRequest();
96102

97103
when(dbAttributesGetter.getDbOperationName(dbRequest)).thenReturn("SELECT");
98-
when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
104+
if (emitStableDatabaseSemconv()) {
105+
when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
106+
}
107+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
108+
when(dbAttributesGetter.getDbName(dbRequest)).thenReturn("database");
109+
}
99110

100111
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(dbAttributesGetter);
101112

@@ -127,7 +138,12 @@ void shouldExtractNamespace() {
127138
// given
128139
DbRequest dbRequest = new DbRequest();
129140

130-
when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
141+
if (emitStableDatabaseSemconv()) {
142+
when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
143+
}
144+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
145+
when(dbAttributesGetter.getDbName(dbRequest)).thenReturn("database");
146+
}
131147

132148
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(dbAttributesGetter);
133149

@@ -157,11 +173,13 @@ void shouldUseQuerySummaryWhenAvailable() {
157173
// given
158174
DbRequest dbRequest = new DbRequest();
159175

160-
// Needs to be lenient because not called during this test under old semconv mode
161-
lenient().when(dbAttributesGetter.getDbQuerySummary(dbRequest)).thenReturn("SELECT users");
162-
// Needs to be lenient because not called during this test under new semconv mode
163-
lenient().when(dbAttributesGetter.getDbOperationName(dbRequest)).thenReturn("SELECT");
164-
lenient().when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
176+
if (emitStableDatabaseSemconv()) {
177+
when(dbAttributesGetter.getDbQuerySummary(dbRequest)).thenReturn("SELECT users");
178+
}
179+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
180+
when(dbAttributesGetter.getDbOperationName(dbRequest)).thenReturn("SELECT");
181+
when(dbAttributesGetter.getDbName(dbRequest)).thenReturn("database");
182+
}
165183

166184
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(dbAttributesGetter);
167185

@@ -180,7 +198,9 @@ void shouldExtractFullSpanNameForBatch() {
180198

181199
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
182200
.thenReturn(Arrays.asList("INSERT INTO table VALUES(1)", "INSERT INTO table VALUES(2)"));
183-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
201+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
202+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
203+
}
184204

185205
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(sqlAttributesGetter);
186206

@@ -198,7 +218,9 @@ void shouldExtractFullSpanNameForSingleQueryBatch() {
198218

199219
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
200220
.thenReturn(singleton("INSERT INTO table VALUES(?)"));
201-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
221+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
222+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
223+
}
202224
if (emitStableDatabaseSemconv()) {
203225
when(sqlAttributesGetter.getDbOperationBatchSize(dbRequest)).thenReturn(2L);
204226
}
@@ -220,7 +242,12 @@ void shouldFallBackToExplicitOperationNameForEmptySqlQuery() {
220242

221243
when(sqlAttributesGetter.getRawQueryTexts(dbRequest)).thenReturn(emptyList());
222244
when(sqlAttributesGetter.getDbOperationName(dbRequest)).thenReturn("WRITE");
223-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("mydb");
245+
if (emitStableDatabaseSemconv()) {
246+
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("mydb");
247+
}
248+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
249+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("mydb");
250+
}
224251

225252
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(sqlAttributesGetter);
226253

@@ -239,7 +266,9 @@ void shouldPreserveOldSemconvSpanNameForMigration() {
239266

240267
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
241268
.thenReturn(singleton("SELECT * from table"));
242-
lenient().when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
269+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
270+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
271+
}
243272

244273
SpanNameExtractor<DbRequest> underTest =
245274
DbClientSpanNameExtractor.createWithGenericOldSpanName(sqlAttributesGetter);
@@ -260,7 +289,12 @@ void shouldFallBackToExplicitOperationForEmptySqlQueryInMigration() {
260289

261290
when(sqlAttributesGetter.getRawQueryTexts(dbRequest)).thenReturn(emptyList());
262291
when(sqlAttributesGetter.getDbOperationName(dbRequest)).thenReturn("WRITE");
263-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("mydb");
292+
if (emitStableDatabaseSemconv()) {
293+
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("mydb");
294+
}
295+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
296+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("mydb");
297+
}
264298

265299
SpanNameExtractor<DbRequest> underTest =
266300
DbClientSpanNameExtractor.createWithGenericOldSpanName(sqlAttributesGetter);

instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/DataSourceDbAttributesExtractor.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,14 @@ public void onEnd(
4444
return;
4545
}
4646
if (emitStableDatabaseSemconv()) {
47-
attributes.put(DB_NAMESPACE, getName(dbInfo));
48-
attributes.put(DB_SYSTEM_NAME, SemconvStability.stableDbSystemName(dbInfo.getSystem()));
47+
attributes.put(DB_NAMESPACE, dbInfo.getDbNamespace());
48+
attributes.put(DB_SYSTEM_NAME, SemconvStability.stableDbSystemName(dbInfo.getDbSystemName()));
4949
}
5050
if (emitOldDatabaseSemconv()) {
51-
attributes.put(DB_USER, dbInfo.getUser());
52-
attributes.put(DB_NAME, getName(dbInfo));
53-
attributes.put(DB_CONNECTION_STRING, dbInfo.getShortUrl());
54-
attributes.put(DB_SYSTEM, dbInfo.getSystem());
51+
attributes.put(DB_USER, dbInfo.getDbUser());
52+
attributes.put(DB_NAME, dbInfo.getDbName());
53+
attributes.put(DB_CONNECTION_STRING, dbInfo.getDbConnectionString());
54+
attributes.put(DB_SYSTEM, dbInfo.getDbSystem());
5555
}
5656
}
57-
58-
private static String getName(DbInfo dbInfo) {
59-
return dbInfo.getName();
60-
}
6157
}

instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcAttributesGetter.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,30 +61,42 @@ public final class JdbcAttributesGetter implements SqlClientAttributesGetter<DbR
6161
// PostgreSQL-compatible fork, inherits PG string literal rules
6262
"polardb"));
6363

64-
@Nullable
6564
@Override
6665
public String getDbSystemName(DbRequest request) {
67-
return request.getDbInfo().getSystem();
66+
return request.getDbInfo().getDbSystemName();
67+
}
68+
69+
@Deprecated // to be removed in 3.0
70+
@Override
71+
public String getDbSystem(DbRequest request) {
72+
return request.getDbInfo().getDbSystem();
6873
}
6974

7075
@Deprecated // to be removed in 3.0
7176
@Nullable
7277
@Override
7378
public String getUser(DbRequest request) {
74-
return request.getDbInfo().getUser();
79+
return request.getDbInfo().getDbUser();
7580
}
7681

7782
@Nullable
7883
@Override
7984
public String getDbNamespace(DbRequest request) {
80-
return request.getDbInfo().getName();
85+
return request.getDbInfo().getDbNamespace();
86+
}
87+
88+
@Deprecated // to be removed in 3.0
89+
@Nullable
90+
@Override
91+
public String getDbName(DbRequest request) {
92+
return request.getDbInfo().getDbName();
8193
}
8294

8395
@Deprecated // to be removed in 3.0
8496
@Nullable
8597
@Override
8698
public String getConnectionString(DbRequest request) {
87-
return request.getDbInfo().getShortUrl();
99+
return request.getDbInfo().getDbConnectionString();
88100
}
89101

90102
@Override
@@ -131,12 +143,12 @@ public boolean isParameterizedQuery(DbRequest request) {
131143
@Nullable
132144
@Override
133145
public String getServerAddress(DbRequest request) {
134-
return request.getDbInfo().getHost();
146+
return request.getDbInfo().getServerAddress();
135147
}
136148

137149
@Nullable
138150
@Override
139151
public Integer getServerPort(DbRequest request) {
140-
return request.getDbInfo().getPort();
152+
return request.getDbInfo().getServerPort();
141153
}
142154
}

0 commit comments

Comments
 (0)