Skip to content

Commit 9144a06

Browse files
xu1009litexu
andauthored
clickhouse-jdbc-plugin support trace sql parameters when enable plugin.jdbc.trace_sql_parameters (#515)
Co-authored-by: litexu <litexu@tencent.com>
1 parent 02dad13 commit 9144a06

10 files changed

Lines changed: 453 additions & 176 deletions

File tree

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Release Notes.
77

88
* Exclude `synthetic` methods for the WitnessMethod mechanism
99
* Support ForkJoinPool trace
10+
* Support clickhouse-jdbc-plugin trace sql parameters
1011

1112
#### Documentation
1213

apm-sniffer/apm-sdk-plugin/clickhouse-0.3.2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/v32/SWClickHousePreparedStatement.java

Lines changed: 157 additions & 86 deletions
Large diffs are not rendered by default.

apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/PreparedStatementTracing.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@
1919
package org.apache.skywalking.apm.plugin.jdbc.trace;
2020

2121
import java.sql.SQLException;
22+
import java.util.Objects;
23+
import org.apache.skywalking.apm.agent.core.context.ContextManager;
2224
import org.apache.skywalking.apm.agent.core.context.tag.Tags;
2325
import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
2426
import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
25-
import org.apache.skywalking.apm.agent.core.context.ContextManager;
27+
import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
28+
import org.apache.skywalking.apm.plugin.jdbc.PreparedStatementParameterBuilder;
29+
import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
2630

2731
/**
2832
* {@link PreparedStatementTracing} create an exit span when the client call the method in the class that extend {@link
@@ -31,16 +35,23 @@
3135
public class PreparedStatementTracing {
3236

3337
public static <R> R execute(java.sql.PreparedStatement realStatement, ConnectionInfo connectInfo, String method,
34-
String sql, Executable<R> exec) throws SQLException {
35-
final AbstractSpan span = ContextManager.createExitSpan(connectInfo.getDBType() + "/JDBC/PreparedStatement/" + method, connectInfo
36-
.getDatabasePeer());
38+
String sql, Executable<R> exec, StatementEnhanceInfos statementEnhanceInfos) throws SQLException {
39+
final AbstractSpan span = ContextManager.createExitSpan(
40+
connectInfo.getDBType() + "/JDBC/PreparedStatement/" + method, connectInfo
41+
.getDatabasePeer());
3742
try {
3843
Tags.DB_TYPE.set(span, connectInfo.getDBType());
3944
Tags.DB_INSTANCE.set(span, connectInfo.getDatabaseName());
4045
Tags.DB_STATEMENT.set(span, sql);
4146
span.setComponent(connectInfo.getComponent());
42-
4347
SpanLayer.asDB(span);
48+
if (JDBCPluginConfig.Plugin.JDBC.TRACE_SQL_PARAMETERS && Objects.nonNull(statementEnhanceInfos)) {
49+
final Object[] parameters = statementEnhanceInfos.getParameters();
50+
if (parameters != null && parameters.length > 0) {
51+
int maxIndex = statementEnhanceInfos.getMaxIndex();
52+
Tags.SQL_PARAMETERS.set(span, getParameterString(parameters, maxIndex));
53+
}
54+
}
4455
return exec.exe(realStatement, sql);
4556
} catch (SQLException e) {
4657
span.log(e);
@@ -50,7 +61,15 @@ public static <R> R execute(java.sql.PreparedStatement realStatement, Connection
5061
}
5162
}
5263

64+
private static String getParameterString(Object[] parameters, int maxIndex) {
65+
return new PreparedStatementParameterBuilder()
66+
.setParameters(parameters)
67+
.setMaxIndex(maxIndex)
68+
.build();
69+
}
70+
5371
public interface Executable<R> {
72+
5473
R exe(java.sql.PreparedStatement realConnection, String sql) throws SQLException;
5574
}
5675
}

0 commit comments

Comments
 (0)