dsmiley commented on code in PR #3499:
URL: https://github.com/apache/solr/pull/3499#discussion_r2302121257
##########
solr/core/src/java/org/apache/solr/handler/admin/MetricsHandler.java:
##########
@@ -151,6 +171,58 @@ private void handleRequest(SolrParams params,
BiConsumer<String, Object> consume
consumer.accept("metrics", response);
}
+ private void handlePrometheusRequest(SolrParams params, BiConsumer<String,
Object> consumer) {
+ Set<String> metricNames = readParamsAsSet(params, METRIC_NAME_PARAM);
+ SortedMap<String, Set<String>> labelFilters = labelFilters(params);
+
+ if (metricNames.isEmpty() && labelFilters.isEmpty()) {
+ consumer.accept(
+ "metrics",
+ mergeSnapshots(
+ metricManager.getPrometheusMetricReaders().values().stream()
+ .flatMap(r -> r.collect().stream())
+ .toList()));
+ return;
+ }
+
+ List<MetricSnapshot> allSnapshots = new ArrayList<>();
+ for (FilterablePrometheusMetricReader reader :
+ metricManager.getPrometheusMetricReaders().values()) {
+ MetricSnapshots filteredSnapshots = reader.collect(metricNames,
labelFilters);
+ filteredSnapshots.forEach(allSnapshots::add);
+ }
+
+ // Merge all filtered snapshots and return the merged result
+ MetricSnapshots mergedSnapshots = mergeSnapshots(allSnapshots);
+ consumer.accept("metrics", mergedSnapshots);
+ }
+
+ private SortedMap<String, Set<String>> labelFilters(SolrParams params) {
+ SortedMap<String, Set<String>> labelFilters = new TreeMap<>();
+ labelFilterKeys.forEach(
+ (paramName) -> {
+ Set<String> filterValues = readParamsAsSet(params, paramName);
+ if (!filterValues.isEmpty()) {
+ labelFilters.put(paramName, filterValues);
+ }
+ });
+
+ return labelFilters;
+ }
+
+ private Set<String> readParamsAsSet(SolrParams params, String paramName) {
+ String[] paramValues = params.getParams(paramName);
+ if (paramValues == null || paramValues.length == 0) {
+ return Set.of();
+ }
+
+ Set<String> paramSet = new HashSet<>();
Review Comment:
This can merely be a List. `Set.copyOf` will do the deduplication _again_.
It accepts a Collection.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]