diff --git a/src/main/java/com/cloudius/urchin/api/APIClient.java b/src/main/java/com/cloudius/urchin/api/APIClient.java index 08b60b0..bbb9171 100644 --- a/src/main/java/com/cloudius/urchin/api/APIClient.java +++ b/src/main/java/com/cloudius/urchin/api/APIClient.java @@ -539,4 +539,19 @@ public class APIClient { public HistogramValues getHistogramValue(String url) { return getHistogramValue(url, null); } + + public long[] getEstimatedHistogramAsLongArrValue(String string, + MultivaluedMap queryParams) { + JsonObject obj = getJsonObj(string, queryParams); + JsonArray arr = obj.getJsonArray("buckets"); + long res[] = new long[arr.size()]; + for (int i = 0; i< arr.size(); i++) { + res[i] = arr.getJsonNumber(i).longValue(); + } + return res; + } + + public long[] getEstimatedHistogramAsLongArrValue(String string) { + return getEstimatedHistogramAsLongArrValue(string, null); + } } diff --git a/src/main/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/main/java/org/apache/cassandra/db/ColumnFamilyStore.java index 7294d74..fe9e9aa 100644 --- a/src/main/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/main/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -584,7 +584,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean { @Deprecated public long[] getEstimatedRowSizeHistogram() { log(" getEstimatedRowSizeHistogram()"); - return c.getLongArrValue(""); + return c.getEstimatedHistogramAsLongArrValue("/column_family/metrics/estimated_row_size_histogram/" + getCFName()); } /** diff --git a/src/main/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java b/src/main/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java index 5f3cd91..8fa4f9e 100644 --- a/src/main/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java +++ b/src/main/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java @@ -225,7 +225,7 @@ public class ColumnFamilyMetrics { factory.createMetricName("EstimatedRowSizeHistogram"), new Gauge() { public long[] value() { - return c.getLongArrValue("/column_family/metrics/estimated_row_size_histogram/" + return c.getEstimatedHistogramAsLongArrValue("/column_family/metrics/estimated_row_size_histogram/" + cfName); } }); @@ -233,7 +233,7 @@ public class ColumnFamilyMetrics { factory.createMetricName("EstimatedColumnCountHistogram"), new Gauge() { public long[] value() { - return c.getLongArrValue("/column_family/metrics/estimated_column_count_histogram/" + return c.getEstimatedHistogramAsLongArrValue("/column_family/metrics/estimated_column_count_histogram/" + cfName); } }); @@ -252,13 +252,13 @@ public class ColumnFamilyMetrics { return c.getDoubleValue("/column_family/metrics/compression_ratio/"); } }); - readLatency = new LatencyMetrics("/column_family/metrics/read_latency/" - + cfName, factory, "Read"); + readLatency = new LatencyMetrics("/column_family/metrics/read_latency", + cfName, factory, "Read"); writeLatency = new LatencyMetrics( - "/column_family/metrics/write_latency/" + cfName, factory, + "/column_family/metrics/write_latency", cfName, factory, "Write"); rangeLatency = new LatencyMetrics( - "/column_family/metrics/range_latency/" + cfName, factory, + "/column_family/metrics/range_latency", cfName, factory, "Range"); pendingFlushes = createColumnFamilyCounter( "/column_family/metrics/pending_flushes", "PendingFlushes"); diff --git a/src/main/java/org/apache/cassandra/metrics/LatencyMetrics.java b/src/main/java/org/apache/cassandra/metrics/LatencyMetrics.java index 9fc4c24..27e7a8c 100644 --- a/src/main/java/org/apache/cassandra/metrics/LatencyMetrics.java +++ b/src/main/java/org/apache/cassandra/metrics/LatencyMetrics.java @@ -102,6 +102,18 @@ public class LatencyMetrics { factory.createMetricName(namePrefix + "TotalLatency")); } + public LatencyMetrics(String url, String paramName, + MetricNameFactory factory, String namePrefix) { + this.factory = factory; + this.namePrefix = namePrefix; + + latency = APIMetrics.newTimer(url + "/histogram/" + paramName, + factory.createMetricName(namePrefix + "Latency"), + TimeUnit.MICROSECONDS, TimeUnit.SECONDS); + totalLatency = APIMetrics.newCounter(url + "/" + paramName, + factory.createMetricName(namePrefix + "TotalLatency")); + } + /** * Create LatencyMetrics with given group, type, prefix to append to each * metric name, and scope. Any updates to this will also run on parent @@ -130,8 +142,8 @@ public class LatencyMetrics { } public void release() { - APIMetrics.defaultRegistry().removeMetric( - factory.createMetricName(namePrefix + "Latency")); + APIMetrics.defaultRegistry() + .removeMetric(factory.createMetricName(namePrefix + "Latency")); APIMetrics.defaultRegistry().removeMetric( factory.createMetricName(namePrefix + "TotalLatency")); }