Skip to content

Commit 6360a2c

Browse files
authored
Consolidate network attribute extraction into DbClientAttributesGetter (#15149)
1 parent e5d150d commit 6360a2c

File tree

44 files changed

+150
-513
lines changed

Some content is hidden

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

44 files changed

+150
-513
lines changed

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

Lines changed: 8 additions & 0 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,12 +57,15 @@ 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
onStartCommon(attributes, getter, request);
68+
serverAttributesExtractor.onStart(attributes, parentContext, request);
6269
}
6370

6471
@SuppressWarnings("deprecation") // until old db semconv are dropped
@@ -93,6 +100,7 @@ public void onEnd(
93100
REQUEST request,
94101
@Nullable RESPONSE response,
95102
@Nullable Throwable error) {
103+
internalNetworkExtractor.onEnd(attributes, request, response);
96104
onEndCommon(attributes, getter, response, error);
97105
}
98106

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

Lines changed: 6 additions & 2 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,9 +20,11 @@
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
23+
@SuppressWarnings("deprecation") // until DbClientCommonAttributesGetter is removed
2224
public interface DbClientAttributesGetter<REQUEST, RESPONSE>
23-
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE> {
25+
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE>,
26+
NetworkAttributesGetter<REQUEST, RESPONSE>,
27+
ServerAttributesGetter<REQUEST> {
2428

2529
/**
2630
* @deprecated Use {@link #getDbQueryText(REQUEST)} instead.

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
1919
import io.opentelemetry.instrumentation.api.internal.SpanKey;
2020
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
21+
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor;
22+
import io.opentelemetry.instrumentation.api.semconv.network.internal.InternalNetworkAttributesExtractor;
2123
import io.opentelemetry.semconv.AttributeKeyTemplate;
2224
import java.util.Collection;
2325
import java.util.Map;
@@ -60,6 +62,8 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
6062
private static final String SQL_CALL = "CALL";
6163

6264
private final SqlClientAttributesGetter<REQUEST, RESPONSE> getter;
65+
private final InternalNetworkAttributesExtractor<REQUEST, RESPONSE> internalNetworkExtractor;
66+
private final ServerAttributesExtractor<REQUEST, RESPONSE> serverAttributesExtractor;
6367
private final AttributeKey<String> oldSemconvTableAttribute;
6468
private final boolean statementSanitizationEnabled;
6569
private final boolean captureQueryParameters;
@@ -74,6 +78,8 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
7478
// capturing query parameters disables statement sanitization
7579
this.statementSanitizationEnabled = !captureQueryParameters && statementSanitizationEnabled;
7680
this.captureQueryParameters = captureQueryParameters;
81+
internalNetworkExtractor = new InternalNetworkAttributesExtractor<>(getter, true, false);
82+
serverAttributesExtractor = ServerAttributesExtractor.create(getter);
7783
}
7884

7985
@SuppressWarnings("deprecation") // until old db semconv are dropped
@@ -139,6 +145,7 @@ public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST
139145
// getDbQueryText(), and getDbQuerySummary() implementations can override
140146
// the parsed values from above
141147
DbClientAttributesExtractor.onStartCommon(attributes, getter, request);
148+
serverAttributesExtractor.onStart(attributes, parentContext, request);
142149
}
143150

144151
private void setQueryParameters(
@@ -171,6 +178,7 @@ public void onEnd(
171178
REQUEST request,
172179
@Nullable RESPONSE response,
173180
@Nullable Throwable error) {
181+
internalNetworkExtractor.onEnd(attributes, request, response);
174182
DbClientAttributesExtractor.onEndCommon(attributes, getter, response, error);
175183
}
176184

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: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.datastax.driver.core.ExecutionInfo;
1111
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesGetter;
1212
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
13+
import java.net.InetSocketAddress;
1314
import java.util.Collection;
1415
import javax.annotation.Nullable;
1516

@@ -22,28 +23,21 @@ public String getDbSystem(CassandraRequest request) {
2223
return DbIncubatingAttributes.DbSystemIncubatingValues.CASSANDRA;
2324
}
2425

25-
@Deprecated
26-
@Override
27-
@Nullable
28-
public String getUser(CassandraRequest request) {
29-
return null;
30-
}
31-
3226
@Override
3327
@Nullable
3428
public String getDbNamespace(CassandraRequest request) {
3529
return request.getSession().getLoggedKeyspace();
3630
}
3731

38-
@Deprecated
3932
@Override
40-
@Nullable
41-
public String getConnectionString(CassandraRequest request) {
42-
return null;
33+
public Collection<String> getRawQueryTexts(CassandraRequest request) {
34+
return singleton(request.getQueryText());
4335
}
4436

37+
@Nullable
4538
@Override
46-
public Collection<String> getRawQueryTexts(CassandraRequest request) {
47-
return singleton(request.getQueryText());
39+
public InetSocketAddress getNetworkPeerInetSocketAddress(
40+
CassandraRequest request, @Nullable ExecutionInfo executionInfo) {
41+
return executionInfo == null ? null : executionInfo.getQueriedHost().getSocketAddress();
4842
}
4943
}

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());

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

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99

1010
import com.datastax.oss.driver.api.core.CqlIdentifier;
1111
import com.datastax.oss.driver.api.core.cql.ExecutionInfo;
12+
import com.datastax.oss.driver.api.core.metadata.Node;
1213
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesGetter;
1314
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
15+
import java.net.InetSocketAddress;
16+
import java.net.SocketAddress;
1417
import java.util.Collection;
1518
import javax.annotation.Nullable;
1619

@@ -23,28 +26,31 @@ public String getDbSystem(CassandraRequest request) {
2326
return DbIncubatingAttributes.DbSystemIncubatingValues.CASSANDRA;
2427
}
2528

26-
@Deprecated
27-
@Override
28-
@Nullable
29-
public String getUser(CassandraRequest request) {
30-
return null;
31-
}
32-
3329
@Override
3430
@Nullable
3531
public String getDbNamespace(CassandraRequest request) {
3632
return request.getSession().getKeyspace().map(CqlIdentifier::toString).orElse(null);
3733
}
3834

39-
@Deprecated
4035
@Override
41-
@Nullable
42-
public String getConnectionString(CassandraRequest request) {
43-
return null;
36+
public Collection<String> getRawQueryTexts(CassandraRequest request) {
37+
return singleton(request.getQueryText());
4438
}
4539

40+
@Nullable
4641
@Override
47-
public Collection<String> getRawQueryTexts(CassandraRequest request) {
48-
return singleton(request.getQueryText());
42+
public InetSocketAddress getNetworkPeerInetSocketAddress(
43+
CassandraRequest request, @Nullable ExecutionInfo executionInfo) {
44+
if (executionInfo == null) {
45+
return null;
46+
}
47+
Node coordinator = executionInfo.getCoordinator();
48+
if (coordinator == null) {
49+
return null;
50+
}
51+
// resolve() returns an existing InetSocketAddress, it does not do a dns resolve,
52+
// at least in the only current EndPoint implementation (DefaultEndPoint)
53+
SocketAddress address = coordinator.getEndPoint().resolve();
54+
return address instanceof InetSocketAddress ? (InetSocketAddress) address : null;
4955
}
5056
}

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

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

0 commit comments

Comments
 (0)