Add response type parameter to db attributes extractor (#3093)
* Add response type parameter to DbAttributesExtractor * AutoValue * ResultSet
This commit is contained in:
parent
0a34b2b056
commit
c8ecd9a619
|
@ -19,7 +19,8 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
* methods, but implement as many as possible for best compliance with the OpenTelemetry
|
* methods, but implement as many as possible for best compliance with the OpenTelemetry
|
||||||
* specification.
|
* specification.
|
||||||
*/
|
*/
|
||||||
public abstract class DbAttributesExtractor<REQUEST> extends AttributesExtractor<REQUEST, Void> {
|
public abstract class DbAttributesExtractor<REQUEST, RESPONSE>
|
||||||
|
extends AttributesExtractor<REQUEST, RESPONSE> {
|
||||||
@Override
|
@Override
|
||||||
protected void onStart(AttributesBuilder attributes, REQUEST request) {
|
protected void onStart(AttributesBuilder attributes, REQUEST request) {
|
||||||
set(attributes, SemanticAttributes.DB_SYSTEM, system(request));
|
set(attributes, SemanticAttributes.DB_SYSTEM, system(request));
|
||||||
|
@ -32,7 +33,7 @@ public abstract class DbAttributesExtractor<REQUEST> extends AttributesExtractor
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected final void onEnd(
|
protected final void onEnd(
|
||||||
AttributesBuilder attributes, REQUEST request, @Nullable Void unused) {}
|
AttributesBuilder attributes, REQUEST request, @Nullable RESPONSE response) {}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
protected abstract String system(REQUEST request);
|
protected abstract String system(REQUEST request);
|
||||||
|
|
|
@ -18,15 +18,15 @@ public final class DbSpanNameExtractor<REQUEST> implements SpanNameExtractor<REQ
|
||||||
* @see SqlAttributesExtractor#table(Object) used to extract {@code <db.table>}.
|
* @see SqlAttributesExtractor#table(Object) used to extract {@code <db.table>}.
|
||||||
*/
|
*/
|
||||||
public static <REQUEST> SpanNameExtractor<REQUEST> create(
|
public static <REQUEST> SpanNameExtractor<REQUEST> create(
|
||||||
DbAttributesExtractor<REQUEST> attributesExtractor) {
|
DbAttributesExtractor<REQUEST, ?> attributesExtractor) {
|
||||||
return new DbSpanNameExtractor<>(attributesExtractor);
|
return new DbSpanNameExtractor<>(attributesExtractor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String DEFAULT_SPAN_NAME = "DB Query";
|
private static final String DEFAULT_SPAN_NAME = "DB Query";
|
||||||
|
|
||||||
private final DbAttributesExtractor<REQUEST> attributesExtractor;
|
private final DbAttributesExtractor<REQUEST, ?> attributesExtractor;
|
||||||
|
|
||||||
private DbSpanNameExtractor(DbAttributesExtractor<REQUEST> attributesExtractor) {
|
private DbSpanNameExtractor(DbAttributesExtractor<REQUEST, ?> attributesExtractor) {
|
||||||
this.attributesExtractor = attributesExtractor;
|
this.attributesExtractor = attributesExtractor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ public final class DbSpanNameExtractor<REQUEST> implements SpanNameExtractor<REQ
|
||||||
@Nullable
|
@Nullable
|
||||||
private String getTableName(REQUEST request) {
|
private String getTableName(REQUEST request) {
|
||||||
if (attributesExtractor instanceof SqlAttributesExtractor) {
|
if (attributesExtractor instanceof SqlAttributesExtractor) {
|
||||||
return ((SqlAttributesExtractor<REQUEST>) attributesExtractor).table(request);
|
return ((SqlAttributesExtractor<REQUEST, ?>) attributesExtractor).table(request);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,8 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
* <li>It enables adding the table name extracted by the sanitizer as a parameter.
|
* <li>It enables adding the table name extracted by the sanitizer as a parameter.
|
||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public abstract class SqlAttributesExtractor<REQUEST> extends DbAttributesExtractor<REQUEST> {
|
public abstract class SqlAttributesExtractor<REQUEST, RESPONSE>
|
||||||
|
extends DbAttributesExtractor<REQUEST, RESPONSE> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected final void onStart(AttributesBuilder attributes, REQUEST request) {
|
protected final void onStart(AttributesBuilder attributes, REQUEST request) {
|
||||||
|
|
|
@ -17,8 +17,8 @@ import java.util.Map;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
class DbAttributesExtractorTest {
|
class DbAttributesExtractorTest {
|
||||||
DbAttributesExtractor<Map<String, String>> underTest =
|
DbAttributesExtractor<Map<String, String>, Void> underTest =
|
||||||
new DbAttributesExtractor<Map<String, String>>() {
|
new DbAttributesExtractor<Map<String, String>, Void>() {
|
||||||
@Override
|
@Override
|
||||||
protected String system(Map<String, String> map) {
|
protected String system(Map<String, String> map) {
|
||||||
return map.get("db.system");
|
return map.get("db.system");
|
||||||
|
|
|
@ -16,8 +16,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
class DbSpanNameExtractorTest {
|
class DbSpanNameExtractorTest {
|
||||||
@Mock DbAttributesExtractor<DbRequest> dbAttributesExtractor;
|
@Mock DbAttributesExtractor<DbRequest, Void> dbAttributesExtractor;
|
||||||
@Mock SqlAttributesExtractor<DbRequest> sqlAttributesExtractor;
|
@Mock SqlAttributesExtractor<DbRequest, Void> sqlAttributesExtractor;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldExtractFullSpanName() {
|
void shouldExtractFullSpanName() {
|
||||||
|
|
|
@ -19,8 +19,8 @@ import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
class SqlAttributesExtractorTest {
|
class SqlAttributesExtractorTest {
|
||||||
AttributeKey<String> dbTableAttribute;
|
AttributeKey<String> dbTableAttribute;
|
||||||
SqlAttributesExtractor<Map<String, String>> underTest =
|
SqlAttributesExtractor<Map<String, String>, Void> underTest =
|
||||||
new SqlAttributesExtractor<Map<String, String>>() {
|
new SqlAttributesExtractor<Map<String, String>, Void>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AttributeKey<String> dbTableAttribute() {
|
protected AttributeKey<String> dbTableAttribute() {
|
||||||
|
|
|
@ -29,6 +29,9 @@ muzzle {
|
||||||
dependencies {
|
dependencies {
|
||||||
library "com.datastax.cassandra:cassandra-driver-core:3.0.0"
|
library "com.datastax.cassandra:cassandra-driver-core:3.0.0"
|
||||||
|
|
||||||
|
compileOnly deps.autoValueAnnotations
|
||||||
|
annotationProcessor deps.autoValue
|
||||||
|
|
||||||
testLibrary "com.datastax.cassandra:cassandra-driver-core:3.2.0"
|
testLibrary "com.datastax.cassandra:cassandra-driver-core:3.2.0"
|
||||||
testInstrumentation project(':instrumentation:guava-10.0:javaagent')
|
testInstrumentation project(':instrumentation:guava-10.0:javaagent')
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ResultSet;
|
||||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||||
|
@ -15,15 +16,15 @@ import io.opentelemetry.instrumentation.api.instrumenter.db.DbSpanNameExtractor;
|
||||||
public final class CassandraInstrumenters {
|
public final class CassandraInstrumenters {
|
||||||
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.javaagent.cassandra-3.0";
|
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.javaagent.cassandra-3.0";
|
||||||
|
|
||||||
private static final Instrumenter<CassandraRequest, Void> INSTRUMENTER;
|
private static final Instrumenter<CassandraRequest, ResultSet> INSTRUMENTER;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DbAttributesExtractor<CassandraRequest> attributesExtractor =
|
DbAttributesExtractor<CassandraRequest, ResultSet> attributesExtractor =
|
||||||
new CassandraSqlAttributesExtractor();
|
new CassandraSqlAttributesExtractor();
|
||||||
SpanNameExtractor<CassandraRequest> spanName = DbSpanNameExtractor.create(attributesExtractor);
|
SpanNameExtractor<CassandraRequest> spanName = DbSpanNameExtractor.create(attributesExtractor);
|
||||||
|
|
||||||
INSTRUMENTER =
|
INSTRUMENTER =
|
||||||
Instrumenter.<CassandraRequest, Void>newBuilder(
|
Instrumenter.<CassandraRequest, ResultSet>newBuilder(
|
||||||
GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, spanName)
|
GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, spanName)
|
||||||
.addAttributesExtractor(attributesExtractor)
|
.addAttributesExtractor(attributesExtractor)
|
||||||
.addAttributesExtractor(new CassandraNetAttributesExtractor())
|
.addAttributesExtractor(new CassandraNetAttributesExtractor())
|
||||||
|
@ -31,7 +32,7 @@ public final class CassandraInstrumenters {
|
||||||
.newInstrumenter(SpanKindExtractor.alwaysClient());
|
.newInstrumenter(SpanKindExtractor.alwaysClient());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Instrumenter<CassandraRequest, Void> instrumenter() {
|
public static Instrumenter<CassandraRequest, ResultSet> instrumenter() {
|
||||||
return INSTRUMENTER;
|
return INSTRUMENTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,12 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ResultSet;
|
||||||
import io.opentelemetry.api.common.AttributesBuilder;
|
import io.opentelemetry.api.common.AttributesBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
|
|
||||||
final class CassandraKeyspaceExtractor extends AttributesExtractor<CassandraRequest, Void> {
|
final class CassandraKeyspaceExtractor extends AttributesExtractor<CassandraRequest, ResultSet> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart(AttributesBuilder attributes, CassandraRequest request) {
|
protected void onStart(AttributesBuilder attributes, CassandraRequest request) {
|
||||||
|
@ -18,5 +19,6 @@ final class CassandraKeyspaceExtractor extends AttributesExtractor<CassandraRequ
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onEnd(AttributesBuilder attributes, CassandraRequest request, Void unused) {}
|
protected void onEnd(
|
||||||
|
AttributesBuilder attributes, CassandraRequest request, ResultSet response) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,13 +5,13 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
||||||
|
|
||||||
import com.datastax.driver.core.ExecutionInfo;
|
import com.datastax.driver.core.ResultSet;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.net.InetSocketAddressNetAttributesExtractor;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
final class CassandraNetAttributesExtractor
|
final class CassandraNetAttributesExtractor
|
||||||
extends InetSocketAddressNetAttributesExtractor<CassandraRequest, Void> {
|
extends InetSocketAddressNetAttributesExtractor<CassandraRequest, ResultSet> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -20,8 +20,10 @@ final class CassandraNetAttributesExtractor
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable InetSocketAddress getAddress(CassandraRequest request, @Nullable Void response) {
|
public @Nullable InetSocketAddress getAddress(
|
||||||
ExecutionInfo executionInfo = request.getExecutionInfo();
|
CassandraRequest request, @Nullable ResultSet response) {
|
||||||
return executionInfo == null ? null : executionInfo.getQueriedHost().getSocketAddress();
|
return response == null
|
||||||
|
? null
|
||||||
|
: response.getExecutionInfo().getQueriedHost().getSocketAddress();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,34 +5,17 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
||||||
|
|
||||||
import com.datastax.driver.core.ExecutionInfo;
|
|
||||||
import com.datastax.driver.core.Session;
|
import com.datastax.driver.core.Session;
|
||||||
|
import com.google.auto.value.AutoValue;
|
||||||
|
|
||||||
public final class CassandraRequest {
|
@AutoValue
|
||||||
|
public abstract class CassandraRequest {
|
||||||
|
|
||||||
private final Session session;
|
public abstract Session getSession();
|
||||||
private final String statement;
|
|
||||||
// volatile is not needed here as this field is set and get from the same thread
|
|
||||||
private ExecutionInfo executionInfo;
|
|
||||||
|
|
||||||
public CassandraRequest(Session session, String statement) {
|
public abstract String getStatement();
|
||||||
this.session = session;
|
|
||||||
this.statement = statement;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Session getSession() {
|
public static CassandraRequest create(Session session, String statement) {
|
||||||
return session;
|
return new AutoValue_CassandraRequest(session, statement);
|
||||||
}
|
|
||||||
|
|
||||||
public String getStatement() {
|
|
||||||
return statement;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecutionInfo(ExecutionInfo executionInfo) {
|
|
||||||
this.executionInfo = executionInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecutionInfo getExecutionInfo() {
|
|
||||||
return executionInfo;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,14 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
package io.opentelemetry.javaagent.instrumentation.cassandra.v3_0;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ResultSet;
|
||||||
import io.opentelemetry.api.common.AttributeKey;
|
import io.opentelemetry.api.common.AttributeKey;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.db.SqlAttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.db.SqlAttributesExtractor;
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
final class CassandraSqlAttributesExtractor extends SqlAttributesExtractor<CassandraRequest> {
|
final class CassandraSqlAttributesExtractor
|
||||||
|
extends SqlAttributesExtractor<CassandraRequest, ResultSet> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String system(CassandraRequest request) {
|
protected String system(CassandraRequest request) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class TracingSession implements Session {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet execute(String query) {
|
public ResultSet execute(String query) {
|
||||||
CassandraRequest request = new CassandraRequest(session, query);
|
CassandraRequest request = CassandraRequest.create(session, query);
|
||||||
Context context = instrumenter().start(Context.current(), request);
|
Context context = instrumenter().start(Context.current(), request);
|
||||||
ResultSet resultSet;
|
ResultSet resultSet;
|
||||||
try (Scope ignored = context.makeCurrent()) {
|
try (Scope ignored = context.makeCurrent()) {
|
||||||
|
@ -57,14 +57,13 @@ public class TracingSession implements Session {
|
||||||
instrumenter().end(context, request, null, t);
|
instrumenter().end(context, request, null, t);
|
||||||
throw t;
|
throw t;
|
||||||
}
|
}
|
||||||
request.setExecutionInfo(resultSet.getExecutionInfo());
|
instrumenter().end(context, request, resultSet, null);
|
||||||
instrumenter().end(context, request, null, null);
|
|
||||||
return resultSet;
|
return resultSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet execute(String query, Object... values) {
|
public ResultSet execute(String query, Object... values) {
|
||||||
CassandraRequest request = new CassandraRequest(session, query);
|
CassandraRequest request = CassandraRequest.create(session, query);
|
||||||
Context context = instrumenter().start(Context.current(), request);
|
Context context = instrumenter().start(Context.current(), request);
|
||||||
ResultSet resultSet;
|
ResultSet resultSet;
|
||||||
try (Scope ignored = context.makeCurrent()) {
|
try (Scope ignored = context.makeCurrent()) {
|
||||||
|
@ -73,14 +72,13 @@ public class TracingSession implements Session {
|
||||||
instrumenter().end(context, request, null, t);
|
instrumenter().end(context, request, null, t);
|
||||||
throw t;
|
throw t;
|
||||||
}
|
}
|
||||||
request.setExecutionInfo(resultSet.getExecutionInfo());
|
instrumenter().end(context, request, resultSet, null);
|
||||||
instrumenter().end(context, request, null, null);
|
|
||||||
return resultSet;
|
return resultSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet execute(String query, Map<String, Object> values) {
|
public ResultSet execute(String query, Map<String, Object> values) {
|
||||||
CassandraRequest request = new CassandraRequest(session, query);
|
CassandraRequest request = CassandraRequest.create(session, query);
|
||||||
Context context = instrumenter().start(Context.current(), request);
|
Context context = instrumenter().start(Context.current(), request);
|
||||||
ResultSet resultSet;
|
ResultSet resultSet;
|
||||||
try (Scope ignored = context.makeCurrent()) {
|
try (Scope ignored = context.makeCurrent()) {
|
||||||
|
@ -89,15 +87,14 @@ public class TracingSession implements Session {
|
||||||
instrumenter().end(context, request, null, t);
|
instrumenter().end(context, request, null, t);
|
||||||
throw t;
|
throw t;
|
||||||
}
|
}
|
||||||
request.setExecutionInfo(resultSet.getExecutionInfo());
|
instrumenter().end(context, request, resultSet, null);
|
||||||
instrumenter().end(context, request, null, null);
|
|
||||||
return resultSet;
|
return resultSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet execute(Statement statement) {
|
public ResultSet execute(Statement statement) {
|
||||||
String query = getQuery(statement);
|
String query = getQuery(statement);
|
||||||
CassandraRequest request = new CassandraRequest(session, query);
|
CassandraRequest request = CassandraRequest.create(session, query);
|
||||||
Context context = instrumenter().start(Context.current(), request);
|
Context context = instrumenter().start(Context.current(), request);
|
||||||
ResultSet resultSet;
|
ResultSet resultSet;
|
||||||
try (Scope ignored = context.makeCurrent()) {
|
try (Scope ignored = context.makeCurrent()) {
|
||||||
|
@ -106,14 +103,13 @@ public class TracingSession implements Session {
|
||||||
instrumenter().end(context, request, null, t);
|
instrumenter().end(context, request, null, t);
|
||||||
throw t;
|
throw t;
|
||||||
}
|
}
|
||||||
request.setExecutionInfo(resultSet.getExecutionInfo());
|
instrumenter().end(context, request, resultSet, null);
|
||||||
instrumenter().end(context, request, null, null);
|
|
||||||
return resultSet;
|
return resultSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSetFuture executeAsync(String query) {
|
public ResultSetFuture executeAsync(String query) {
|
||||||
CassandraRequest request = new CassandraRequest(session, query);
|
CassandraRequest request = CassandraRequest.create(session, query);
|
||||||
Context context = instrumenter().start(Context.current(), request);
|
Context context = instrumenter().start(Context.current(), request);
|
||||||
try (Scope ignored = context.makeCurrent()) {
|
try (Scope ignored = context.makeCurrent()) {
|
||||||
ResultSetFuture future = session.executeAsync(query);
|
ResultSetFuture future = session.executeAsync(query);
|
||||||
|
@ -124,7 +120,7 @@ public class TracingSession implements Session {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSetFuture executeAsync(String query, Object... values) {
|
public ResultSetFuture executeAsync(String query, Object... values) {
|
||||||
CassandraRequest request = new CassandraRequest(session, query);
|
CassandraRequest request = CassandraRequest.create(session, query);
|
||||||
Context context = instrumenter().start(Context.current(), request);
|
Context context = instrumenter().start(Context.current(), request);
|
||||||
try (Scope ignored = context.makeCurrent()) {
|
try (Scope ignored = context.makeCurrent()) {
|
||||||
ResultSetFuture future = session.executeAsync(query, values);
|
ResultSetFuture future = session.executeAsync(query, values);
|
||||||
|
@ -135,7 +131,7 @@ public class TracingSession implements Session {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSetFuture executeAsync(String query, Map<String, Object> values) {
|
public ResultSetFuture executeAsync(String query, Map<String, Object> values) {
|
||||||
CassandraRequest request = new CassandraRequest(session, query);
|
CassandraRequest request = CassandraRequest.create(session, query);
|
||||||
Context context = instrumenter().start(Context.current(), request);
|
Context context = instrumenter().start(Context.current(), request);
|
||||||
try (Scope ignored = context.makeCurrent()) {
|
try (Scope ignored = context.makeCurrent()) {
|
||||||
ResultSetFuture future = session.executeAsync(query, values);
|
ResultSetFuture future = session.executeAsync(query, values);
|
||||||
|
@ -147,7 +143,7 @@ public class TracingSession implements Session {
|
||||||
@Override
|
@Override
|
||||||
public ResultSetFuture executeAsync(Statement statement) {
|
public ResultSetFuture executeAsync(Statement statement) {
|
||||||
String query = getQuery(statement);
|
String query = getQuery(statement);
|
||||||
CassandraRequest request = new CassandraRequest(session, query);
|
CassandraRequest request = CassandraRequest.create(session, query);
|
||||||
Context context = instrumenter().start(Context.current(), request);
|
Context context = instrumenter().start(Context.current(), request);
|
||||||
try (Scope ignored = context.makeCurrent()) {
|
try (Scope ignored = context.makeCurrent()) {
|
||||||
ResultSetFuture future = session.executeAsync(statement);
|
ResultSetFuture future = session.executeAsync(statement);
|
||||||
|
@ -219,8 +215,7 @@ public class TracingSession implements Session {
|
||||||
new FutureCallback<ResultSet>() {
|
new FutureCallback<ResultSet>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(ResultSet resultSet) {
|
public void onSuccess(ResultSet resultSet) {
|
||||||
request.setExecutionInfo(resultSet.getExecutionInfo());
|
instrumenter().end(context, request, resultSet, null);
|
||||||
instrumenter().end(context, request, null, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -10,7 +10,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.db.DbAttributesExtracto
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
final class GeodeDbAttributesExtractor extends DbAttributesExtractor<GeodeRequest> {
|
final class GeodeDbAttributesExtractor extends DbAttributesExtractor<GeodeRequest, Void> {
|
||||||
@Override
|
@Override
|
||||||
protected String system(GeodeRequest request) {
|
protected String system(GeodeRequest request) {
|
||||||
return SemanticAttributes.DbSystemValues.GEODE;
|
return SemanticAttributes.DbSystemValues.GEODE;
|
||||||
|
|
|
@ -18,7 +18,8 @@ public final class GeodeInstrumenters {
|
||||||
private static final Instrumenter<GeodeRequest, Void> INSTRUMENTER;
|
private static final Instrumenter<GeodeRequest, Void> INSTRUMENTER;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DbAttributesExtractor<GeodeRequest> attributesExtractor = new GeodeDbAttributesExtractor();
|
DbAttributesExtractor<GeodeRequest, Void> attributesExtractor =
|
||||||
|
new GeodeDbAttributesExtractor();
|
||||||
SpanNameExtractor<GeodeRequest> spanName = DbSpanNameExtractor.create(attributesExtractor);
|
SpanNameExtractor<GeodeRequest> spanName = DbSpanNameExtractor.create(attributesExtractor);
|
||||||
|
|
||||||
INSTRUMENTER =
|
INSTRUMENTER =
|
||||||
|
|
|
@ -10,7 +10,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.db.SqlAttributesExtract
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
final class JdbcAttributesExtractor extends SqlAttributesExtractor<DbRequest> {
|
final class JdbcAttributesExtractor extends SqlAttributesExtractor<DbRequest, Void> {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
protected String system(DbRequest dbRequest) {
|
protected String system(DbRequest dbRequest) {
|
||||||
|
|
|
@ -19,7 +19,7 @@ public final class JdbcInstrumenters {
|
||||||
private static final Instrumenter<DbRequest, Void> INSTRUMENTER;
|
private static final Instrumenter<DbRequest, Void> INSTRUMENTER;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DbAttributesExtractor<DbRequest> dbAttributesExtractor = new JdbcAttributesExtractor();
|
DbAttributesExtractor<DbRequest, Void> dbAttributesExtractor = new JdbcAttributesExtractor();
|
||||||
SpanNameExtractor<DbRequest> spanName = DbSpanNameExtractor.create(dbAttributesExtractor);
|
SpanNameExtractor<DbRequest> spanName = DbSpanNameExtractor.create(dbAttributesExtractor);
|
||||||
JdbcNetAttributesExtractor netAttributesExtractor = new JdbcNetAttributesExtractor();
|
JdbcNetAttributesExtractor netAttributesExtractor = new JdbcNetAttributesExtractor();
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.db.DbAttributesExtracto
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
final class JedisDbAttributesExtractor extends DbAttributesExtractor<JedisRequest> {
|
final class JedisDbAttributesExtractor extends DbAttributesExtractor<JedisRequest, Void> {
|
||||||
@Override
|
@Override
|
||||||
protected String system(JedisRequest request) {
|
protected String system(JedisRequest request) {
|
||||||
return SemanticAttributes.DbSystemValues.REDIS;
|
return SemanticAttributes.DbSystemValues.REDIS;
|
||||||
|
|
|
@ -19,7 +19,8 @@ public final class JedisInstrumenters {
|
||||||
private static final Instrumenter<JedisRequest, Void> INSTRUMENTER;
|
private static final Instrumenter<JedisRequest, Void> INSTRUMENTER;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DbAttributesExtractor<JedisRequest> attributesExtractor = new JedisDbAttributesExtractor();
|
DbAttributesExtractor<JedisRequest, Void> attributesExtractor =
|
||||||
|
new JedisDbAttributesExtractor();
|
||||||
SpanNameExtractor<JedisRequest> spanName = DbSpanNameExtractor.create(attributesExtractor);
|
SpanNameExtractor<JedisRequest> spanName = DbSpanNameExtractor.create(attributesExtractor);
|
||||||
JedisNetAttributesExtractor netAttributesExtractor = new JedisNetAttributesExtractor();
|
JedisNetAttributesExtractor netAttributesExtractor = new JedisNetAttributesExtractor();
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,8 @@ import io.opentelemetry.instrumentation.api.instrumenter.db.DbAttributesExtracto
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
final class LettuceDbAttributesExtractor extends DbAttributesExtractor<RedisCommand<?, ?, ?>> {
|
final class LettuceDbAttributesExtractor
|
||||||
|
extends DbAttributesExtractor<RedisCommand<?, ?, ?>, Void> {
|
||||||
@Override
|
@Override
|
||||||
protected String system(RedisCommand<?, ?, ?> request) {
|
protected String system(RedisCommand<?, ?, ?> request) {
|
||||||
return SemanticAttributes.DbSystemValues.REDIS;
|
return SemanticAttributes.DbSystemValues.REDIS;
|
||||||
|
|
|
@ -23,7 +23,7 @@ public final class LettuceInstrumenters {
|
||||||
private static final Instrumenter<RedisURI, Void> CONNECT_INSTRUMENTER;
|
private static final Instrumenter<RedisURI, Void> CONNECT_INSTRUMENTER;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DbAttributesExtractor<RedisCommand<?, ?, ?>> attributesExtractor =
|
DbAttributesExtractor<RedisCommand<?, ?, ?>, Void> attributesExtractor =
|
||||||
new LettuceDbAttributesExtractor();
|
new LettuceDbAttributesExtractor();
|
||||||
SpanNameExtractor<RedisCommand<?, ?, ?>> spanName =
|
SpanNameExtractor<RedisCommand<?, ?, ?>> spanName =
|
||||||
DbSpanNameExtractor.create(attributesExtractor);
|
DbSpanNameExtractor.create(attributesExtractor);
|
||||||
|
|
|
@ -20,7 +20,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.redisson.client.protocol.CommandData;
|
import org.redisson.client.protocol.CommandData;
|
||||||
import org.redisson.client.protocol.CommandsData;
|
import org.redisson.client.protocol.CommandsData;
|
||||||
|
|
||||||
final class RedissonDbAttributesExtractor extends DbAttributesExtractor<RedissonRequest> {
|
final class RedissonDbAttributesExtractor extends DbAttributesExtractor<RedissonRequest, Void> {
|
||||||
|
|
||||||
private static final String UNKNOWN_COMMAND = "Redis Command";
|
private static final String UNKNOWN_COMMAND = "Redis Command";
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ public final class RedissonInstrumenters {
|
||||||
private static final Instrumenter<RedissonRequest, Void> INSTRUMENTER;
|
private static final Instrumenter<RedissonRequest, Void> INSTRUMENTER;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DbAttributesExtractor<RedissonRequest> dbAttributesExtractor =
|
DbAttributesExtractor<RedissonRequest, Void> dbAttributesExtractor =
|
||||||
new RedissonDbAttributesExtractor();
|
new RedissonDbAttributesExtractor();
|
||||||
RedissonNetAttributesExtractor netAttributesExtractor = new RedissonNetAttributesExtractor();
|
RedissonNetAttributesExtractor netAttributesExtractor = new RedissonNetAttributesExtractor();
|
||||||
SpanNameExtractor<RedissonRequest> spanName = DbSpanNameExtractor.create(dbAttributesExtractor);
|
SpanNameExtractor<RedissonRequest> spanName = DbSpanNameExtractor.create(dbAttributesExtractor);
|
||||||
|
|
Loading…
Reference in New Issue