From 4f2a1b0deb3dfb271696d6cd76125102b3f788ef Mon Sep 17 00:00:00 2001 From: Hilbrand Bouwkamp Date: Thu, 11 Jun 2026 11:23:48 +0200 Subject: [PATCH] Fix for adding usage metrics The metrics were put in the same map, thereby overriding previous added metrics for the same worker queue. --- .../taskmanager/metrics/UsageMetricsReporter.java | 15 +++++++++------ .../PriorityTaskSchedulerMetrics.java | 7 ++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/source/taskmanager/src/main/java/nl/aerius/taskmanager/metrics/UsageMetricsReporter.java b/source/taskmanager/src/main/java/nl/aerius/taskmanager/metrics/UsageMetricsReporter.java index b6241ee..36789ae 100644 --- a/source/taskmanager/src/main/java/nl/aerius/taskmanager/metrics/UsageMetricsReporter.java +++ b/source/taskmanager/src/main/java/nl/aerius/taskmanager/metrics/UsageMetricsReporter.java @@ -16,8 +16,11 @@ */ package nl.aerius.taskmanager.metrics; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.function.DoubleSupplier; import org.slf4j.Logger; @@ -38,7 +41,7 @@ class UsageMetricsReporter { private record UsageMetric(DoubleSupplier metricSupplier, Attributes attributes) {} - private final Map metricsMap = new HashMap<>(); + private final Map> metricsMap = new HashMap<>(); private final ObservableDoubleGauge gauge; public UsageMetricsReporter(final Meter meter, final String metricName, final String description) { @@ -49,12 +52,12 @@ public UsageMetricsReporter(final Meter meter, final String metricName, final St } private void recordMetrics(final ObservableDoubleMeasurement measurement) { - for (final Map.Entry entry : metricsMap.entrySet()) { - final UsageMetric metric = entry.getValue(); + for (final Entry> workerMetrics : metricsMap.entrySet()) { + for (final UsageMetric metric : workerMetrics.getValue()) { - measurement.record(metric.metricSupplier().getAsDouble(), metric.attributes()); + measurement.record(metric.metricSupplier().getAsDouble(), metric.attributes()); + } } - LOG.debug("Workload for {}", measurement); } /** @@ -65,7 +68,7 @@ private void recordMetrics(final ObservableDoubleMeasurement measurement) { * @param attributes attributes for the metric */ public void addMetrics(final String workerQueueName, final DoubleSupplier metricSupplier, final Attributes attributes) { - metricsMap.put(workerQueueName, new UsageMetric(metricSupplier, attributes)); + metricsMap.computeIfAbsent(workerQueueName, k -> new ArrayList<>()).add(new UsageMetric(metricSupplier, attributes)); } /** diff --git a/source/taskmanager/src/main/java/nl/aerius/taskmanager/scheduler/priorityqueue/PriorityTaskSchedulerMetrics.java b/source/taskmanager/src/main/java/nl/aerius/taskmanager/scheduler/priorityqueue/PriorityTaskSchedulerMetrics.java index 37e067e..0fb15ea 100644 --- a/source/taskmanager/src/main/java/nl/aerius/taskmanager/scheduler/priorityqueue/PriorityTaskSchedulerMetrics.java +++ b/source/taskmanager/src/main/java/nl/aerius/taskmanager/scheduler/priorityqueue/PriorityTaskSchedulerMetrics.java @@ -65,10 +65,11 @@ public void addMetric(final IntSupplier countSupplier, final String workerQueueN } /** + * Adds collecting metrics to count the number of tasks waiting on the client queue. * - * @param countSupplier - * @param workerQueueName - * @param clientQueueName + * @param countSupplier supplier that returns the active count for the given client queue name when called + * @param workerQueueName worker queue name + * @param clientQueueName client queue name */ public void addMetricWaiting(final IntSupplier countSupplier, final String workerQueueName, final String clientQueueName) { waitingMetrics.put(clientQueueName, OpenTelemetryMetrics.METER