瀏覽代碼

AMBARI-2803. YARN cluster memory being shown in KB. (srimanth)

Srimanth Gunturi 11 年之前
父節點
當前提交
31157a88b1

+ 2 - 1
ambari-web/app/controllers/wizard/step5_controller.js

@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var numberUtils = require('utils/number_utils');
 
 App.WizardStep5Controller = Em.Controller.extend({
 
@@ -120,7 +121,7 @@ App.WizardStep5Controller = Em.Controller.extend({
           cpu:_host.cpu,
           memory:_host.memory,
           disk_info:_host.disk_info,
-          host_info: Em.I18n.t('installer.step5.hostInfo').fmt(_host.name, (_host.memory * 1024).bytesToSize(1, 'parseFloat'), _host.cpu)
+          host_info: Em.I18n.t('installer.step5.hostInfo').fmt(_host.name, numberUtils.bytesToSize(_host.memory, 1, 'parseFloat', 1024), _host.cpu)
         }));
       }
     }

+ 7 - 5
ambari-web/app/mappers/service_mapper.js

@@ -395,11 +395,13 @@ App.servicesMapper = App.QuickDataMapper.create({
           }
         });
 
-        var root = component.host_components[0].metrics.yarn.Queue.root;
-        var queue = JSON.stringify({
-          'root': self.parseObject(root)
-        });
-        component.queue = queue;
+        if (component.host_components[0].metrics.yarn) {
+          var root = component.host_components[0].metrics.yarn.Queue.root;
+          var queue = JSON.stringify({
+            'root': self.parseObject(root)
+          });
+          component.queue = queue;
+        }
         // extend config
         finalConfig = jQuery.extend(finalConfig, yarnConfig);
       }

+ 1 - 1
ambari-web/app/messages.js

@@ -1220,7 +1220,7 @@ Em.I18n.translations = {
   'dashboard.services.yarn.containers.msg': '{0} allocated / {1} pending / {2} reserved',
   'dashboard.services.yarn.apps': 'Applications',
   'dashboard.services.yarn.apps.msg': '{0} submitted / {1} running / {2} pending / {3} completed / {4} killed / {5} failed',
-  'dashboard.services.yarn.memory': 'Memory',
+  'dashboard.services.yarn.memory': 'Cluster Memory',
   'dashboard.services.yarn.memory.msg': '{0} used / {1} reserved / {2} total',
   'dashboard.services.yarn.queues': 'Queues',
   'dashboard.services.yarn.queues.msg': '{0} Queues',

+ 0 - 25
ambari-web/app/utils/helper.js

@@ -123,31 +123,6 @@ String.prototype.highlight = function (words, highlightTemplate) {
   return self;
 };
 
-/**
- * Convert byte size to other metrics.
- * @param {Number} precision  Number to adjust precision of return value. Default is 0.
- * @param {String} parseType  JS method name for parse string to number. Default is "parseInt".
- * @remarks The parseType argument can be "parseInt" or "parseFloat".
- * @return {String) Returns converted value with abbreviation.
- */
-Number.prototype.bytesToSize = function (precision, parseType/* = 'parseInt' */) {
-  if (arguments[1] === undefined) {
-    parseType = 'parseInt';
-  }
-
-  var value = this;
-  var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
-  var posttxt = 0;
-  if (this == 0) return 'n/a';
-  while (value >= 1024) {
-    posttxt++;
-    value = value / 1024;
-  }
-  var parsedValue = window[parseType](value);
-
-  return parsedValue.toFixed(precision) + " " + sizes[posttxt];
-}
-
 Number.prototype.toDaysHoursMinutes = function () {
   var formatted = {},
     dateDiff = this,

+ 1 - 0
ambari-web/app/utils/misc.js

@@ -53,4 +53,5 @@ module.exports = {
     var d = ip.split('.');
     return ((((((+d[0])*256)+(+d[1]))*256)+(+d[2]))*256)+(+d[3]);
   }
+  
 };

+ 56 - 0
ambari-web/app/utils/number_utils.js

@@ -0,0 +1,56 @@
+/**
+ * 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.
+ */
+module.exports = {
+
+  /**
+   * Convert byte size to other metrics.
+   * 
+   * @param {Number} Bytes to convert to string
+   * @param {Number} Precision Number to adjust precision of return value. Default is 0.
+   * @param {String}
+   *          parseType JS method name for parse string to number. Default is
+   *          "parseInt".
+   * @param {Number} Multiplies bytes by this number if given. This is needed
+   *          as <code>null * 1024 = 0</null>
+   * @remarks The parseType argument can be "parseInt" or "parseFloat".
+   * @return {String) Returns converted value with abbreviation.
+   */
+  bytesToSize: function (bytes, precision, parseType/* = 'parseInt' */, multiplyBy) {
+    if (bytes === null || bytes === undefined) {
+      return 'n/a';
+    } else {
+      if (arguments[2] === undefined) {
+        parseType = 'parseInt';
+      }
+      if (arguments[3] === undefined) {
+        multiplyBy = 1;
+      }
+      var value = bytes * multiplyBy;
+      var sizes = [ 'Bytes', 'KB', 'MB', 'GB', 'TB', 'PB' ];
+      var posttxt = 0;
+      while (value >= 1024) {
+        posttxt++;
+        value = value / 1024;
+      }
+      if (value === 0) {
+        precision = 0;
+      }
+      var parsedValue = window[parseType](value);
+      return parsedValue.toFixed(precision) + " " + sizes[posttxt];
+    }
+  }
+};

+ 3 - 2
ambari-web/app/views/main/dashboard/service/hbase.js

@@ -17,6 +17,7 @@
 
 var App = require('app');
 var date = require('utils/date');
+var numberUtils = require('utils/number_utils');
 
 App.MainDashboardServiceHbaseView = App.MainDashboardServiceView.extend({
   templateName: require('templates/main/dashboard/service/hbase'),
@@ -79,8 +80,8 @@ App.MainDashboardServiceHbaseView = App.MainDashboardServiceView.extend({
     var heapUsed = this.get('service').get('heapMemoryUsed');
     var heapMax = this.get('service').get('heapMemoryMax');
     var percent = heapMax > 0 ? 100 * heapUsed / heapMax : 0;
-    var heapString = heapUsed > 0 ? heapUsed.bytesToSize(1, "parseFloat") : 0;
-    var heapMaxString = heapMax > 0 ? heapMax.bytesToSize(1, "parseFloat") : 0;
+    var heapString = numberUtils.bytesToSize(heapUsed, 1, "parseFloat");
+    var heapMaxString = numberUtils.bytesToSize(heapMax, 1, "parseFloat");
     return this.t('dashboard.services.hbase.masterServerHeap.summary').format(heapString, heapMaxString, percent.toFixed(1));
   }.property('service.heapMemoryUsed', 'service.heapMemoryMax'),
 

+ 11 - 14
ambari-web/app/views/main/dashboard/service/hdfs.js

@@ -17,6 +17,7 @@
 
 var App = require('app');
 var date = require('utils/date');
+var numberUtils = require('utils/number_utils');
 
 App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
   templateName: require('templates/main/dashboard/service/hdfs'),
@@ -89,11 +90,13 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
   }.property('service.nameNode'),
 
   nodeHeap: function () {
-    var memUsed = this.get('service').get('jvmMemoryHeapUsed') * 1024 * 1024;
-    var memCommitted = this.get('service').get('jvmMemoryHeapCommitted') * 1024 * 1024;
+    var memUsed = this.get('service').get('jvmMemoryHeapUsed');
+    var memCommitted = this.get('service').get('jvmMemoryHeapCommitted');
     var percent = memCommitted > 0 ? ((100 * memUsed) / memCommitted) : 0;
-    return this.t('dashboard.services.hdfs.nodes.heapUsed').format(memUsed.bytesToSize(1, 'parseFloat'), memCommitted.bytesToSize(1, 'parseFloat'), percent.toFixed(1));
-
+    return this.t('dashboard.services.hdfs.nodes.heapUsed').format(
+        numberUtils.bytesToSize(memUsed, 1, 'parseFloat', 1024 * 1024), 
+        numberUtils.bytesToSize(memCommitted, 1, 'parseFloat', 1024 * 1024), 
+        percent.toFixed(1));
   }.property('service.jvmMemoryHeapUsed', 'service.jvmMemoryHeapCommitted'),
 
   summaryHeader: function () {
@@ -113,20 +116,14 @@ App.MainDashboardServiceHdfsView = App.MainDashboardServiceView.extend({
 
   capacity: function () {
     var text = this.t("dashboard.services.hdfs.capacityUsed");
-    var total = this.get('service.capacityTotal') + 0;
-    var remaining = this.get('service.capacityRemaining') + 0;
-    var used = total - remaining;
+    var total = this.get('service.capacityTotal');
+    var remaining = this.get('service.capacityRemaining');
+    var used = total !== null && remaining !== null ? total - remaining : null;
     var percent = total > 0 ? ((used * 100) / total).toFixed(1) : 0;
     if (percent == "NaN" || percent < 0) {
       percent = Em.I18n.t('services.service.summary.notAvailable') + " ";
     }
-    if (used < 0) {
-      used = 0;
-    }
-    if (total < 0) {
-      total = 0;
-    }
-    return text.format(used.bytesToSize(1, 'parseFloat'), total.bytesToSize(1, 'parseFloat'), percent);
+    return text.format(numberUtils.bytesToSize(used, 1, 'parseFloat'), numberUtils.bytesToSize(total, 1, 'parseFloat'), percent);
   }.property('service.capacityUsed', 'service.capacityTotal'),
 
   dataNodeComponent: function () {

+ 4 - 3
ambari-web/app/views/main/dashboard/service/mapreduce.js

@@ -17,6 +17,7 @@
 
 var App = require('app');
 var date = require('utils/date');
+var numberUtils = require('utils/number_utils');
 
 App.MainDashboardServiceMapreduceView = App.MainDashboardServiceView.extend({
   templateName: require('templates/main/dashboard/service/mapreduce'),
@@ -72,10 +73,10 @@ App.MainDashboardServiceMapreduceView = App.MainDashboardServiceView.extend({
   }.property('service.aliveTrackers.length', 'service.taskTrackers.length'),
 
   trackersHeapSummary: function () {
-    var heapUsed = this.get('service').get('jobTrackerHeapUsed') || 0;
-    var heapMax = this.get('service').get('jobTrackerHeapMax') || 0;
+    var heapUsed = this.get('service').get('jobTrackerHeapUsed');
+    var heapMax = this.get('service').get('jobTrackerHeapMax');
     var percent = heapMax > 0 ? 100 * heapUsed / heapMax : 0;
-    return this.t('dashboard.services.mapreduce.jobTrackerHeapSummary').format(heapUsed.bytesToSize(1, "parseFloat"), heapMax.bytesToSize(1, "parseFloat"), percent.toFixed(1));
+    return this.t('dashboard.services.mapreduce.jobTrackerHeapSummary').format(numberUtils.bytesToSize(heapUsed, 1, "parseFloat"), numberUtils.bytesToSize(heapMax, 1, "parseFloat"), percent.toFixed(1));
   }.property('service.jobTrackerHeapUsed', 'service.jobTrackerHeapMax'),
 
   jobsSummary: function () {

+ 11 - 8
ambari-web/app/views/main/dashboard/service/yarn.js

@@ -17,16 +17,20 @@
 
 var App = require('app');
 var date = require('utils/date');
+var numberUtils = require('utils/number_utils');
 
 App.MainDashboardServiceYARNView = App.MainDashboardServiceView.extend({
   templateName: require('templates/main/dashboard/service/yarn'),
   serviceName: 'YARN',
 
   nodeHeap: function () {
-    var memUsed = this.get('service').get('jvmMemoryHeapUsed') * 1024 * 1024;
-    var memCommitted = this.get('service').get('jvmMemoryHeapCommitted') * 1024 * 1024;
+    var memUsed = this.get('service').get('jvmMemoryHeapUsed');
+    var memCommitted = this.get('service').get('jvmMemoryHeapCommitted');
     var percent = memCommitted > 0 ? ((100 * memUsed) / memCommitted) : 0;
-    return this.t('dashboard.services.hdfs.nodes.heapUsed').format(memUsed.bytesToSize(1, 'parseFloat'), memCommitted.bytesToSize(1, 'parseFloat'), percent.toFixed(1));
+    return this.t('dashboard.services.hdfs.nodes.heapUsed').format(
+        numberUtils.bytesToSize(memUsed, 1, 'parseFloat', 1024 * 1024), 
+        numberUtils.bytesToSize(memCommitted, 1, 'parseFloat', 1024 * 1024), 
+        percent.toFixed(1));
 
   }.property('service.jvmMemoryHeapUsed', 'service.jvmMemoryHeapCommitted'),
 
@@ -105,12 +109,11 @@ App.MainDashboardServiceYARNView = App.MainDashboardServiceView.extend({
     return this.t('dashboard.services.yarn.apps.msg').format(appsSubmitted, appsRunning, appsPending, appsCompleted, appsKilled, appsFailed);
   }.property('service.appsSubmitted', 'service.appsRunning', 'service.appsPending', 'service.appsCompleted', 'service.appsKilled', 'service.appsFailed'),
 
-  memory: function() {
+  memory: function () {
     return Em.I18n.t('dashboard.services.yarn.memory.msg').format(
-      this.get('service.allocatedMemory').bytesToSize(1, 'parseFloat'),
-      this.get('service.reservedMemory').bytesToSize(1, 'parseFloat'),
-      this.get('service.availableMemory').bytesToSize(1, 'parseFloat')
-    );
+        numberUtils.bytesToSize(this.get('service.allocatedMemory'), 1, 'parseFloat', 1024 * 1024), 
+        numberUtils.bytesToSize(this.get('service.reservedMemory'), 1, 'parseFloat', 1024 * 1024), 
+        numberUtils.bytesToSize(this.get('service.availableMemory'), 1, 'parseFloat', 1024 * 1024));
   }.property('service.allocatedMemory', 'service.reservedMemory', 'service.availableMemory'),
 
   queues: function() {

+ 4 - 3
ambari-web/app/views/main/dashboard/widgets/hbase_master_heap.js

@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var numberUtils = require('utils/number_utils');
 
 App.HBaseMasterHeapPieChartView = App.DashboardWidgetView.extend({
 
@@ -30,12 +31,12 @@ App.HBaseMasterHeapPieChartView = App.DashboardWidgetView.extend({
   model_type: 'hbase',
 
   hiddenInfo: function () {
-    var heapUsed = this.get('model').get('heapMemoryUsed') || 0;
-    var heapMax = this.get('model').get('heapMemoryMax') || 0;
+    var heapUsed = this.get('model').get('heapMemoryUsed');
+    var heapMax = this.get('model').get('heapMemoryMax');
     var percent = heapMax > 0 ? 100 * heapUsed / heapMax : 0;
     var result = [];
     result.pushObject(percent.toFixed(1) + '% used');
-    result.pushObject(heapUsed.bytesToSize(1, "parseFloat") + ' of ' + heapMax.bytesToSize(1, "parseFloat"));
+    result.pushObject(numberUtils.bytesToSize(heapUsed, 1, "parseFloat") + ' of ' + numberUtils.bytesToSize(heapMax, 1, "parseFloat"));
     return result;
   }.property('model.heapMemoryUsed', 'model.heapMemoryMax'),
 

+ 5 - 10
ambari-web/app/views/main/dashboard/widgets/hdfs_capacity.js

@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var numberUtils = require('utils/number_utils');
 
 App.NameNodeCapacityPieChartView = App.DashboardWidgetView.extend({
 
@@ -31,22 +32,16 @@ App.NameNodeCapacityPieChartView = App.DashboardWidgetView.extend({
 
   hiddenInfo: function () {
     var text = this.t("dashboard.services.hdfs.capacityUsed");
-    var total = this.get('model.capacityTotal') + 0;
-    var remaining = this.get('model.capacityRemaining') + 0;
-    var used = total - remaining;
+    var total = this.get('model.capacityTotal');
+    var remaining = this.get('model.capacityRemaining');
+    var used = total !== null && remaining !== null ? total - remaining : null;
     var percent = total > 0 ? ((used * 100) / total).toFixed(1) : 0;
     if (percent == "NaN" || percent < 0) {
       percent = Em.I18n.t('services.service.summary.notAvailable') + " ";
     }
-    if (used < 0) {
-      used = 0;
-    }
-    if (total < 0) {
-      total = 0;
-    }
     var result = [];
     result.pushObject(percent + '% used');
-    result.pushObject(used.bytesToSize(1, 'parseFloat') + ' of ' + total.bytesToSize(1, 'parseFloat'));
+    result.pushObject(numberUtils.bytesToSize(used, 1, 'parseFloat') + ' of ' + numberUtils.bytesToSize(total, 1, 'parseFloat'));
     return result;
   }.property('model.capacityUsed', 'model.capacityTotal'),
 

+ 4 - 3
ambari-web/app/views/main/dashboard/widgets/jobtracker_heap.js

@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var numberUtils = require('utils/number_utils');
 
 App.JobTrackerHeapPieChartView = App.DashboardWidgetView.extend({
 
@@ -30,12 +31,12 @@ App.JobTrackerHeapPieChartView = App.DashboardWidgetView.extend({
   model_type: 'mapreduce',
 
   hiddenInfo: function () {
-    var heapUsed = this.get('model').get('jobTrackerHeapUsed') || 0;
-    var heapMax = this.get('model').get('jobTrackerHeapMax') || 0;
+    var heapUsed = this.get('model').get('jobTrackerHeapUsed');
+    var heapMax = this.get('model').get('jobTrackerHeapMax');
     var percent = heapMax > 0 ? 100 * heapUsed / heapMax : 0;
     var result = [];
     result.pushObject(percent.toFixed(1) + '% used');
-    result.pushObject(heapUsed.bytesToSize(1, "parseFloat") + ' of ' + heapMax.bytesToSize(1, "parseFloat"));
+    result.pushObject(numberUtils.bytesToSize(heapUsed, 1, "parseFloat") + ' of ' + numberUtils.bytesToSize(heapMax, 1, "parseFloat"));
     return result;
   }.property('model.jobTrackerHeapUsed', 'model.jobTrackerHeapMax'),
 

+ 4 - 3
ambari-web/app/views/main/dashboard/widgets/namenode_heap.js

@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var numberUtils = require('utils/number_utils');
 
 App.NameNodeHeapPieChartView = App.DashboardWidgetView.extend({
 
@@ -30,12 +31,12 @@ App.NameNodeHeapPieChartView = App.DashboardWidgetView.extend({
   model_type: 'hdfs',
 
   hiddenInfo: function () {
-  var memUsed = this.get('model').get('jvmMemoryHeapUsed') * 1000000;
-  var memCommitted = this.get('model').get('jvmMemoryHeapCommitted') * 1000000;
+  var memUsed = this.get('model').get('jvmMemoryHeapUsed');
+  var memCommitted = this.get('model').get('jvmMemoryHeapCommitted');
   var percent = memCommitted > 0 ? ((100 * memUsed) / memCommitted) : 0;
   var result = [];
   result.pushObject(percent.toFixed(1) + '% used');
-  result.pushObject(memUsed.bytesToSize(1, 'parseFloat') + ' of ' + memCommitted.bytesToSize(1, 'parseFloat'));
+  result.pushObject(numberUtils.bytesToSize(memUsed, 1, 'parseFloat', 1000000) + ' of ' + numberUtils.bytesToSize(memCommitted, 1, 'parseFloat', 1000000));
   return result;
   }.property('model.jvmMemoryHeapUsed', 'model.jvmMemoryHeapCommitted'),
 

+ 4 - 3
ambari-web/app/views/main/dashboard/widgets/resource_manager_heap.js

@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var numberUtils = require('utils/number_utils');
 
 App.ResourceManagerHeapPieChartView = App.DashboardWidgetView.extend({
 
@@ -30,12 +31,12 @@ App.ResourceManagerHeapPieChartView = App.DashboardWidgetView.extend({
   model_type: 'yarn',
 
   hiddenInfo: function () {
-    var memUsed = this.get('model').get('jvmMemoryHeapUsed') * 1000000;
-    var memCommitted = this.get('model').get('jvmMemoryHeapCommitted') * 1000000;
+    var memUsed = this.get('model').get('jvmMemoryHeapUsed');
+    var memCommitted = this.get('model').get('jvmMemoryHeapCommitted');
     var percent = memCommitted > 0 ? ((100 * memUsed) / memCommitted) : 0;
     var result = [];
     result.pushObject(percent.toFixed(1) + '% used');
-    result.pushObject(memUsed.bytesToSize(1, "parseFloat") + ' of ' + memCommitted.bytesToSize(1, "parseFloat"));
+    result.pushObject(numberUtils.bytesToSize(memUsed, 1, "parseFloat", 1000000) + ' of ' + numberUtils.bytesToSize(memCommitted, 1, "parseFloat", 1000000));
     return result;
   }.property('model.jvmMemoryHeapUsed', 'model.jvmMemoryHeapCommitted'),