Skip to content

Commit d2988b1

Browse files
committed
Consolidate network attribute extraction into DbClientAttributesGetter
1 parent 096b370 commit d2988b1

File tree

43 files changed

+307
-512
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+307
-512
lines changed

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
2222
import io.opentelemetry.instrumentation.api.internal.SpanKey;
2323
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
24+
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor;
25+
import io.opentelemetry.instrumentation.api.semconv.network.internal.InternalNetworkAttributesExtractor;
2426
import javax.annotation.Nullable;
2527

2628
/**
@@ -44,6 +46,8 @@ public final class DbClientAttributesExtractor<REQUEST, RESPONSE>
4446
private static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
4547

4648
private final DbClientAttributesGetter<REQUEST, RESPONSE> getter;
49+
private final InternalNetworkAttributesExtractor<REQUEST, RESPONSE> internalNetworkExtractor;
50+
private final ServerAttributesExtractor<REQUEST, RESPONSE> serverAttributesExtractor;
4751

4852
/** Creates the database client attributes extractor with default configuration. */
4953
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
@@ -53,16 +57,18 @@ public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
5357

5458
DbClientAttributesExtractor(DbClientAttributesGetter<REQUEST, RESPONSE> getter) {
5559
this.getter = getter;
60+
internalNetworkExtractor = new InternalNetworkAttributesExtractor<>(getter, true, false);
61+
serverAttributesExtractor = ServerAttributesExtractor.create(getter);
5662
}
5763

5864
@SuppressWarnings("deprecation") // until old db semconv are dropped
5965
@Override
6066
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {
6167
if (SemconvStability.emitStableDatabaseSemconv()) {
62-
internalSet(
63-
attributes,
64-
DB_SYSTEM_NAME,
65-
SemconvStability.stableDbSystemName(getter.getDbSystem(request)));
68+
String dbSystem = getter.getDbSystem(request);
69+
if (dbSystem != null) {
70+
internalSet(attributes, DB_SYSTEM_NAME, SemconvStability.stableDbSystemName(dbSystem));
71+
}
6672
internalSet(attributes, DB_NAMESPACE, getter.getDbNamespace(request));
6773
internalSet(attributes, DB_QUERY_TEXT, getter.getDbQueryText(request));
6874
internalSet(attributes, DB_OPERATION_NAME, getter.getDbOperationName(request));
@@ -76,6 +82,7 @@ public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST
7682
internalSet(attributes, DB_STATEMENT, getter.getDbQueryText(request));
7783
internalSet(attributes, DB_OPERATION, getter.getDbOperationName(request));
7884
}
85+
serverAttributesExtractor.onStart(attributes, parentContext, request);
7986
}
8087

8188
@Override
@@ -85,6 +92,7 @@ public void onEnd(
8592
REQUEST request,
8693
@Nullable RESPONSE response,
8794
@Nullable Throwable error) {
95+
internalNetworkExtractor.onEnd(attributes, request, response);
8896
if (SemconvStability.emitStableDatabaseSemconv()) {
8997
if (error != null) {
9098
internalSet(attributes, ERROR_TYPE, error.getClass().getName());

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

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

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

8+
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter;
9+
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter;
810
import javax.annotation.Nullable;
911

1012
/**
@@ -18,31 +20,63 @@
1820
* from the attribute methods, but implement as many as possible for best compliance with the
1921
* OpenTelemetry specification.
2022
*/
21-
@SuppressWarnings("deprecation") // extending deprecated interface for backward compatibility
2223
public interface DbClientAttributesGetter<REQUEST, RESPONSE>
23-
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE> {
24+
extends NetworkAttributesGetter<REQUEST, RESPONSE>, ServerAttributesGetter<REQUEST> {
25+
26+
@Deprecated
27+
@Nullable
28+
default String getSystem(REQUEST request) {
29+
return null;
30+
}
31+
32+
// TODO: make this required to implement
33+
@Nullable
34+
default String getDbSystem(REQUEST request) {
35+
return getSystem(request);
36+
}
37+
38+
@Deprecated
39+
@Nullable
40+
default String getUser(REQUEST request) {
41+
return null;
42+
}
2443

2544
/**
26-
* @deprecated Use {@link #getDbQueryText(REQUEST)} instead.
45+
* @deprecated Use {@link #getDbNamespace(Object)} instead.
2746
*/
2847
@Deprecated
2948
@Nullable
30-
default String getStatement(REQUEST request) {
49+
default String getName(REQUEST request) {
3150
return null;
3251
}
3352

3453
// TODO: make this required to implement
3554
@Nullable
36-
default String getDbQueryText(REQUEST request) {
37-
return getStatement(request);
55+
default String getDbNamespace(REQUEST request) {
56+
return getName(request);
3857
}
3958

40-
// TODO: make this required to implement
59+
@Deprecated
4160
@Nullable
42-
default String getDbQuerySummary(REQUEST request) {
61+
default String getConnectionString(REQUEST request) {
4362
return null;
4463
}
4564

65+
/**
66+
* @deprecated Use {@link #getDbQueryText(REQUEST)} instead.
67+
*/
68+
@Deprecated
69+
@Nullable
70+
default String getStatement(REQUEST request) {
71+
return null;
72+
}
73+
74+
// TODO: make this required to implement
75+
@Nullable
76+
default String getDbQueryText(REQUEST request) {
77+
return getStatement(request);
78+
}
79+
4680
/**
4781
* @deprecated Use {@link #getDbOperationName(REQUEST)} instead.
4882
*/
@@ -57,4 +91,14 @@ default String getOperation(REQUEST request) {
5791
default String getDbOperationName(REQUEST request) {
5892
return getOperation(request);
5993
}
94+
95+
@Nullable
96+
default String getDbQuerySummary(REQUEST request) {
97+
return null;
98+
}
99+
100+
@Nullable
101+
default String getResponseStatus(@Nullable RESPONSE response, @Nullable Throwable error) {
102+
return null;
103+
}
60104
}

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
2323
import io.opentelemetry.instrumentation.api.internal.SpanKey;
2424
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
25+
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor;
26+
import io.opentelemetry.instrumentation.api.semconv.network.internal.InternalNetworkAttributesExtractor;
2527
import io.opentelemetry.semconv.AttributeKeyTemplate;
2628
import java.util.Collection;
2729
import java.util.Map;
@@ -69,6 +71,8 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
6971
private static final String SQL_CALL = "CALL";
7072

7173
private final SqlClientAttributesGetter<REQUEST, RESPONSE> getter;
74+
private final InternalNetworkAttributesExtractor<REQUEST, RESPONSE> internalNetworkExtractor;
75+
private final ServerAttributesExtractor<REQUEST, RESPONSE> serverAttributesExtractor;
7276
private final AttributeKey<String> oldSemconvTableAttribute;
7377
private final boolean statementSanitizationEnabled;
7478
private final boolean captureQueryParameters;
@@ -83,17 +87,19 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
8387
// capturing query parameters disables statement sanitization
8488
this.statementSanitizationEnabled = !captureQueryParameters && statementSanitizationEnabled;
8589
this.captureQueryParameters = captureQueryParameters;
90+
internalNetworkExtractor = new InternalNetworkAttributesExtractor<>(getter, true, false);
91+
serverAttributesExtractor = ServerAttributesExtractor.create(getter);
8692
}
8793

8894
@SuppressWarnings("deprecation") // until old db semconv are dropped
8995
@Override
9096
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {
9197
// Common attributes
9298
if (SemconvStability.emitStableDatabaseSemconv()) {
93-
internalSet(
94-
attributes,
95-
DB_SYSTEM_NAME,
96-
SemconvStability.stableDbSystemName(getter.getDbSystem(request)));
99+
String dbSystem = getter.getDbSystem(request);
100+
if (dbSystem != null) {
101+
internalSet(attributes, DB_SYSTEM_NAME, SemconvStability.stableDbSystemName(dbSystem));
102+
}
97103
internalSet(attributes, DB_NAMESPACE, getter.getDbNamespace(request));
98104
}
99105
if (SemconvStability.emitOldDatabaseSemconv()) {
@@ -102,6 +108,7 @@ public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST
102108
internalSet(attributes, DB_NAME, getter.getDbNamespace(request));
103109
internalSet(attributes, DB_CONNECTION_STRING, getter.getConnectionString(request));
104110
}
111+
serverAttributesExtractor.onStart(attributes, parentContext, request);
105112

106113
// SQL-specific attributes
107114
Collection<String> rawQueryTexts = getter.getRawQueryTexts(request);
@@ -195,6 +202,7 @@ public void onEnd(
195202
REQUEST request,
196203
@Nullable RESPONSE response,
197204
@Nullable Throwable error) {
205+
internalNetworkExtractor.onEnd(attributes, request, response);
198206
if (SemconvStability.emitStableDatabaseSemconv()) {
199207
if (error != null) {
200208
internalSet(attributes, ERROR_TYPE, error.getClass().getName());

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

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

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor;
1313
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1414
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
15-
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor;
1615
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
1716
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
1817

@@ -38,8 +37,6 @@ public final class CassandraSingletons {
3837
.setStatementSanitizationEnabled(
3938
AgentCommonConfig.get().isStatementSanitizationEnabled())
4039
.build())
41-
.addAttributesExtractor(
42-
NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter()))
4340
.addAttributesExtractor(new CassandraAttributesExtractor())
4441
.addOperationMetrics(DbClientMetrics.get())
4542
.buildInstrumenter(SpanKindExtractor.alwaysClient());

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

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,12 @@
88
import static java.util.Collections.singleton;
99

1010
import com.datastax.driver.core.ExecutionInfo;
11+
import com.datastax.driver.core.Host;
1112
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesGetter;
1213
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
14+
import java.net.InetAddress;
15+
import java.net.InetSocketAddress;
16+
import java.net.UnknownHostException;
1317
import java.util.Collection;
1418
import javax.annotation.Nullable;
1519

@@ -22,28 +26,51 @@ public String getDbSystem(CassandraRequest request) {
2226
return DbIncubatingAttributes.DbSystemIncubatingValues.CASSANDRA;
2327
}
2428

25-
@Deprecated
2629
@Override
2730
@Nullable
28-
public String getUser(CassandraRequest request) {
29-
return null;
31+
public String getDbNamespace(CassandraRequest request) {
32+
return request.getSession().getLoggedKeyspace();
3033
}
3134

3235
@Override
33-
@Nullable
34-
public String getDbNamespace(CassandraRequest request) {
35-
return request.getSession().getLoggedKeyspace();
36+
public Collection<String> getRawQueryTexts(CassandraRequest request) {
37+
return singleton(request.getQueryText());
3638
}
3739

38-
@Deprecated
40+
@Nullable
3941
@Override
42+
public String getServerAddress(CassandraRequest request) {
43+
return null;
44+
}
45+
4046
@Nullable
41-
public String getConnectionString(CassandraRequest request) {
47+
@Override
48+
public Integer getServerPort(CassandraRequest request) {
4249
return null;
4350
}
4451

52+
@Nullable
4553
@Override
46-
public Collection<String> getRawQueryTexts(CassandraRequest request) {
47-
return singleton(request.getQueryText());
54+
public InetSocketAddress getNetworkPeerInetSocketAddress(
55+
CassandraRequest request, @Nullable ExecutionInfo response) {
56+
if (response == null) {
57+
return null;
58+
}
59+
Host queriedHost = response.getQueriedHost();
60+
if (queriedHost == null) {
61+
return null;
62+
}
63+
InetSocketAddress address = queriedHost.getSocketAddress();
64+
if (address != null && address.getAddress() == null) {
65+
// Address is unresolved, need to resolve it explicitly
66+
try {
67+
InetAddress resolved = InetAddress.getByName(address.getHostString());
68+
return new InetSocketAddress(resolved, address.getPort());
69+
} catch (UnknownHostException e) {
70+
// If resolution fails, return the unresolved address anyway
71+
return address;
72+
}
73+
}
74+
return address;
4875
}
4976
}

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

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

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor;
1313
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1414
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
15-
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor;
1615
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
1716
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
1817

@@ -37,8 +36,6 @@ public final class CassandraSingletons {
3736
.setStatementSanitizationEnabled(
3837
AgentCommonConfig.get().isStatementSanitizationEnabled())
3938
.build())
40-
.addAttributesExtractor(
41-
NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter()))
4239
.addAttributesExtractor(new CassandraAttributesExtractor())
4340
.addOperationMetrics(DbClientMetrics.get())
4441
.buildInstrumenter(SpanKindExtractor.alwaysClient());

0 commit comments

Comments
 (0)