Skip to content

Commit 5043b4c

Browse files
committed
Fixed sonar errors
1 parent 1f6606d commit 5043b4c

File tree

4 files changed

+35
-20
lines changed

4 files changed

+35
-20
lines changed

api/src/main/java/io/kafbat/ui/service/metrics/scrape/inferred/InferredMetricsScraper.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class InferredMetricsScraper {
2626
public static final String NODE_ID_TAG = "node_id";
2727
public static final String TOPIC_TAG = "topic";
2828
public static final String GROUP_TAG = "group";
29+
public static final String PARTITION_TAG = "partition";
2930
private ScrapedClusterState prevState = null;
3031

3132
public synchronized Mono<InferredMetrics> scrape(ScrapedClusterState newState) {
@@ -130,36 +131,36 @@ private static void fillTopicMetrics(MetricsRegistry registry, ScrapedClusterSta
130131
state.endOffsets().forEach((partition, endOffset) -> registry.gauge(
131132
"kafka_topic_partition_next_offset",
132133
"Current (next) Offset of a Broker at Topic/Partition",
133-
List.of(TOPIC_TAG, "partition"),
134+
List.of(TOPIC_TAG, PARTITION_TAG),
134135
List.of(topicName, String.valueOf(partition)),
135136
endOffset
136137
));
137138
state.startOffsets().forEach((partition, startOffset) -> registry.gauge(
138139
"kafka_topic_partition_oldest_offset",
139140
"Oldest Offset of a Broker at Topic/Partition",
140-
List.of(TOPIC_TAG, "partition"),
141+
List.of(TOPIC_TAG, PARTITION_TAG),
141142
List.of(topicName, String.valueOf(partition)),
142143
startOffset
143144
));
144145
state.description().partitions().forEach(p -> {
145146
registry.gauge(
146147
"kafka_topic_partition_in_sync_replica",
147148
"Number of In-Sync Replicas for this Topic/Partition",
148-
List.of(TOPIC_TAG, "partition"),
149+
List.of(TOPIC_TAG, PARTITION_TAG),
149150
List.of(topicName, String.valueOf(p.partition())),
150151
p.isr().size()
151152
);
152153
registry.gauge(
153154
"kafka_topic_partition_replicas",
154155
"Number of Replicas for this Topic/Partition",
155-
List.of(TOPIC_TAG, "partition"),
156+
List.of(TOPIC_TAG, PARTITION_TAG),
156157
List.of(topicName, String.valueOf(p.partition())),
157158
p.replicas().size()
158159
);
159160
registry.gauge(
160161
"kafka_topic_partition_leader",
161162
"Leader Broker ID of this Topic/Partition (-1, if no leader)",
162-
List.of(TOPIC_TAG, "partition"),
163+
List.of(TOPIC_TAG, PARTITION_TAG),
163164
List.of(topicName, String.valueOf(p.partition())),
164165
Optional.ofNullable(p.leader()).map(Node::id).orElse(-1)
165166
);
@@ -212,7 +213,7 @@ private static void fillConsumerGroupsMetrics(MetricsRegistry registry, ScrapedC
212213
registry.gauge(
213214
"kafka_consumergroup_current_offset",
214215
"Current Offset of a ConsumerGroup at Topic/Partition",
215-
List.of("consumergroup", TOPIC_TAG, "partition"),
216+
List.of("consumergroup", TOPIC_TAG, PARTITION_TAG),
216217
List.of(groupName, tp.topic(), String.valueOf(tp.partition())),
217218
committedOffset
218219
);
@@ -223,7 +224,7 @@ private static void fillConsumerGroupsMetrics(MetricsRegistry registry, ScrapedC
223224
registry.gauge(
224225
"kafka_consumergroup_lag",
225226
"Current Approximate Lag of a ConsumerGroup at Topic/Partition",
226-
List.of("consumergroup", TOPIC_TAG, "partition"),
227+
List.of("consumergroup", TOPIC_TAG, PARTITION_TAG),
227228
List.of(groupName, tp.topic(), String.valueOf(tp.partition())),
228229
endOffset - committedOffset //TODO: check +-1
229230
));

api/src/main/java/io/kafbat/ui/service/metrics/scrape/jmx/JmxMetricsFormatter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class JmxMetricsFormatter {
1818

1919
// copied from https://github.com/prometheus/jmx_exporter/blob/b6b811b4aae994e812e902b26dd41f29364c0e2b/collector/src/main/java/io/prometheus/jmx/JmxMBeanPropertyCache.java#L15
2020
private static final Pattern PROPERTY_PATTERN = Pattern.compile(
21-
"([^,=:\\*\\?]+)=(\"(?>[^\\\\\"]*(?:\\\\.)?)*\"|[^,=:\"]*)"
21+
"([^,=:\\*\\?]+)=(\"(?:\\\\.|[^\\\\\"])*\"|[^,=:\"]*)"
2222
);
2323

2424
public static List<RawMetric> constructMetricsList(ObjectName jmxMetric,

api/src/main/java/io/kafbat/ui/service/metrics/scrape/jmx/JmxMetricsRetriever.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,35 @@ private void withJmxConnector(String jmxUrl,
7171
MetricsScrapeProperties scrapeProperties,
7272
Consumer<JMXConnector> consumer) {
7373
var env = prepareJmxEnvAndSetThreadLocal(scrapeProperties);
74-
try (JMXConnector connector = JMXConnectorFactory.newJMXConnector(new JMXServiceURL(jmxUrl), env)) {
75-
try {
76-
connector.connect(env);
77-
} catch (Exception exception) {
78-
log.error("Error connecting to {}", jmxUrl, exception);
74+
JMXServiceURL serviceUrl;
75+
try {
76+
serviceUrl = new JMXServiceURL(jmxUrl);
77+
} catch (java.net.MalformedURLException e) {
78+
log.error("Malformed JMX URL: {}", jmxUrl, e);
79+
return;
80+
}
81+
try (JMXConnector connector = JMXConnectorFactory.newJMXConnector(serviceUrl, env)) {
82+
if (!tryConnect(connector, env, jmxUrl)) {
7983
return;
8084
}
8185
consumer.accept(connector);
82-
} catch (Exception e) {
83-
log.error("Error getting jmx metrics from {}", jmxUrl, e);
86+
} catch (Exception connectorException) {
87+
log.error("Error getting jmx metrics from {}", jmxUrl, connectorException);
8488
} finally {
8589
JmxSslSocketFactory.clearThreadLocalContext();
8690
}
8791
}
8892

93+
private boolean tryConnect(JMXConnector connector, Map<String, ?> env, String jmxUrl) {
94+
try {
95+
connector.connect(env);
96+
return true;
97+
} catch (Exception connectException) {
98+
log.error("Error connecting to {}", jmxUrl, connectException);
99+
return false;
100+
}
101+
}
102+
89103
private Map<String, Object> prepareJmxEnvAndSetThreadLocal(MetricsScrapeProperties scrapeProperties) {
90104
Map<String, Object> env = new HashMap<>();
91105
if (isSslJmxEndpoint(scrapeProperties)) {

api/src/main/java/io/kafbat/ui/service/metrics/scrape/prometheus/PrometheusTextFormatParser.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ public class PrometheusTextFormatParser {
3939
// Regex to capture metric name, optional labels, value, and optional timestamp.
4040
// Groups: 1=name, 2=labels (content), 3=value, 4=timestamp
4141
private static final Pattern METRIC_LINE_PATTERN = Pattern.compile(
42-
"^([a-zA-Z_:][a-zA-Z0-9_:]*)" + // Metric name
43-
"(?:\\{(?>[^}]*)\\})?" + // Optional labels (atomic group)
44-
"\\s+" +
45-
"(-?(?:Inf|NaN|(?:\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)))" + // Metric value
46-
"(?:\\s+([0-9]+))?$" // Optional timestamp
42+
"^([a-zA-Z_:][a-zA-Z0-9_:]*)" // Metric name
43+
+ "(?:\\{(?>[^}]*)\\})?" // Optional labels (atomic group)
44+
+ "\\s+"
45+
+ "(-?(?:Inf|NaN|(?:\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)))" // Metric value
46+
+ "(?:\\s+([0-9]+))?$" // Optional timestamp
4747
); // Group 4: Optional timestamp
4848

4949

0 commit comments

Comments
 (0)