Updated Branches: refs/heads/trunk ff720cd93 -> 747f5897e
AMBARI-3693 [perf] Hosts UI should not load host_components unless editing a host. (atkach) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/747f5897 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/747f5897 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/747f5897 Branch: refs/heads/trunk Commit: 747f5897ecea6d8b05427c5835d72b9201c98107 Parents: ff720cd Author: atkach <[email protected]> Authored: Tue Nov 5 15:15:47 2013 +0200 Committer: atkach <[email protected]> Committed: Tue Nov 5 15:15:47 2013 +0200 ---------------------------------------------------------------------- .../controllers/global/cluster_controller.js | 9 +- .../app/controllers/global/update_controller.js | 21 +++- ambari-web/app/mappers/hosts_mapper.js | 119 +++++++++---------- ambari-web/app/mappers/server_data_mapper.js | 5 + ambari-web/app/models/host.js | 20 +++- ambari-web/app/routes/add_host_routes.js | 4 +- 6 files changed, 105 insertions(+), 73 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/747f5897/ambari-web/app/controllers/global/cluster_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js index be350d8..dc9386e 100644 --- a/ambari-web/app/controllers/global/cluster_controller.js +++ b/ambari-web/app/controllers/global/cluster_controller.js @@ -268,13 +268,14 @@ App.ClusterController = Em.Controller.extend({ return false; } var testUrl = App.get('isHadoop2Stack') ? '/data/dashboard/HDP2/services.json':'/data/dashboard/services.json'; - //desired_state property is eliminated since calculateState function is commented out, it become useless - var servicesUrl = this.getUrl(testUrl, '/services?fields=ServiceInfo,components/host_components/HostRoles/state'); + var servicesUrl = '/services?fields=ServiceInfo,components/host_components/HostRoles/state'; if (App.Service.find('HBASE')) { // HBase installed. We need the haStatus field as it has // moved to another field. servicesUrl += ',components/host_components/metrics/hbase/master/IsActiveMaster'; } + //desired_state property is eliminated since calculateState function is commented out, it become useless + servicesUrl = this.getUrl(testUrl, servicesUrl); App.HttpClient.get(servicesUrl, App.statusMapper, { complete: callback @@ -318,7 +319,9 @@ App.ClusterController = Em.Controller.extend({ return; } var clusterUrl = this.getUrl('/data/clusters/cluster.json', '?fields=Clusters'); - var hostsRealUrl = '/hosts?fields=Hosts/host_name,Hosts/public_host_name,Hosts/cpu_count,Hosts/total_mem,Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components,metrics/disk,metrics/load/load_one'; + var hostsRealUrl = '/hosts?fields=Hosts/host_name,Hosts/public_host_name,Hosts/cpu_count,Hosts/total_mem,' + + 'Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components,' + + 'metrics/disk,metrics/load/load_one,metrics/cpu/cpu_system,metrics/cpu/cpu_user,metrics/memory/mem_total,metrics/memory/mem_free'; var usersUrl = App.testMode ? '/data/users/users.json' : App.apiPrefix + '/users/?fields=*'; var racksUrl = "/data/racks/racks.json"; var dataSetUrl = "/data/mirroring/all_datasets.json"; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/747f5897/ambari-web/app/controllers/global/update_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js index a30307e..addc0c7 100644 --- a/ambari-web/app/controllers/global/update_controller.js +++ b/ambari-web/app/controllers/global/update_controller.js @@ -37,7 +37,7 @@ App.UpdateController = Em.Controller.extend({ */ updateAll:function(){ if(this.get('isWorking')) { - App.updater.run(this, 'updateHost', 'isWorking'); + App.updater.run(this, 'updateHostConditionally', 'isWorking'); App.updater.run(this, 'updateServiceMetric', 'isWorking'); App.updater.run(this, 'graphsUpdate', 'isWorking'); if (App.supports.hostOverrides) { @@ -45,13 +45,22 @@ App.UpdateController = Em.Controller.extend({ } } }.observes('isWorking'), + updateHostConditionally: function (callback) { + var location = App.router.get('location.lastSetURL'); + if (/\/main\/hosts.*/.test(location)) { + this.updateHost(callback); + } else { + callback(); + } + }, updateHost:function(callback) { - var testUrl = App.get('isHadoop2Stack') ? '/data/hosts/HDP2/hosts.json':'/data/hosts/hosts.json'; - var hostsUrl = this.getUrl(testUrl, '/hosts?fields=Hosts/host_name,Hosts/host_status,Hosts/last_heartbeat_time,host_components,metrics/disk,metrics/load/load_one'); - App.HttpClient.get(hostsUrl, App.hostsMapper, { - complete: callback - }); + var testUrl = App.get('isHadoop2Stack') ? '/data/hosts/HDP2/hosts.json' : '/data/hosts/hosts.json'; + var hostsUrl = this.getUrl(testUrl, '/hosts?fields=Hosts/host_name,Hosts/last_heartbeat_time,' + + 'metrics/disk,metrics/load/load_one,metrics/cpu/cpu_system,metrics/cpu/cpu_user,metrics/memory/mem_total,metrics/memory/mem_free'); + App.HttpClient.get(hostsUrl, App.hostsMapper, { + complete: callback + }); }, graphs: [], graphsUpdate: function (callback) { http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/747f5897/ambari-web/app/mappers/hosts_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/hosts_mapper.js b/ambari-web/app/mappers/hosts_mapper.js index cd87744..32171d0 100644 --- a/ambari-web/app/mappers/hosts_mapper.js +++ b/ambari-web/app/mappers/hosts_mapper.js @@ -16,7 +16,6 @@ */ var App = require('app'); -var cacheData = {}; App.hostsMapper = App.QuickDataMapper.create({ @@ -41,84 +40,82 @@ App.hostsMapper = App.QuickDataMapper.create({ load_one: 'metrics.load.load_one', load_five: 'metrics.load.load_five', load_fifteen: 'metrics.load.load_fifteen', - cpu_usage: 'cpu_usage', - memory_usage: 'memory_usage', + cpu_system: 'metrics.cpu.cpu_system', + cpu_user: 'metrics.cpu.cpu_user', + mem_total: 'metrics.memory.mem_total', + mem_free: 'metrics.memory.mem_free', last_heart_beat_time: "Hosts.last_heartbeat_time", os_arch: 'Hosts.os_arch', os_type: 'Hosts.os_type', - ip: 'Hosts.ip', - disk_usage: 'disk_usage' + ip: 'Hosts.ip' }, map: function (json) { + console.time('App.hostsMapper execution time'); if (json.items) { - var result = this.parse(json.items); + var result = []; + var hostIds = {}; + var cacheData = App.cache['Hosts']; + + json.items.forEach(function (item) { + //receive host_components when added hosts + item.host_components = item.host_components || []; + item.host_components.forEach(function (host_component) { + host_component.id = host_component.HostRoles.component_name + "_" + host_component.HostRoles.host_name; + }, this); + + hostIds[item.Hosts.host_name] = true; + result.push(this.parseIt(item, this.config)); + }, this); + result = this.sortByPublicHostName(result); + var clientHosts = App.Host.find(); - if (clientHosts != null && clientHosts.get('length') < result.length) { - result.forEach(function (host) { - cacheData[host.id] = host; - }); - } else if (clientHosts != null && clientHosts.get('length') > result.length) { - var hostsToDelete = []; - clientHosts.forEach(function (host) { - if (host !== null && result.filterProperty('host_name',host.get('hostName')).length === 0) { - // Delete old ones as new ones will be - // loaded by loadMany(). - hostsToDelete.push(host); - delete cacheData[host.get('hostName')]; - } - }); - hostsToDelete.forEach(function (host) { - host.deleteRecord(); - host.get('stateManager').transitionTo('loading'); - }); + + if (clientHosts) { + // hosts were added + if (clientHosts.get('length') < result.length) { + result.forEach(function (host) { + cacheData[host.id] = { + ip: host.ip, + os_arch: host.os_arch, + os_type: host.os_type, + public_host_name: host.public_host_name, + memory: host.memory, + cpu: host.cpu, + host_components: host.host_components + }; + }); + } + // hosts were deleted + if (clientHosts.get('length') > result.length) { + clientHosts.forEach(function (host) { + if (host && !hostIds[host.get('hostName')]) { + // Delete old ones as new ones will be + // loaded by loadMany(). + host.deleteRecord(); + host.get('stateManager').transitionTo('loading'); + delete cacheData[host.get('id')]; + } + }); + } } //restore properties from cache instead request them from server result.forEach(function (host) { var cacheHost = cacheData[host.id]; if (cacheHost) { - host.ip ? cacheHost.ip = host.ip : host.ip = cacheHost.ip; - host.os_arch ? cacheHost.os_arch = host.os_arch : host.os_arch = cacheHost.os_arch; - host.os_type ? cacheHost.os_type = host.os_type : host.os_type = cacheHost.os_type; - host.public_host_name ? cacheHost.public_host_name = host.public_host_name : host.public_host_name = cacheHost.public_host_name; - host.memory ? cacheHost.memory = host.memory : host.memory = cacheHost.memory; - host.cpu ? cacheHost.cpu = host.cpu : host.cpu = cacheHost.cpu; + host.ip = cacheHost.ip; + host.os_arch = cacheHost.os_arch; + host.os_type = cacheHost.os_type; + host.public_host_name = cacheHost.public_host_name; + host.memory = cacheHost.memory; + host.cpu = cacheHost.cpu; + host.host_components = cacheHost.host_components; } }); App.store.loadMany(this.get('model'), result); } + console.timeEnd('App.hostsMapper execution time'); }, - parse: function(items) { - var result = []; - items.forEach(function (item) { - - // Disk Usage - if (item.metrics && item.metrics.disk && item.metrics.disk.disk_total && item.metrics.disk.disk_free) { - var diskUsed = item.metrics.disk.disk_total - item.metrics.disk.disk_free; - var diskUsedPercent = (100 * diskUsed) / item.metrics.disk.disk_total; - item.disk_usage = diskUsedPercent.toFixed(1); - } - // CPU Usage - if (item.metrics && item.metrics.cpu && item.metrics.cpu.cpu_system && item.metrics.cpu.cpu_user) { - var cpuUsedPercent = item.metrics.cpu.cpu_system + item.metrics.cpu.cpu_user; - item.cpu_usage = cpuUsedPercent.toFixed(1); - } - // Memory Usage - if (item.metrics && item.metrics.memory && item.metrics.memory.mem_free && item.metrics.memory.mem_total) { - var memUsed = item.metrics.memory.mem_total - item.metrics.memory.mem_free; - var memUsedPercent = (100 * memUsed) / item.metrics.memory.mem_total; - item.memory_usage = memUsedPercent.toFixed(1); - } - - item.host_components.forEach(function (host_component) { - host_component.id = host_component.HostRoles.component_name + "_" + host_component.HostRoles.host_name; - }, this); - result.push(this.parseIt(item, this.config)); - - }, this); - result = this.sortByPublicHostName(result); - return result; - }, /** * Default data sorting by public_host_name field * @param data http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/747f5897/ambari-web/app/mappers/server_data_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/server_data_mapper.js b/ambari-web/app/mappers/server_data_mapper.js index 60be64f..e77a261 100644 --- a/ambari-web/app/mappers/server_data_mapper.js +++ b/ambari-web/app/mappers/server_data_mapper.js @@ -18,6 +18,11 @@ var App = require('app'); +//initialize common cache container for mappers +App.cache = { + 'Hosts': {} +}; + App.ServerDataMapper = Em.Object.extend({ jsonKey: false, map: function (json) { http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/747f5897/ambari-web/app/models/host.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/host.js b/ambari-web/app/models/host.js index 457133b..287d21b 100644 --- a/ambari-web/app/models/host.js +++ b/ambari-web/app/models/host.js @@ -33,14 +33,30 @@ App.Host = DS.Model.extend({ ip: DS.attr('string'), rack: DS.attr('string'), healthStatus: DS.attr('string'), - cpuUsage: DS.attr('number'), - memoryUsage: DS.attr('number'), lastHeartBeatTime: DS.attr('number'), osType: DS.attr("string"), diskInfo: DS.attr('object'), loadOne:DS.attr('number'), loadFive:DS.attr('number'), loadFifteen:DS.attr('number'), + memTotal:DS.attr('number'), + memFree:DS.attr('number'), + cpuSystem:DS.attr('number'), + cpuUser:DS.attr('number'), + + cpuUsage: function () { + if (this.get('cpuSystem') && this.get('cpu_user')) { + return (this.get('cpuSystem') + this.get('cpu_user')).toFixed(1); + } + }.property('cpuSystem', 'cpuUser'), + + memoryUsage: function () { + if (this.get('memFree') && this.get('memTotal')) { + var memUsed = this.get('memTotal') - this.get('memFree'); + var memUsedPercent = (100 * memUsed) / this.get('memTotal'); + return memUsedPercent.toFixed(1); + } + }.property('memTotal', 'memFree'), criticalAlertsCount: function () { return App.router.get('clusterController.alerts').filterProperty('hostName', this.get('hostName')).filterProperty('isOk', false).filterProperty('ignoredForHosts', false).length; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/747f5897/ambari-web/app/routes/add_host_routes.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/routes/add_host_routes.js b/ambari-web/app/routes/add_host_routes.js index 8b0d53e..8f6e5d9 100644 --- a/ambari-web/app/routes/add_host_routes.js +++ b/ambari-web/app/routes/add_host_routes.js @@ -297,7 +297,9 @@ module.exports = Em.Route.extend({ back: Em.Router.transitionTo('step5'), complete: function (router, context) { var addHostController = router.get('addHostController'); - var hostsUrl = '/hosts?fields=Hosts/host_name,Hosts/public_host_name,Hosts/cpu_count,Hosts/total_mem,Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components,metrics/disk,metrics/load/load_one'; + var hostsUrl = '/hosts?fields=Hosts/host_name,Hosts/public_host_name,Hosts/cpu_count,Hosts/total_mem,' + + 'Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components,' + + 'metrics/disk,metrics/load/load_one,metrics/cpu/cpu_system,metrics/cpu/cpu_user,metrics/memory/mem_total,metrics/memory/mem_free'; router.get('clusterController').requestHosts(hostsUrl, function () { console.log('Request for hosts, with immutable parameters') });
