E5F6 ClickHouse client v0.8 instrumentation by mznet · Pull Request #14501 · open-telemetry/opentelemetry-java-instrumentation · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
12 changes: 9 additions & 3 deletions .fossa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,6 @@ targets:
- type: gradle
path: ./
target: ':instrumentation:camel-2.20:javaagent'
- type: gradle
path: ./
target: ':instrumentation:clickhouse-client-0.5:javaagent'
- type: gradle
path: ./
target: ':instrumentation:executors:bootstrap'
Expand Down Expand Up @@ -394,6 +391,15 @@ targets:
- type: gradle
path: ./
target: ':instrumentation:cassandra:cassandra-4.4:library'
- type: gradle
path: ./
target: ':instrumentation:clickhouse:clickhouse-client-common:javaagent'
- type: gradle
path: ./
target: ':instrumentation:clickhouse:clickhouse-client-v1-0.5:javaagent'
- type: gradle
path: ./
target: ':instrumentation:clickhouse:clickhouse-client-v2-0.8:javaagent'
- type: gradle
path: ./
target: ':instrumentation:couchbase:couchbase-2-common:javaagent'
Expand Down
3 changes: 2 additions & 1 deletion docs/supported-libraries.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ These are the supported libraries and frameworks:
| [AWS SDK](https://aws.amazon.com/sdk-for-java/) | 1.11 - 1.12.583,<br>2.2+ | [opentelemetry-aws-sdk-1.11](../instrumentation/aws-sdk/aws-sdk-1.11/library),<br>[opentelemetry-aws-sdk-1.11-autoconfigure](../instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure),<br>[opentelemetry-aws-sdk-2.2](../instrumentation/aws-sdk/aws-sdk-2.2/library),<br>[opentelemetry-aws-sdk-2.2-autoconfigure](../instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure) | [Messaging Spans], [Database Client Spans], [Database Client Metrics]&nbsp;[6], [HTTP Client Spans], [GenAI Client Spans], [GenAI Client Metrics] |
| [Azure Core](https://docs.microsoft.com/en-us/java/api/overview/azure/core-readme) | 1.14+ | N/A | Context propagation |
| [Cassandra Driver](https://github.com/datastax/java-driver) | 3.0+ | [opentelemetry-cassandra-4.4](../instrumentation/cassandra/cassandra-4.4/library) | [Database Client Spans], [Database Client Metrics]&nbsp;[6] |
| [Clickhouse Client](https://github.com/ClickHouse/clickhouse-java) | 0.5+ | N/A | [Database Client Spans], [Database Client Metrics]&nbsp;[6] |
| [Clickhouse Client V1](https://github.com/ClickHouse/clickhouse-java) | 0.5+ | N/A | [Database Client Spans], [Database Client Metrics]&nbsp;[6] |
| [Clickhouse Client V2](https://github.com/ClickHouse/clickhouse-java) | 0.8+ | N/A | [Database Client Spans], [Database Client Metrics]&nbsp;[6] |
| [Couchbase Client](https://github.com/couchbase/couchbase-java-client) | 2.0 - 2.7.x | N/A | [Database Client Spans], [Database Client Metrics]&nbsp;[6] |
| [Couchbase Client](https://github.com/couchbase/couchbase-java-client) | 3.1+ | N/A | [Database Client Spans] |
| [c3p0](https://github.com/swaldman/c3p0) | 0.9.2+ | [opentelemetry-c3p0-0.9](../instrumentation/c3p0-0.9/library) | [Database Pool Metrics] |
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
plugins {
id("otel.javaagent-instrumentation")
}

dependencies {
compileOnly("com.google.auto.value:auto-value-annotations")
annotationProcessor("com.google.auto.value:auto-value")
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,22 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.clickhouse;
package io.opentelemetry.javaagent.instrumentation.clickhouse.common;

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

final class ClickHouseAttributesGetter
implements DbClientAttributesGetter<ClickHouseDbRequest, Void> {

private final Function<Throwable, String> errorCodeExtractor;

ClickHouseAttributesGetter(Function<Throwable, String> errorCodeExtractor) {
this.errorCodeExtractor = errorCodeExtractor;
}

@Nullable
@Override
public String getDbQueryText(ClickHouseDbRequest request) {
Expand Down Expand Up @@ -64,9 +70,6 @@ public String getConnectionString(ClickHouseDbRequest request) {
@Nullable
@Override
public String getResponseStatus(@Nullable Void response, @Nullable Throwable error) {
if (error instanceof ClickHouseException) {
return Integer.toString(((ClickHouseException) error).getErrorCode());
}
return null;
return errorCodeExtractor.apply(error);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,32 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.clickhouse;
package io.opentelemetry.javaagent.instrumentation.clickhouse.common;

import com.google.auto.value.AutoValue;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementInfo;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementSanitizer;
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
import javax.annotation.Nullable;

@AutoValue
public abstract class ClickHouseDbRequest {

private static final SqlStatementSanitizer sanitizer =
SqlStatementSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled());

public static ClickHouseDbRequest create(String host, int port, String dbName, String sql) {
public static ClickHouseDbRequest create(
@Nullable String host, @Nullable Integer port, @Nullable String dbName, String sql) {
return new AutoValue_ClickHouseDbRequest(host, port, dbName, sanitizer.sanitize(sql));
}

@Nullable
public abstract String getHost();

public abstract int getPort();
@Nullable
public abstract Integer getPort();

@Nullable
public abstract String getDbName();

public abstract SqlStatementInfo getSqlStatementInfo();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.clickhouse.common;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesExtractor;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor;
import java.util.function.Function;

public final class ClickHouseInstrumenterFactory {

public static Instrumenter<ClickHouseDbRequest, Void> createInstrumenter(
String instrumenterName, Function<Throwable, String> errorCodeExtractor) {
ClickHouseAttributesGetter dbAttributesGetter =
new ClickHouseAttributesGetter(errorCodeExtractor);

return Instrumenter.<ClickHouseDbRequest, Void>builder(
GlobalOpenTelemetry.get(),
instrumenterName,
DbClientSpanNameExtractor.create(dbAttributesGetter))
.addAttributesExtractor(DbClientAttributesExtractor.create(dbAttributesGetter))
.addAttributesExtractor(
ServerAttributesExtractor.create(new ClickHouseNetworkAttributesGetter()))
.addOperationMetrics(DbClientMetrics.get())
.buildInstrumenter(SpanKindExtractor.alwaysClient());
}

private ClickHouseInstrumenterFactory() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.clickhouse;
package io.opentelemetry.javaagent.instrumentation.clickhouse.common;

import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.clickhouse.common;

import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;

/** Container used to carry state between enter and exit advices */
public final class ClickHouseScope {
private final ClickHouseDbRequest clickHouseDbRequest;
private final Context context;
private final Scope scope;
private final Instrumenter<ClickHouseDbRequest, Void> instrumenter;

private ClickHouseScope(
ClickHouseDbRequest clickHouseDbRequest,
Context context,
Scope scope,
Instrumenter<ClickHouseDbRequest, Void> instrumenter) {
this.clickHouseDbRequest = clickHouseDbRequest;
this.context = context;
this.scope = scope;
this.instrumenter = instrumenter;
}

public static ClickHouseScope start(
Instrumenter<ClickHouseDbRequest, Void> instrumenter,
Context parentContext,
ClickHouseDbRequest clickHouseDbRequest) {
if (!instrumenter.shouldStart(parentContext, clickHouseDbRequest)) {
return null;
}

Context context = instrumenter.start(parentContext, clickHouseDbRequest);
return new ClickHouseScope(clickHouseDbRequest, context, context.makeCurrent(), instrumenter);
}

public void end(Throwable throwable) {
scope.close();
instrumenter.end(context, clickHouseDbRequest, null, throwable);
}
}
Original file line number Diff line num 8020 ber Diff line change
Expand Up @@ -12,9 +12,8 @@ muzzle {
}

dependencies {
implementation(project(":instrumentation:clickhouse:clickhouse-client-common:javaagent"))
compileOnly("com.clickhouse:clickhouse-client:0.5.0")
compileOnly("com.google.auto.value:auto-value-annotations")
annotationProcessor("com.google.auto.value:auto-value")

testImplementation("com.google.guava:guava")
testLibrary("com.clickhouse:clickhouse-client:0.5.0")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.clickhouse;
package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv1.v0_5;

import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static io.opentelemetry.javaagent.instrumentation.clickhouse.clientv1.v0_5.ClickHouseClientV1Singletons.instrumenter;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
Expand All @@ -16,15 +17,16 @@
import com.clickhouse.client.ClickHouseRequest;
import com.clickhouse.client.ClickHouseRequestAccess;
import com.clickhouse.client.config.ClickHouseDefaults;
import io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseDbRequest;
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseScope;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;

public class ClickHouseClientInstrumentation implements TypeInstrumentation {
public class ClickHouseClientV1Instrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
return implementsInterface(named("com.clickhouse.client.ClickHouseClient"));
Expand All @@ -36,11 +38,11 @@ public void transform(TypeTransformer transformer) {
isMethod()
.and(namedOneOf("executeAndWait", "execute"))
.and(takesArgument(0, named("com.clickhouse.client.ClickHouseRequest"))),
this.getClass().getName() + "$ClickHouseExecuteAndWaitAdvice");
this.getClass().getName() + "$ExecuteAndWaitAdvice");
}

@SuppressWarnings("unused")
public static class ClickHouseExecuteAndWaitAdvice {
public static class ExecuteAndWaitAdvice {
@Advice.OnMethodEnter(suppress = Throwable.class)
public static ClickHouseScope onEnter(
@Advice.Argument(0) ClickHouseRequest<?> clickHouseRequest) {
Expand All @@ -50,8 +52,6 @@ public static ClickHouseScope onEnter(
return null;
}

Context parentContext = currentContext();

ClickHouseDbRequest request =
ClickHouseDbRequest.create(
clickHouseRequest.getServer().getHost(),
Expand All @@ -62,7 +62,7 @@ public static ClickHouseScope onEnter(
.orElse(ClickHouseDefaults.DATABASE.getDefaultValue().toString()),
ClickHouseRequestAccess.getQuery(clickHouseRequest));

return ClickHouseScope.start(parentContext, request);
return ClickHouseScope.start(instrumenter(), currentContext(), request);
}

@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
Expand Down
Loading
Loading
0