|
9 | 9 | import java.net.URLEncoder; |
10 | 10 | import java.nio.charset.Charset; |
11 | 11 | import java.nio.charset.StandardCharsets; |
12 | | -import java.util.Collections; |
13 | | -import java.util.HashSet; |
14 | | -import java.util.LinkedHashMap; |
15 | | -import java.util.List; |
16 | | -import java.util.Locale; |
17 | | -import java.util.Map; |
18 | | -import java.util.Optional; |
| 12 | +import java.util.*; |
19 | 13 | import java.util.Map.Entry; |
20 | | -import java.util.Set; |
21 | 14 |
|
22 | 15 | import com.clickhouse.client.ClickHouseClient; |
23 | 16 | import com.clickhouse.client.ClickHouseConfig; |
@@ -417,10 +410,23 @@ protected String getDefaultUserAgent() { |
417 | 410 | return config.getClientName(); |
418 | 411 | } |
419 | 412 |
|
| 413 | + protected String getAdditionalFrameworkUserAgent() { |
| 414 | + List<String> frameworks = List.of("apache.spark"); |
| 415 | + Set<String> inferredFrameworks = new LinkedHashSet<>(); |
| 416 | + for (StackTraceElement ste : Thread.currentThread().getStackTrace()) { |
| 417 | + for (String framework : frameworks) { |
| 418 | + if (ste.toString().contains(framework)) { |
| 419 | + inferredFrameworks.add(String.format("(%s)", framework)); |
| 420 | + } |
| 421 | + } |
| 422 | + } |
| 423 | + return String.join("; ", inferredFrameworks); |
| 424 | + } |
| 425 | + |
420 | 426 | protected final String getUserAgent() { |
421 | 427 | final ClickHouseConfig c = config; |
422 | 428 | String name = c.getClientName(); |
423 | | - String userAgent = getDefaultUserAgent(); |
| 429 | + String userAgent = getDefaultUserAgent() + getAdditionalFrameworkUserAgent(); |
424 | 430 |
|
425 | 431 | if (!ClickHouseClientOption.CLIENT_NAME.getDefaultValue().equals(name)) { |
426 | 432 | return name + " " + userAgent; |
|
0 commit comments