From 112fb6abcc0a42e9332e954e917bbeefd6088afe Mon Sep 17 00:00:00 2001 From: Evgeniy Devyatykh Date: Tue, 20 May 2025 19:46:40 +0500 Subject: [PATCH 1/4] ClickHouse JDBC URL support --- .../internal/JdbcConnectionUrlParser.java | 14 +++++++++ .../internal/JdbcConnectionUrlParserTest.java | 29 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index ef0c5e08a719..b9f8d412c012 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -892,6 +892,17 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { return builder; } + }, + CLICKHOUSE("clickhouse") { + @Override + DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { + String clickhouseUrl = jdbcUrl.substring("clickhouse:".length()); + int typeEndIndex = clickhouseUrl.indexOf("://"); + if (typeEndIndex > 0) { + builder.subtype(clickhouseUrl.substring(0, typeEndIndex)); + } + return GENERIC_URL_LIKE.doParse(clickhouseUrl, builder); + } }; private static final Logger logger = Logger.getLogger(JdbcConnectionUrlParser.class.getName()); @@ -1079,6 +1090,8 @@ private static String toDbSystem(String type) { return DbSystemValues.MSSQL; case "sap": // SAP Hana return DbSystemValues.HANADB; + case "clickhouse": // ClickHouse + return DbSystemValues.CLICKHOUSE; default: return DbSystemValues.OTHER_SQL; // Unknown DBMS } @@ -1098,6 +1111,7 @@ private static final class DbSystemValues { static final String DERBY = "derby"; static final String MARIADB = "mariadb"; static final String H2 = "h2"; + static final String CLICKHOUSE = "clickhouse"; private DbSystemValues() {} } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java index bc90cbc72908..c3d8ba98f684 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java @@ -206,6 +206,35 @@ public Stream provideArguments(ExtensionContext context) { .build()); } } + @ParameterizedTest(name = "{index}: {0}") + @ArgumentsSource(ClickHouseProvider.class) + void testClickHouseParsing(ParseTestArgument argument) { + testVerifySystemSubtypeParsingOfUrl(argument); + } + + static final class ClickHouseProvider implements ArgumentsProvider { + @Override + public Stream provideArguments(ExtensionContext context) { + return args( + // https://clickhouse.com/docs/integrations/language-clients/java/jdbc#configuration + arg("jdbc:clickhouse:http://localhost:8123/mydb") + .setShortUrl("clickhouse:http://localhost:8123") + .setSystem("clickhouse") + .setSubtype("http") + .setHost("localhost") + .setPort(8123) + .setDb("mydb") + .build(), + arg("jdbc:clickhouse:https://localhost:8443?ssl=true") + .setShortUrl("clickhouse:https://localhost:8443") + .setSystem("clickhouse") + .setSubtype("https") + .setHost("localhost") + .setPort(8443) + .build() + ); + } + } @ParameterizedTest(name = "{index}: {0}") @ArgumentsSource(PostgresProvider.class) From 31a976ae7f5197fc8e308a64e11f0d411e687dca Mon Sep 17 00:00:00 2001 From: otelbot <197425009+otelbot@users.noreply.github.com> Date: Tue, 20 May 2025 14:51:47 +0000 Subject: [PATCH 2/4] ./gradlew spotlessApply --- .../jdbc/internal/JdbcConnectionUrlParserTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java index c3d8ba98f684..4abcd63047b4 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java @@ -206,6 +206,7 @@ public Stream provideArguments(ExtensionContext context) { .build()); } } + @ParameterizedTest(name = "{index}: {0}") @ArgumentsSource(ClickHouseProvider.class) void testClickHouseParsing(ParseTestArgument argument) { @@ -231,8 +232,7 @@ public Stream provideArguments(ExtensionContext context) { .setSubtype("https") .setHost("localhost") .setPort(8443) - .build() - ); + .build()); } } From 54c15807f862776383857a20923598851480073e Mon Sep 17 00:00:00 2001 From: Evgeniy Devyatykh Date: Wed, 21 May 2025 11:46:26 +0500 Subject: [PATCH 3/4] comment about `ch` prefix --- .../jdbc/internal/JdbcConnectionUrlParser.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index b9f8d412c012..99675e1d5e5f 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -893,6 +893,11 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { return builder; } }, + /** + * Driver configuration doc + * mentions that besides clickhouse ch could also be used but ClickHouse Connection implementation + * always returns full prefix jdbc:clickhouse: + */ CLICKHOUSE("clickhouse") { @Override DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { From d1c56f27dc10c7b407ff7d558571264540f22b4f Mon Sep 17 00:00:00 2001 From: otelbot <197425009+otelbot@users.noreply.github.com> Date: Wed, 21 May 2025 06:51:52 +0000 Subject: [PATCH 4/4] ./gradlew spotlessApply --- .../jdbc/internal/JdbcConnectionUrlParser.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java index 99675e1d5e5f..305bfe3a771b 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java @@ -894,9 +894,11 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) { } }, /** - * Driver configuration doc - * mentions that besides clickhouse ch could also be used but ClickHouse Connection implementation - * always returns full prefix jdbc:clickhouse: + * Driver + * configuration doc mentions that besides clickhouse ch could also + * be used but ClickHouse Connection implementation always returns full prefix + * jdbc:clickhouse: */ CLICKHOUSE("clickhouse") { @Override