Skip to content

Commit 9eb894f

Browse files
committed
Prefactor DbInfo
1 parent bff4c30 commit 9eb894f

35 files changed

Lines changed: 2900 additions & 1324 deletions

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
@@ -109,7 +109,7 @@ static <REQUEST, RESPONSE> void onStartCommon(
109109
if (emitOldDatabaseSemconv()) {
110110
attributes.put(DB_SYSTEM, getter.getDbSystem(request));
111111
attributes.put(DB_USER, getter.getUser(request));
112-
attributes.put(DB_NAME, getter.getDbNamespace(request));
112+
attributes.put(DB_NAME, getter.getDbName(request));
113113
attributes.put(DB_CONNECTION_STRING, getter.getConnectionString(request));
114114
attributes.put(DB_STATEMENT, getter.getDbQueryText(request));
115115
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
@@ -152,6 +152,7 @@ private GenericDbClientSpanNameExtractor(DbClientAttributesGetter<REQUEST, ?> ge
152152
this.getter = getter;
153153
}
154154

155+
@SuppressWarnings("deprecation") // getDbName is used for old semconv span names
155156
@Override
156157
public String extract(REQUEST request) {
157158
if (emitStableDatabaseSemconv()) {
@@ -162,9 +163,9 @@ public String extract(REQUEST request) {
162163
String operationName = getter.getDbOperationName(request);
163164
return computeSpanNameStable(getter, request, operationName, null, null);
164165
}
165-
String namespace = getter.getDbNamespace(request);
166+
String dbName = getter.getDbName(request);
166167
String operationName = getter.getDbOperationName(request);
167-
return computeSpanName(namespace, operationName, null, null);
168+
return computeSpanName(dbName, operationName, null, null);
168169
}
169170
}
170171

@@ -177,9 +178,9 @@ private SqlClientSpanNameExtractor(SqlClientAttributesGetter<REQUEST, ?> getter)
177178
this.getter = getter;
178179
}
179180

181+
@SuppressWarnings("deprecation") // getDbName is used for old semconv span names
180182
@Override
181183
public String extract(REQUEST request) {
182-
String namespace = getter.getDbNamespace(request);
183184
Collection<String> rawQueryTexts = getter.getRawQueryTexts(request);
184185

185186
if (rawQueryTexts.isEmpty()) {
@@ -191,18 +192,20 @@ public String extract(REQUEST request) {
191192
String operationName = getter.getDbOperationName(request);
192193
return computeSpanNameStable(getter, request, operationName, null, null);
193194
}
195+
String dbName = getter.getDbName(request);
194196
String operationName = getter.getDbOperationName(request);
195-
return computeSpanName(namespace, operationName, null, null);
197+
return computeSpanName(dbName, operationName, null, null);
196198
}
197199

198200
if (!emitStableDatabaseSemconv()) {
201+
String dbName = getter.getDbName(request);
199202
if (rawQueryTexts.size() > 1) { // for backcompat(?)
200-
return computeSpanName(namespace, null, null, null);
203+
return computeSpanName(dbName, null, null, null);
201204
}
202205
SqlQuery analyzedQuery = SqlQueryAnalyzerUtil.analyze(rawQueryTexts.iterator().next());
203206

204207
return computeSpanName(
205-
namespace,
208+
dbName,
206209
analyzedQuery.getOperationName(),
207210
analyzedQuery.getCollectionName(),
208211
analyzedQuery.getStoredProcedureName());
@@ -252,14 +255,15 @@ private MigratingSqlClientSpanNameExtractor(SqlClientAttributesGetter<REQUEST, ?
252255
this.sqlDelegate = new SqlClientSpanNameExtractor<>(getter);
253256
}
254257

258+
@SuppressWarnings("deprecation") // getDbName is used for old semconv span names
255259
@Override
256260
public String extract(REQUEST request) {
257261
if (emitStableDatabaseSemconv()) {
258262
return sqlDelegate.extract(request);
259263
}
260-
// For old semconv, use the generic span name format (operation + namespace)
264+
// For old semconv, use the generic span name format (operation + db.name)
261265
// without collection name to preserve backward compatibility
262-
String namespace = getter.getDbNamespace(request);
266+
String dbName = getter.getDbName(request);
263267
Collection<String> rawQueryTexts = getter.getRawQueryTexts(request);
264268
String operationName = null;
265269
if (rawQueryTexts.size() == 1) {
@@ -269,7 +273,7 @@ public String extract(REQUEST request) {
269273
if (operationName == null) {
270274
operationName = getter.getDbOperationName(request);
271275
}
272-
return computeSpanName(namespace, operationName, null, null);
276+
return computeSpanName(dbName, operationName, null, null);
273277
}
274278
}
275279
}

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

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
package io.opentelemetry.instrumentation.api.incubator.semconv.db;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitOldDatabaseSemconv;
89
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv;
910
import static java.util.Collections.emptyList;
1011
import static java.util.Collections.singleton;
1112
import static org.assertj.core.api.Assertions.assertThat;
12-
import static org.mockito.Mockito.lenient;
1313
import static org.mockito.Mockito.when;
1414

1515
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
@@ -19,6 +19,7 @@
1919
import org.mockito.Mock;
2020
import org.mockito.junit.jupiter.MockitoExtension;
2121

22+
@SuppressWarnings("deprecation") // getDbName is used for old semconv span names
2223
@ExtendWith(MockitoExtension.class)
2324
class DbClientSpanNameExtractorTest {
2425
@Mock DbClientAttributesGetter<DbRequest, Void> dbAttributesGetter;
@@ -32,7 +33,9 @@ void shouldExtractFullSpanName() {
3233

3334
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
3435
.thenReturn(singleton("SELECT * from table"));
35-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
36+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
37+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
38+
}
3639

3740
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(sqlAttributesGetter);
3841

@@ -51,7 +54,9 @@ void shouldSkipNamespaceIfTableAlreadyHasNamespacePrefix() {
5154

5255
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
5356
.thenReturn(singleton("SELECT * from another.table"));
54-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
57+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
58+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
59+
}
5560

5661
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(sqlAttributesGetter);
5762

@@ -85,7 +90,12 @@ void shouldExtractOperationAndName() {
8590
DbRequest dbRequest = new DbRequest();
8691

8792
when(dbAttributesGetter.getDbOperationName(dbRequest)).thenReturn("SELECT");
88-
when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
93+
if (emitStableDatabaseSemconv()) {
94+
when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
95+
}
96+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
97+
when(dbAttributesGetter.getDbName(dbRequest)).thenReturn("database");
98+
}
8999

90100
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(dbAttributesGetter);
91101

@@ -117,7 +127,12 @@ void shouldExtractNamespace() {
117127
// given
118128
DbRequest dbRequest = new DbRequest();
119129

120-
when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
130+
if (emitStableDatabaseSemconv()) {
131+
when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
132+
}
133+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
134+
when(dbAttributesGetter.getDbName(dbRequest)).thenReturn("database");
135+
}
121136

122137
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(dbAttributesGetter);
123138

@@ -147,11 +162,13 @@ void shouldUseQuerySummaryWhenAvailable() {
147162
// given
148163
DbRequest dbRequest = new DbRequest();
149164

150-
// Needs to be lenient because not called during this test under old semconv mode
151-
lenient().when(dbAttributesGetter.getDbQuerySummary(dbRequest)).thenReturn("SELECT users");
152-
// Needs to be lenient because not called during this test under new semconv mode
153-
lenient().when(dbAttributesGetter.getDbOperationName(dbRequest)).thenReturn("SELECT");
154-
lenient().when(dbAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
165+
if (emitStableDatabaseSemconv()) {
166+
when(dbAttributesGetter.getDbQuerySummary(dbRequest)).thenReturn("SELECT users");
167+
}
168+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
169+
when(dbAttributesGetter.getDbOperationName(dbRequest)).thenReturn("SELECT");
170+
when(dbAttributesGetter.getDbName(dbRequest)).thenReturn("database");
171+
}
155172

156173
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(dbAttributesGetter);
157174

@@ -170,7 +187,9 @@ void shouldExtractFullSpanNameForBatch() {
170187

171188
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
172189
.thenReturn(Arrays.asList("INSERT INTO table VALUES(1)", "INSERT INTO table VALUES(2)"));
173-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
190+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
191+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
192+
}
174193

175194
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(sqlAttributesGetter);
176195

@@ -188,7 +207,9 @@ void shouldExtractFullSpanNameForSingleQueryBatch() {
188207

189208
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
190209
.thenReturn(singleton("INSERT INTO table VALUES(?)"));
191-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
210+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
211+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
212+
}
192213
if (emitStableDatabaseSemconv()) {
193214
when(sqlAttributesGetter.getDbOperationBatchSize(dbRequest)).thenReturn(2L);
194215
}
@@ -210,7 +231,12 @@ void shouldFallBackToExplicitOperationNameForEmptySqlQuery() {
210231

211232
when(sqlAttributesGetter.getRawQueryTexts(dbRequest)).thenReturn(emptyList());
212233
when(sqlAttributesGetter.getDbOperationName(dbRequest)).thenReturn("WRITE");
213-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("mydb");
234+
if (emitStableDatabaseSemconv()) {
235+
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("mydb");
236+
}
237+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
238+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("mydb");
239+
}
214240

215241
SpanNameExtractor<DbRequest> underTest = DbClientSpanNameExtractor.create(sqlAttributesGetter);
216242

@@ -229,7 +255,9 @@ void shouldPreserveOldSemconvSpanNameForMigration() {
229255

230256
when(sqlAttributesGetter.getRawQueryTexts(dbRequest))
231257
.thenReturn(singleton("SELECT * from table"));
232-
lenient().when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("database");
258+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
259+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("database");
260+
}
233261

234262
SpanNameExtractor<DbRequest> underTest =
235263
DbClientSpanNameExtractor.createForMigration(sqlAttributesGetter);
@@ -250,7 +278,12 @@ void shouldFallBackToExplicitOperationForEmptySqlQueryInMigration() {
250278

251279
when(sqlAttributesGetter.getRawQueryTexts(dbRequest)).thenReturn(emptyList());
252280
when(sqlAttributesGetter.getDbOperationName(dbRequest)).thenReturn("WRITE");
253-
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("mydb");
281+
if (emitStableDatabaseSemconv()) {
282+
when(sqlAttributesGetter.getDbNamespace(dbRequest)).thenReturn("mydb");
283+
}
284+
if (emitOldDatabaseSemconv() && !emitStableDatabaseSemconv()) {
285+
when(sqlAttributesGetter.getDbName(dbRequest)).thenReturn("mydb");
286+
}
254287

255288
SpanNameExtractor<DbRequest> underTest =
256289
DbClientSpanNameExtractor.createForMigration(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
@@ -19,30 +19,42 @@ public final class JdbcAttributesGetter implements SqlClientAttributesGetter<DbR
1919

2020
public static final JdbcAttributesGetter INSTANCE = new JdbcAttributesGetter();
2121

22-
@Nullable
2322
@Override
2423
public String getDbSystemName(DbRequest request) {
25-
return request.getDbInfo().getSystem();
24+
return request.getDbInfo().getDbSystemName();
25+
}
26+
27+
@Deprecated // to be removed in 3.0
28+
@Override
29+
public String getDbSystem(DbRequest request) {
30+
return request.getDbInfo().getDbSystem();
2631
}
2732

2833
@Deprecated // to be removed in 3.0
2934
@Nullable
3035
@Override
3136
public String getUser(DbRequest request) {
32-
return request.getDbInfo().getUser();
37+
return request.getDbInfo().getDbUser();
3338
}
3439

3540
@Nullable
3641
@Override
3742
public String getDbNamespace(DbRequest request) {
38-
return request.getDbInfo().getName();
43+
return request.getDbInfo().getDbNamespace();
44+
}
45+
46+
@Deprecated // to be removed in 3.0
47+
@Nullable
48+
@Override
49+
public String getDbName(DbRequest request) {
50+
return request.getDbInfo().getDbName();
3951
}
4052

4153
@Deprecated // to be removed in 3.0
4254
@Nullable
4355
@Override
4456
public String getConnectionString(DbRequest request) {
45-
return request.getDbInfo().getShortUrl();
57+
return request.getDbInfo().getDbConnectionString();
4658
}
4759

4860
@Override
@@ -77,12 +89,12 @@ public boolean isParameterizedQuery(DbRequest request) {
7789
@Nullable
7890
@Override
7991
public String getServerAddress(DbRequest request) {
80-
return request.getDbInfo().getHost();
92+
return request.getDbInfo().getServerAddress();
8193
}
8294

8395
@Nullable
8496
@Override
8597
public Integer getServerPort(DbRequest request) {
86-
return request.getDbInfo().getPort();
98+
return request.getDbInfo().getServerPort();
8799
}
88100
}

0 commit comments

Comments
 (0)