Browse Source

AMBARI-20913 : Grafana LLAP overview dashboard showing incorrect metrics. (avijayan)

Aravindan Vijayan 8 năm trước cách đây
mục cha
commit
731b1a06b9

+ 9 - 2
ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/aggregators/TimelineMetricClusterAggregator.java

@@ -91,6 +91,7 @@ public class TimelineMetricClusterAggregator extends AbstractTimelineAggregator
     MetricHostAggregate hostAggregate = null;
     Map<TimelineClusterMetric, MetricHostAggregate> hostAggregateMap =
       new HashMap<TimelineClusterMetric, MetricHostAggregate>();
+    int perMetricCount = 0;
 
     while (rs.next()) {
       TimelineClusterMetric currentMetric = readHelper.fromResultSet(rs);
@@ -106,14 +107,20 @@ public class TimelineMetricClusterAggregator extends AbstractTimelineAggregator
         currentMetric.setTimestamp(endTime);
         hostAggregate = new MetricHostAggregate();
         hostAggregateMap.put(currentMetric, hostAggregate);
+        perMetricCount++;
       }
 
       if (existingMetric.equalsExceptTime(currentMetric)) {
         // Recalculate totals with current metric
         updateAggregatesFromHost(hostAggregate, currentHostAggregate);
-
+        perMetricCount++;
       } else {
-        // Switched over to a new metric - save existing
+        // Switched over to a new metric - save new metric
+
+        hostAggregate.setSum(hostAggregate.getSum() / perMetricCount);
+        hostAggregate.setNumberOfSamples(Math.round((float)hostAggregate.getNumberOfSamples() / (float)perMetricCount));
+        perMetricCount = 1;
+
         hostAggregate = new MetricHostAggregate();
         currentMetric.setTimestamp(endTime);
         updateAggregatesFromHost(hostAggregate, currentHostAggregate);

+ 4 - 4
ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/aggregators/ITClusterAggregator.java

@@ -659,14 +659,14 @@ public class ITClusterAggregator extends AbstractMiniHBaseClusterTest {
     while (rs.next()) {
       if ("disk_used".equals(rs.getString("METRIC_NAME"))) {
         assertEquals("APP_ID", "test_app", rs.getString("APP_ID"));
-        assertEquals("METRIC_SUM", 16.0, rs.getDouble("METRIC_SUM"));
-        assertEquals("METRIC_COUNT", 8, rs.getLong("METRIC_COUNT"));
+        assertEquals("METRIC_SUM", 4.0, rs.getDouble("METRIC_SUM"));
+        assertEquals("METRIC_COUNT", 2, rs.getLong("METRIC_COUNT"));
         assertEquals("METRIC_MAX", 4.0, rs.getDouble("METRIC_MAX"));
         assertEquals("METRIC_MIN", 0.0, rs.getDouble("METRIC_MIN"));
       } else if ("disk_free".equals(rs.getString("METRIC_NAME"))) {
         assertEquals("APP_ID", "test_app", rs.getString("APP_ID"));
-        assertEquals("METRIC_SUM", 4.0, rs.getDouble("METRIC_SUM"));
-        assertEquals("METRIC_COUNT", 8, rs.getLong("METRIC_COUNT"));
+        assertEquals("METRIC_SUM", 1.0, rs.getDouble("METRIC_SUM"));
+        assertEquals("METRIC_COUNT", 2, rs.getLong("METRIC_COUNT"));
         assertEquals("METRIC_MAX", 1.0, rs.getDouble("METRIC_MAX"));
         assertEquals("METRIC_MIN", 1.0, rs.getDouble("METRIC_MIN"));
       }