Skip to content

Commit 3f4d8c7

Browse files
committed
move the advices into instrumentation
1 parent f466ba7 commit 3f4d8c7

File tree

6 files changed

+119
-133
lines changed

6 files changed

+119
-133
lines changed

.fossa.yml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,6 @@ targets:
8888
- type: gradle
8989
path: ./
9090
target: ':instrumentation:camel-2.20:javaagent'
91-
- type: gradle
92-
path: ./
93-
target: ':instrumentation:clickhouse:clickhouse-client-0.5:javaagent'
94-
- type: gradle
95-
path: ./
96-
target: ':instrumentation:clickhouse:clickhouse-clientv2-0.8:javaagent'
9791
- type: gradle
9892
path: ./
9993
target: ':instrumentation:executors:bootstrap'
@@ -394,6 +388,15 @@ targets:
394388
- type: gradle
395389
path: ./
396390
target: ':instrumentation:cassandra:cassandra-4.4:library'
391+
- type: gradle
392+
path: ./
393+
target: ':instrumentation:clickhouse:clickhouse-client-0.5:javaagent'
394+
- type: gradle
395+
path: ./
396+
target: ':instrumentation:clickhouse:clickhouse-client-common:javaagent'
397+
- type: gradle
398+
path: ./
399+
target: ':instrumentation:clickhouse:clickhouse-clientv2-0.8:javaagent'
397400
- type: gradle
398401
path: ./
399402
target: ':instrumentation:couchbase:couchbase-2-common:javaagent'

instrumentation/clickhouse/clickhouse-client-0.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/client/v0_5/ClickHouseClientV1ExecuteAndWaitAdvice.java

Lines changed: 0 additions & 63 deletions
This file was deleted.

instrumentation/clickhouse/clickhouse-client-0.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/client/v0_5/ClickHouseClientV1Instrumentation.java

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,25 @@
55

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

8+
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
89
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
910
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
1011
import static net.bytebuddy.matcher.ElementMatchers.named;
1112
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
1213
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1314

15+
import com.clickhouse.client.ClickHouseClient;
16+
import com.clickhouse.client.ClickHouseRequest;
17+
import com.clickhouse.client.ClickHouseRequestAccess;
18+
import com.clickhouse.client.config.ClickHouseDefaults;
19+
import io.opentelemetry.context.Context;
20+
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
21+
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1422
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1523
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
24+
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseDbRequest;
25+
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseScope;
26+
import net.bytebuddy.asm.Advice;
1627
import net.bytebuddy.description.type.TypeDescription;
1728
import net.bytebuddy.matcher.ElementMatcher;
1829

@@ -28,6 +39,50 @@ public void transform(TypeTransformer transformer) {
2839
isMethod()
2940
.and(namedOneOf("executeAndWait", "execute"))
3041
.and(takesArgument(0, named("com.clickhouse.client.ClickHouseRequest"))),
31-
"io.opentelemetry.javaagent.instrumentation.clickhouse.client.v0_5.ClickHouseClientV1ExecuteAndWaitAdvice");
42+
this.getClass().getName() + "$ClickHouseClientV1ExecuteAndWaitAdvice");
43+
}
44+
45+
@SuppressWarnings("unused")
46+
public static class ClickHouseClientV1ExecuteAndWaitAdvice {
47+
@Advice.OnMethodEnter(suppress = Throwable.class)
48+
public static ClickHouseScope onEnter(
49+
@Advice.Argument(0) ClickHouseRequest<?> clickHouseRequest) {
50+
Instrumenter<ClickHouseDbRequest, Void> instrumenter =
51+
ClickHouseClientV1Singletons.instrumenter();
52+
53+
CallDepth callDepth = CallDepth.forClass(ClickHouseClient.class);
54+
if (callDepth.getAndIncrement() > 0 || clickHouseRequest == null) {
55+
return null;
56+
}
57+
58+
Context parentContext = currentContext();
59+
60+
ClickHouseDbRequest request =
61+
ClickHouseDbRequest.create(
62+
clickHouseRequest.getServer().getHost(),
63+
clickHouseRequest.getServer().getPort(),
64+
clickHouseRequest
65+
.getServer()
66+
.getDatabase()
67+
.orElse(ClickHouseDefaults.DATABASE.getDefaultValue().toString()),
68+
ClickHouseRequestAccess.getQuery(clickHouseRequest));
69+
70+
return ClickHouseScope.start(instrumenter, parentContext, request);
71+
}
72+
73+
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
74+
public static void onExit(
75+
@Advice.Thrown Throwable throwable, @Advice.Enter ClickHouseScope scope) {
76+
77+
Instrumenter<ClickHouseDbRequest, Void> instrumenter =
78+
ClickHouseClientV1Singletons.instrumenter();
79+
80+
CallDepth callDepth = CallDepth.forClass(ClickHouseClient.class);
81+
if (callDepth.decrementAndGet() > 0 || scope == null) {
82+
return;
83+
}
84+
85+
scope.end(instrumenter, throwable);
86+
}
3287
}
3388
}

instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseNetworkAttributesGetter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

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

10-
public final class ClickHouseNetworkAttributesGetter
10+
final class ClickHouseNetworkAttributesGetter
1111
implements ServerAttributesGetter<ClickHouseDbRequest> {
1212

1313
@Override

instrumentation/clickhouse/clickhouse-clientv2-0.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Instrumentation.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,25 @@
55

66
package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv2.v0_8;
77

8+
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
89
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
910
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
1011
import static net.bytebuddy.matcher.ElementMatchers.isSubTypeOf;
1112
import static net.bytebuddy.matcher.ElementMatchers.named;
1213
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1314

15+
import com.clickhouse.client.api.Client;
16+
import com.clickhouse.client.api.query.QuerySettings;
17+
import io.opentelemetry.context.Context;
18+
import io.opentelemetry.instrumentation.api.incubator.semconv.net.internal.UrlParser;
19+
import io.opentelemetry.javaagent.bootstrap.CallDepth;
1420
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1521
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
22+
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseDbRequest;
23+
import io.opentelemetry.javaagent.instrumentation.clickhouse.common.ClickHouseScope;
1624
import java.util.Map;
25+
import java.util.Optional;
26+
import net.bytebuddy.asm.Advice;
1727
import net.bytebuddy.description.type.TypeDescription;
1828
import net.bytebuddy.matcher.ElementMatcher;
1929

@@ -32,6 +42,48 @@ public void transform(TypeTransformer transformer) {
3242
.and(takesArgument(0, String.class))
3343
.and(takesArgument(1, isSubTypeOf(Map.class)))
3444
.and(takesArgument(2, named("com.clickhouse.client.api.query.QuerySettings"))),
35-
"io.opentelemetry.javaagent.instrumentation.clickhouse.clientv2.v0_8.ClickHouseClientV2QueryAdvice");
45+
this.getClass().getName() + "$ClickHouseClientV2QueryAdvice");
46+
}
47+
48+
@SuppressWarnings("unused")
49+
public static class ClickHouseClientV2QueryAdvice {
50+
@Advice.OnMethodEnter(suppress = Throwable.class)
51+
public static ClickHouseScope onEnter(
52+
@Advice.This Client client,
53+
@Advice.Argument(0) String sqlQuery,
54+
@Advice.Argument(1) Map<String, Object> queryParams,
55+
@Advice.Argument(2) QuerySettings querySettings) {
56+
CallDepth callDepth = CallDepth.forClass(Client.class);
57+
if (callDepth.getAndIncrement() > 0 || sqlQuery == null) {
58+
return null;
59+
}
60+
61+
String endPoint = client.getEndpoints().stream().findFirst().orElse(null);
62+
String host = null;
63+
Integer port = 0;
64+
65+
if (endPoint != null) {
66+
host = UrlParser.getHost(endPoint);
67+
port = Optional.ofNullable(UrlParser.getPort(endPoint)).orElse(0);
68+
}
69+
70+
String database = client.getConfiguration().get("database");
71+
Context parentContext = currentContext();
72+
ClickHouseDbRequest request = ClickHouseDbRequest.create(host, port, database, sqlQuery);
73+
74+
return ClickHouseScope.start(
75+
ClickHouseClientV2Singletons.instrumenter(), parentContext, request);
76+
}
77+
78+
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
79+
public static void onExit(
80+
@Advice.Thrown Throwable throwable, @Advice.Enter ClickHouseScope scope) {
81+
CallDepth callDepth = CallDepth.forClass(Client.class);
82+
if (callDepth.decrementAndGet() > 0 || scope == null) {
83+
return;
84+
}
85+
86+
scope.end(ClickHouseClientV2Singletons.instrumenter(), throwable);
87+
}
3688
}
3789
}

instrumentation/clickhouse/clickhouse-clientv2-0.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2QueryAdvice.java

Lines changed: 0 additions & 61 deletions
This file was deleted.

0 commit comments

Comments
 (0)