Ver código fonte

AMBARI-10208. Service Graphs resize upon changing time range (alexantonenko)

Alex Antonenko 10 anos atrás
pai
commit
907166990a

+ 6 - 2
ambari-web/app/views/main/service/info/summary.js

@@ -22,6 +22,10 @@ require('data/service_graph_config');
 
 
 App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
 App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
   templateName: require('templates/main/service/info/summary'),
   templateName: require('templates/main/service/info/summary'),
+  /**
+   * @property {Number} chunkSize - number of columns in Metrics section
+   */
+  chunkSize: 5,
   attributes:null,
   attributes:null,
 
 
   /**
   /**
@@ -301,7 +305,7 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
    * (will only display rows with 5 items)
    * (will only display rows with 5 items)
    */
    */
   constructGraphObjects: function(graphNames) {
   constructGraphObjects: function(graphNames) {
-    var result = [], graphObjects = [], chunkSize = 5;
+    var result = [], graphObjects = [], chunkSize = this.get('chunkSize');
     var self = this;
     var self = this;
 
 
     if (!graphNames) {
     if (!graphNames) {
@@ -391,7 +395,7 @@ App.MainServiceInfoSummaryView = Em.View.extend(App.UserPref, {
       self.set('currentTimeRangeIndex', event.context.index);
       self.set('currentTimeRangeIndex', event.context.index);
       var svcName = self.get('service.serviceName');
       var svcName = self.get('service.serviceName');
       if (svcName) {
       if (svcName) {
-        var result = [], graphObjects = [], chunkSize = 2;
+        var result = [], graphObjects = [], chunkSize = this.get('chunkSize');
         App.service_graph_config[svcName.toLowerCase()].forEach(function(graphName) {
         App.service_graph_config[svcName.toLowerCase()].forEach(function(graphName) {
           graphObjects.push(App["ChartServiceMetrics" + graphName].extend({
           graphObjects.push(App["ChartServiceMetrics" + graphName].extend({
             currentTimeIndex : event.context.index
             currentTimeIndex : event.context.index

+ 206 - 1
ambari-web/test/views/main/service/info/summary_test.js

@@ -36,7 +36,7 @@ describe('App.MainServiceInfoSummaryView', function() {
   });
   });
 
 
   describe('#servers', function () {
   describe('#servers', function () {
-    it('services shuldn\'t have servers except FLUME and ZOOKEEPER', function () {
+    it('services shouldn\'t have servers except FLUME and ZOOKEEPER', function () {
       expect(view.get('servers')).to.be.empty;
       expect(view.get('servers')).to.be.empty;
     });
     });
 
 
@@ -180,4 +180,209 @@ describe('App.MainServiceInfoSummaryView', function() {
     });
     });
 
 
   });
   });
+
+  describe('#setTimeRange', function () {
+
+    var cases = [
+      {
+        currentTimeRangeIndex: 0,
+        isServiceMetricLoaded: false,
+        graphIds: [],
+        title: 'no event passed'
+      },
+      {
+        event: {},
+        currentTimeRangeIndex: 0,
+        isServiceMetricLoaded: false,
+        graphIds: [],
+        title: 'no event context passed'
+      },
+      {
+        event: {
+          context: {
+            index: 1
+          }
+        },
+        currentTimeRangeIndex: 1,
+        isServiceMetricLoaded: false,
+        graphIds: [],
+        title: 'no service name set'
+      },
+      {
+        event: {
+          context: {
+            index: 2
+          }
+        },
+        serviceName: 'HDFS',
+        currentTimeRangeIndex: 2,
+        isServiceMetricLoaded: true,
+        graphIds: [
+          [
+            'service-metrics-hdfs-space-utilization', 'service-metrics-hdfs-file-operations',
+            'service-metrics-hdfs-block-status', 'service-metrics-hdfs-io', 'service-metrics-hdfs-rpc'
+          ],
+          [
+            'service-metrics-hdfs-gc', 'service-metrics-hdfs-jvm-heap', 'service-metrics-hdfs-jvm-threads'
+          ]
+        ]
+      },
+      {
+        event: {
+          context: {
+            index: 3
+          }
+        },
+        serviceName: 'YARN',
+        currentTimeRangeIndex: 3,
+        isServiceMetricLoaded: true,
+        graphIds: [
+          [
+            'service-metrics-yarn-queue-allocated', 'service-metrics-yarn-queue-memory-resource',
+            'service-metrics-yarn-queue-allocated-container', 'service-metrics-yarn-node-manager-statuses',
+            'service-metrics-yarn-apps-current-states'
+          ],
+          [
+            'service-metrics-yarn-apps-finished-states', 'service-metrics-yarn-rpc', 'service-metrics-yarn-gc',
+            'service-metrics-yarn-jvm-threads', 'service-metrics-yarn-jvm-heap'
+          ]
+        ]
+      },
+      {
+        event: {
+          context: {
+            index: 4
+          }
+        },
+        serviceName: 'HBASE',
+        currentTimeRangeIndex: 4,
+        isServiceMetricLoaded: true,
+        graphIds: [
+          [
+            'service-metrics-hbase-cluster-requests', 'service-metrics-hbase-regionserver-rw-requests',
+            'service-metrics-hbase-regionserver-regions', 'service-metrics-hbase-regionserver-queuesize',
+            'service-metrics-hbase-hlog-split-time'
+          ],
+          [
+            'service-metrics-hbase-hlog-split-size'
+          ]
+        ]
+      },
+      {
+        event: {
+          context: {
+            index: 5
+          }
+        },
+        serviceName: 'AMBARI_METRICS',
+        currentTimeRangeIndex: 5,
+        isServiceMetricLoaded: true,
+        graphIds: [
+          [
+            'service-metrics-ambari-metrics-master-average-load',
+            'service-metrics-ambari-metrics-region-server-store-files',
+            'service-metrics-ambari-metrics-region-server-regions',
+            'service-metrics-ambari-metrics-region-server-requests',
+            'service-metrics-ambari-metrics-region-server-block-cache-hit-percent'
+          ],
+          [
+            'service-metrics-ambari-metrics-region-server-compaction-queue-size'
+          ]
+        ]
+      },
+      {
+        event: {
+          context: {
+            index: 6
+          }
+        },
+        serviceName: 'FLUME',
+        currentTimeRangeIndex: 6,
+        isServiceMetricLoaded: true,
+        graphIds: [
+          [
+            'service-metrics-flume-channel-size-mma', 'service-metrics-flume-channel-size-sum',
+            'service-metrics-flume-incoming_mma', 'service-metrics-flume-incoming_sum',
+            'service-metrics-flume-outgoing_mma'
+          ],
+          [
+            'service-metrics-flume-outgoing_sum'
+          ]
+        ]
+      },
+      {
+        event: {
+          context: {
+            index: 7
+          }
+        },
+        serviceName: 'STORM',
+        currentTimeRangeIndex: 7,
+        isServiceMetricLoaded: true,
+        graphIds: [
+          [
+            'service-metrics-storm-supervisor-allocated', 'service-metrics-storm-executors',
+            'service-metrics-storm-topologies', 'service-metrics-storm-tasks'
+          ]
+        ]
+      },
+      {
+        event: {
+          context: {
+            index: 8
+          }
+        },
+        serviceName: 'KAFKA',
+        chunkSize: 4,
+        currentTimeRangeIndex: 8,
+        isServiceMetricLoaded: true,
+        graphIds: [
+          [
+            'service-metrics-kafka-broker-topic-metrics', 'service-metrics-kafka-controller-metrics',
+            'service-metrics-kafka-controler-status-metrics', 'service-metrics-kafka-replica-manager-metrics'
+          ],
+          [
+            'service-metrics-kafka-log-metrics', 'service-metrics-kafka-replica-fetcher-metrics'
+          ]
+        ]
+      }
+    ];
+
+    beforeEach(function () {
+      sinon.stub(view, 'postUserPref', Em.K);
+      view.setProperties({
+        chunkSize: 5,
+        currentTimeRangeIndex: 0,
+        isServiceMetricLoaded: false,
+        serviceMetricGraphs: []
+      });
+    });
+
+    afterEach(function () {
+      view.postUserPref.restore();
+    });
+
+    cases.forEach(function (item) {
+      it(item.serviceName || item.title, function () {
+        view.set('chunkSize', Em.isNone(item.chunkSize) ? 5 : item.chunkSize);
+        view.set('service.serviceName', item.serviceName);
+        view.setTimeRange(item.event);
+        var graphIndices = [],
+          graphIds = view.get('serviceMetricGraphs').map(function (graphs) {
+          return graphs.map(function (graph) {
+            var graphView = graph.create();
+            graphIndices.push(graphView.get('currentTimeIndex'));
+            return graphView.get('id');
+          });
+        });
+        expect(view.get('currentTimeRangeIndex')).to.equal(item.currentTimeRangeIndex);
+        expect(view.get('isServiceMetricLoaded')).to.equal(item.isServiceMetricLoaded);
+        if (item.event && item.event.context && item.serviceName) {
+          expect(graphIndices.uniq()).to.eql([item.currentTimeRangeIndex]);
+        }
+        expect(graphIds).to.eql(item.graphIds);
+      });
+    });
+
+  });
 });
 });