Skip to content

Commit 788e4c6

Browse files
committed
Remove DbClientCommonAttributesExtractor
1 parent 2ea854c commit 788e4c6

File tree

6 files changed

+134
-130
lines changed

6 files changed

+134
-130
lines changed

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

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

88
import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorUtil.internalSet;
9+
import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE;
910
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME;
1011
import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY;
1112
import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_TEXT;
13+
import static io.opentelemetry.semconv.DbAttributes.DB_RESPONSE_STATUS_CODE;
14+
import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME;
15+
import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE;
1216

1317
import io.opentelemetry.api.common.AttributeKey;
1418
import io.opentelemetry.api.common.AttributesBuilder;
1519
import io.opentelemetry.context.Context;
1620
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
1721
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
22+
import io.opentelemetry.instrumentation.api.internal.SpanKey;
23+
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
24+
import javax.annotation.Nullable;
1825

1926
/**
2027
* Extractor of <a
@@ -25,12 +32,18 @@
2532
* attribute extraction from request/response objects.
2633
*/
2734
public final class DbClientAttributesExtractor<REQUEST, RESPONSE>
28-
extends DbClientCommonAttributesExtractor<
29-
REQUEST, RESPONSE, DbClientAttributesGetter<REQUEST, RESPONSE>> {
35+
implements AttributesExtractor<REQUEST, RESPONSE>, SpanKeyProvider {
3036

3137
// copied from DbIncubatingAttributes
38+
private static final AttributeKey<String> DB_NAME = AttributeKey.stringKey("db.name");
39+
private static final AttributeKey<String> DB_SYSTEM = AttributeKey.stringKey("db.system");
40+
private static final AttributeKey<String> DB_USER = AttributeKey.stringKey("db.user");
41+
private static final AttributeKey<String> DB_CONNECTION_STRING =
42+
AttributeKey.stringKey("db.connection_string");
3243
private static final AttributeKey<String> DB_STATEMENT = AttributeKey.stringKey("db.statement");
33-
static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
44+
private static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
45+
46+
private final DbClientAttributesGetter<REQUEST, RESPONSE> getter;
3447

3548
/** Creates the database client attributes extractor with default configuration. */
3649
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
@@ -39,21 +52,55 @@ public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
3952
}
4053

4154
DbClientAttributesExtractor(DbClientAttributesGetter<REQUEST, RESPONSE> getter) {
42-
super(getter);
55+
this.getter = getter;
4356
}
4457

58+
@SuppressWarnings("deprecation") // until old db semconv are dropped
4559
@Override
4660
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {
47-
super.onStart(attributes, parentContext, request);
48-
4961
if (SemconvStability.emitStableDatabaseSemconv()) {
62+
internalSet(
63+
attributes,
64+
DB_SYSTEM_NAME,
65+
SemconvStability.stableDbSystemName(getter.getDbSystem(request)));
66+
internalSet(attributes, DB_NAMESPACE, getter.getDbNamespace(request));
5067
internalSet(attributes, DB_QUERY_TEXT, getter.getDbQueryText(request));
5168
internalSet(attributes, DB_OPERATION_NAME, getter.getDbOperationName(request));
5269
internalSet(attributes, DB_QUERY_SUMMARY, getter.getDbQuerySummary(request));
5370
}
5471
if (SemconvStability.emitOldDatabaseSemconv()) {
72+
internalSet(attributes, DB_SYSTEM, getter.getDbSystem(request));
73+
internalSet(attributes, DB_USER, getter.getUser(request));
74+
internalSet(attributes, DB_NAME, getter.getDbNamespace(request));
75+
internalSet(attributes, DB_CONNECTION_STRING, getter.getConnectionString(request));
5576
internalSet(attributes, DB_STATEMENT, getter.getDbQueryText(request));
5677
internalSet(attributes, DB_OPERATION, getter.getDbOperationName(request));
5778
}
5879
}
80+
81+
@Override
82+
public void onEnd(
83+
AttributesBuilder attributes,
84+
Context context,
85+
REQUEST request,
86+
@Nullable RESPONSE response,
87+
@Nullable Throwable error) {
88+
if (SemconvStability.emitStableDatabaseSemconv()) {
89+
if (error != null) {
90+
internalSet(attributes, ERROR_TYPE, error.getClass().getName());
91+
}
92+
if (error != null || response != null) {
93+
internalSet(attributes, DB_RESPONSE_STATUS_CODE, getter.getResponseStatus(response, error));
94+
}
95+
}
96+
}
97+
98+
/**
99+
* This method is internal and is hence not for public use. Its API is unstable and can change at
100+
* any time.
101+
*/
102+
@Override
103+
public SpanKey internalGetSpanKey() {
104+
return SpanKey.DB_CLIENT;
105+
}
59106
}

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

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,29 @@
1818
* from the attribute methods, but implement as many as possible for best compliance with the
1919
* OpenTelemetry specification.
2020
*/
21-
public interface DbClientAttributesGetter<REQUEST, RESPONSE>
22-
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE> {
21+
public interface DbClientAttributesGetter<REQUEST, RESPONSE> {
22+
23+
String getDbSystem(REQUEST request);
24+
25+
@Deprecated
26+
@Nullable
27+
default String getUser(REQUEST request) {
28+
return null;
29+
}
30+
31+
@Nullable
32+
String getDbNamespace(REQUEST request);
33+
34+
@Deprecated
35+
@Nullable
36+
default String getConnectionString(REQUEST request) {
37+
return null;
38+
}
39+
40+
@Nullable
41+
default String getResponseStatus(@Nullable RESPONSE response, @Nullable Throwable error) {
42+
return null;
43+
}
2344

2445
/**
2546
* @deprecated Use {@link #getDbQueryText(REQUEST)} instead.

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

Lines changed: 0 additions & 83 deletions
This file was deleted.

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

Lines changed: 0 additions & 34 deletions
This file was deleted.

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

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,25 @@
77

88
import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorUtil.internalSet;
99
import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME;
10+
import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE;
1011
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE;
1112
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME;
1213
import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_TEXT;
14+
import static io.opentelemetry.semconv.DbAttributes.DB_RESPONSE_STATUS_CODE;
15+
import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME;
16+
import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE;
1317

1418
import io.opentelemetry.api.common.AttributeKey;
1519
import io.opentelemetry.api.common.AttributesBuilder;
1620
import io.opentelemetry.context.Context;
1721
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
1822
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
23+
import io.opentelemetry.instrumentation.api.internal.SpanKey;
24+
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
1925
import io.opentelemetry.semconv.AttributeKeyTemplate;
2026
import java.util.Collection;
2127
import java.util.Map;
28+
import javax.annotation.Nullable;
2229

2330
/**
2431
* Extractor of <a
@@ -31,10 +38,14 @@
3138
* statement parameters are removed.
3239
*/
3340
public final class SqlClientAttributesExtractor<REQUEST, RESPONSE>
34-
extends DbClientCommonAttributesExtractor<
35-
REQUEST, RESPONSE, SqlClientAttributesGetter<REQUEST, RESPONSE>> {
41+
implements AttributesExtractor<REQUEST, RESPONSE>, SpanKeyProvider {
3642

3743
// copied from DbIncubatingAttributes
44+
private static final AttributeKey<String> DB_NAME = AttributeKey.stringKey("db.name");
45+
private static final AttributeKey<String> DB_SYSTEM = AttributeKey.stringKey("db.system");
46+
private static final AttributeKey<String> DB_USER = AttributeKey.stringKey("db.user");
47+
private static final AttributeKey<String> DB_CONNECTION_STRING =
48+
AttributeKey.stringKey("db.connection_string");
3849
private static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
3950
private static final AttributeKey<String> DB_STATEMENT = AttributeKey.stringKey("db.statement");
4051
private static final AttributeKeyTemplate<String> DB_QUERY_PARAMETER =
@@ -57,6 +68,7 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
5768

5869
private static final String SQL_CALL = "CALL";
5970

71+
private final SqlClientAttributesGetter<REQUEST, RESPONSE> getter;
6072
private final AttributeKey<String> oldSemconvTableAttribute;
6173
private final boolean statementSanitizationEnabled;
6274
private final boolean captureQueryParameters;
@@ -66,17 +78,32 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
6678
AttributeKey<String> oldSemconvTableAttribute,
6779
boolean statementSanitizationEnabled,
6880
boolean captureQueryParameters) {
69-
super(getter);
81+
this.getter = getter;
7082
this.oldSemconvTableAttribute = oldSemconvTableAttribute;
7183
// capturing query parameters disables statement sanitization
7284
this.statementSanitizationEnabled = !captureQueryParameters && statementSanitizationEnabled;
7385
this.captureQueryParameters = captureQueryParameters;
7486
}
7587

88+
@SuppressWarnings("deprecation") // until old db semconv are dropped
7689
@Override
7790
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {
78-
super.onStart(attributes, parentContext, request);
91+
// Common attributes
92+
if (SemconvStability.emitStableDatabaseSemconv()) {
93+
internalSet(
94+
attributes,
95+
DB_SYSTEM_NAME,
96+
SemconvStability.stableDbSystemName(getter.getDbSystem(request)));
97+
internalSet(attributes, DB_NAMESPACE, getter.getDbNamespace(request));
98+
}
99+
if (SemconvStability.emitOldDatabaseSemconv()) {
100+
internalSet(attributes, DB_SYSTEM, getter.getDbSystem(request));
101+
internalSet(attributes, DB_USER, getter.getUser(request));
102+
internalSet(attributes, DB_NAME, getter.getDbNamespace(request));
103+
internalSet(attributes, DB_CONNECTION_STRING, getter.getConnectionString(request));
104+
}
79105

106+
// SQL-specific attributes
80107
Collection<String> rawQueryTexts = getter.getRawQueryTexts(request);
81108

82109
if (rawQueryTexts.isEmpty()) {
@@ -160,4 +187,30 @@ private static String join(String delimiter, Collection<String> collection) {
160187
}
161188
return builder.toString();
162189
}
190+
191+
@Override
192+
public void onEnd(
193+
AttributesBuilder attributes,
194+
Context context,
195+
REQUEST request,
196+
@Nullable RESPONSE response,
197+
@Nullable Throwable error) {
198+
if (SemconvStability.emitStableDatabaseSemconv()) {
199+
if (error != null) {
200+
internalSet(attributes, ERROR_TYPE, error.getClass().getName());
201+
}
202+
if (error != null || response != null) {
203+
internalSet(attributes, DB_RESPONSE_STATUS_CODE, getter.getResponseStatus(response, error));
204+
}
205+
}
206+
}
207+
208+
/**
209+
* This method is internal and is hence not for public use. Its API is unstable and can change at
210+
* any time.
211+
*/
212+
@Override
213+
public SpanKey internalGetSpanKey() {
214+
return SpanKey.DB_CLIENT;
215+
}
163216
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* OpenTelemetry specification.
2323
*/
2424
public interface SqlClientAttributesGetter<REQUEST, RESPONSE>
25-
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE> {
25+
extends DbClientAttributesGetter<REQUEST, RESPONSE> {
2626

2727
/**
2828
* Get the raw SQL query texts. The values returned by this method is later sanitized by the

0 commit comments

Comments
 (0)