Browse Source

AMBARI-13543. Redundant metrics in exported CSV and JSON files for Flume graphs

Alex Antonenko 9 years ago
parent
commit
6a10db2b6c

+ 6 - 0
ambari-web/app/assets/test/tests.js

@@ -257,6 +257,12 @@ var files = [
   'test/views/main/service/info/config_test',
   'test/views/main/service/info/config_test',
   'test/views/main/service/info/summary_test',
   'test/views/main/service/info/summary_test',
   'test/views/main/service/info/metrics/ambari_metrics/regionserver_base_test',
   'test/views/main/service/info/metrics/ambari_metrics/regionserver_base_test',
+  'test/views/main/service/info/metrics/flume/channel_size_mma_test',
+  'test/views/main/service/info/metrics/flume/channel_sum_test',
+  'test/views/main/service/info/metrics/flume/flume_incoming_mma_test',
+  'test/views/main/service/info/metrics/flume/flume_incoming_sum_test',
+  'test/views/main/service/info/metrics/flume/flume_outgoing_mma_test',
+  'test/views/main/service/info/metrics/flume/flume_outgoing_sum_test',
   'test/views/main/service/services/ranger_test',
   'test/views/main/service/services/ranger_test',
   'test/views/main/service/widgets/create/expression_view_test',
   'test/views/main/service/widgets/create/expression_view_test',
   'test/views/main/admin/highAvailability/nameNode/step1_view_test',
   'test/views/main/admin/highAvailability/nameNode/step1_view_test',

+ 16 - 0
ambari-web/app/utils/ajax/ajax.js

@@ -970,6 +970,12 @@ var urls = {
   'service.metrics.flume.channel_size_for_all': {
   'service.metrics.flume.channel_size_for_all': {
     'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/ChannelSize/rate[{fromSeconds},{toSeconds},{stepSeconds}]'
     'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/ChannelSize/rate[{fromSeconds},{toSeconds},{stepSeconds}]'
   },
   },
+  'service.metrics.flume.channel_size_for_all.mma': {
+    'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/ChannelSize/rate/avg[{fromSeconds},{toSeconds},{stepSeconds}],metrics/flume/flume/CHANNEL/ChannelSize/rate/max[{fromSeconds},{toSeconds},{stepSeconds}],metrics/flume/flume/CHANNEL/ChannelSize/rate/min[{fromSeconds},{toSeconds},{stepSeconds}]'
+  },
+  'service.metrics.flume.channel_size_for_all.sum': {
+    'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/ChannelSize/rate/sum[{fromSeconds},{toSeconds},{stepSeconds}]'
+  },
   'service.metrics.flume.gc': {
   'service.metrics.flume.gc': {
     'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=host_components/metrics/jvm/gcTimeMillis[{fromSeconds},{toSeconds},{stepSeconds}]',
     'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=host_components/metrics/jvm/gcTimeMillis[{fromSeconds},{toSeconds},{stepSeconds}]',
     'mock': '/data/services/metrics/flume/jvmGcTime.json',
     'mock': '/data/services/metrics/flume/jvmGcTime.json',
@@ -992,10 +998,20 @@ var urls = {
   },
   },
   'service.metrics.flume.incoming_event_put_successCount': {
   'service.metrics.flume.incoming_event_put_successCount': {
     'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate[{fromSeconds},{toSeconds},{stepSeconds}]'
     'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate[{fromSeconds},{toSeconds},{stepSeconds}]'
+  },'service.metrics.flume.incoming_event_put_successCount.mma': {
+    'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate/avg[{fromSeconds},{toSeconds},{stepSeconds}],metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate/max[{fromSeconds},{toSeconds},{stepSeconds}],metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate/min[{fromSeconds},{toSeconds},{stepSeconds}]'
+  },'service.metrics.flume.incoming_event_put_successCount.sum': {
+    'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate/sum[{fromSeconds},{toSeconds},{stepSeconds}]'
   },
   },
   'service.metrics.flume.outgoing_event_take_success_count': {
   'service.metrics.flume.outgoing_event_take_success_count': {
     'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate[{fromSeconds},{toSeconds},{stepSeconds}]'
     'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate[{fromSeconds},{toSeconds},{stepSeconds}]'
   },
   },
+  'service.metrics.flume.outgoing_event_take_success_count.mma': {
+    'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate/avg[{fromSeconds},{toSeconds},{stepSeconds}],metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate/max[{fromSeconds},{toSeconds},{stepSeconds}],metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate/min[{fromSeconds},{toSeconds},{stepSeconds}]'
+  },
+  'service.metrics.flume.outgoing_event_take_success_count.sum': {
+    'real': '/clusters/{clusterName}/services/FLUME/components/FLUME_HANDLER?fields=metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate/sum[{fromSeconds},{toSeconds},{stepSeconds}]'
+  },
   'service.metrics.hbase.cluster_requests': {
   'service.metrics.hbase.cluster_requests': {
     'real': '/clusters/{clusterName}/services/HBASE/components/HBASE_MASTER?fields=metrics/hbase/master/cluster_requests[{fromSeconds},{toSeconds},{stepSeconds}]',
     'real': '/clusters/{clusterName}/services/HBASE/components/HBASE_MASTER?fields=metrics/hbase/master/cluster_requests[{fromSeconds},{toSeconds},{stepSeconds}]',
     'mock': '/data/services/metrics/hbase/cluster_requests.json',
     'mock': '/data/services/metrics/hbase/cluster_requests.json',

+ 8 - 9
ambari-web/app/views/main/service/info/metrics/flume/channel_size_mma.js

@@ -30,22 +30,21 @@ App.ChartServiceMetricsFlume_ChannelSizeMMA = App.ChartLinearTimeView.extend({
   id: "service-metrics-flume-channel-size-mma",
   id: "service-metrics-flume-channel-size-mma",
   title: Em.I18n.t('services.service.info.metrics.flume.channelSizeMMA'),
   title: Em.I18n.t('services.service.info.metrics.flume.channelSizeMMA'),
   renderer: 'line',
   renderer: 'line',
-  ajaxIndex: 'service.metrics.flume.channel_size_for_all',
+  ajaxIndex: 'service.metrics.flume.channel_size_for_all.mma',
   yAxisFormatter: App.ChartLinearTimeView.CreateRateFormatter('',
   yAxisFormatter: App.ChartLinearTimeView.CreateRateFormatter('',
     App.ChartLinearTimeView.DefaultFormatter),
     App.ChartLinearTimeView.DefaultFormatter),
 
 
   transformToSeries: function (jsonData) {
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     var seriesArray = [];
     var self = this;
     var self = this;
+    var data = Em.get(jsonData, 'metrics.flume.flume.CHANNEL.ChannelSize.rate');
 
 
-    if (Em.get(jsonData, "metrics.flume.flume.CHANNEL.ChannelSize.rate")) {
-      for ( var cname in jsonData.metrics.flume.flume.CHANNEL.ChannelSize.rate) {
-        if(cname != "sum"){
-          var seriesName = Em.I18n.t('services.service.info.metrics.flume.channelType').format(cname);
-          var seriesData = jsonData.metrics.flume.flume.CHANNEL.ChannelSize.rate[cname];
-          if (seriesData) {
-            seriesArray.push(self.transformData(seriesData, seriesName));
-          }
+    if (data) {
+      for (var cname in data) {
+        var seriesName = Em.I18n.t('services.service.info.metrics.flume.channelType').format(cname);
+        var seriesData = data[cname];
+        if (seriesData) {
+          seriesArray.push(self.transformData(seriesData, seriesName));
         }
         }
       }
       }
     }
     }

+ 4 - 6
ambari-web/app/views/main/service/info/metrics/flume/channel_sum.js

@@ -31,17 +31,15 @@ App.ChartServiceMetricsFlume_ChannelSizeSum = App.ChartLinearTimeView.extend({
   title: Em.I18n.t('services.service.info.metrics.flume.channelSizeSum'),
   title: Em.I18n.t('services.service.info.metrics.flume.channelSizeSum'),
   yAxisFormatter: App.ChartLinearTimeView.BytesFormatter,
   yAxisFormatter: App.ChartLinearTimeView.BytesFormatter,
 
 
-  ajaxIndex: 'service.metrics.flume.channel_size_for_all',
+  ajaxIndex: 'service.metrics.flume.channel_size_for_all.sum',
 
 
   transformToSeries: function (jsonData) {
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     var seriesArray = [];
     var self = this;
     var self = this;
-    if(Em.get(jsonData, "metrics.flume.flume.CHANNEL.ChannelSize.rate.sum")){
+    var seriesData = Em.get(jsonData, 'metrics.flume.flume.CHANNEL.ChannelSize.rate.sum');
+    if (seriesData) {
       var seriesName = Em.I18n.t('services.service.info.metrics.flume.channelSizeSum');
       var seriesName = Em.I18n.t('services.service.info.metrics.flume.channelSizeSum');
-      var seriesData = jsonData.metrics.flume.flume.CHANNEL.ChannelSize.rate.sum;
-      if (seriesData) {
-        seriesArray.push(self.transformData(seriesData, seriesName));
-      }
+      seriesArray.push(self.transformData(seriesData, seriesName));
     }
     }
     return seriesArray;
     return seriesArray;
   }
   }

+ 8 - 9
ambari-web/app/views/main/service/info/metrics/flume/flume_incoming_mma.js

@@ -30,22 +30,21 @@ App.ChartServiceMetricsFlume_IncommingMMA = App.ChartLinearTimeView.extend({
   renderer: 'line',
   renderer: 'line',
   title: Em.I18n.t('services.service.info.metrics.flume.incoming.mma'),
   title: Em.I18n.t('services.service.info.metrics.flume.incoming.mma'),
 
 
-  ajaxIndex: 'service.metrics.flume.incoming_event_put_successCount',
+  ajaxIndex: 'service.metrics.flume.incoming_event_put_successCount.mma',
   yAxisFormatter: App.ChartLinearTimeView.CreateRateFormatter('',
   yAxisFormatter: App.ChartLinearTimeView.CreateRateFormatter('',
       App.ChartLinearTimeView.DefaultFormatter),
       App.ChartLinearTimeView.DefaultFormatter),
 
 
   transformToSeries: function (jsonData) {
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     var seriesArray = [];
     var self = this;
     var self = this;
+    var data = Em.get(jsonData, 'metrics.flume.flume.CHANNEL.EventPutSuccessCount.rate');
 
 
-    if (Em.get(jsonData, "metrics.flume.flume.CHANNEL.EventPutSuccessCount.rate")) {
-      for ( var cname in jsonData.metrics.flume.flume.CHANNEL.EventPutSuccessCount.rate) {
-        if(cname != "sum"){
-          var seriesName = Em.I18n.t('services.service.info.metrics.flume.incoming_mma').format(cname);
-          var seriesData = jsonData.metrics.flume.flume.CHANNEL.EventPutSuccessCount.rate[cname];
-          if (seriesData) {
-            seriesArray.push(self.transformData(seriesData, seriesName));
-          }
+    if (data) {
+      for (var cname in data) {
+        var seriesName = Em.I18n.t('services.service.info.metrics.flume.incoming_mma').format(cname);
+        var seriesData = data[cname];
+        if (seriesData) {
+          seriesArray.push(self.transformData(seriesData, seriesName));
         }
         }
       }
       }
     }
     }

+ 4 - 6
ambari-web/app/views/main/service/info/metrics/flume/flume_incoming_sum.js

@@ -29,17 +29,15 @@ App.ChartServiceMetricsFlume_IncommingSum = App.ChartLinearTimeView.extend({
   id: "service-metrics-flume-incoming_sum",
   id: "service-metrics-flume-incoming_sum",
   title: Em.I18n.t('services.service.info.metrics.flume.incoming.sum'),
   title: Em.I18n.t('services.service.info.metrics.flume.incoming.sum'),
 
 
-  ajaxIndex: 'service.metrics.flume.incoming_event_put_successCount',
+  ajaxIndex: 'service.metrics.flume.incoming_event_put_successCount.sum',
 
 
   transformToSeries: function (jsonData) {
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     var seriesArray = [];
     var self = this;
     var self = this;
-    if(Em.get(jsonData, "metrics.flume.flume.CHANNEL.EventPutSuccessCount.rate.sum")){
+    var seriesData = Em.get(jsonData, 'metrics.flume.flume.CHANNEL.EventPutSuccessCount.rate.sum');
+    if (seriesData) {
       var seriesName = Em.I18n.t('services.service.info.metrics.flume.incoming.sum');
       var seriesName = Em.I18n.t('services.service.info.metrics.flume.incoming.sum');
-      var seriesData = jsonData.metrics.flume.flume.CHANNEL.EventPutSuccessCount.rate.sum;
-      if (seriesData) {
-        seriesArray.push(self.transformData(seriesData, seriesName));
-      }
+      seriesArray.push(self.transformData(seriesData, seriesName));
     }
     }
     return seriesArray;
     return seriesArray;
   }
   }

+ 8 - 9
ambari-web/app/views/main/service/info/metrics/flume/flume_outgoing_mma.js

@@ -30,22 +30,21 @@ App.ChartServiceMetricsFlume_OutgoingMMA = App.ChartLinearTimeView.extend({
   renderer: 'line',
   renderer: 'line',
   title: Em.I18n.t('services.service.info.metrics.flume.outgoing.mma'),
   title: Em.I18n.t('services.service.info.metrics.flume.outgoing.mma'),
 
 
-  ajaxIndex: 'service.metrics.flume.outgoing_event_take_success_count',
+  ajaxIndex: 'service.metrics.flume.outgoing_event_take_success_count.mma',
   yAxisFormatter: App.ChartLinearTimeView.CreateRateFormatter('',
   yAxisFormatter: App.ChartLinearTimeView.CreateRateFormatter('',
       App.ChartLinearTimeView.DefaultFormatter),
       App.ChartLinearTimeView.DefaultFormatter),
 
 
   transformToSeries: function (jsonData) {
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     var seriesArray = [];
     var self = this;
     var self = this;
+    var data = Em.get(jsonData, 'metrics.flume.flume.CHANNEL.EventTakeSuccessCount.rate');
 
 
-    if (Em.get(jsonData, "metrics.flume.flume.CHANNEL.EventTakeSuccessCount.rate")) {
-      for ( var cname in jsonData.metrics.flume.flume.CHANNEL.EventTakeSuccessCount.rate) {
-        if(cname != "sum"){
-          var seriesName = Em.I18n.t('services.service.info.metrics.flume.outgoing_mma').format(cname);
-          var seriesData = jsonData.metrics.flume.flume.CHANNEL.EventTakeSuccessCount.rate[cname];
-          if (seriesData) {
-            seriesArray.push(self.transformData(seriesData, seriesName));
-          }
+    if (data) {
+      for (var cname in data) {
+        var seriesName = Em.I18n.t('services.service.info.metrics.flume.outgoing_mma').format(cname);
+        var seriesData = data[cname];
+        if (seriesData) {
+          seriesArray.push(self.transformData(seriesData, seriesName));
         }
         }
       }
       }
     }
     }

+ 4 - 6
ambari-web/app/views/main/service/info/metrics/flume/flume_outgoing_sum.js

@@ -29,17 +29,15 @@ App.ChartServiceMetricsFlume_OutgoingSum = App.ChartLinearTimeView.extend({
   id: "service-metrics-flume-outgoing_sum",
   id: "service-metrics-flume-outgoing_sum",
   title: Em.I18n.t('services.service.info.metrics.flume.outgoing.sum'),
   title: Em.I18n.t('services.service.info.metrics.flume.outgoing.sum'),
 
 
-  ajaxIndex: 'service.metrics.flume.outgoing_event_take_success_count',
+  ajaxIndex: 'service.metrics.flume.outgoing_event_take_success_count.sum',
 
 
   transformToSeries: function (jsonData) {
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     var seriesArray = [];
     var self = this;
     var self = this;
-    if(Em.get(jsonData, "metrics.flume.flume.CHANNEL.EventTakeSuccessCount.rate.sum")){
+    var seriesData = Em.get(jsonData, 'metrics.flume.flume.CHANNEL.EventTakeSuccessCount.rate.sum');
+    if (seriesData) {
       var seriesName = Em.I18n.t('services.service.info.metrics.flume.outgoing.sum');
       var seriesName = Em.I18n.t('services.service.info.metrics.flume.outgoing.sum');
-      var seriesData = jsonData.metrics.flume.flume.CHANNEL.EventTakeSuccessCount.rate.sum;
-      if (seriesData) {
-        seriesArray.push(self.transformData(seriesData, seriesName));
-      }
+      seriesArray.push(self.transformData(seriesData, seriesName));
     }
     }
     return seriesArray;
     return seriesArray;
   }
   }

+ 142 - 0
ambari-web/test/views/main/service/info/metrics/flume/channel_size_mma_test.js

@@ -0,0 +1,142 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+require('views/main/service/info/metrics/flume/channel_size_mma');
+
+describe('App.ChartServiceMetricsFlume_ChannelSizeMMA', function () {
+
+  var view;
+
+  beforeEach(function () {
+    view = App.ChartServiceMetricsFlume_ChannelSizeMMA.create();
+  });
+
+  describe('#transformToSeries', function () {
+
+    var cases = [
+      {
+        data: {},
+        seriesArray: [],
+        title: 'empty response'
+      },
+      {
+        data: {
+          metrics: {}
+        },
+        seriesArray: [],
+        title: 'invalid response'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  ChannelSize: {
+                    rate: null
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [],
+        title: 'empty data'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  ChannelSize: {
+                    rate: {
+                      avg: [
+                        [0, 1445472000],
+                        [1, 1445472015]
+                      ],
+                      max: [
+                        [2, 1445472000],
+                        [3, 1445472015]
+                      ],
+                      min: [
+                        [4, 1445472000],
+                        [5, 1445472015]
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.channelType').format('avg'),
+            data: [
+              {
+                x: 1445472000,
+                y: 0
+              },
+              {
+                x: 1445472015,
+                y: 1
+              }
+            ]
+          },
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.channelType').format('max'),
+            data: [
+              {
+                x: 1445472000,
+                y: 2
+              },
+              {
+                x: 1445472015,
+                y: 3
+              }
+            ]
+          },
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.channelType').format('min'),
+            data: [
+              {
+                x: 1445472000,
+                y: 4
+              },
+              {
+                x: 1445472015,
+                y: 5
+              }
+            ]
+          }
+        ],
+        title: 'valid data'
+      }
+    ];
+
+    cases.forEach(function (item) {
+      it(item.title, function () {
+        expect(view.transformToSeries(item.data)).to.eql(item.seriesArray);
+      });
+    });
+
+  });
+
+});

+ 108 - 0
ambari-web/test/views/main/service/info/metrics/flume/channel_sum_test.js

@@ -0,0 +1,108 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+require('views/main/service/info/metrics/flume/channel_sum');
+
+describe('App.ChartServiceMetricsFlume_ChannelSizeSum', function () {
+
+  var view;
+
+  beforeEach(function () {
+    view = App.ChartServiceMetricsFlume_ChannelSizeSum.create();
+  });
+
+  describe('#transformToSeries', function () {
+
+    var cases = [
+      {
+        data: {},
+        seriesArray: [],
+        title: 'empty response'
+      },
+      {
+        data: {
+          metrics: {}
+        },
+        seriesArray: [],
+        title: 'invalid response'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  ChannelSize: {
+                    rate: null
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [],
+        title: 'empty data'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  ChannelSize: {
+                    rate: {
+                      sum: [
+                        [0, 1445472000],
+                        [1, 1445472015]
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.channelSizeSum'),
+            data: [
+              {
+                x: 1445472000,
+                y: 0
+              },
+              {
+                x: 1445472015,
+                y: 1
+              }
+            ]
+          }
+        ],
+        title: 'valid data'
+      }
+    ];
+
+    cases.forEach(function (item) {
+      it(item.title, function () {
+        expect(view.transformToSeries(item.data)).to.eql(item.seriesArray);
+      });
+    });
+
+  });
+
+});

+ 142 - 0
ambari-web/test/views/main/service/info/metrics/flume/flume_incoming_mma_test.js

@@ -0,0 +1,142 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+require('views/main/service/info/metrics/flume/flume_incoming_mma');
+
+describe('App.ChartServiceMetricsFlume_IncommingMMA', function () {
+
+  var view;
+
+  beforeEach(function () {
+    view = App.ChartServiceMetricsFlume_IncommingMMA.create();
+  });
+
+  describe('#transformToSeries', function () {
+
+    var cases = [
+      {
+        data: {},
+        seriesArray: [],
+        title: 'empty response'
+      },
+      {
+        data: {
+          metrics: {}
+        },
+        seriesArray: [],
+        title: 'invalid response'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  EventPutSuccessCount: {
+                    rate: null
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [],
+        title: 'empty data'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  EventPutSuccessCount: {
+                    rate: {
+                      avg: [
+                        [0, 1445472000],
+                        [1, 1445472015]
+                      ],
+                      max: [
+                        [2, 1445472000],
+                        [3, 1445472015]
+                      ],
+                      min: [
+                        [4, 1445472000],
+                        [5, 1445472015]
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.incoming_mma').format('avg'),
+            data: [
+              {
+                x: 1445472000,
+                y: 0
+              },
+              {
+                x: 1445472015,
+                y: 1
+              }
+            ]
+          },
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.incoming_mma').format('max'),
+            data: [
+              {
+                x: 1445472000,
+                y: 2
+              },
+              {
+                x: 1445472015,
+                y: 3
+              }
+            ]
+          },
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.incoming_mma').format('min'),
+            data: [
+              {
+                x: 1445472000,
+                y: 4
+              },
+              {
+                x: 1445472015,
+                y: 5
+              }
+            ]
+          }
+        ],
+        title: 'valid data'
+      }
+    ];
+
+    cases.forEach(function (item) {
+      it(item.title, function () {
+        expect(view.transformToSeries(item.data)).to.eql(item.seriesArray);
+      });
+    });
+
+  });
+
+});

+ 108 - 0
ambari-web/test/views/main/service/info/metrics/flume/flume_incoming_sum_test.js

@@ -0,0 +1,108 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+require('views/main/service/info/metrics/flume/flume_incoming_sum');
+
+describe('App.ChartServiceMetricsFlume_IncommingSum', function () {
+
+  var view;
+
+  beforeEach(function () {
+    view = App.ChartServiceMetricsFlume_IncommingSum.create();
+  });
+
+  describe('#transformToSeries', function () {
+
+    var cases = [
+      {
+        data: {},
+        seriesArray: [],
+        title: 'empty response'
+      },
+      {
+        data: {
+          metrics: {}
+        },
+        seriesArray: [],
+        title: 'invalid response'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  EventPutSuccessCount: {
+                    rate: null
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [],
+        title: 'empty data'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  EventPutSuccessCount: {
+                    rate: {
+                      sum: [
+                        [0, 1445472000],
+                        [1, 1445472015]
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.incoming.sum'),
+            data: [
+              {
+                x: 1445472000,
+                y: 0
+              },
+              {
+                x: 1445472015,
+                y: 1
+              }
+            ]
+          }
+        ],
+        title: 'valid data'
+      }
+    ];
+
+    cases.forEach(function (item) {
+      it(item.title, function () {
+        expect(view.transformToSeries(item.data)).to.eql(item.seriesArray);
+      });
+    });
+
+  });
+
+});

+ 142 - 0
ambari-web/test/views/main/service/info/metrics/flume/flume_outgoing_mma_test.js

@@ -0,0 +1,142 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+require('views/main/service/info/metrics/flume/flume_outgoing_mma');
+
+describe('App.ChartServiceMetricsFlume_OutgoingMMA', function () {
+
+  var view;
+
+  beforeEach(function () {
+    view = App.ChartServiceMetricsFlume_OutgoingMMA.create();
+  });
+
+  describe('#transformToSeries', function () {
+
+    var cases = [
+      {
+        data: {},
+        seriesArray: [],
+        title: 'empty response'
+      },
+      {
+        data: {
+          metrics: {}
+        },
+        seriesArray: [],
+        title: 'invalid response'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  EventTakeSuccessCount: {
+                    rate: null
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [],
+        title: 'empty data'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  EventTakeSuccessCount: {
+                    rate: {
+                      avg: [
+                        [0, 1445472000],
+                        [1, 1445472015]
+                      ],
+                      max: [
+                        [2, 1445472000],
+                        [3, 1445472015]
+                      ],
+                      min: [
+                        [4, 1445472000],
+                        [5, 1445472015]
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.outgoing_mma').format('avg'),
+            data: [
+              {
+                x: 1445472000,
+                y: 0
+              },
+              {
+                x: 1445472015,
+                y: 1
+              }
+            ]
+          },
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.outgoing_mma').format('max'),
+            data: [
+              {
+                x: 1445472000,
+                y: 2
+              },
+              {
+                x: 1445472015,
+                y: 3
+              }
+            ]
+          },
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.outgoing_mma').format('min'),
+            data: [
+              {
+                x: 1445472000,
+                y: 4
+              },
+              {
+                x: 1445472015,
+                y: 5
+              }
+            ]
+          }
+        ],
+        title: 'valid data'
+      }
+    ];
+
+    cases.forEach(function (item) {
+      it(item.title, function () {
+        expect(view.transformToSeries(item.data)).to.eql(item.seriesArray);
+      });
+    });
+
+  });
+
+});

+ 108 - 0
ambari-web/test/views/main/service/info/metrics/flume/flume_outgoing_sum_test.js

@@ -0,0 +1,108 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+require('views/main/service/info/metrics/flume/flume_outgoing_sum');
+
+describe('App.ChartServiceMetricsFlume_OutgoingSum', function () {
+
+  var view;
+
+  beforeEach(function () {
+    view = App.ChartServiceMetricsFlume_OutgoingSum.create();
+  });
+
+  describe('#transformToSeries', function () {
+
+    var cases = [
+      {
+        data: {},
+        seriesArray: [],
+        title: 'empty response'
+      },
+      {
+        data: {
+          metrics: {}
+        },
+        seriesArray: [],
+        title: 'invalid response'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  EventTakeSuccessCount: {
+                    rate: null
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [],
+        title: 'empty data'
+      },
+      {
+        data: {
+          metrics: {
+            flume: {
+              flume: {
+                CHANNEL: {
+                  EventTakeSuccessCount: {
+                    rate: {
+                      sum: [
+                        [0, 1445472000],
+                        [1, 1445472015]
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        seriesArray: [
+          {
+            name: Em.I18n.t('services.service.info.metrics.flume.outgoing.sum'),
+            data: [
+              {
+                x: 1445472000,
+                y: 0
+              },
+              {
+                x: 1445472015,
+                y: 1
+              }
+            ]
+          }
+        ],
+        title: 'valid data'
+      }
+    ];
+
+    cases.forEach(function (item) {
+      it(item.title, function () {
+        expect(view.transformToSeries(item.data)).to.eql(item.seriesArray);
+      });
+    });
+
+  });
+
+});