This is an automated email from the ASF dual-hosted git repository.

namelchev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 2428b23a8d1 IGNITE-21105 Added histogram bounds to the metric command 
output (#11106)
2428b23a8d1 is described below

commit 2428b23a8d135c81d6c042c18742bc10dbbeec8d
Author: Anastasia Iakimova <94782753+nastya...@users.noreply.github.com>
AuthorDate: Wed Dec 20 19:25:51 2023 +0300

    IGNITE-21105 Added histogram bounds to the metric command output (#11106)
---
 .../org/apache/ignite/util/MetricCommandTest.java  | 16 +++++++++---
 .../internal/management/metric/MetricTask.java     | 30 +++++++++++++++++++---
 2 files changed, 39 insertions(+), 7 deletions(-)

diff --git 
a/modules/control-utility/src/test/java/org/apache/ignite/util/MetricCommandTest.java
 
b/modules/control-utility/src/test/java/org/apache/ignite/util/MetricCommandTest.java
index 83ad568fdbe..51c883fb03a 100644
--- 
a/modules/control-utility/src/test/java/org/apache/ignite/util/MetricCommandTest.java
+++ 
b/modules/control-utility/src/test/java/org/apache/ignite/util/MetricCommandTest.java
@@ -27,6 +27,7 @@ import 
org.apache.ignite.internal.management.metric.MetricCommand;
 import org.apache.ignite.internal.processors.metric.MetricRegistry;
 import org.apache.ignite.internal.processors.metric.impl.HistogramMetricImpl;
 import org.apache.ignite.internal.processors.metric.impl.HitRateMetric;
+import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.junit.Test;
 
@@ -37,6 +38,7 @@ import static 
org.apache.ignite.internal.management.SystemViewCommand.COLUMN_SEP
 import static 
org.apache.ignite.internal.processors.metric.GridMetricManager.IGNITE_METRICS;
 import static 
org.apache.ignite.internal.processors.metric.GridMetricManager.SYS_METRICS;
 import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.SEPARATOR;
+import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.histogramBucketNames;
 import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
 import static org.apache.ignite.testframework.GridTestUtils.assertContains;
 import static org.apache.ignite.util.SystemViewCommandTest.NODE_ID;
@@ -256,12 +258,20 @@ public class MetricCommandTest extends 
GridCommandHandlerClusterByClassAbstractT
         assertEquals("1", metric(ignite0, metricName(mregName, 
"histogram_0_50")));
         assertEquals("2", metric(ignite0, metricName(mregName, 
"histogram_50_500")));
         assertEquals("3", metric(ignite0, metricName(mregName, 
"histogram_500_inf")));
-        assertEquals("[1, 2, 3]", metric(ignite0, metricName(mregName, 
"histogram")));
 
         assertEquals("1", metric(ignite0, metricName(mregName, 
"histogram_with_underscore_0_50")));
         assertEquals("2", metric(ignite0, metricName(mregName, 
"histogram_with_underscore_50_500")));
         assertEquals("3", metric(ignite0, metricName(mregName, 
"histogram_with_underscore_500_inf")));
-        assertEquals("[1, 2, 3]", metric(ignite0, metricName(mregName, 
"histogram_with_underscore")));
+
+        Map<String, String> expHistOut = F.asMap(histogram.name(), "[1, 2, 
3]");
+
+        String[] names = histogramBucketNames(histogram);
+
+        for (int i = 0; i < names.length; i++)
+            expHistOut.put(names[i], String.valueOf(histogram.value()[i]));
+
+        assertEqualsMaps(expHistOut, metrics(ignite0, histogram.name()));
+        assertTrue(metrics(ignite0, 
mregName).entrySet().containsAll(expHistOut.entrySet()));
     }
 
     /** */
@@ -448,7 +458,7 @@ public class MetricCommandTest extends 
GridCommandHandlerClusterByClassAbstractT
      */
     private String metric(IgniteEx node, String name) {
         Map<String, String> metrics = metrics(node, name);
-        
+
         assertEquals(1, metrics.size());
         
         return metrics.get(name);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricTask.java
index 570a5c4dc63..c06b0f55709 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricTask.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.management.metric;
 
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
@@ -29,6 +29,7 @@ import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
 import org.apache.ignite.spi.metric.BooleanMetric;
 import org.apache.ignite.spi.metric.DoubleMetric;
+import org.apache.ignite.spi.metric.HistogramMetric;
 import org.apache.ignite.spi.metric.IntMetric;
 import org.apache.ignite.spi.metric.LongMetric;
 import org.apache.ignite.spi.metric.Metric;
@@ -37,6 +38,7 @@ import org.apache.ignite.spi.metric.ReadOnlyMetricRegistry;
 import org.jetbrains.annotations.Nullable;
 
 import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.SEPARATOR;
+import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.histogramBucketNames;
 import static 
org.apache.ignite.spi.metric.jmx.MetricRegistryMBean.searchHistogram;
 
 /** Reperesents visor task for obtaining metric values. */
@@ -92,9 +94,9 @@ public class MetricTask extends 
VisorOneNodeTask<MetricCommandArg, Map<String, ?
                 String mregName = mreg.name();
 
                 if (mregName.equals(name)) {
-                    Map<String, Object> res = new HashMap<>();
+                    Map<String, Object> res = new LinkedHashMap<>();
 
-                    mreg.forEach(metric -> res.put(metric.name(), 
valueOf(metric)));
+                    mreg.forEach(metric -> res.putAll(exportMetric(metric)));
 
                     return res;
                 }
@@ -112,7 +114,7 @@ public class MetricTask extends 
VisorOneNodeTask<MetricCommandArg, Map<String, ?
                 Metric metric = mreg.findMetric(metricName);
 
                 if (metric != null)
-                    return Collections.singletonMap(name, valueOf(metric));
+                    return exportMetric(metric);
 
                 Object val = searchHistogram(metricName, mreg);
 
@@ -143,5 +145,25 @@ public class MetricTask extends 
VisorOneNodeTask<MetricCommandArg, Map<String, ?
 
             throw new IllegalArgumentException("Unknown metric class [class=" 
+ metric.getClass() + ']');
         }
+
+        /** @return The metric value prepared to output. */
+        private Map<String, Object> exportMetric(Metric metric) {
+            if (metric instanceof HistogramMetric) {
+                HistogramMetric hist = (HistogramMetric)metric;
+                String[] names = histogramBucketNames(hist);
+
+                Map<String, Object> res = new LinkedHashMap<>();
+
+                for (int i = 0; i < names.length; i++)
+                    res.put(names[i], hist.value()[i]);
+
+                // For compatibility with old output.
+                res.put(metric.name(), valueOf(metric));
+
+                return res;
+            }
+
+            return Collections.singletonMap(metric.name(), valueOf(metric));
+        }
     }
 }

Reply via email to