From c6aee9f63ee3a285cb44a8c5c48dc34137cd4e51 Mon Sep 17 00:00:00 2001 From: Calle Wilund Date: Wed, 1 Aug 2018 08:45:45 +0000 Subject: [PATCH] scylla-jmx: Add "PendingTasksByTableName" gauge to CompactionMetrics Required by origin 3.11 nodetool. Message-Id: <20180801084545.23239-1-calle@scylladb.com> --- .../cassandra/metrics/CompactionMetrics.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/cassandra/metrics/CompactionMetrics.java b/src/main/java/org/apache/cassandra/metrics/CompactionMetrics.java index afd53d3..b25ad37 100644 --- a/src/main/java/org/apache/cassandra/metrics/CompactionMetrics.java +++ b/src/main/java/org/apache/cassandra/metrics/CompactionMetrics.java @@ -23,6 +23,11 @@ */ package org.apache.cassandra.metrics; +import java.util.HashMap; +import java.util.Map; + +import javax.json.JsonArray; +import javax.json.JsonObject; import javax.management.MalformedObjectNameException; /** @@ -47,6 +52,25 @@ public class CompactionMetrics implements Metrics { /** Total number of bytes compacted since server [re]start */ registry.register(() -> registry.meter("/compaction_manager/metrics/bytes_compacted"), factory.createMetricName("BytesCompacted")); - } + registry.register(() -> registry.gauge((client) -> { + Map> result = new HashMap<>(); + JsonArray compactions = client.getJsonArray("compaction_manager/compactions"); + + for (int i = 0; i < compactions.size(); i++) { + JsonObject c = compactions.getJsonObject(i); + + String ks = c.getString("ks"); + String cf = c.getString("cf"); + + if (!result.containsKey(ks)) { + result.put(ks, new HashMap<>()); + } + + Map map = result.get(ks); + map.put(cf, (int)(c.getJsonNumber("total").longValue() - c.getJsonNumber("completed").longValue())); + } + return result; + }), factory.createMetricName("PendingTasksByTableName")); + } }