Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f8043f1
db response based on exception
zeitlinger Feb 17, 2025
fc75d6c
error.type and db.response.status_code for jdbc
zeitlinger Feb 17, 2025
ab31844
error.type and db.response.status_code for jdbc
zeitlinger Feb 17, 2025
730f8bf
error.type and db.response.status_code for jdbc
zeitlinger Feb 17, 2025
7a33fa8
error.type and db.response.status_code for jdbc
zeitlinger Feb 18, 2025
bb71875
error.type and db.response.status_code for jdbc
zeitlinger Feb 19, 2025
a2b58ea
error.type and db.response.status_code for jdbc
zeitlinger Feb 19, 2025
dc2d3a1
error.type and db.response.status_code for jdbc
zeitlinger Feb 19, 2025
5c98aa5
error.type and db.response.status_code all dbs
zeitlinger Feb 19, 2025
6de35ee
error.type and db.response.status_code all dbs
zeitlinger Feb 19, 2025
772e038
error.type and db.response.status_code all dbs
zeitlinger Feb 19, 2025
49fc4b1
error.type and db.response.status_code all dbs
zeitlinger Feb 20, 2025
d1ec77c
error.type and db.response.status_code all dbs
zeitlinger Feb 20, 2025
fe22eb9
error.type and db.response.status_code all dbs
zeitlinger Feb 21, 2025
c027b8e
error.type and db.response.status_code all dbs
zeitlinger Feb 21, 2025
2b68ae2
error.type and db.response.status_code all dbs
zeitlinger Feb 24, 2025
28448df
error.type and db.response.status_code all dbs
zeitlinger Feb 24, 2025
9cbff11
error.type and db.response.status_code all dbs
zeitlinger Feb 24, 2025
23d0b7f
format
zeitlinger Mar 11, 2025
9489d9b
use single method for status code
zeitlinger Mar 11, 2025
64c3177
use single method for status code
zeitlinger Mar 11, 2025
0be0c62
only for stable semconv
zeitlinger Mar 13, 2025
8743e05
only for stable semconv
zeitlinger Mar 13, 2025
537795e
only for stable semconv
zeitlinger Mar 13, 2025
2081dfa
only for stable semconv
zeitlinger Mar 13, 2025
854974e
Update instrumentation/jdbc/library/src/test/java/io/opentelemetry/in…
zeitlinger Mar 14, 2025
fa2d573
format
zeitlinger Mar 17, 2025
5cf76cb
pr review
zeitlinger Mar 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,23 @@
*/
public final class DbClientAttributesExtractor<REQUEST, RESPONSE>
extends DbClientCommonAttributesExtractor<
REQUEST, RESPONSE, DbClientAttributesGetter<REQUEST>> {
REQUEST, RESPONSE, DbClientAttributesGetter<REQUEST, RESPONSE>> {

// copied from DbIncubatingAttributes
private static final AttributeKey<String> DB_STATEMENT = AttributeKey.stringKey("db.statement");
private static final AttributeKey<String> DB_QUERY_TEXT = AttributeKey.stringKey("db.query.text");
static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
static final AttributeKey<String> DB_OPERATION_NAME = AttributeKey.stringKey("db.operation.name");
static final AttributeKey<Long> DB_RESPONSE_STATUS_CODE =
AttributeKey.longKey("db.response.status_code");
static final AttributeKey<String> DB_RESPONSE_STATUS_CODE =
AttributeKey.stringKey("db.response.status_code");

/** Creates the database client attributes extractor with default configuration. */
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
DbClientAttributesGetter<REQUEST> getter) {
DbClientAttributesGetter<REQUEST, RESPONSE> getter) {
return new DbClientAttributesExtractor<>(getter);
}

DbClientAttributesExtractor(DbClientAttributesGetter<REQUEST> getter) {
DbClientAttributesExtractor(DbClientAttributesGetter<REQUEST, RESPONSE> getter) {
super(getter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
* from the attribute methods, but implement as many as possible for best compliance with the
* OpenTelemetry specification.
*/
public interface DbClientAttributesGetter<REQUEST> extends DbClientCommonAttributesGetter<REQUEST> {
public interface DbClientAttributesGetter<REQUEST, RESPONSE>
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE> {

/**
* @deprecated Use {@link #getDbQueryText(REQUEST)} instead.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.instrumentation.api.incubator.semconv.db;

import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorUtil.internalSet;
import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.AttributesBuilder;
Expand All @@ -17,7 +18,7 @@
import javax.annotation.Nullable;

abstract class DbClientCommonAttributesExtractor<
REQUEST, RESPONSE, GETTER extends DbClientCommonAttributesGetter<REQUEST>>
REQUEST, RESPONSE, GETTER extends DbClientCommonAttributesGetter<REQUEST, RESPONSE>>
implements AttributesExtractor<REQUEST, RESPONSE>, SpanKeyProvider {

// copied from DbIncubatingAttributes
Expand All @@ -29,6 +30,8 @@ abstract class DbClientCommonAttributesExtractor<
private static final AttributeKey<String> DB_USER = AttributeKey.stringKey("db.user");
private static final AttributeKey<String> DB_CONNECTION_STRING =
AttributeKey.stringKey("db.connection_string");
private static final AttributeKey<String> DB_RESPONSE_STATUS_CODE =
AttributeKey.stringKey("db.response.status_code");

final GETTER getter;

Expand Down Expand Up @@ -60,7 +63,16 @@ public final void onEnd(
Context context,
REQUEST request,
@Nullable RESPONSE response,
@Nullable Throwable error) {}
@Nullable Throwable error) {
if (SemconvStability.emitStableDatabaseSemconv()) {
if (error != null) {
internalSet(attributes, ERROR_TYPE, error.getClass().getName());
}
if (error != null || response != null) {
internalSet(attributes, DB_RESPONSE_STATUS_CODE, getter.getResponseStatus(response, error));
}
}
}

/**
* This method is internal and is hence not for public use. Its API is unstable and can change at
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import javax.annotation.Nullable;

/** An interface for getting attributes common to database clients. */
public interface DbClientCommonAttributesGetter<REQUEST> {
public interface DbClientCommonAttributesGetter<REQUEST, RESPONSE> {

@Deprecated
@Nullable
Expand Down Expand Up @@ -44,4 +44,9 @@ default String getDbNamespace(REQUEST request) {
@Deprecated
@Nullable
String getConnectionString(REQUEST request);

@Nullable
default String getResponseStatus(@Nullable RESPONSE response, @Nullable Throwable error) {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,7 @@ static void applyClientDurationAdvice(DoubleHistogramBuilder builder) {
SqlClientAttributesExtractor.DB_COLLECTION_NAME,
DbClientCommonAttributesExtractor.DB_NAMESPACE,
DbClientAttributesExtractor.DB_OPERATION_NAME,
// will be implemented in
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/12804
DbClientAttributesExtractor.DB_RESPONSE_STATUS_CODE,
// will be implemented in
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/12804
ErrorAttributes.ERROR_TYPE,
NetworkAttributes.NETWORK_PEER_ADDRESS,
NetworkAttributes.NETWORK_PEER_PORT,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public abstract class DbClientSpanNameExtractor<REQUEST> implements SpanNameExtr
* @see DbClientAttributesGetter#getDbNamespace(Object) used to extract {@code <db.namespace>}.
*/
public static <REQUEST> SpanNameExtractor<REQUEST> create(
DbClientAttributesGetter<REQUEST> getter) {
DbClientAttributesGetter<REQUEST, ?> getter) {
return new GenericDbClientSpanNameExtractor<>(getter);
}

Expand All @@ -34,7 +34,7 @@ public static <REQUEST> SpanNameExtractor<REQUEST> create(
* procedure name.
*/
public static <REQUEST> SpanNameExtractor<REQUEST> create(
SqlClientAttributesGetter<REQUEST> getter) {
SqlClientAttributesGetter<REQUEST, ?> getter) {
return new SqlClientSpanNameExtractor<>(getter);
}

Expand Down Expand Up @@ -67,9 +67,9 @@ protected String computeSpanName(String dbName, String operation, String mainIde
private static final class GenericDbClientSpanNameExtractor<REQUEST>
extends DbClientSpanNameExtractor<REQUEST> {

private final DbClientAttributesGetter<REQUEST> getter;
private final DbClientAttributesGetter<REQUEST, ?> getter;

private GenericDbClientSpanNameExtractor(DbClientAttributesGetter<REQUEST> getter) {
private GenericDbClientSpanNameExtractor(DbClientAttributesGetter<REQUEST, ?> getter) {
this.getter = getter;
}

Expand All @@ -87,9 +87,9 @@ private static final class SqlClientSpanNameExtractor<REQUEST>
// a dedicated sanitizer just for extracting the operation and identifier name
private static final SqlStatementSanitizer sanitizer = SqlStatementSanitizer.create(true);

private final SqlClientAttributesGetter<REQUEST> getter;
private final SqlClientAttributesGetter<REQUEST, ?> getter;

private SqlClientSpanNameExtractor(SqlClientAttributesGetter<REQUEST> getter) {
private SqlClientSpanNameExtractor(SqlClientAttributesGetter<REQUEST, ?> getter) {
this.getter = getter;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
public final class SqlClientAttributesExtractor<REQUEST, RESPONSE>
extends DbClientCommonAttributesExtractor<
REQUEST, RESPONSE, SqlClientAttributesGetter<REQUEST>> {
REQUEST, RESPONSE, SqlClientAttributesGetter<REQUEST, RESPONSE>> {

// copied from DbIncubatingAttributes
private static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
Expand All @@ -41,7 +41,7 @@ public final class SqlClientAttributesExtractor<REQUEST, RESPONSE>

/** Creates the SQL client attributes extractor with default configuration. */
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
SqlClientAttributesGetter<REQUEST> getter) {
SqlClientAttributesGetter<REQUEST, RESPONSE> getter) {
return SqlClientAttributesExtractor.<REQUEST, RESPONSE>builder(getter).build();
}

Expand All @@ -50,7 +50,7 @@ public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
* client attributes extractor.
*/
public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, RESPONSE> builder(
SqlClientAttributesGetter<REQUEST> getter) {
SqlClientAttributesGetter<REQUEST, RESPONSE> getter) {
return new SqlClientAttributesExtractorBuilder<>(getter);
}

Expand All @@ -62,7 +62,7 @@ public static <REQUEST, RESPONSE> SqlClientAttributesExtractorBuilder<REQUEST, R
private final boolean statementSanitizationEnabled;

SqlClientAttributesExtractor(
SqlClientAttributesGetter<REQUEST> getter,
SqlClientAttributesGetter<REQUEST, RESPONSE> getter,
AttributeKey<String> oldSemconvTableAttribute,
boolean statementSanitizationEnabled) {
super(getter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ public final class SqlClientAttributesExtractorBuilder<REQUEST, RESPONSE> {
// copied from DbIncubatingAttributes
private static final AttributeKey<String> DB_SQL_TABLE = AttributeKey.stringKey("db.sql.table");

final SqlClientAttributesGetter<REQUEST> getter;
final SqlClientAttributesGetter<REQUEST, RESPONSE> getter;
AttributeKey<String> oldSemconvTableAttribute = DB_SQL_TABLE;
boolean statementSanitizationEnabled = true;

SqlClientAttributesExtractorBuilder(SqlClientAttributesGetter<REQUEST> getter) {
SqlClientAttributesExtractorBuilder(SqlClientAttributesGetter<REQUEST, RESPONSE> getter) {
this.getter = getter;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
* from the attribute methods, but implement as many as possible for best compliance with the
* OpenTelemetry specification.
*/
public interface SqlClientAttributesGetter<REQUEST>
extends DbClientCommonAttributesGetter<REQUEST> {
public interface SqlClientAttributesGetter<REQUEST, RESPONSE>
extends DbClientCommonAttributesGetter<REQUEST, RESPONSE> {

/**
* Get the raw SQL statement. The value returned by this method is later sanitized by the {@link
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@

class DbClientAttributesExtractorTest {

static final class TestAttributesGetter implements DbClientAttributesGetter<Map<String, String>> {
static final class TestAttributesGetter
implements DbClientAttributesGetter<Map<String, String>, Void> {
@Override
public String getDbSystem(Map<String, String> map) {
return map.get("db.system");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ void collectsMetrics() {

Attributes responseAttributes =
Attributes.builder()
.put(DbClientAttributesExtractor.DB_RESPONSE_STATUS_CODE, 200)
.put(DbClientAttributesExtractor.DB_RESPONSE_STATUS_CODE, "200")
.put(ErrorAttributes.ERROR_TYPE, "400")
.put(NetworkAttributes.NETWORK_PEER_ADDRESS, "1.2.3.4")
.put(NetworkAttributes.NETWORK_PEER_PORT, 8080)
Expand Down Expand Up @@ -104,7 +104,7 @@ void collectsMetrics() {
equalTo(ServerAttributes.SERVER_PORT, 1234),
equalTo(
DbClientAttributesExtractor.DB_RESPONSE_STATUS_CODE,
200),
"200"),
equalTo(ErrorAttributes.ERROR_TYPE, "400"),
equalTo(
NetworkAttributes.NETWORK_PEER_ADDRESS, "1.2.3.4"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@

@ExtendWith(MockitoExtension.class)
class DbClientSpanNameExtractorTest {
@Mock DbClientAttributesGetter<DbRequest> dbAttributesGetter;
@Mock SqlClientAttributesGetter<DbRequest> sqlAttributesGetter;
@Mock DbClientAttributesGetter<DbRequest, Void> dbAttributesGetter;
@Mock SqlClientAttributesGetter<DbRequest, Void> sqlAttributesGetter;

@Test
void shouldExtractFullSpanName() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
@SuppressWarnings("deprecation") // using deprecated semconv
class SqlClientAttributesExtractorTest {

static class TestAttributesGetter implements SqlClientAttributesGetter<Map<String, Object>> {
static class TestAttributesGetter
implements SqlClientAttributesGetter<Map<String, Object>, Void> {

@Override
public Collection<String> getRawQueryTexts(Map<String, Object> map) {
Expand Down Expand Up @@ -71,7 +72,7 @@ protected <T> T read(Map<String, Object> map, String key, Class<T> clazz) {
}

static class TestMultiAttributesGetter extends TestAttributesGetter
implements SqlClientAttributesGetter<Map<String, Object>> {
implements SqlClientAttributesGetter<Map<String, Object>, Void> {

@SuppressWarnings("unchecked")
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@

import static java.util.Collections.singleton;

import com.datastax.driver.core.ExecutionInfo;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesGetter;
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
import java.util.Collection;
import javax.annotation.Nullable;

final class CassandraSqlAttributesGetter implements SqlClientAttributesGetter<CassandraRequest> {
final class CassandraSqlAttributesGetter
implements SqlClientAttributesGetter<CassandraRequest, ExecutionInfo> {

@SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
import static java.util.Collections.singleton;

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

final class CassandraSqlAttributesGetter implements SqlClientAttributesGetter<CassandraRequest> {
final class CassandraSqlAttributesGetter
implements SqlClientAttributesGetter<CassandraRequest, ExecutionInfo> {

@SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@
import static java.util.Collections.singleton;

import com.datastax.oss.driver.api.core.CqlIdentifier;
import com.datastax.oss.driver.api.core.cql.ExecutionInfo;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesGetter;
import java.util.Collection;
import javax.annotation.Nullable;

final class CassandraSqlAttributesGetter implements SqlClientAttributesGetter<CassandraRequest> {
final class CassandraSqlAttributesGetter
implements SqlClientAttributesGetter<CassandraRequest, ExecutionInfo> {
// copied from DbIncubatingAttributes.DbSystemIncubatingValues
private static final String CASSANDRA = "cassandra";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@

package io.opentelemetry.javaagent.instrumentation.clickhouse;

import com.clickhouse.client.ClickHouseException;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesGetter;
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
import javax.annotation.Nullable;

final class ClickHouseAttributesGetter implements DbClientAttributesGetter<ClickHouseDbRequest> {
final class ClickHouseAttributesGetter
implements DbClientAttributesGetter<ClickHouseDbRequest, Void> {

@Nullable
@Override
Expand Down Expand Up @@ -58,4 +60,13 @@ public String getDbNamespace(ClickHouseDbRequest request) {
public String getConnectionString(ClickHouseDbRequest request) {
return null;
}

@Nullable
@Override
public String getResponseStatus(@Nullable Void response, @Nullable Throwable error) {
if (error instanceof ClickHouseException) {
return Integer.toString(((ClickHouseException) error).getErrorCode());
}
return null;
}
}
Loading
Loading