Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 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
5 changes: 4 additions & 1 deletion .fossa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,10 @@ targets:
target: ':instrumentation:camel-2.20:javaagent'
- type: gradle
path: ./
target: ':instrumentation:clickhouse-client-0.5:javaagent'
target: ':instrumentation:clickhouse:clickhouse-client-0.5:javaagent'
- type: gradle
path: ./
target: ':instrumentation:clickhouse:clickhouse-clientv2-0.8:javaagent'
- type: gradle
path: ./
target: ':instrumentation:executors:bootstrap'
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 ClientV1](https://github.com/ClickHouse/clickhouse-java) | 0.5+ | N/A | [Database Client Spans], [Database Client Metrics]&nbsp;[6] |
| [Clickhouse ClientV2](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
Expand Up @@ -12,11 +12,11 @@ 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")
testImplementation(project(":instrumentation:clickhouse:testing"))
testLibrary("com.clickhouse:clickhouse-client:0.5.0")
testLibrary("com.clickhouse:clickhouse-http-client:0.5.0")
testLibrary("org.apache.httpcomponents.client5:httpclient5:5.2.3")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

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

import com.clickhouse.client.ClickHouseException;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesGetter;
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseAttributesGetter;
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseDbRequest;
import javax.annotation.Nullable;

public final class ClickHouseClientV1AttributesGetter extends ClickHouseAttributesGetter
implements DbClientAttributesGetter<ClickHouseDbRequest, Void> {

public static ClickHouseClientV1AttributesGetter create() {
return new ClickHouseClientV1AttributesGetter();
}

@Nullable
@Override
public String getResponseStatus(@Nullable Void response, @Nullable Throwable error) {
if (error instanceof ClickHouseException) {
return Integer.toString(((ClickHouseException) error).getErrorCode());
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

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

import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;

import com.clickhouse.client.ClickHouseClient;
import com.clickhouse.client.ClickHouseRequest;
import com.clickhouse.client.ClickHouseRequestAccess;
import com.clickhouse.client.config.ClickHouseDefaults;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseDbRequest;
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseScope;
import net.bytebuddy.asm.Advice;

@SuppressWarnings("unused")
public class ClickHouseClientV1ExecuteAndWaitAdvice {
@Advice.OnMethodEnter(suppress = Throwable.class)
public static ClickHouseScope onEnter(
@Advice.Argument(0) ClickHouseRequest<?> clickHouseRequest) {
Instrumenter<ClickHouseDbRequest, Void> instrumenter =
ClickHouseClientV1Singletons.instrumenter();

CallDepth callDepth = CallDepth.forClass(ClickHouseClient.class);
if (callDepth.getAndIncrement() > 0 || clickHouseRequest == null) {
return null;
}

Context parentContext = currentContext();

ClickHouseDbRequest request =
ClickHouseDbRequest.create(
clickHouseRequest.getServer().getHost(),
clickHouseRequest.getServer().getPort(),
clickHouseRequest
.getServer()
.getDatabase()
.orElse(ClickHouseDefaults.DATABASE.getDefaultValue().toString()),
ClickHouseRequestAccess.getQuery(clickHouseRequest));

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

@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void onExit(
@Advice.Thrown Throwable throwable, @Advice.Enter ClickHouseScope scope) {

Instrumenter<ClickHouseDbRequest, Void> instrumenter =
ClickHouseClientV1Singletons.instrumenter();

CallDepth callDepth = CallDepth.forClass(ClickHouseClient.class);
if (callDepth.decrementAndGet() > 0 || scope == null) {
return;
}

scope.end(instrumenter, throwable);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

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

import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;

import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;

public class ClickHouseClientV1Instrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
return implementsInterface(named("com.clickhouse.client.ClickHouseClient"));
}

@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
isMethod()
.and(namedOneOf("executeAndWait", "execute"))
.and(takesArgument(0, named("com.clickhouse.client.ClickHouseRequest"))),
"io.opentelemetry.javaagent.instrumentation.clickhouse.client.v0_5.ClickHouseClientV1ExecuteAndWaitAdvice");
}
}
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.client.v0_5;

import static java.util.Collections.singletonList;

Expand All @@ -14,10 +14,10 @@
import java.util.List;

@AutoService(InstrumentationModule.class)
public class ClickHouseInstrumentationModule extends InstrumentationModule
public class ClickHouseClientV1InstrumentationModule extends InstrumentationModule
implements ExperimentalInstrumentationModule {

public ClickHouseInstrumentationModule() {
public ClickHouseClientV1InstrumentationModule() {
super("clickhouse-client", "clickhouse-client-0.5", "clickhouse");
}

Expand All @@ -33,6 +33,6 @@ public List<String> injectedClassNames() {

@Override
public List<TypeInstrumentation> typeInstrumentations() {
return singletonList(new ClickHouseClientInstrumentation());
return singletonList(new ClickHouseClientV1Instrumentation());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

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

import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseDbRequest;
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseInstrumenterFactory;

public final class ClickHouseClientV1Singletons {

private static final String INSTRUMENTER_NAME = "io.opentelemetry.clickhouse-client-0.5";
private static final Instrumenter<ClickHouseDbRequest, Void> INSTRUMENTER;

static {
INSTRUMENTER =
ClickHouseInstrumenterFactory.createInstrumenter(
INSTRUMENTER_NAME, ClickHouseClientV1AttributesGetter.create());
}

public static Instrumenter<ClickHouseDbRequest, Void> instrumenter() {
return INSTRUMENTER;
}

private ClickHouseClientV1Singletons() {}
}
Loading
Loading