You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2013/08/06 02:21:37 UTC
git commit: AMBARI-2793. YARN Memory widget needed on dashboard.
(xiwang via yusaku)
Updated Branches:
refs/heads/trunk e7590a8aa -> e883524cb
AMBARI-2793. YARN Memory widget needed on dashboard. (xiwang via yusaku)
Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/e883524c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/e883524c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/e883524c
Branch: refs/heads/trunk
Commit: e883524cba19175f89c1fc6b425c574e689a1932
Parents: e7590a8
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Mon Aug 5 17:21:27 2013 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Mon Aug 5 17:21:27 2013 -0700
----------------------------------------------------------------------
ambari-web/app/mappers/service_mapper.js | 6 +-
ambari-web/app/messages.js | 1 +
ambari-web/app/models/service/yarn.js | 6 +-
ambari-web/app/views.js | 1 +
ambari-web/app/views/main/dashboard.js | 7 +-
.../views/main/dashboard/widgets/yarn_memory.js | 112 +++++++++++++++++++
6 files changed, 124 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/e883524c/ambari-web/app/mappers/service_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/service_mapper.js b/ambari-web/app/mappers/service_mapper.js
index 7c9cd21..dffc38d 100644
--- a/ambari-web/app/mappers/service_mapper.js
+++ b/ambari-web/app/mappers/service_mapper.js
@@ -78,7 +78,6 @@ App.servicesMapper = App.QuickDataMapper.create({
dfs_total_files: 'nameNodeComponent.ServiceComponentInfo.TotalFiles',
upgrade_status: 'nameNodeComponent.ServiceComponentInfo.UpgradeFinalized',
safe_mode_status: 'nameNodeComponent.ServiceComponentInfo.Safemode',
-
name_node_cpu: 'nameNodeComponent.host_components[0].metrics.cpu.cpu_wio',
name_node_rpc: 'nameNodeComponent.host_components[0].metrics.rpc.RpcQueueTime_avg_time'
},
@@ -105,9 +104,9 @@ App.servicesMapper = App.QuickDataMapper.create({
node_managers_count_unhealthy: 'resourceManagerComponent.ServiceComponentInfo.rm_metrics.cluster.unhealthyNMcount',
node_managers_count_rebooted: 'resourceManagerComponent.ServiceComponentInfo.rm_metrics.cluster.rebootedNMcount',
node_managers_count_decommissioned: 'resourceManagerComponent.ServiceComponentInfo.rm_metrics.cluster.decommissionedNMcount',
- allocated_memory: 'resourceManagerComponent.host_components[0].metrics.yarn.Queue.root.AllocatedMB',
+ yarn_memory_allocated: 'resourceManagerComponent.host_components[0].metrics.yarn.Queue.root.AllocatedMB',
+ yarn_memory_available: 'resourceManagerComponent.host_components[0].metrics.yarn.Queue.root.AvailableMB',
reserved_memory: 'resourceManagerComponent.host_components[0].metrics.yarn.Queue.root.ReservedMB',
- available_memory: 'resourceManagerComponent.host_components[0].metrics.yarn.Queue.root.AvailableMB',
queue: 'resourceManagerComponent.queue'
},
mapReduce2Config: {
@@ -138,7 +137,6 @@ App.servicesMapper = App.QuickDataMapper.create({
reduces_running: 'jobTrackerComponent.ServiceComponentInfo.jobtracker.running_reduces',
reduces_waiting: 'jobTrackerComponent.ServiceComponentInfo.jobtracker.waiting_reduces',
trackers_decommissioned: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.trackers_decommissioned',
-
job_tracker_cpu: 'jobTrackerComponent.host_components[0].metrics.cpu.cpu_wio',
job_tracker_rpc: 'jobTrackerComponent.host_components[0].metrics.rpc.RpcQueueTime_avg_time'
},
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/e883524c/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 8a0fbb3..476d762 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1182,6 +1182,7 @@ Em.I18n.translations = {
'dashboard.widgets.ResourceManagerHeap': 'ResourceManager Heap',
'dashboard.widgets.ResourceManagerUptime': 'ResourceManager Uptime',
'dashboard.widgets.NodeManagersLive': 'NodeManagers Live',
+ 'dashboard.widgets.YARNMemory': 'YARN Memory',
'dashboard.services':'Services',
'dashboard.services.hosts':'Hosts',
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/e883524c/ambari-web/app/models/service/yarn.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/service/yarn.js b/ambari-web/app/models/service/yarn.js
index 1eab2bb..43e6f65 100644
--- a/ambari-web/app/models/service/yarn.js
+++ b/ambari-web/app/models/service/yarn.js
@@ -41,9 +41,9 @@ App.YARNService = App.Service.extend({
resourceManagerStartTime: DS.attr('number'),
jvmMemoryHeapUsed: DS.attr('number'),
jvmMemoryHeapCommitted: DS.attr('number'),
- allocatedMemory: DS.attr('number'),
+ //allocatedMemory: DS.attr('number'),
reservedMemory: DS.attr('number'),
- availableMemory: DS.attr('number'),
+ //availableMemory: DS.attr('number'),
queue: DS.attr('string'),
queueFormatted: function() {
var queue = JSON.parse(this.get('queue'));
@@ -53,6 +53,8 @@ App.YARNService = App.Service.extend({
var queue = JSON.parse(this.get('queue'));
return objectUtils.recursiveKeysCount(queue);
}.property('queue'),
+ yarnMemoryAllocated: DS.attr('number'),
+ yarnMemoryAvailable: DS.attr('number'),
/**
* Provides a flat array of queue names.
* Example: root, root/default
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/e883524c/ambari-web/app/views.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index 9fd247f..0595562 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -121,6 +121,7 @@ require('views/main/dashboard/widgets/hbase_master_uptime');
require('views/main/dashboard/widgets/resource_manager_heap');
require('views/main/dashboard/widgets/resource_manager_uptime');
require('views/main/dashboard/widgets/node_managers_live');
+require('views/main/dashboard/widgets/yarn_memory');
require('views/main/service');
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/e883524c/ambari-web/app/views/main/dashboard.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/dashboard.js b/ambari-web/app/views/main/dashboard.js
index 42ccc01..8e9da3a 100644
--- a/ambari-web/app/views/main/dashboard.js
+++ b/ambari-web/app/views/main/dashboard.js
@@ -93,7 +93,7 @@ App.MainDashboardView = Em.View.extend({
'18', '1', '6', '5', '9',
'3', '7', '15', '16', '20',
'19', '21', '23',
- '24', '25', '26' // all yarn
+ '24', '25', '26', '27'// all yarn
]; // all in order
var hiddenFull = [['22','Region In Transition']];
if (this.get('hdfs_model') == null) {
@@ -118,7 +118,7 @@ App.MainDashboardView = Em.View.extend({
}, this);
hiddenFull = [];
}if (this.get('yarn_model') == null) {
- var yarn = ['24', '25', '26'];
+ var yarn = ['24', '25', '26', '27'];
yarn.forEach ( function (item) {
var index = visibleFull.indexOf(item);
visibleFull.splice(index, 1);
@@ -275,6 +275,7 @@ App.MainDashboardView = Em.View.extend({
case '24': return App.ResourceManagerHeapPieChartView;
case '25': return App.ResourceManagerUptimeView;
case '26': return App.NodeManagersLiveView;
+ case '27': return App.YARNMemoryPieChartView;
}
},
@@ -285,7 +286,7 @@ App.MainDashboardView = Em.View.extend({
hidden: [],
threshold: {1: [80, 90], 2: [85, 95], 3: [90, 95], 4: [80, 90], 5: [1000, 3000], 6: [70, 90], 7: [90, 95], 8: [50, 75], 9: [30000, 120000],
10: [], 11: [], 12: [], 13: [], 14: [], 15: [], 16: [], 17: [], 18: [], 19: [], 20: [70, 90], 21: [10, 19.2], 22: [3, 10], 23: [],
- 24: [70, 90], 25: [], 26: [50, 75]} // id:[thresh1, thresh2]
+ 24: [70, 90], 25: [], 26: [50, 75], 27: [50, 75]} // id:[thresh1, thresh2]
}),
persistKey: function () {
var loginName = App.router.get('loginName');
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/e883524c/ambari-web/app/views/main/dashboard/widgets/yarn_memory.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/dashboard/widgets/yarn_memory.js b/ambari-web/app/views/main/dashboard/widgets/yarn_memory.js
new file mode 100644
index 0000000..da96be0
--- /dev/null
+++ b/ambari-web/app/views/main/dashboard/widgets/yarn_memory.js
@@ -0,0 +1,112 @@
+/**
+ * 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');
+var numberUtils = require('utils/number_utils');
+
+App.YARNMemoryPieChartView = App.DashboardWidgetView.extend({
+
+ templateName: require('templates/main/dashboard/widgets/pie_chart'),
+ title: Em.I18n.t('dashboard.widgets.YARNMemory'),
+ id: '27',
+
+ isPieChart: true,
+ isText: false,
+ isProgressBar: false,
+ model_type: 'yarn',
+
+ hiddenInfo: function () {
+ var memUsed = this.get('model').get('yarnMemoryAllocated');
+ var memCommitted = this.get('model').get('yarnMemoryAvailable');
+ var percent = memCommitted > 0 ? ((100 * memUsed) / memCommitted) : 0;
+ var result = [];
+ result.pushObject(percent.toFixed(1) + '% used');
+ result.pushObject(numberUtils.bytesToSize(memUsed, 1, 'parseFloat', 1024 * 1024) + ' of ' + numberUtils.bytesToSize(memCommitted, 1, 'parseFloat', 1024 * 1024));
+ return result;
+ }.property('model.yarnMemoryAllocated', 'model.yarnMemoryAvailable'),
+
+ thresh1: 40,// can be customized
+ thresh2: 70,
+ maxValue: 100,
+
+ isPieExist: function () {
+ var total = this.get('model.yarnMemoryAvailable');
+ return total > 0 ;
+ }.property('model.yarnMemoryAvailable'),
+
+ content: App.ChartPieView.extend({
+
+ model: null, //data bind here
+ id: 'widget-yarn-memory', // id in html
+ stroke: '#D6DDDF', //light grey
+ thresh1: null,
+ thresh2: null,
+ innerR: 25,
+
+ existCenterText: true,
+ centerTextColor: function () {
+ return this.get('contentColor');
+ }.property('contentColor'),
+
+ palette: new Rickshaw.Color.Palette({
+ scheme: [ '#FFFFFF', '#D6DDDF'].reverse()
+ }),
+
+ data: function () {
+ var memUsed = this.get('model').get('yarnMemoryAllocated') * 1000000;
+ var memCommitted = this.get('model').get('yarnMemoryAvailable') * 1000000;
+ var percent = memCommitted > 0 ? ((100 * memUsed) / memCommitted).toFixed() : 0;
+ return [ percent, 100 - percent];
+ }.property('model.yarnMemoryAllocated', 'model.yarnMemoryAvailable'),
+
+ contentColor: function (){
+ var used = parseFloat(this.get('data')[0]);
+ var thresh1 = parseFloat(this.get('thresh1'));
+ var thresh2 = parseFloat(this.get('thresh2'));
+ var color_green = '#95A800';
+ var color_red = '#B80000';
+ var color_orange = '#FF8E00';
+ if (used <= thresh1) {
+ this.set('palette', new Rickshaw.Color.Palette({
+ scheme: [ '#FFFFFF', color_green ].reverse()
+ }))
+ return color_green;
+ } else if (used <= thresh2) {
+ this.set('palette', new Rickshaw.Color.Palette({
+ scheme: [ '#FFFFFF', color_orange ].reverse()
+ }))
+ return color_orange;
+ } else {
+ this.set('palette', new Rickshaw.Color.Palette({
+ scheme: [ '#FFFFFF', color_red ].reverse()
+ }))
+ return color_red;
+ }
+ }.property('data', 'this.thresh1', 'this.thresh2'),
+
+ refreshSvg: function () {
+ // remove old svg
+ var old_svg = $("#" + this.id);
+ old_svg.remove();
+
+ // draw new svg
+ this.appendSvg();
+ }.observes('this.data', 'this.thresh1', 'this.thresh2')
+ })
+
+})
\ No newline at end of file