Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
import io.opentelemetry.instrumentation.api.internal.SpanKey;
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.semconv.network.internal.InternalNetworkAttributesExtractor;
import javax.annotation.Nullable;

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

private final DbClientAttributesGetter<REQUEST, RESPONSE> getter;
private final InternalNetworkAttributesExtractor<REQUEST, RESPONSE> internalNetworkExtractor;
private final ServerAttributesExtractor<REQUEST, RESPONSE> serverAttributesExtractor;

/** Creates the database client attributes extractor with default configuration. */
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
Expand All @@ -53,12 +57,15 @@ public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(

DbClientAttributesExtractor(DbClientAttributesGetter<REQUEST, RESPONSE> getter) {
this.getter = getter;
internalNetworkExtractor = new InternalNetworkAttributesExtractor<>(getter, true, false);
serverAttributesExtractor = ServerAttributesExtractor.create(getter);
}

@SuppressWarnings("deprecation") // until old db semconv are dropped
@Override
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {
onStartCommon(attributes, getter, request);
serverAttributesExtractor.onStart(attributes, parentContext, request);
}

@SuppressWarnings("deprecation") // until old db semconv are dropped
Expand All @@ -67,10 +74,10 @@ static <REQUEST, RESPONSE> void onStartCommon(
DbClientAttributesGetter<REQUEST, RESPONSE> getter,
REQUEST request) {
if (SemconvStability.emitStableDatabaseSemconv()) {
internalSet(
attributes,
DB_SYSTEM_NAME,
SemconvStability.stableDbSystemName(getter.getDbSystem(request)));
String dbSystem = getter.getDbSystem(request);
if (dbSystem != null) {
internalSet(attributes, DB_SYSTEM_NAME, SemconvStability.stableDbSystemName(dbSystem));
}
internalSet(attributes, DB_NAMESPACE, getter.getDbNamespace(request));
internalSet(attributes, DB_QUERY_TEXT, getter.getDbQueryText(request));
internalSet(attributes, DB_OPERATION_NAME, getter.getDbOperationName(request));
Expand All @@ -93,6 +100,7 @@ public void onEnd(
REQUEST request,
@Nullable RESPONSE response,
@Nullable Throwable error) {
internalNetworkExtractor.onEnd(attributes, request, response);
onEndCommon(attributes, getter, response, error);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

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

import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesGetter;
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter;
import javax.annotation.Nullable;

/**
Expand All @@ -18,9 +20,11 @@
* from the attribute methods, but implement as many as possible for best compliance with the
* OpenTelemetry specification.
*/
@SuppressWarnings("deprecation") // extending deprecated interface for backward compatibility
@SuppressWarnings("deprecation") // until DbClientCommonAttributesGetter is removed
public interface DbClientAttributesGetter<REQUEST, RESPONSE>
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE> {
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE>,
NetworkAttributesGetter<REQUEST, RESPONSE>,
ServerAttributesGetter<REQUEST> {

/**
* @deprecated Use {@link #getDbQueryText(REQUEST)} instead.
Expand All @@ -37,12 +41,6 @@ default String getDbQueryText(REQUEST request) {
return getStatement(request);
}

// TODO: make this required to implement
@Nullable
default String getDbQuerySummary(REQUEST request) {
return null;
}

/**
* @deprecated Use {@link #getDbOperationName(REQUEST)} instead.
*/
Expand All @@ -57,4 +55,9 @@ default String getOperation(REQUEST request) {
default String getDbOperationName(REQUEST request) {
return getOperation(request);
}

@Nullable
default String getDbQuerySummary(REQUEST request) {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@

import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorUtil.internalSet;
import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME;
import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE;
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE;
import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME;
import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_TEXT;
import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.AttributesBuilder;
Expand All @@ -18,6 +20,8 @@
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
import io.opentelemetry.instrumentation.api.internal.SpanKey;
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.semconv.network.internal.InternalNetworkAttributesExtractor;
import io.opentelemetry.semconv.AttributeKeyTemplate;
import java.util.Collection;
import java.util.Map;
Expand All @@ -39,6 +43,11 @@ public final class SqlClientAttributesExtractor<REQUEST, RESPONSE>
// copied from DbIncubatingAttributes
private static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
private static final AttributeKey<String> DB_STATEMENT = AttributeKey.stringKey("db.statement");
private static final AttributeKey<String> DB_SYSTEM = AttributeKey.stringKey("db.system");
private static final AttributeKey<String> DB_USER = AttributeKey.stringKey("db.user");
private static final AttributeKey<String> DB_NAME = AttributeKey.stringKey("db.name");
private static final AttributeKey<String> DB_CONNECTION_STRING =
AttributeKey.stringKey("db.connection_string");
private static final AttributeKeyTemplate<String> DB_QUERY_PARAMETER =
AttributeKeyTemplate.stringKeyTemplate("db.query.parameter");

Expand All @@ -60,6 +69,8 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
private static final String SQL_CALL = "CALL";

private final SqlClientAttributesGetter<REQUEST, RESPONSE> getter;
private final InternalNetworkAttributesExtractor<REQUEST, RESPONSE> internalNetworkExtractor;
private final ServerAttributesExtractor<REQUEST, RESPONSE> serverAttributesExtractor;
private final AttributeKey<String> oldSemconvTableAttribute;
private final boolean statementSanitizationEnabled;
private final boolean captureQueryParameters;
Expand All @@ -74,11 +85,30 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
// capturing query parameters disables statement sanitization
this.statementSanitizationEnabled = !captureQueryParameters && statementSanitizationEnabled;
this.captureQueryParameters = captureQueryParameters;
internalNetworkExtractor = new InternalNetworkAttributesExtractor<>(getter, true, false);
serverAttributesExtractor = ServerAttributesExtractor.create(getter);
}

@SuppressWarnings("deprecation") // until old db semconv are dropped
@Override
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {
// Common attributes
if (SemconvStability.emitStableDatabaseSemconv()) {
String dbSystem = getter.getDbSystem(request);
if (dbSystem != null) {
internalSet(attributes, DB_SYSTEM_NAME, SemconvStability.stableDbSystemName(dbSystem));
}
internalSet(attributes, DB_NAMESPACE, getter.getDbNamespace(request));
}
if (SemconvStability.emitOldDatabaseSemconv()) {
internalSet(attributes, DB_SYSTEM, getter.getDbSystem(request));
internalSet(attributes, DB_USER, getter.getUser(request));
internalSet(attributes, DB_NAME, getter.getDbNamespace(request));
internalSet(attributes, DB_CONNECTION_STRING, getter.getConnectionString(request));
}
serverAttributesExtractor.onStart(attributes, parentContext, request);

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

Long batchSize = getter.getBatchSize(request);
Expand Down Expand Up @@ -171,6 +201,7 @@ public void onEnd(
REQUEST request,
@Nullable RESPONSE response,
@Nullable Throwable error) {
internalNetworkExtractor.onEnd(attributes, request, response);
DbClientAttributesExtractor.onEndCommon(attributes, getter, response, error);
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor;
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;

Expand All @@ -38,8 +37,6 @@ public final class CassandraSingletons {
.setStatementSanitizationEnabled(
AgentCommonConfig.get().isStatementSanitizationEnabled())
.build())
.addAttributesExtractor(
NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter()))
.addAttributesExtractor(new CassandraAttributesExtractor())
.addOperationMetrics(DbClientMetrics.get())
.buildInstrumenter(SpanKindExtractor.alwaysClient());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.datastax.driver.core.ExecutionInfo;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesGetter;
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
import java.net.InetSocketAddress;
import java.util.Collection;
import javax.annotation.Nullable;

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

@Deprecated
@Override
@Nullable
public String getUser(CassandraRequest request) {
return null;
}

@Override
@Nullable
public String getDbNamespace(CassandraRequest request) {
return request.getSession().getLoggedKeyspace();
}

@Deprecated
@Override
@Nullable
public String getConnectionString(CassandraRequest request) {
return null;
public Collection<String> getRawQueryTexts(CassandraRequest request) {
return singleton(request.getQueryText());
}

@Nullable
@Override
public Collection<String> getRawQueryTexts(CassandraRequest request) {
return singleton(request.getQueryText());
public InetSocketAddress getNetworkPeerInetSocketAddress(
CassandraRequest request, @Nullable ExecutionInfo executionInfo) {
return executionInfo == null ? null : executionInfo.getQueriedHost().getSocketAddress();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor;
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;

Expand All @@ -37,8 +36,6 @@ public final class CassandraSingletons {
.setStatementSanitizationEnabled(
AgentCommonConfig.get().isStatementSanitizationEnabled())
.build())
.addAttributesExtractor(
NetworkAttributesExtractor.create(new CassandraNetworkAttributesGetter()))
.addAttributesExtractor(new CassandraAttributesExtractor())
.addOperationMetrics(DbClientMetrics.get())
.buildInstrumenter(SpanKindExtractor.alwaysClient());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@

import com.datastax.oss.driver.api.core.CqlIdentifier;
import com.datastax.oss.driver.api.core.cql.ExecutionInfo;
import com.datastax.oss.driver.api.core.metadata.Node;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesGetter;
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.Collection;
import javax.annotation.Nullable;

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

@Deprecated
@Override
@Nullable
public String getUser(CassandraRequest request) {
return null;
}

@Override
@Nullable
public String getDbNamespace(CassandraRequest request) {
return request.getSession().getKeyspace().map(CqlIdentifier::toString).orElse(null);
}

@Deprecated
@Override
@Nullable
public String getConnectionString(CassandraRequest request) {
return null;
public Collection<String> getRawQueryTexts(CassandraRequest request) {
return singleton(request.getQueryText());
}

@Nullable
@Override
public Collection<String> getRawQueryTexts(CassandraRequest request) {
return singleton(request.getQueryText());
public InetSocketAddress getNetworkPeerInetSocketAddress(
CassandraRequest request, @Nullable ExecutionInfo executionInfo) {
if (executionInfo == null) {
return null;
}
Node coordinator = executionInfo.getCoordinator();
if (coordinator == null) {
return null;
}
// resolve() returns an existing InetSocketAddress, it does not do a dns resolve,
// at least in the only current EndPoint implementation (DefaultEndPoint)
SocketAddress address = coordinator.getEndPoint().resolve();
return address instanceof InetSocketAddress ? (InetSocketAddress) address : null;
}
}
Loading
Loading