Author: yusaku
Date: Fri Jan 11 01:20:57 2013
New Revision: 1431778
URL: http://svn.apache.org/viewvc?rev=1431778&view=rev
Log:
AMBARI-1145. Cluster Management refactoring. (yusaku)
Modified:
incubator/ambari/trunk/ambari-web/app/controllers/installer.js
incubator/ambari/trunk/ambari-web/app/controllers/main/host/add_controller.js
incubator/ambari/trunk/ambari-web/app/controllers/main/service/add_controller.js
incubator/ambari/trunk/ambari-web/app/controllers/main/service/item.js
incubator/ambari/trunk/ambari-web/app/controllers/wizard.js
incubator/ambari/trunk/ambari-web/app/controllers/wizard/step2_controller.js
incubator/ambari/trunk/ambari-web/app/controllers/wizard/step8_controller.js
incubator/ambari/trunk/ambari-web/app/data/config_mapping.js
incubator/ambari/trunk/ambari-web/app/data/config_properties.js
incubator/ambari/trunk/ambari-web/app/mappers/service_mapper.js
incubator/ambari/trunk/ambari-web/app/routes/add_host_routes.js
incubator/ambari/trunk/ambari-web/app/utils/db.js
incubator/ambari/trunk/ambari-web/app/utils/validator.js
incubator/ambari/trunk/ambari-web/app/views/main/service/info/summary.js
Modified: incubator/ambari/trunk/ambari-web/app/controllers/installer.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/controllers/installer.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/controllers/installer.js (original)
+++ incubator/ambari/trunk/ambari-web/app/controllers/installer.js Fri Jan 11
01:20:57 2013
@@ -39,11 +39,11 @@ App.InstallerController = App.WizardCont
}),
getCluster: function(){
- return jQuery.extend(this.get('clusterStatusTemplate'), {});
+ return jQuery.extend({}, this.get('clusterStatusTemplate'));
},
getInstallOptions: function(){
- return jQuery.extend(this.get('installOptionsTemplate'), {});
+ return jQuery.extend({}, this.get('installOptionsTemplate'));
},
getHosts: function(){
Modified:
incubator/ambari/trunk/ambari-web/app/controllers/main/host/add_controller.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/controllers/main/host/add_controller.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-web/app/controllers/main/host/add_controller.js
(original)
+++
incubator/ambari/trunk/ambari-web/app/controllers/main/host/add_controller.js
Fri Jan 11 01:20:57 2013
@@ -55,12 +55,10 @@ App.AddHostController = App.WizardContro
}),
getCluster: function(){
- return jQuery.extend(this.get('clusterStatusTemplate'), {
- name: App.router.getClusterName()
- });
+ return jQuery.extend({}, this.get('clusterStatusTemplate'), {name:
App.router.getClusterName()});
},
getInstallOptions: function(){
- return jQuery.extend(this.get('installOptionsTemplate'), {});
+ return jQuery.extend({}, this.get('installOptionsTemplate'));
},
getHosts: function(){
Modified:
incubator/ambari/trunk/ambari-web/app/controllers/main/service/add_controller.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/controllers/main/service/add_controller.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-web/app/controllers/main/service/add_controller.js
(original)
+++
incubator/ambari/trunk/ambari-web/app/controllers/main/service/add_controller.js
Fri Jan 11 01:20:57 2013
@@ -55,9 +55,7 @@ App.AddServiceController = App.WizardCon
}),
getCluster: function(){
- return jQuery.extend(this.get('clusterStatusTemplate'), {
- name: App.router.getClusterName()
- });
+ return jQuery.extend({}, this.get('clusterStatusTemplate'), {name:
App.router.getClusterName()});
},
/**
Modified: incubator/ambari/trunk/ambari-web/app/controllers/main/service/item.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/controllers/main/service/item.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/controllers/main/service/item.js
(original)
+++ incubator/ambari/trunk/ambari-web/app/controllers/main/service/item.js Fri
Jan 11 01:20:57 2013
@@ -76,6 +76,7 @@ App.MainServiceItemController = Em.Contr
primary: 'Yes',
secondary: 'No',
onPrimary: function () {
+ self.get('content.components').setEach('workStatus',
App.Component.Status.starting);
self.sendCommandToServer('/services/' +
self.get('content.serviceName').toUpperCase(), "PUT", {
ServiceInfo: {
state: 'STARTED'
@@ -131,6 +132,7 @@ App.MainServiceItemController = Em.Contr
primary: 'Yes',
secondary: 'No',
onPrimary: function() {
+ self.get('content.components').setEach('workStatus',
App.Component.Status.stopping);
self.sendCommandToServer('/services/' +
self.get('content.serviceName').toUpperCase(), "PUT",{
ServiceInfo:{
state: 'INSTALLED'
Modified: incubator/ambari/trunk/ambari-web/app/controllers/wizard.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/controllers/wizard.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/controllers/wizard.js (original)
+++ incubator/ambari/trunk/ambari-web/app/controllers/wizard.js Fri Jan 11
01:20:57 2013
@@ -207,7 +207,7 @@ App.WizardController = Em.Controller.ext
* Remove all data for installOptions step
*/
clearInstallOptions: function () {
- var installOptions = jQuery.extend(this.get('installOptionsTemplate'), {});
+ var installOptions = jQuery.extend({}, this.get('installOptionsTemplate'));
this.set('content.installOptions', installOptions);
this.save('installOptions');
this.set('content.hosts', []);
Modified:
incubator/ambari/trunk/ambari-web/app/controllers/wizard/step2_controller.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/controllers/wizard/step2_controller.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-web/app/controllers/wizard/step2_controller.js
(original)
+++
incubator/ambari/trunk/ambari-web/app/controllers/wizard/step2_controller.js
Fri Jan 11 01:20:57 2013
@@ -66,23 +66,27 @@ App.WizardStep2Controller = Em.Controlle
return result;
},
- checkHosts: function() {
- if (this.get('hostNames').trim() !== '') {
- App.db.setStep2WizardFirstRun(false);
- }
- }.observes('hostNames'),
-
- hostsError: function () {
- if (App.db.getStep2WizardFirstRun()) {
- return null;
- }
- if (this.get('hasSubmitted') && this.get('hostNames').trim() === '') {
- return Em.I18n.t('installer.step2.hostName.error.required');
- } else if (this.isAllHostNamesValid() === false) {
- return Em.I18n.t('installer.step2.hostName.error.invalid');
+ hostsError: null,
+
+ checkHostError: function () {
+ if (this.get('hostNames').trim() === '') {
+ this.set('hostsError',
Em.I18n.t('installer.step2.hostName.error.required'));
+ }
+ else {
+ if (this.isAllHostNamesValid() === false) {
+ this.set('hostsError',
Em.I18n.t('installer.step2.hostName.error.invalid'));
+ }
+ else {
+ this.set('hostsError', null);
+ }
}
- return null;
- }.property('hostNames', 'hasSubmitted'),
+ },
+
+ checkHostAfterSubmitHandler: function() {
+ if (this.get('hasSubmitted')) {
+ this.checkHostError();
+ }
+ }.observes('hasSubmitted', 'hostNames'),
sshKeyError: function () {
if (this.get('hasSubmitted') && this.get('manualInstall') === false &&
this.get('sshKey').trim() === '') {
@@ -128,8 +132,14 @@ App.WizardStep2Controller = Em.Controlle
if (this.get('isSubmitDisabled')) {
return false;
}
+
this.set('hasSubmitted', true);
+ this.checkHostError();
+ if (this.get('hostsError')) {
+ return false;
+ }
+
this.updateHostNameArr();
if(this.isPattern)
@@ -139,7 +149,6 @@ App.WizardStep2Controller = Em.Controlle
}
this.proceedNext();
-
},
patternExpression: function(){
@@ -226,7 +235,7 @@ App.WizardStep2Controller = Em.Controlle
},
isSubmitDisabled: function () {
- return (this.get('hostsError') || this.get('sshKeyError') ||
(this.get('hostNames').trim() === '' && App.db.getStep2WizardFirstRun()));
+ return (this.get('hostsError') || this.get('sshKeyError'));
}.property('hostsError', 'sshKeyError'),
saveHosts: function(){
Modified:
incubator/ambari/trunk/ambari-web/app/controllers/wizard/step8_controller.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/controllers/wizard/step8_controller.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-web/app/controllers/wizard/step8_controller.js
(original)
+++
incubator/ambari/trunk/ambari-web/app/controllers/wizard/step8_controller.js
Fri Jan 11 01:20:57 2013
@@ -226,7 +226,7 @@ App.WizardStep8Controller = Em.Controlle
var key = _keyValue.match(/(.+)=/);
var value = _keyValue.match(/=(.*)/);
if (key) {
- this.setSiteProperty(key[1], value[1], _site.filename);
+ this.setSiteProperty(key[1], value[1], _site.name + '.xml');
}
}, this);
Modified: incubator/ambari/trunk/ambari-web/app/data/config_mapping.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/data/config_mapping.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/data/config_mapping.js (original)
+++ incubator/ambari/trunk/ambari-web/app/data/config_mapping.js Fri Jan 11
01:20:57 2013
@@ -718,6 +718,7 @@ module.exports = [
"value": "rs\/_HOST@<templateName[0]>",
"filename": "hbase-site.xml"
},
+ /*
{
"name": "hbase.coprocessor.region.classes",
"templateName": ["preloaded_regioncoprocessor_classes"],
@@ -725,6 +726,7 @@ module.exports = [
"value": "<templateName[0]>",
"filename": "hbase-site.xml"
},
+ */
{
"name": "dfs.support.append",
"templateName": ["hdfs_support_append"],
Modified: incubator/ambari/trunk/ambari-web/app/data/config_properties.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/data/config_properties.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/data/config_properties.js (original)
+++ incubator/ambari/trunk/ambari-web/app/data/config_properties.js Fri Jan 11
01:20:57 2013
@@ -371,7 +371,7 @@ module.exports =
},
{
"id": "puppet var",
- "name": "regionserver_memstore_upperlimitt",
+ "name": "regionserver_memstore_upperlimit",
"displayName": "regionserver_memstore_upperlimit",
"description": "",
"defaultValue": "0.4",
Modified: incubator/ambari/trunk/ambari-web/app/mappers/service_mapper.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/mappers/service_mapper.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/mappers/service_mapper.js (original)
+++ incubator/ambari/trunk/ambari-web/app/mappers/service_mapper.js Fri Jan 11
01:20:57 2013
@@ -145,54 +145,41 @@ App.servicesMapper = App.QuickDataMapper
}
if (json.items) {
- var result = [];
- json.items.forEach(function (item) {
- var finalConfig = jQuery.extend({}, this.config);
- var finalJson = [];
- item.host_components = [];
-// var json = this.parseIt(item, this.config);
-// if(App.Service.find().someProperty('id', json.id)){
-// var fieldsToUpdate = [
-// 'work_status',
-// 'components',
-// 'host_components'
-// ]
-// this.updateRecord(App.Service.find().findProperty('id', json.id),
json, fieldsToUpdate);
-// return;
-// }
- if
(this.get('model').find(item.ServiceInfo.service_name).get('isLoaded')) {
- this.update(item);
- return;
- }
- item.components.forEach(function (component) {
- component.host_components.forEach(function (host_component) {
- host_component.id = host_component.HostRoles.component_name + "_"
+ host_component.HostRoles.host_name;
- item.host_components.push(host_component.id);
+ // Host components
+ var result = [];
+ json.items.forEach(function(item){
+ item.components.forEach(function(component){
+ component.host_components.forEach(function(host_component){
+ result.push(this.parseIt(host_component, this.config3));
}, this)
- }, this);
-
- if (item && item.ServiceInfo && item.ServiceInfo.service_name ==
"HDFS") {
- // Change the JSON so that it is easy to map
- finalJson = this.hdfsMapper(item);
- result.push(finalJson);
- App.store.load(App.HDFSService, finalJson);
- } else if (item && item.ServiceInfo && item.ServiceInfo.service_name
== "MAPREDUCE") {
- finalJson = this.mapreduceMapper(item);
- result.push(finalJson);
- App.store.load(App.MapReduceService, finalJson);
- } else if (item && item.ServiceInfo && item.ServiceInfo.service_name
== "HBASE") {
- finalJson = this.hbaseMapper(item);
- result.push(finalJson);
- App.store.load(App.HBaseService, finalJson);
+ }, this)
+ }, this);
+ var newHostComponents = [];
+ result.forEach(function(hcJson){
+ hcJson.id = hcJson.component_name + '_' + hcJson.host_id;
+ var component = App.HostComponent.find(hcJson.id);
+ if (component && component.get('isLoaded')) { // UPDATE
+ if (hcJson.work_status) {
+ component.set('workStatus', hcJson.work_status);
+ }
+ if (hcJson.component_name) {
+ component.set('componentName', hcJson.component_name);
+ }
+ if (hcJson.host_id) {
+ component.set('host', App.Host.find(hcJson.host_id));
+ }
+ if (hcJson.service_id) {
+ component.set('service', App.Service.find(hcJson.service_id));
+ }
} else {
- result.push(this.parseIt(item, this.config));
+ newHostComponents.push(hcJson);
}
- }, this);
-
+ });
- result = this.sortByOrder(this.get('servicesSortOrder'), result);
- App.store.loadMany(this.get('model'), result);
+ if (newHostComponents.length > 0) {
+ App.store.loadMany(this.get('model3'), newHostComponents);
+ }
// Service components
result = [];
@@ -215,43 +202,110 @@ App.servicesMapper = App.QuickDataMapper
newComponents.push(componentJson);
}
});
+
if (newComponents.length > 0) {
App.store.loadMany(this.get('model2'), newComponents);
}
- // Host components
- result = [];
- json.items.forEach(function(item){
- item.components.forEach(function(component){
- component.host_components.forEach(function(host_component){
- result.push(this.parseIt(host_component, this.config3));
- }, this)
- }, this)
- }, this);
- var newHostComponents = [];
- result.forEach(function(hcJson){
- hcJson.id = hcJson.component_name + '_' + hcJson.host_id;
- var component = App.HostComponent.find(hcJson.id);
- if (component && component.get('isLoaded')) { // UPDATE
- if (hcJson.work_status) {
- component.set('workStatus', hcJson.work_status);
- }
- if (hcJson.component_name) {
- component.set('componentName', hcJson.component_name);
+ //Services
+ var newServices = [];
+ json.items.forEach(function (item) {
+ var finalJson = {};
+ var serviceJson = this.parseIt(item, this.config);
+ var serviceFields = [
+ 'work_status',
+ 'components',
+ 'host_components'
+ ]
+ if (item && item.ServiceInfo && item.ServiceInfo.service_name ==
"HDFS") {
+ // Change the JSON so that it is easy to map
+ finalJson = this.hdfsMapper(item);
+ if(App.Service.find().someProperty('id', serviceJson.id)){
+ var hdfsFields = [
+ 'version',
+ 'name_node_start_time',
+ 'jvm_memory_heap_committed',
+ 'jvm_memory_heap_used',
+ 'capacity_used',
+ 'capacity_total',
+ 'dfs_total_blocks',
+ 'dfs_corrupt_blocks',
+ 'dfs_missing_blocks',
+ 'dfs_under_replicated_blocks',
+ 'dfs_total_files',
+ 'upgrade_status',
+ 'safe_mode_status',
+ 'decommission_data_nodes',
+ 'live_data_nodes',
+ 'dead_data_nodes'
+ ];
+ this.updateRecord(App.Service.find().findProperty('id',
serviceJson.id), serviceJson, serviceFields);
+ this.updateRecord(App.HDFSService.find().findProperty('id',
finalJson.id), finalJson, hdfsFields);
+ } else {
+ newServices.push(serviceJson);
+ App.store.load(App.HDFSService, finalJson);
}
- if (hcJson.host_id) {
- component.set('host', App.Host.find(hcJson.host_id));
+ } else if (item && item.ServiceInfo && item.ServiceInfo.service_name
== "MAPREDUCE") {
+ finalJson = this.mapreduceMapper(item);
+ if(App.Service.find().someProperty('id', serviceJson.id)){
+ var mapReduceFields = [
+ 'version',
+ 'job_tracker_start_time',
+ 'job_tracker_heap_used)',
+ 'job_tracker_heap_max',
+ 'map_slots',
+ 'reduce_slots',
+ 'jobs_submitted',
+ 'jobs_completed',
+ 'map_slots_occupied',
+ 'map_slots_reserved',
+ 'reduce_slots_occupied',
+ 'reduce_slots_reserved)',
+ 'maps_running',
+ 'maps_waiting',
+ 'reduces_running',
+ 'reduces_waiting',
+ 'trackers_decommissioned'
+ ]
+ this.updateRecord(App.Service.find().findProperty('id',
finalJson.id), serviceJson, serviceFields);
+ this.updateRecord(App.MapReduceService.find().findProperty('id',
finalJson.id), finalJson, mapReduceFields);
+ } else {
+ newServices.push(serviceJson);
+ App.store.load(App.MapReduceService, finalJson);
}
- if (hcJson.service_id) {
- component.set('service', App.Service.find(hcJson.service_id));
+ } else if (item && item.ServiceInfo && item.ServiceInfo.service_name
== "HBASE") {
+ finalJson = this.hbaseMapper(item);
+ if(App.Service.find().someProperty('id', serviceJson.id)){
+ var hbaseFields = [
+ 'version',
+ 'master_start_time',
+ 'master_active_time',
+ 'average_load',
+ 'regions_in_transition',
+ 'revision',
+ 'heap_memory_used',
+ 'heap_memory_max'
+ ]
+ this.updateRecord(App.Service.find().findProperty('id',
serviceJson.id), serviceJson, serviceFields);
+ this.updateRecord(App.HBaseService.find().findProperty('id',
finalJson.id), finalJson, hbaseFields);
+ } else {
+ newServices.push(serviceJson);
+ App.store.load(App.HBaseService, finalJson);
}
} else {
- newHostComponents.push(hcJson);
+ if(App.Service.find().someProperty('id', serviceJson.id)){
+ this.updateRecord(App.Service.find().findProperty('id',
serviceJson.id), serviceJson, serviceFields);
+ } else {
+ newServices.push(serviceJson);
+ }
}
- });
- if (newHostComponents.length > 0) {
- App.store.loadMany(this.get('model3'), newHostComponents);
+ }, this);
+
+ if(newServices.length){
+ newServices = this.sortByOrder(this.get('servicesSortOrder'),
newServices);
+ App.store.loadMany(this.get('model'), newServices);
}
+ //App.store.commit();
}
},
update: function (service) {
@@ -477,7 +531,8 @@ App.servicesMapper = App.QuickDataMapper
return finalJson;
},
updateRecord: function (record, json, fieldsToUpdate) {
- for (var field in fieldsToUpdate) {
+ for (var i = 0; i < fieldsToUpdate.length; i++) {
+ var field = fieldsToUpdate[i];
if (json[field] !== undefined) {
if(json[field] instanceof Array){
this.updateHasMany(record, stringUtils.underScoreToCamelCase(field),
json[field]);
Modified: incubator/ambari/trunk/ambari-web/app/routes/add_host_routes.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/routes/add_host_routes.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/routes/add_host_routes.js (original)
+++ incubator/ambari/trunk/ambari-web/app/routes/add_host_routes.js Fri Jan 11
01:20:57 2013
@@ -24,7 +24,6 @@ module.exports = Em.Route.extend({
Ember.run.next(function () {
var addHostController = router.get('addHostController');
- App.db.setStep2WizardFirstRun(true);
App.router.get('updateController').set('isWorking', false);
App.ModalPopup.show({
classNames: ['full-width-modal'],
Modified: incubator/ambari/trunk/ambari-web/app/utils/db.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/utils/db.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/utils/db.js (original)
+++ incubator/ambari/trunk/ambari-web/app/utils/db.js Fri Jan 11 01:20:57 2013
@@ -212,14 +212,6 @@ App.db.setCluster = function (status) {
localStorage.setObject('ambari', App.db.data);
};
-
-App.db.setStep2WizardFirstRun = function(status) {
- App.db.data = localStorage.getObject('ambari');
- App.db.data.Installer.step2WizardFirstRun = status;
- console.log('db.setStep2WizardFirstRun called: ' + status);
- localStorage.setObject('ambari', App.db.data);
-};
-
/**
* Set current step value for specified Wizard Type
* @param wizardType
@@ -364,10 +356,4 @@ App.db.getCluster = function () {
return App.db.data.Installer.clusterStatus;
};
-App.db.getStep2WizardFirstRun = function() {
- App.db.data = localStorage.getObject('ambari');
- console.log('TRACE: Entering db:setStep2WizardFirstRun function');
- return App.db.data.Installer.step2WizardFirstRun;
-};
-
module.exports = App.db;
Modified: incubator/ambari/trunk/ambari-web/app/utils/validator.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/utils/validator.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/utils/validator.js (original)
+++ incubator/ambari/trunk/ambari-web/app/utils/validator.js Fri Jan 11
01:20:57 2013
@@ -53,7 +53,6 @@ module.exports = {
*/
isHostname: function(value) {
var regex =
/^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$/;
- console.warn("HOSTNAME:", value, " VALUE:" ,regex.test(value));
return regex.test(value);
},
Modified:
incubator/ambari/trunk/ambari-web/app/views/main/service/info/summary.js
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/main/service/info/summary.js?rev=1431778&r1=1431777&r2=1431778&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/main/service/info/summary.js
(original)
+++ incubator/ambari/trunk/ambari-web/app/views/main/service/info/summary.js
Fri Jan 11 01:20:57 2013
@@ -307,7 +307,8 @@ App.MainServiceInfoSummaryView = Em.View
}
}
return graphs;
- }.property('service'),
+ //we don't need to bind graphs to service property they update by
themselves
+ }.property(),
loadServiceSummary:function (serviceName) {