AMBARI-9898. Memory Usage widget shows wrong value (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/52bcd9f0 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/52bcd9f0 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/52bcd9f0 Branch: refs/heads/trunk Commit: 52bcd9f06356febfe09a04df8a2717f3161a4026 Parents: 57251f4 Author: Alex Antonenko <hiv...@gmail.com> Authored: Tue Mar 3 19:41:24 2015 +0200 Committer: Alex Antonenko <hiv...@gmail.com> Committed: Tue Mar 3 21:40:00 2015 +0200 ---------------------------------------------------------------------- ambari-web/app/assets/test/tests.js | 1 + .../main/dashboard/cluster_metrics/memory.js | 13 +- .../dashboard/cluster_metrics/memory_test.js | 223 +++++++++++++++++++ 3 files changed, 236 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/52bcd9f0/ambari-web/app/assets/test/tests.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js index ce137ea..78ea459 100644 --- a/ambari-web/app/assets/test/tests.js +++ b/ambari-web/app/assets/test/tests.js @@ -183,6 +183,7 @@ var files = ['test/init_model_test', 'test/views/main/dashboard/config_history_view_test', 'test/views/main/dashboard/widget_test', 'test/views/main/dashboard/widgets_test', + 'test/views/main/dashboard/cluster_metrics/memory_test', 'test/views/main/dashboard/widgets/text_widget_test', 'test/views/main/dashboard/widgets/uptime_text_widget_test', 'test/views/main/dashboard/widgets/node_managers_live_test', http://git-wip-us.apache.org/repos/asf/ambari/blob/52bcd9f0/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js b/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js index fd96bc4..393f12f 100644 --- a/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js +++ b/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js @@ -38,11 +38,22 @@ App.ChartClusterMetricsMemory = App.ChartLinearTimeView.extend({ transformToSeries: function (jsonData) { var seriesArray = []; if (jsonData && jsonData.metrics && jsonData.metrics.memory) { + var isAmbariMetricsAvailable = App.StackService.find().someProperty('serviceName', 'AMBARI_METRICS'); + var isAmbariMetricsInstalled = App.Service.find().someProperty('serviceName', 'AMBARI_METRICS'); + var isGangliaInstalled = App.Service.find().someProperty('serviceName', 'GANGLIA'); + var shouldConvertToBytes = isAmbariMetricsInstalled || isAmbariMetricsAvailable && !isGangliaInstalled; + var KB = Math.pow(2, 10); for ( var name in jsonData.metrics.memory) { var displayName = name; var seriesData = jsonData.metrics.memory[name]; if (seriesData) { - seriesArray.push(this.transformData(seriesData, displayName)); + var s = this.transformData(seriesData, displayName); + if (shouldConvertToBytes) { + for (var i = 0; i < s.data.length; i++) { + s.data[i].y *= KB; + } + } + seriesArray.push(s); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/52bcd9f0/ambari-web/test/views/main/dashboard/cluster_metrics/memory_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/views/main/dashboard/cluster_metrics/memory_test.js b/ambari-web/test/views/main/dashboard/cluster_metrics/memory_test.js new file mode 100644 index 0000000..2512166 --- /dev/null +++ b/ambari-web/test/views/main/dashboard/cluster_metrics/memory_test.js @@ -0,0 +1,223 @@ +/** + * 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/dashboard/cluster_metrics/memory'); + +describe('App.ChartClusterMetricsMemory', function () { + + var view; + + beforeEach(function () { + view = App.ChartClusterMetricsMemory.create(); + }); + + describe('#transformToSeries', function () { + + var cases = [ + { + isAmbariMetricsInstalled: true, + seriesData: [ + [ + { + x: 1000000000, + y: 262144 + }, + { + x: 1000001000, + y: 524288 + } + ], + [ + { + x: 1100000000, + y: 1048576 + }, + { + x: 1100001000, + y: 2097152 + } + ] + ], + title: 'Ambari Metrics is installed' + }, + { + isAmbariMetricsInstalled: false, + isAmbariMetricsAvailable: true, + isGangliaInstalled: false, + seriesData: [ + [ + { + x: 1000000000, + y: 262144 + }, + { + x: 1000001000, + y: 524288 + } + ], + [ + { + x: 1100000000, + y: 1048576 + }, + { + x: 1100001000, + y: 2097152 + } + ] + ], + title: 'Ganglia is not installed, Ambari Metrics is available' + }, + { + isAmbariMetricsInstalled: false, + isAmbariMetricsAvailable: true, + isGangliaInstalled: true, + seriesData: [ + [ + { + x: 1000000000, + y: 256 + }, + { + x: 1000001000, + y: 512 + } + ], + [ + { + x: 1100000000, + y: 1024 + }, + { + x: 1100001000, + y: 2048 + } + ] + ], + title: 'Ganglia is installed, Ambari Metrics is available' + }, + { + isAmbariMetricsInstalled: false, + isAmbariMetricsAvailable: false, + isGangliaInstalled: true, + seriesData: [ + [ + { + x: 1000000000, + y: 256 + }, + { + x: 1000001000, + y: 512 + } + ], + [ + { + x: 1100000000, + y: 1024 + }, + { + x: 1100001000, + y: 2048 + } + ] + ], + title: 'Ganglia is installed, Ambari Metrics is not available' + }, + { + isAmbariMetricsInstalled: false, + isAmbariMetricsAvailable: false, + isGangliaInstalled: false, + seriesData: [ + [ + { + x: 1000000000, + y: 256 + }, + { + x: 1000001000, + y: 512 + } + ], + [ + { + x: 1100000000, + y: 1024 + }, + { + x: 1100001000, + y: 2048 + } + ] + ], + title: 'Ganglia is not installed, Ambari Metrics is not available' + } + ], + jsonData = { + metrics: { + memory: { + Buffer: [ + [256, 1000000000], + [512, 1000001000] + ], + Total: [ + [1024, 1100000000], + [2048, 1100001000] + ] + } + } + }, + names = ['Buffer', 'Total']; + + afterEach(function () { + App.StackService.find.restore(); + App.Service.find.restore(); + }); + + cases.forEach(function (item) { + it(item.title, function () { + var stackServices = [], + services = []; + if (item.isAmbariMetricsAvailable) { + stackServices.push({ + serviceName: 'AMBARI_METRICS' + }); + } + if (item.isAmbariMetricsInstalled) { + services.push({ + serviceName: 'AMBARI_METRICS' + }); + } + if (item.isGangliaInstalled) { + services.push({ + serviceName: 'GANGLIA' + }); + } + sinon.stub(App.StackService, 'find').returns(stackServices); + sinon.stub(App.Service, 'find').returns(services); + var series = view.transformToSeries(jsonData); + expect(series.mapProperty('name')).to.eql(names); + expect(series.mapProperty('data')).to.eql(item.seriesData); + }); + }); + + }); + +});