From bde40aed53f2dc21c544305a29bc59e4ec703b3a Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Wed, 5 Aug 2015 15:29:09 +0300 Subject: [PATCH 1/3] APIClient: Add a getter for estimated histogram buckets This method returns the estimated histogram buckets. It is based on the module definied in utils.json in the API. Signed-off-by: Amnon Heiman --- .../java/com/cloudius/urchin/api/APIClient.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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); + } } From 0ae282b548181a8e0228c7a7c931da5c13252fa3 Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Wed, 5 Aug 2015 15:31:19 +0300 Subject: [PATCH 2/3] Add the getEstimatedRowSizeHistogram implementation The getEstimatedRowSizeHistogram is based on the column_family.json that defined in the API. The implementation in the MBean and in the metrics is now works with the get histogram as long array method in the client. Signed-off-by: Amnon Heiman --- src/main/java/org/apache/cassandra/db/ColumnFamilyStore.java | 2 +- .../org/apache/cassandra/metrics/ColumnFamilyMetrics.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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..c2193d9 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); } }); From 2cfe02acb8b325bdd0df061defdff9bbe4378685 Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Sun, 9 Aug 2015 14:27:24 +0300 Subject: [PATCH 3/3] LatencyMetrics: Support path parameter This change adds path parameter support, for the cases that the path parameter is the last on the path, for example in the ColumnFamily case Signed-off-by: Amnon Heiman --- .../cassandra/metrics/ColumnFamilyMetrics.java | 8 ++++---- .../apache/cassandra/metrics/LatencyMetrics.java | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java b/src/main/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java index c2193d9..8fa4f9e 100644 --- a/src/main/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java +++ b/src/main/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java @@ -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")); }