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 2012/12/09 16:11:06 UTC

svn commit: r1419002 [19/20] - in /incubator/ambari/branches/AMBARI-666/ambari-web: ./ app/ app/assets/data/wizard/deploy/ app/assets/data/wizard/deploy/2_hosts/ app/assets/data/wizard/deploy/5_hosts/ app/assets/data/wizard/deploy/master_failure/ app/a...

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/host/details.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/host/details.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/host/details.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/host/details.js Sun Dec  9 15:10:57 2012
@@ -97,8 +97,8 @@ App.MainHostDetailsController = Em.Contr
             setTimeout(function(){
               component.set('workStatus', App.Component.Status.started);
             },10000);
-          } else{
-            App.router.get('clusterController').loadUpdatedStatus();
+          } else {
+            App.router.get('clusterController').loadUpdatedStatusDelayed(500);
             App.router.get('backgroundOperationsController.eventsArray').push({
               "when" : function(controller){
                 var result = (controller.getOperationsForRequestId(requestId).length == 0);

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/add_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/add_controller.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/add_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/add_controller.js Sun Dec  9 15:10:57 2012
@@ -569,8 +569,8 @@ App.AddServiceController = App.WizardCon
   },
 
   /**
-   * Generate clients list for selected services and save it to model
-   * @param stepController step8WizardController or step9WizardController
+   * Invoke installation of selected services to the server and saves the request id returned by the server.
+   * @param isRetry
    */
   installServices: function (isRetry) {
     if(!isRetry && this.get('content.cluster.requestId')){

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/slave_component_groups_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/slave_component_groups_controller.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/slave_component_groups_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/slave_component_groups_controller.js Sun Dec  9 15:10:57 2012
@@ -20,7 +20,7 @@ var App = require('app');
  * Used to manage slave component config. User could create different settings for separate group
  * @type {*}
  */
-App.SlaveComponentGroupsController = Em.Controller.extend({
+App.SlaveComponentGroupsController = Em.ArrayController.extend({
 
   name: 'slaveComponentGroupsController',
 
@@ -48,10 +48,10 @@ App.SlaveComponentGroupsController = Em.
       if (categoryConfig.someProperty('isForSlaveComponent', true)) {
         var slaveCategory = categoryConfig.findProperty('isForSlaveComponent', true);
         if (this.get('content')) {
-          if (this.get('content').someProperty('componentName', slaveCategory.get('name').toUpperCase())) {
-            var component = this.get('content').findProperty('componentName', slaveCategory.get('name').toUpperCase());
+          if (this.get('content').someProperty('componentName', slaveCategory.get('primaryName'))) {
+            var component = this.get('content').findProperty('componentName', slaveCategory.get('primaryName'));
             var slaveConfigs = slaveCategory.get('slaveConfigs');
-            slaveCategory.set('slaveConfigs', component);
+            slaveCategory.set('slaveConfigs', App.SlaveConfigs.create(component));
             var slaveGroups = [];
             if (component.groups) {
               component.groups.forEach(function (_group) {
@@ -75,7 +75,6 @@ App.SlaveComponentGroupsController = Em.
         }
       }
     }, this);
-    debugger;
   },
 
   componentProperties: function (serviceName) {
@@ -121,43 +120,45 @@ App.SlaveComponentGroupsController = Em.
 
   }.property('App.router.wizardStep7Controller.selectedService'),
 
-  selectedComponentDisplayName: function () {
-    return App.format.role(this.get('selectedComponentName').name);
+  selectedComponentDisplayName: function() {
+    return App.format.role(this.get('selectedComponentName'));
   }.property('selectedComponentName'),
 
   selectedSlaveComponent: function () {
-    var selectedComponentName = this.get('selectedComponentName').displayName;
+    var selectedComponentName = this.get('selectedComponentName') ? this.get('selectedComponentName').displayName : null;
     var configs = null;
-    this.get('stepConfigs').forEach(function (_serviceConfig) {
-      var categoryConfig = _serviceConfig.get('configCategories');
-      if (categoryConfig.someProperty('name', selectedComponentName)) {
-        configs = categoryConfig.findProperty('name', selectedComponentName).get('slaveConfigs');
-      }
-    }, this);
-    debugger;
+    if (selectedComponentName) {
+      App.router.get('wizardStep7Controller.stepConfigs').forEach(function (_serviceConfig) {
+        var categoryConfig = _serviceConfig.get('configCategories');
+        if (categoryConfig.someProperty('name', selectedComponentName)) {
+          configs = categoryConfig.findProperty('name', selectedComponentName).get('slaveConfigs');
+        }
+      }, this);
+    }
     return configs;
-  }.property('selectedComponentName', 'stepConfigs.@each.configCategories','stepConfigs.@each.configCategories.@each.slaveConfigs'),
+  }.property('selectedComponentName', 'stepConfigs.@each.configCategories', 'stepConfigs.@each.configCategories.@each.slaveConfigs'),
 
   hosts: function () {
     if (this.get('selectedSlaveComponent')) {
-      return this.get('selectedSlaveComponent').hosts;
+      return this.get('selectedSlaveComponent').get('hosts');
     }
   }.property('selectedSlaveComponent'),
 
   groups: function () {
     var hosts = this.get('hosts');
-    if (hosts) {
+    if(hosts){
       return hosts.mapProperty('group').uniq();
     }
   }.property('hosts'),
 
   componentGroups: function () {
     var component = this.get('selectedSlaveComponent');
-    if (component && component.groups) {
-      return component.groups;
+    if (component && component.get('groups')) {
+      return component.get('groups');
     }
     return [];
-  }.property('selectedSlaveComponent', 'selectedSlaveComponent.groups','stepConfigs.@each'),
+  }.property('selectedSlaveComponent', 'selectedSlaveComponent.groups', 'stepConfigs.@each.configCategories.@each.slaveConfigs.groups.@each.properties.@each.value'),
+
 
   getGroupsForDropDown: function () {
     return this.get('componentGroups').getEach('name');
@@ -167,12 +168,12 @@ App.SlaveComponentGroupsController = Em.
     var componentGroups = this.get('componentGroups');
     if (componentGroups) {
       var active = componentGroups.findProperty('active', true);
-      if (active) {
+      if (active){
         return active;
       }
     }
     return null;
-  }.property('componentGroups.@each.active', 'componentGroups.@each.name'),
+  }.property('componentGroups.@each.active', 'componentGroups.@each.name', 'componentGroups.@each.properties.@each.value'),
 
 
   /**
@@ -191,7 +192,7 @@ App.SlaveComponentGroupsController = Em.
       onPrimary: function (event) {
         if (component.tempSelectedGroups && component.tempSelectedGroups.length) {
           component.tempSelectedGroups.forEach(function (item) {
-            var changed = component.hosts.filterProperty('hostName', item.hostName);
+            var changed = component.get('hosts').filterProperty('hostName', item.hostName);
             changed.setEach('group', item.groupName);
           })
         }
@@ -233,9 +234,9 @@ App.SlaveComponentGroupsController = Em.
   addSlaveComponentGroup: function () {
     var component = this.get('selectedSlaveComponent');
     var newGroupName = 'New Group';
-    component.groups.setEach('active', false);
-    var newGroups = component.groups.filterProperty('name', newGroupName);
-    if (newGroups.length === 0) {
+    component.get('groups').setEach('active', false);
+    var newGroups = component.get('groups').filterProperty('name', newGroupName);
+    if (newGroups.length === 0){
       component.newGroupIndex = 0;
     }
     else {
@@ -252,7 +253,7 @@ App.SlaveComponentGroupsController = Em.
     var component = this.get('selectedSlaveComponent');
     component.newGroupIndex++;
     var newGroupName = 'New Group ' + component.newGroupIndex;
-    var groups = component.groups.filterProperty('name', newGroupName);
+    var groups = component.get('groups').filterProperty('name', newGroupName);
     if (groups.length !== 0) {
       this.checkGroupName();
     }
@@ -268,7 +269,7 @@ App.SlaveComponentGroupsController = Em.
 
   getHostsByGroup: function (group) {
     var hosts = this.get('hosts');
-    if (hosts) {
+    if(hosts){
       return hosts.filterProperty('group', group.name);
     }
   },
@@ -279,12 +280,13 @@ App.SlaveComponentGroupsController = Em.
    */
   showSlaveComponentGroup: function (event) {
     var component = this.get('selectedSlaveComponent');
-    if (!component.groups) {
+    if(!component.groups){
+
     }
-    component.groups.setEach('active', false);
-    var group = component.groups.filterProperty('name', event.context.name);
+    component.get('groups').setEach('active', false);
+    var group = component.get('groups').filterProperty('name', event.context.name);
     group.setEach('active', true);
-    var assignedHosts = component.hosts.filterProperty('group', event.context.name);
+    var assignedHosts = component.get('hosts').filterProperty('group', event.context.name);
     if (assignedHosts.length === 0) {
       $('.remove-group-error').hide();
     }
@@ -297,7 +299,7 @@ App.SlaveComponentGroupsController = Em.
   removeSlaveComponentGroup: function (event) {
     var group = event.context;
     var component = this.get('selectedSlaveComponent');
-    var assignedHosts = component.hosts.filterProperty('group', group.name);
+    var assignedHosts = component.get('hosts').filterProperty('group', group.name);
     if (assignedHosts.length !== 0) {
       $('.remove-group-error').show();
     } else {
@@ -330,17 +332,18 @@ App.SlaveComponentGroupsController = Em.
    */
   changeSlaveGroupName: function (group, newGroupName) {
     var component = this.get('selectedSlaveComponent');
-    var isExist = component.groups.filterProperty('name', newGroupName);
+    var isExist = component.get('groups').filterProperty('name', newGroupName);
     if (isExist.length !== 0)
       return true;
     else {
-      var assignedHosts = component.hosts.filterProperty('group', group.name);
-      if (assignedHosts.length !== 0) {
+      var assignedHosts = component.get('hosts').filterProperty('group', group.name);
+      if (assignedHosts.length !== 0){
         assignedHosts.setEach('group', newGroupName);
       }
-      var groupFilter = component.groups.filterProperty('name', group.name);
+      var groupFilter = component.get('groups').filterProperty('name', group.name);
       groupFilter.setEach('name', newGroupName);
     }
     return false;
   }
+
 });

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step3_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step3_controller.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step3_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step3_controller.js Sun Dec  9 15:10:57 2012
@@ -44,15 +44,6 @@ App.WizardStep3Controller = Em.Controlle
 
   navigateStep: function () {
     this.loadStep();
-    if (App.testMode && App.skipBootstrap) {
-      this.get('hosts').forEach(function (_host) {
-        _host.set('bootStatus', 'REGISTERED');
-        _host.set('bootLog', 'Success');
-      }, this);
-      this.set('bootHosts', this.get('hosts'));
-      this.stopRegistration();
-      return;
-    }
     if (this.get('content.hosts.manualInstall') !== true) {
       if (App.db.getBootStatus() === false) {
         this.startBootstrap();
@@ -79,10 +70,14 @@ App.WizardStep3Controller = Em.Controlle
 
   loadStep: function () {
     console.log("TRACE: Loading step3: Confirm Hosts");
-    this.clearStep();
-    var hosts = this.loadHosts();
-    // hosts.setEach('bootStatus', 'RUNNING');
-    this.renderHosts(hosts);
+    if(!this.get('hosts').length){
+      this.clearStep();
+      var hosts = this.loadHosts();
+      // hosts.setEach('bootStatus', 'RUNNING');
+      this.renderHosts(hosts);
+    } else {
+      this.set('isSubmitDisabled', false);
+    }
   },
 
   /* Loads the hostinfo from localStorage on the insertion of view. It's being called from view */
@@ -254,7 +249,7 @@ App.WizardStep3Controller = Em.Controlle
     //TODO: uncomment following line after the hook up with the API call
     console.log('stopBootstrap() called');
     // this.set('isSubmitDisabled',false);
-    Ember.run.later(this, function () {
+    Ember.run.later(this, function(){
       this.startRegistration();
     }, 1000);
   },
@@ -412,7 +407,7 @@ App.WizardStep3Controller = Em.Controlle
           var self = this;
           var button = $(this.get('element')).find('.textTrigger');
           button.click(function () {
-            if (self.get('isTextArea')) {
+            if(self.get('isTextArea')){
               $(this).text('click to highlight');
             } else {
               $(this).text('press CTRL+C');
@@ -433,7 +428,7 @@ App.WizardStep3Controller = Em.Controlle
         },
         isTextArea: false,
         textArea: Em.TextArea.extend({
-          didInsertElement: function () {
+          didInsertElement: function(){
             var element = $(this.get('element'));
             element.width($(this.get('parentView').get('element')).width() - 10);
             element.height($(this.get('parentView').get('element')).height());

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js Sun Dec  9 15:10:57 2012
@@ -40,7 +40,7 @@ App.WizardStep7Controller = Em.Controlle
 
   isSubmitDisabled: function () {
     return !this.stepConfigs.everyProperty('errorCount', 0);
-  }.property('stepConfigs.@each.errorCount','content.slaveGroupProperties.@each.groups.@each.errorCount'),
+  }.property('stepConfigs.@each.errorCount'),
 
   selectedServiceNames: function () {
     return this.get('content.services').filterProperty('isSelected', true).filterProperty('isInstalled', false).mapProperty('serviceName');
@@ -118,6 +118,7 @@ App.WizardStep7Controller = Em.Controlle
     }
   },
 
+
   /**
    * Render a custom conf-site box for entering properties that will be written in *-site.xml files of the services
    */

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js Sun Dec  9 15:10:57 2012
@@ -27,8 +27,9 @@ App.WizardStep8Controller = Em.Controlle
   configs: [],
   globals: [],
   configMapping: require('data/config_mapping'),
+  slaveComponentConfig: null,
+  isSubmitDisabled: false,
 
-  isSubmitDisabled : false,
 
   selectedServices: function () {
     return this.get('content.services').filterProperty('isSelected', true).filterProperty('isInstalled', false);
@@ -48,9 +49,61 @@ App.WizardStep8Controller = Em.Controlle
     this.loadConfigs();
     this.setCustomConfigs();
     this.loadClusterInfo();
+    this.loadSlaveConfiguration();
     this.loadServices();
   },
 
+  loadSlaveConfiguration: function () {
+    var slaveComponentConfig = this.convertSlaveConfig(this.get('content.slaveGroupProperties'));
+    this.set("slaveComponentConfig", slaveComponentConfig);
+  },
+
+  convertSlaveConfig: function (slaveContent) {
+    var dest = {
+      "version": "1.0",
+      "components": [
+      ]
+    };
+
+    slaveContent.forEach(function (_slaveContent) {
+      var newComponent = {};
+      newComponent.componentName = _slaveContent.componentName;
+      newComponent.serviceName = this.getServiceName(newComponent.componentName);
+      newComponent.groups = [];
+      _slaveContent.groups.forEach(function (_group) {
+        var newGroup = {};
+        newGroup.groupName = _group.name;
+        newGroup.configVersion = "1.0"; // TODO : every time a new version should be generated
+        newGroup.hostNames = _slaveContent.hosts.filterProperty("group", newGroup.groupName);
+        newGroup.properties = _group.properties;
+        if (!Ember.empty(newGroup.hostNames)) {
+          newComponent.groups.push(newGroup);
+        }
+      }, this);
+      dest.components.push(newComponent);
+    }, this);
+    return dest;
+
+  },
+
+  getServiceName: function (componentName) {
+    var serviceName = null
+    switch (componentName) {
+      case 'DATANODE':
+        serviceName = 'HDFS';
+        break;
+      case 'TASKTRACKER':
+        serviceName = 'MAPREDUCE';
+        break;
+      case 'HBASE_REGIONSERVER':
+        serviceName = 'HBASE';
+        break;
+      default:
+        serviceName = null;
+    }
+    return serviceName;
+  },
+
   loadGlobals: function () {
     var globals = this.get('content.serviceConfigProperties').filterProperty('id', 'puppet var');
     if (globals.someProperty('name', 'hive_database')) {
@@ -100,7 +153,7 @@ App.WizardStep8Controller = Em.Controlle
     return uiConfig;
   },
 
-  getRegisteredHosts: function() {
+  getRegisteredHosts: function () {
     var allHosts = this.get('content.hostsInfo');
     var hosts = [];
     for (var hostName in allHosts) {
@@ -353,12 +406,7 @@ App.WizardStep8Controller = Em.Controlle
   loadDnValue: function (dnComponent) {
     var dnHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'DataNode');
     var totalDnHosts = dnHosts.hosts.length;
-    var dnHostGroups = [];
-    dnHosts.hosts.forEach(function (_dnHost) {
-      dnHostGroups.push(_dnHost.group);
-
-    }, this);
-    var totalGroups = dnHostGroups.uniq().length;
+    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName','DATANODE').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
@@ -368,6 +416,7 @@ App.WizardStep8Controller = Em.Controlle
     dnComponent.set('component_value', totalDnHosts + ' hosts ' + '(' + totalGroups + ' ' + groupLabel + ')');
   },
 
+
   /**
    * Load all info about mapReduce service
    * @param mrObj
@@ -395,11 +444,7 @@ App.WizardStep8Controller = Em.Controlle
   loadTtValue: function (ttComponent) {
     var ttHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'TaskTracker');
     var totalTtHosts = ttHosts.hosts.length;
-    var ttHostGroups = [];
-    ttHosts.hosts.forEach(function (_ttHost) {
-      ttHostGroups.push(_ttHost.group);
-    }, this);
-    var totalGroups = ttHostGroups.uniq().length;
+    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName','TASKTRACKER').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
@@ -477,11 +522,7 @@ App.WizardStep8Controller = Em.Controlle
   loadRegionServerValue: function (rsComponent) {
     var rsHosts = this.get('content.slaveComponentHosts').findProperty('displayName', 'RegionServer');
     var totalRsHosts = rsHosts.hosts.length;
-    var rsHostGroups = [];
-    rsHosts.hosts.forEach(function (_ttHost) {
-      rsHostGroups.push(_ttHost.group);
-    }, this);
-    var totalGroups = rsHostGroups.uniq().length;
+    var totalGroups = this.get('slaveComponentConfig.components').findProperty('componentName','HBASE_REGIONSERVER').groups.length;
     var groupLabel;
     if (totalGroups == 1) {
       groupLabel = 'group';
@@ -620,6 +661,7 @@ App.WizardStep8Controller = Em.Controlle
     if (App.testMode || !this.get('content.cluster.requestId')) {
       this.createCluster();
       this.createSelectedServices();
+      this.setAmbariUIDb();
       this.createConfigurations();
       this.applyCreatedConfToServices();
       this.createComponents();
@@ -630,7 +672,33 @@ App.WizardStep8Controller = Em.Controlle
     App.router.send('next');
   },
 
-  clusterName: function() {
+  setAmbariUIDb: function () {
+    var slaveComponentConfig = this.get("slaveComponentConfig");
+    this.persistKeyValues(slaveComponentConfig.version, slaveComponentConfig);
+  },
+
+  persistKeyValues: function (key, value) {
+
+    var str = "{ '" + key + "' : '" + JSON.stringify(value) + "'}";
+    var obj = eval("(" + str + ")");
+    $.ajax({
+      type: "POST",
+      url: App.apiPrefix + '/persist',
+      data: JSON.stringify(obj),
+      async: false,
+      dataType: 'text',
+      timeout: App.timeout,
+      success: function (data) {
+        console.debug('success...ajax call returned');
+      },
+
+      error: function (request, ajaxOptions, error) {
+        console.log('Step8: Error message is: ' + request.responseText);
+      }
+    });
+  },
+
+  clusterName: function () {
     return this.get('content.cluster.name');
   }.property('content.cluster.name'),
 
@@ -654,7 +722,7 @@ App.WizardStep8Controller = Em.Controlle
       async: false,
       //accepts: 'text',
       dataType: 'text',
-      data: JSON.stringify({ "Clusters": {"version" : stackVersion }}),
+      data: JSON.stringify({ "Clusters": {"version": stackVersion }}),
       timeout: App.timeout,
       success: function (data) {
         var jsonData = jQuery.parseJSON(data);
@@ -786,7 +854,7 @@ App.WizardStep8Controller = Em.Controlle
   },
 
   createRegisterHostData: function () {
-    return this.getRegisteredHosts().map(function(host) {
+    return this.getRegisteredHosts().map(function (host) {
       if (!host.isInstalled) {
         return {"Hosts": { "host_name": host.hostName}};
       }
@@ -804,7 +872,7 @@ App.WizardStep8Controller = Em.Controlle
     // note: masterHosts has 'component' vs slaveHosts has 'componentName'
     var masterComponents = masterHosts.mapProperty('component').uniq();
 
-    masterComponents.forEach(function(component) {
+    masterComponents.forEach(function (component) {
       var hostNames = masterHosts.filterProperty('component', component).filterProperty('isInstalled', false).mapProperty('hostName');
       this.registerHostsToComponent(hostNames, component);
     }, this);
@@ -835,7 +903,7 @@ App.WizardStep8Controller = Em.Controlle
                 masterHosts.filterProperty('component', 'OOZIE_SERVER').filterProperty('isInstalled', false).forEach(function (_masterHost) {
                   hostNames.pushObject(_masterHost.hostName);
                 }, this);
-               break;
+                break;
             }
             hostNames = hostNames.uniq();
             this.registerHostsToComponent(hostNames, _client.component_name);
@@ -858,17 +926,19 @@ App.WizardStep8Controller = Em.Controlle
     }
     console.log('registering ' + componentName + ' to ' + JSON.stringify(hostNames));
 
-    var hostsPredicate = hostNames.map(function(hostName) {
+    var hostsPredicate = hostNames.map(function (hostName) {
       return 'Hosts/host_name=' + hostName;
     }).join('|');
 
     var url = App.apiPrefix + '/clusters/' + this.get('clusterName') + '/hosts?' + hostsPredicate;
     var data = {
-      "host_components": [{
-        "HostRoles": {
-          "component_name": componentName
+      "host_components": [
+        {
+          "HostRoles": {
+            "component_name": componentName
+          }
         }
-      }]
+      ]
     };
 
     $.ajax({

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js Sun Dec  9 15:10:57 2012
@@ -28,6 +28,7 @@ App.WizardStep9Controller = Em.Controlle
   }.property('isStepCompleted'),
 
   mockHostData: require('data/mock/step9_hosts'),
+  mockDataPrefix: '/data/wizard/deploy/5_hosts',
   pollDataCounter: 0,
   polledData: [],
 
@@ -47,7 +48,13 @@ App.WizardStep9Controller = Em.Controlle
     return this.get('status') == 'failed';
   }.property('status'),
 
+  // called by App.WizardStep9View's didInsertElement and "retry" from router.
   navigateStep: function () {
+    if (App.testMode) {
+      // this is for repeatedly testing out installs in test mode
+      this.set('content.cluster.status', 'PENDING');
+      this.set('content.cluster.isCompleted', false);
+    }
     if (this.get('content.cluster.isCompleted') === false) {
       if (this.get('content.cluster.status') === 'INSTALL FAILED') {
         this.loadStep();
@@ -211,8 +218,8 @@ App.WizardStep9Controller = Em.Controlle
     var method = 'PUT';
 
     if (App.testMode) {
-      //debugger;
-      url = '/data/wizard/deploy/poll_6.json';
+      debugger;
+      url = this.get('mockDataPrefix') + '/poll_6.json';
       method = 'GET';
       this.numPolls = 6;
     }
@@ -468,7 +475,7 @@ App.WizardStep9Controller = Em.Controlle
     var tasksData = polledData.tasks;
     console.log("The value of tasksData is: ", tasksData);
     if (!tasksData) {
-      console.log("Step9: ERROR: NO tasks availaible to process");
+      console.log("Step9: ERROR: NO tasks available to process");
     }
     this.replacePolledData(tasksData);
     this.hosts.forEach(function (_host) {
@@ -479,7 +486,7 @@ App.WizardStep9Controller = Em.Controlle
       if (actionsPerHost !== null && actionsPerHost !== undefined && actionsPerHost.length !== 0) {
         this.setLogTasksStatePerHost(actionsPerHost, _host);
         this.onSuccessPerHost(actionsPerHost, _host);     // every action should be a success
-        this.onWarningPerHost(actionsPerHost, _host);     // any action should be a faliure
+        this.onWarningPerHost(actionsPerHost, _host);     // any action should be a failure
         this.onInProgressPerHost(actionsPerHost, _host);  // current running action for a host
         totalProgress += self.progressPerHost(actionsPerHost, _host);
       }
@@ -515,11 +522,12 @@ App.WizardStep9Controller = Em.Controlle
       this.POLL_INTERVAL = 1;
       this.numPolls++;
       if (this.numPolls == 5) {
-        url = 'data/wizard/deploy/poll_5.json';
-        // url = 'data/wizard/deploy/poll_5_failed.json';
+        url = this.get('mockDataPrefix') + '/poll_5.json';
+        // url = this.get('mockDataPrefix') + '/poll_5_failed.json';
       } else {
-        url = 'data/wizard/deploy/poll_' + this.numPolls + '.json';
+        url = this.get('mockDataPrefix') + '/poll_' + this.numPolls + '.json';
       }
+      debugger;
     }
 
     $.ajax({

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js Sun Dec  9 15:10:57 2012
@@ -1165,7 +1165,8 @@ module.exports =
       "displayType": "directories",
       "isReconfigurable": false,
       "isVisible": true,
-      "serviceName": "MAPREDUCE"
+      "serviceName": "MAPREDUCE",
+      "category": "TaskTracker"
     },
     {
       "id": "puppet var",
@@ -1324,7 +1325,8 @@ module.exports =
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
-      "serviceName": "MAPREDUCE"
+      "serviceName": "MAPREDUCE",
+      "category": "TaskTracker"
     },
     {
       "id": "puppet var",
@@ -1394,7 +1396,7 @@ module.exports =
       "name": "rca_enabled",
       "displayName": "Enable RCA",
       "description": "Enable RCA",
-      "defaultValue": false,
+      "defaultValue": true,
       "isReconfigurable": true,
       "displayType": "checkbox",
       "isVisible": true,

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/statusCodes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/statusCodes.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/statusCodes.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/statusCodes.js Sun Dec  9 15:10:57 2012
@@ -20,7 +20,7 @@
 module.exports = {
 	200: function () {
 		console.log("Status code 200: Success.");
-	},
+  },
   202: function () {
     console.log("Status code 202: Success for creation.");
   },
@@ -35,6 +35,7 @@ module.exports = {
 	},
 	403: function () {
 		console.log("Error code 403: Forbidden.");
+    App.router.logOff();
 	},
 	404: function () {
 		console.log("Error code 404: URI not found.");

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/component.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/component.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/component.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/component.js Sun Dec  9 15:10:57 2012
@@ -54,6 +54,13 @@ App.Component = DS.Model.extend({
     return this.get('componentName');
   }.property('componentName'),
 
+  isClient: function () {
+    if (!this.get('componentName')) {
+      return false;
+    }
+    return Boolean(this.get('componentName').match(/_client/gi));
+  }.property('componentName'),
+
   decommissioned: DS.attr('boolean')
 });
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js Sun Dec  9 15:10:57 2012
@@ -65,7 +65,6 @@ App.Host = DS.Model.extend({
   }.property('loadOne', 'loadFive', 'loadFifteen'),
 
   updateHostStatus: function(){
-
     /**
      * Do nothing until load
      */
@@ -77,7 +76,7 @@ App.Host = DS.Model.extend({
     var status;
 
     var masterComponents = components.filterProperty('isMaster', true);
-    if(components.everyProperty('workStatus', App.Component.Status.started)){
+    if(components.filterProperty('isClient', false).everyProperty('workStatus', App.Component.Status.started)){
       status = 'LIVE';
     } else if(this.get('isNotHeartBeating')){
       status = 'DEAD-YELLOW';

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js Sun Dec  9 15:10:57 2012
@@ -32,7 +32,7 @@ App.ServiceConfig = Ember.Object.extend(
     var masterErrors = this.get('configs').filterProperty('isValid', false).filterProperty('isVisible', true).get('length');
     var slaveErrors = 0;
     this.get('configCategories').forEach(function(_category){
-    slaveErrors += _category.get('slaveErrorCount');
+      slaveErrors += _category.get('slaveErrorCount');
     },this);
     return masterErrors + slaveErrors;
   }.property('configs.@each.isValid', 'configs.@each.isVisible', 'configCategories.@each.slaveErrorCount')
@@ -40,7 +40,21 @@ App.ServiceConfig = Ember.Object.extend(
 
 App.ServiceConfigCategory = Ember.Object.extend({
   name: null,
+
   slaveConfigs: null,
+  primaryName: function () {
+    switch (this.get('name')) {
+      case 'DataNode':
+        return 'DATANODE';
+        break;
+      case 'TaskTracker':
+        return 'TASKTRACKER';
+        break;
+      case 'RegionServer':
+        return 'HBASE_REGIONSERVER';
+    }
+  }.property('name'),
+
 
   isForMasterComponent: function () {
     var masterServices = [ 'NameNode', 'SNameNode', 'JobTracker', 'HBase Master', 'Oozie Master',
@@ -65,6 +79,14 @@ App.ServiceConfigCategory = Ember.Object
   }.property('slaveConfigs.groups.@each.errorCount')
 });
 
+
+App.SlaveConfigs = Ember.Object.extend({
+  componentName: null,
+  displayName: null,
+  hosts: null,
+  groups: null
+});
+
 App.Group = Ember.Object.extend({
   name: null,
   hostNames: null,

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js Sun Dec  9 15:10:57 2012
@@ -153,13 +153,13 @@ App.Router = Em.Router.extend({
       },
       statusCode: {
         200: function () {
-          console.log('Authorization status: 200');
+          console.log("Status code 200: Success.");
         },
         401: function () {
-          console.log('Authorization status: 401');
+          console.log("Error code 401: Unauthorized.");
         },
         403: function () {
-          console.log('Authorization status: 403');
+          console.log("Error code 403: Forbidden.");
         }
       },
       success: function (data) {
@@ -255,7 +255,18 @@ App.Router = Em.Router.extend({
       return 'installer';
     }
   },
-
+  logOff: function(context){
+    console.log('logging off');
+    // App.db.cleanUp() must be called before router.clearAllSteps().
+    // otherwise, this.set('installerController.currentStep, 0) would have no effect
+    // since it's a computed property but we are not setting it as a dependent of App.db.
+    App.db.cleanUp();
+    this.clearAllSteps();
+    console.log("Log off: " + App.db.getClusterName());
+    this.set('loginController.loginName', '');
+    this.set('loginController.password', '');
+    this.transitionTo('login', context);
+  },
   root: Em.Route.extend({
     index: Em.Route.extend({
       route: '/',
@@ -290,16 +301,7 @@ App.Router = Em.Router.extend({
     main: require('routes/main'),
 
     logoff: function (router, context) {
-      console.log('logging off');
-      // App.db.cleanUp() must be called before router.clearAllSteps().
-      // otherwise, this.set('installerController.currentStep, 0) would have no effect
-      // since it's a computed property but we are not setting it as a dependent of App.db.
-      App.db.cleanUp();
-      router.clearAllSteps();
-      console.log("Log off: " + App.db.getClusterName());
-      router.set('loginController.loginName', '');
-      router.set('loginController.password', '');
-      router.transitionTo('login', context);
+      router.logOff(context);
     }
 
   })

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js Sun Dec  9 15:10:57 2012
@@ -222,6 +222,7 @@ module.exports = Em.Route.extend({
         controller.get('content').set('serviceConfigProperties', null);
         App.db.setServiceConfigProperties(null);
         App.db.setSlaveProperties(null);
+        controller.loadSlaveGroupProperties();
         controller.loadAdvancedConfigs();
         router.transitionTo('step7');
       }
@@ -262,6 +263,7 @@ module.exports = Em.Route.extend({
     next: function (router) {
       var installerController = router.get('installerController');
       var wizardStep8Controller = router.get('wizardStep8Controller');
+      // invoke API call to install selected services
       installerController.installServices();
       installerController.setInfoForStep9();
       router.transitionTo('step9');
@@ -275,7 +277,7 @@ module.exports = Em.Route.extend({
       var controller = router.get('installerController');
       controller.setCurrentStep('9', false);
       controller.loadAllPriorSteps();
-      if (!App.testMode) {              //if test mode is ON don't disable prior steps link.
+      if (!App.testMode) { // if test mode is ON don't disable prior steps link.
         controller.setLowerStepsDisable(9);
       }
       controller.connectOutlet('wizardStep9', controller.get('content'));
@@ -286,15 +288,15 @@ module.exports = Em.Route.extend({
       var wizardStep9Controller = router.get('wizardStep9Controller');
       if (!wizardStep9Controller.get('isSubmitDisabled')) {
         if (wizardStep9Controller.get('content.cluster.status') !== 'START FAILED') {
-        installerController.installServices(true);
-        installerController.setInfoForStep9();
+          installerController.installServices(true);
+          installerController.setInfoForStep9();
         } else {
           wizardStep9Controller.set('content.cluster.isCompleted', false);
         }
         wizardStep9Controller.navigateStep();
       }
     },
-    unroutePath: function() {
+    unroutePath: function () {
       return false;
     },
     next: function (router) {

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less Sun Dec  9 15:10:57 2012
@@ -498,7 +498,9 @@ a:focus {
   dd {
     margin-left: 145px;
   }
-
+  .like_pointer {
+    cursor: pointer;
+  }
   .service {
     position: relative;
     margin-top: 10px;
@@ -528,7 +530,7 @@ a:focus {
       margin-top: 14px;
       color: #7b7b7b;
       font-size: 13px;
-      width: 80%;
+      //width: 80%;
       tr > td:first-child {
         padding-right: 10px;
         text-align: right !important;
@@ -540,12 +542,16 @@ a:focus {
 
     .dashboard-mini-chart {
       right: 0;
+      float: right;
       top: 7px;
       position: absolute;
       overflow: visible; // for quick links
       text-align: center;
-      width: 180px;
+      //width: 180px;
       height: 200px;
+      .dropdown-menu {
+        text-align: left;
+      }
       .chart-container{
         .chart-x-axis{
           left: 0%;
@@ -557,6 +563,12 @@ a:focus {
         font-size: 11px;
         color: #7b7b7b;
       }
+      .chart-legend {
+        left: -205px;
+        text-align: left;
+        top: 0;
+        width: 185px;
+      }
     }
   }
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/application.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/application.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/application.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/application.hbs Sun Dec  9 15:10:57 2012
@@ -29,7 +29,7 @@
             </a>
           {{else}}
             <a class="brand cluster-name" href="#">
-              loading...
+              - Install Wizard
             </a>
           {{/if}}
           <ul class="nav">

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main.hbs Sun Dec  9 15:10:57 2012
@@ -21,8 +21,11 @@
   <div class="navbar">
     <div class="navbar-inner">
       <a class="brand" href="#">
-        {{clusterName}}
-
+        {{#if clusterName}}
+          {{clusterName}}
+        {{else}}
+          My Cluster
+        {{/if}}
           {{#view App.EmptyView controllerBinding="App.router.backgroundOperationsController"}}
             {{#if allOperationsCount}}
               <span class="label operations-count" {{action "showPopup" target="controller"}}>{{allOperationsCount}}</span>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hbase.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hbase.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hbase.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hbase.hbs Sun Dec  9 15:10:57 2012
@@ -17,7 +17,7 @@
 }}
 
 {{#unless view.showOnlyRows}}
-<div class="clearfix" {{action toggleInfoView target="view"}}>
+<div class="clearfix like_pointer" {{action toggleInfoView target="view"}}>
   <div class="name span2">
     {{#if view.isCollapsed}}
     <i class="icon-caret-down pull-left"></i>
@@ -35,60 +35,62 @@
   </div>
 </div>
 <div id="hbase-info">
-<table class="table no-borders">
-  <tbody>
-{{/unless}}
-  <!-- HBase Master Server -->
-  <tr>
-    <td>{{t dashboard.services.hbase.masterServer}}</td>
-    <td><a href="#" {{action showDetails view.service.master}}>{{view.service.master.publicHostName}}</a></td>
-  </tr>
-  <!-- RegionServers -->
-  <tr>
-    <td>{{t dashboard.services.hbase.regionServers}}</td>
-    <td><a href="#" {{action filterHosts view.regionServerComponent}}>{{view.service.regionServers.length}} {{t dashboard.services.hbase.regionServers}}</a></td>
-  </tr>
-  <!-- Version -->
-  <tr>
-    <td>{{t dashboard.services.hbase.version}}</td>
-    <td>{{view.service.version}} {{view.service.revision}}</td>
-  </tr>
-  <!-- HBaseMaster Web UI -->
-  <tr>
-    <td>{{t dashboard.services.hbase.masterWebUI}}</td>
-    <td><a {{bindAttr href="view.hbaseMasterWebUrl"}} target="_blank">{{view.service.master.publicHostName}}:60010</a>
-    </td>
-  </tr>
-  <!-- Regions in Transition -->
-  <tr>
-    <td>{{t dashboard.services.hbase.regions.transition}}</td>
-    <td>{{view.service.regionsInTransition}}</td>
-  </tr>
-  <!-- HBase Master Started Time -->
-  <tr>
-    <td>{{t dashboard.services.hbase.masterStarted}}</td>
-    <td>{{view.masterStartedTime}}</td>
-  </tr>
-  <!-- HBase Master Activated Time -->
-  <tr>
-    <td>{{t dashboard.services.hbase.masterActivated}}</td>
-    <td>{{view.masterStartedTime}}</td>
-  </tr>
-  <!-- Average Load -->
-  <tr>
-    <td>{{t dashboard.services.hbase.averageLoad}}</td>
-    <td>{{view.averageLoad}}</td>
-  </tr>
-  <!-- Master Server Heap -->
-  <tr>
-    <td>{{t dashboard.services.hbase.masterServerHeap}}</td>
-    <td>{{view.masterServerHeapSummary}}</td>
-  </tr>
-  
-{{#unless view.showOnlyRows}}
-  </tbody>
-</table>
-<div class="dashboard-mini-chart">
+  <div class="span4">
+    <table class="table no-borders">
+      <tbody>
+    {{/unless}}
+      <!-- HBase Master Server -->
+      <tr>
+        <td>{{t dashboard.services.hbase.masterServer}}</td>
+        <td><a href="#" {{action showDetails view.service.master}}>{{view.service.master.publicHostName}}</a></td>
+      </tr>
+      <!-- RegionServers -->
+      <tr>
+        <td>{{t dashboard.services.hbase.regionServers}}</td>
+        <td><a href="#" {{action filterHosts view.regionServerComponent}}>{{view.service.regionServers.length}} {{t dashboard.services.hbase.regionServers}}</a></td>
+      </tr>
+      <!-- Version -->
+      <tr>
+        <td>{{t dashboard.services.hbase.version}}</td>
+        <td>{{view.service.version}} {{view.service.revision}}</td>
+      </tr>
+      <!-- HBaseMaster Web UI -->
+      <tr>
+        <td>{{t dashboard.services.hbase.masterWebUI}}</td>
+        <td><a {{bindAttr href="view.hbaseMasterWebUrl"}} target="_blank">{{view.service.master.publicHostName}}:60010</a>
+        </td>
+      </tr>
+      <!-- Regions in Transition -->
+      <tr>
+        <td>{{t dashboard.services.hbase.regions.transition}}</td>
+        <td>{{view.service.regionsInTransition}}</td>
+      </tr>
+      <!-- HBase Master Started Time -->
+      <tr>
+        <td>{{t dashboard.services.hbase.masterStarted}}</td>
+        <td>{{view.masterStartedTime}}</td>
+      </tr>
+      <!-- HBase Master Activated Time -->
+      <tr>
+        <td>{{t dashboard.services.hbase.masterActivated}}</td>
+        <td>{{view.masterStartedTime}}</td>
+      </tr>
+      <!-- Average Load -->
+      <tr>
+        <td>{{t dashboard.services.hbase.averageLoad}}</td>
+        <td>{{view.averageLoad}}</td>
+      </tr>
+      <!-- Master Server Heap -->
+      <tr>
+        <td>{{t dashboard.services.hbase.masterServerHeap}}</td>
+        <td>{{view.masterServerHeapSummary}}</td>
+      </tr>
+
+    {{#unless view.showOnlyRows}}
+      </tbody>
+    </table>
+  </div>
+<div class="dashboard-mini-chart span2">
   {{view App.ChartServiceMetricsHBASE_RegionServerReadWriteRequests}}
   
   {{#if view.service.quickLinks.length}}

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hdfs.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hdfs.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hdfs.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hdfs.hbs Sun Dec  9 15:10:57 2012
@@ -17,7 +17,7 @@
 }}
 
 {{#unless view.showOnlyRows}}
-<div class="clearfix" {{action toggleInfoView target="view"}}>
+<div class="clearfix like_pointer" {{action toggleInfoView target="view"}}>
   <div class="name span2">
     {{#if view.isCollapsed}}
     <i class="icon-caret-down pull-left"></i>
@@ -35,108 +35,110 @@
   </div>
 </div>
 <div id="hdfs-info">
-<table class="table no-borders">
-  <tbody>
-{{/unless}}
+  <div class="span4">
+    <table class="table no-borders">
+      <tbody>
+    {{/unless}}
 
-  <!-- NameNode -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.nanmenode}}</td>
-    <td><a href="#" {{action showDetails view.service.nameNode}}>{{view.service.nameNode.publicHostName}}</a></td>
-  </tr>
-  <!-- SecondaryNameNode -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.snanmenode}}</td>
-    <td><a href="#" {{action showDetails view.service.snameNode}}>{{view.service.snameNode.publicHostName}}</a></td>
-  </tr>
-  <!-- Data Nodes -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.datanodes}}</td>
-    <td>
-      <a href="#" {{action filterHosts view.dataNodeComponent}}>{{view.service.dataNodes.length}} {{t dashboard.services.hdfs.datanodes}}</a>
-    </td>
-  </tr>
-  <!-- Version -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.version}}</td>
-    <td>{{view.service.version}}</td>
-  </tr>
-  <!-- NameNode Web UI -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.nameNodeWebUI}}</td>
-    <td><a {{bindAttr href="view.nodeWebUrl"}} target="_blank">{{view.service.nameNode.publicHostName}}:50070</a>
-    </td>
-  </tr>
-  <!-- NameNode Uptime -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.nodes.uptime}}</td>
-    <td>{{view.nodeUptime}}</td>
-  </tr>
-  <!-- NameNode Heap -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.nodes.heap}}</td>
-    <td>{{view.nodeHeap}}</td>
-  </tr>
-  <!-- Data Node Counts -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.datanodecounts}}</td>
-    <td>
-      {{view.service.liveDataNodes.length}} {{t dashboard.services.hdfs.nodes.live}} /
-      {{view.service.deadDataNodes.length}} {{t dashboard.services.hdfs.nodes.dead}} /
-      {{view.service.decommisionDataNodes.length}} {{t dashboard.services.hdfs.nodes.decom}}
-    </td>
-  </tr>
-  <!-- HDFS Capacity -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.capacity}}</td>
-    <td>{{view.capacity}}</td>
-  </tr>
-  <!-- Blocks Total -->
-  <tr>
-    <td>{{t services.service.summary.blocksTotal}}</td>
-    <td>{{view.service.dfsTotalBlocks}}</td>
-  </tr>
-  <!-- Block Errors -->
-  <tr>
-    <td>{{t services.service.summary.blockErrors}}</td>
-    <td>
-      {{view.service.dfsCorruptBlocks}} corrupt / 
-      {{view.service.dfsMissingBlocks}} missing / 
-      {{view.service.dfsUnderReplicatedBlocks}} under replicated
-    </td>
-  </tr>
-  <!-- Total Files And Directories -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.totalFilesAndDirs}}</td>
-    <td>{{view.service.dfsTotalFiles}}</td>
-  </tr>
-  <!-- Upgrade Status -->
-  <tr>
-    <td>{{t services.service.summary.pendingUpgradeStatus}}</td>
-    <td>
-      {{#if view.service.upgradeStatus}}
-        {{t services.service.summary.pendingUpgradeStatus.notPending}}
-      {{else}}
-        {{t services.service.summary.pendingUpgradeStatus.pending}}
-      {{/if}}
-    </td>
-  </tr>
-  <!-- Safe Mode Status -->
-  <tr>
-    <td>{{t services.service.summary.safeModeStatus}}</td>
-    <td>
-      {{#if view.isSafeMode}}
-        {{t services.service.summary.safeModeStatus.inSafeMode}}
-      {{else}}
-        {{t services.service.summary.safeModeStatus.notInSafeMode}}
-      {{/if}}
-    </td>
-  </tr>
-  
-{{#unless view.showOnlyRows}}
-  </tbody>
-</table>
-<div class="dashboard-mini-chart">
+      <!-- NameNode -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.nanmenode}}</td>
+        <td><a href="#" {{action showDetails view.service.nameNode}}>{{view.service.nameNode.publicHostName}}</a></td>
+      </tr>
+      <!-- SecondaryNameNode -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.snanmenode}}</td>
+        <td><a href="#" {{action showDetails view.service.snameNode}}>{{view.service.snameNode.publicHostName}}</a></td>
+      </tr>
+      <!-- Data Nodes -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.datanodes}}</td>
+        <td>
+          <a href="#" {{action filterHosts view.dataNodeComponent}}>{{view.service.dataNodes.length}} {{t dashboard.services.hdfs.datanodes}}</a>
+        </td>
+      </tr>
+      <!-- Version -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.version}}</td>
+        <td>{{view.service.version}}</td>
+      </tr>
+      <!-- NameNode Web UI -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.nameNodeWebUI}}</td>
+        <td><a {{bindAttr href="view.nodeWebUrl"}} target="_blank">{{view.service.nameNode.publicHostName}}:50070</a>
+        </td>
+      </tr>
+      <!-- NameNode Uptime -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.nodes.uptime}}</td>
+        <td>{{view.nodeUptime}}</td>
+      </tr>
+      <!-- NameNode Heap -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.nodes.heap}}</td>
+        <td>{{view.nodeHeap}}</td>
+      </tr>
+      <!-- Data Node Counts -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.datanodecounts}}</td>
+        <td>
+          {{view.service.liveDataNodes.length}} {{t dashboard.services.hdfs.nodes.live}} /
+          {{view.service.deadDataNodes.length}} {{t dashboard.services.hdfs.nodes.dead}} /
+          {{view.service.decommisionDataNodes.length}} {{t dashboard.services.hdfs.nodes.decom}}
+        </td>
+      </tr>
+      <!-- HDFS Capacity -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.capacity}}</td>
+        <td>{{view.capacity}}</td>
+      </tr>
+      <!-- Blocks Total -->
+      <tr>
+        <td>{{t services.service.summary.blocksTotal}}</td>
+        <td>{{view.service.dfsTotalBlocks}}</td>
+      </tr>
+      <!-- Block Errors -->
+      <tr>
+        <td>{{t services.service.summary.blockErrors}}</td>
+        <td>
+          {{view.service.dfsCorruptBlocks}} corrupt /
+          {{view.service.dfsMissingBlocks}} missing /
+          {{view.service.dfsUnderReplicatedBlocks}} under replicated
+        </td>
+      </tr>
+      <!-- Total Files And Directories -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.totalFilesAndDirs}}</td>
+        <td>{{view.service.dfsTotalFiles}}</td>
+      </tr>
+      <!-- Upgrade Status -->
+      <tr>
+        <td>{{t services.service.summary.pendingUpgradeStatus}}</td>
+        <td>
+          {{#if view.service.upgradeStatus}}
+            {{t services.service.summary.pendingUpgradeStatus.notPending}}
+          {{else}}
+            {{t services.service.summary.pendingUpgradeStatus.pending}}
+          {{/if}}
+        </td>
+      </tr>
+      <!-- Safe Mode Status -->
+      <tr>
+        <td>{{t services.service.summary.safeModeStatus}}</td>
+        <td>
+          {{#if view.isSafeMode}}
+            {{t services.service.summary.safeModeStatus.inSafeMode}}
+          {{else}}
+            {{t services.service.summary.safeModeStatus.notInSafeMode}}
+          {{/if}}
+        </td>
+      </tr>
+
+    {{#unless view.showOnlyRows}}
+      </tbody>
+    </table>
+  </div>
+<div class="dashboard-mini-chart span2">
   {{view view.Chart serviceBinding="view.service"}}
   <div class="chartLabel">{{t dashboard.services.hdfs.chart.label}}</div>
   {{#if view.service.quickLinks.length}}

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hive.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hive.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hive.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/hive.hbs Sun Dec  9 15:10:57 2012
@@ -16,7 +16,7 @@
 * limitations under the License.
 }}
 
-<div class="clearfix">
+<div class="clearfix like_pointer">
   <div class="name span2">
     {{view App.MainDashboardServiceHealthView serviceBinding="view.service"}}
     <a {{action selectService view.service href=true}}>{{view.service.displayName}}</a>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/mapreduce.hbs Sun Dec  9 15:10:57 2012
@@ -17,7 +17,7 @@
 }}
 
 {{#unless view.showOnlyRows}}
-<div class="clearfix" {{action toggleInfoView target="view"}}>
+<div class="clearfix like_pointer" {{action toggleInfoView target="view"}}>
   <div class="name span2">
     {{#if view.isCollapsed}}
     <i class="icon-caret-down pull-left"></i>
@@ -35,89 +35,91 @@
   </div>
 </div>
 <div id="mapreduce-info">
-<table class="table no-borders">
-  <tbody>
-{{/unless}}
-  <!-- JobTracker -->
-  <tr>
-    <td>{{t services.service.summary.jobTracker}}</td>
-    <td><a href="#" {{action showDetails view.service.jobTracker}}>{{view.service.jobTracker.publicHostName}}</a></td>
-  </tr>
-  <!-- TaskTrackers -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.taskTrackers}}</td>
-    <td><a href="#" {{action filterHosts view.taskTrackerComponent}}>{{view.service.taskTrackers.length}} {{t dashboard.services.mapreduce.taskTrackers}}</a></td>
-  </tr>
-  <!-- Version -->
-  <tr>
-    <td>{{t dashboard.services.hdfs.version}}</td>
-    <td>{{view.service.version}}</td>
-  </tr>
-  <!-- JobTracker Web UI -->
-  <tr>
-    <td>{{t services.service.summary.jobTrackerWebUI}}</td>
-    <td><a {{bindAttr href="view.jobTrackerWebUrl"}} target="_blank">{{view.service.jobTracker.publicHostName}}:50030</a>
-    </td>
-  </tr>
-  <!-- Job Tracker Uptime -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.jobTrackerUptime}}</td>
-    <td>{{view.jobTrackerUptime}}</td>
-  </tr>
-  <!-- Trackers -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.trackers}}</td>
-    <td>{{view.trackersSummary}}</td>
-  </tr>
-  <!-- TaskTracker Counts -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.taskTrackerCounts}}</td>
-    <td>
-      {{view.service.grayListTrackers.length}} {{t dashboard.services.mapreduce.nodes.blacklist}} /
-      {{view.service.blackListTrackers.length}} {{t dashboard.services.mapreduce.nodes.graylist}} /
-      {{view.service.trackersDecommisioned}} {{t dashboard.services.hdfs.nodes.decom}} 
-    </td>
-  </tr>
-  <!-- JobTracker Heap -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.jobTrackerHeap}}</td>
-    <td>{{view.trackersHeapSummary}}</td>
-  </tr>
-  <!-- Total slots capacity -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.slotCapacity}}</td>
-    <td>{{view.slotsCapacitySummary}}</td>
-  </tr>
-  <!-- Jobs -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.jobs}}</td>
-    <td>{{view.jobsSummary}}</td>
-  </tr>
-  <!-- Map Slots -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.mapSlots}}</td>
-    <td>{{view.mapSlotsSummary}}</td>
-  </tr>
-  <!-- Reduce Slots -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.reduceSlots}}</td>
-    <td>{{view.reduceSlotsSummary}}</td>
-  </tr>
-  <!-- Tasks:Maps -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.tasks.maps}}</td>
-    <td>{{view.mapTasksSummary}}</td>
-  </tr>
-  <!-- Tasks:Reduces -->
-  <tr>
-    <td>{{t dashboard.services.mapreduce.tasks.reduces}}</td>
-    <td>{{view.reduceTasksSummary}}</td>
-  </tr>
-  
-{{#unless view.showOnlyRows}}
-  </tbody>
-</table>
-<div class="dashboard-mini-chart">
+  <div class="span4">
+    <table class="table no-borders">
+      <tbody>
+    {{/unless}}
+      <!-- JobTracker -->
+      <tr>
+        <td>{{t services.service.summary.jobTracker}}</td>
+        <td><a href="#" {{action showDetails view.service.jobTracker}}>{{view.service.jobTracker.publicHostName}}</a></td>
+      </tr>
+      <!-- TaskTrackers -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.taskTrackers}}</td>
+        <td><a href="#" {{action filterHosts view.taskTrackerComponent}}>{{view.service.taskTrackers.length}} {{t dashboard.services.mapreduce.taskTrackers}}</a></td>
+      </tr>
+      <!-- Version -->
+      <tr>
+        <td>{{t dashboard.services.hdfs.version}}</td>
+        <td>{{view.service.version}}</td>
+      </tr>
+      <!-- JobTracker Web UI -->
+      <tr>
+        <td>{{t services.service.summary.jobTrackerWebUI}}</td>
+        <td><a {{bindAttr href="view.jobTrackerWebUrl"}} target="_blank">{{view.service.jobTracker.publicHostName}}:50030</a>
+        </td>
+      </tr>
+      <!-- Job Tracker Uptime -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.jobTrackerUptime}}</td>
+        <td>{{view.jobTrackerUptime}}</td>
+      </tr>
+      <!-- Trackers -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.trackers}}</td>
+        <td>{{view.trackersSummary}}</td>
+      </tr>
+      <!-- TaskTracker Counts -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.taskTrackerCounts}}</td>
+        <td>
+          {{view.service.grayListTrackers.length}} {{t dashboard.services.mapreduce.nodes.blacklist}} /
+          {{view.service.blackListTrackers.length}} {{t dashboard.services.mapreduce.nodes.graylist}} /
+          {{view.service.trackersDecommisioned}} {{t dashboard.services.hdfs.nodes.decom}}
+        </td>
+      </tr>
+      <!-- JobTracker Heap -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.jobTrackerHeap}}</td>
+        <td>{{view.trackersHeapSummary}}</td>
+      </tr>
+      <!-- Total slots capacity -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.slotCapacity}}</td>
+        <td>{{view.slotsCapacitySummary}}</td>
+      </tr>
+      <!-- Jobs -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.jobs}}</td>
+        <td>{{view.jobsSummary}}</td>
+      </tr>
+      <!-- Map Slots -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.mapSlots}}</td>
+        <td>{{view.mapSlotsSummary}}</td>
+      </tr>
+      <!-- Reduce Slots -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.reduceSlots}}</td>
+        <td>{{view.reduceSlotsSummary}}</td>
+      </tr>
+      <!-- Tasks:Maps -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.tasks.maps}}</td>
+        <td>{{view.mapTasksSummary}}</td>
+      </tr>
+      <!-- Tasks:Reduces -->
+      <tr>
+        <td>{{t dashboard.services.mapreduce.tasks.reduces}}</td>
+        <td>{{view.reduceTasksSummary}}</td>
+      </tr>
+
+    {{#unless view.showOnlyRows}}
+      </tbody>
+    </table>
+  </div>
+<div class="dashboard-mini-chart span2">
   {{view App.ChartServiceMetricsMapReduce_JobsRunningWaiting}}
   
   {{#if view.service.quickLinks.length}}

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/oozie.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/oozie.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/oozie.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/oozie.hbs Sun Dec  9 15:10:57 2012
@@ -16,7 +16,7 @@
 * limitations under the License.
 }}
 
-<div class="clearfix">
+<div class="clearfix like_pointer">
   <div class="name span2">
     {{view App.MainDashboardServiceHealthView serviceBinding="view.service"}}
     <a {{action selectService view.service href=true}}>{{view.service.displayName}}</a>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/zookeeper.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/zookeeper.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/zookeeper.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/dashboard/service/zookeeper.hbs Sun Dec  9 15:10:57 2012
@@ -16,7 +16,7 @@
 * limitations under the License.
 }}
 
-<div class="clearfix">
+<div class="clearfix like_pointer">
   <div class="name span2">
     {{view App.MainDashboardServiceHealthView serviceBinding="view.service"}}
     <a {{action selectService view.service href=true}}>{{view.service.displayName}}</a>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/summary.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/summary.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/summary.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/summary.hbs Sun Dec  9 15:10:57 2012
@@ -141,27 +141,7 @@
 		<ul id='summary-alerts-list' class="alerts">
 		  {{#if controller.alerts.length}}
 				{{#each controller.alerts}}
-				 <li class="status-{{unbound status}}">
-	          <div class="container-fluid">
-	            <div class="row-fluid">
-	              <div class="span1 status-icon">
-	                {{#if isOk}}
-	                  <i class="icon-ok icon-large"></i>
-	                {{else}}
-	                  <i class="icon-remove icon-large"></i>
-	                {{/if}}
-	              </div>
-	              <div class="span11">
-	                <div class="row-fluid">
-	                  <div class="span7 title">{{title}}
-	                  </div>
-	                  <div rel="tooltip" {{bindAttr data-title="timeSinceAlertDetails"}} data-placement="right" class="span5 date-time">{{timeSinceAlert}}</div>
-	                </div>
-	                <div class="row-fluid message">{{message}}</div>
-	              </div>
-	            </div>
-	          </div>
-	        </li>
+          {{view view.alertItemView contentBinding="this"}}
 				{{/each}}
 			{{else}}
 		    {{#if controller.isNagiosInstalled}}

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/summary_alert.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/summary_alert.hbs?rev=1419002&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/summary_alert.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/summary_alert.hbs Sun Dec  9 15:10:57 2012
@@ -0,0 +1,37 @@
+{{!
+* 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.
+}}
+
+<div class="container-fluid">
+    <div class="row-fluid">
+        <div class="span1 status-icon">
+          {{#if isOk}}
+              <i class="icon-ok icon-large"></i>
+          {{else}}
+              <i class="icon-remove icon-large"></i>
+          {{/if}}
+        </div>
+        <div class="span11">
+            <div class="row-fluid">
+                <div class="span7 title">{{title}}
+                </div>
+                <div rel="tooltip" {{bindAttr data-title="timeSinceAlertDetails"}} data-placement="right" class="span5 date-time">{{timeSinceAlert}}</div>
+            </div>
+            <div class="row-fluid message">{{message}}</div>
+        </div>
+    </div>
+</div>
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts.hbs Sun Dec  9 15:10:57 2012
@@ -17,16 +17,16 @@
 }}
 
 {{#if view.hasNoHosts}}
-  none -
-  <a href="#" {{action showEditSlaveComponentGroups view.serviceConfig.category target="controller"}}>
-    select hosts for this group
-  </a>
+none -
+<a href="#" {{action showEditSlaveComponentGroups view.serviceConfig.category target="controller"}}>
+  select hosts for this group
+</a>
 {{else}}
-  <a href="#" {{action showEditSlaveComponentGroups view.serviceConfig.category target="controller"}}>
-    {{#if view.hasMultipleHosts}}
-    {{view.hosts.firstObject.hostName}} and {{view.otherLength}}
-    {{else}}
-    {{view.hosts.firstObject.hostName}}
-    {{/if}}
-  </a>
-{{/if}}
+<a href="#" {{action showEditSlaveComponentGroups view.serviceConfig.category target="controller"}}>
+  {{#if view.hasMultipleHosts}}
+  {{view.hosts.firstObject.hostName}} and {{view.otherLength}}
+  {{else}}
+  {{view.hosts.firstObject.hostName}}
+  {{/if}}
+</a>
+  {{/if}}
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_hosts.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_hosts.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_hosts.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_hosts.hbs Sun Dec  9 15:10:57 2012
@@ -19,11 +19,12 @@
 {{#if view.hasNoHosts}}
 No host assigned
 {{else}}
-<a href="#" {{action showEditSlaveComponentGroups view.serviceConfig.category target="controller"}}>
+<a
+  href="#" {{action showEditSlaveComponentGroups view.serviceConfig.category target="controller"}}>
   {{#if view.hasMultipleHosts}}
   {{hosts.firstObject.hostName}} and {{view.otherLength}}
   {{else}}
   {{hosts.firstObject.hostName}}
   {{/if}}
 </a>
-{{/if}}
+  {{/if}}
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step7.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step7.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step7.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step7.hbs Sun Dec  9 15:10:57 2012
@@ -131,4 +131,4 @@
       class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}}
       {{action submit target="controller"}}>Next &rarr;</a>
   </div>
-</div>
+</div>
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step9.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step9.hbs?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step9.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step9.hbs Sun Dec  9 15:10:57 2012
@@ -79,7 +79,7 @@
         </td>
         <td>
           <div class="progress-bar pull-left">
-            <div {{bindAttr class="isStepCompleted::progress-striped isStepCompleted::active view.barColor :progress"}}>
+            <div {{bindAttr class="view.isHostCompleted::progress-striped view.isHostCompleted::active view.barColor :progress"}}>
               <div class="bar" {{bindAttr style="view.barWidth"}}>
               </div>
             </div>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/utils/db.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/utils/db.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/utils/db.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/utils/db.js Sun Dec  9 15:10:57 2012
@@ -51,9 +51,9 @@ App.db.cleanUp = function () {
       'loginName': '',
       'authenticated': false
     },
-    'Installer': {},
-    'AddHost': {},
-    'AddService': {}
+    'Installer' : {},
+    'AddHost' : {},
+    'AddService' : {}
   };
   console.log("In cleanup./..");
   localStorage.setObject('ambari', App.db.data);
@@ -195,13 +195,19 @@ App.db.setSlaveComponentHosts = function
   localStorage.setObject('ambari', App.db.data);
 };
 
+App.db.setSlaveProperties = function (slaveProperties) {
+  App.db.data = localStorage.getObject('ambari');
+  App.db.data.Installer.slaveProperties = slaveProperties;
+  localStorage.setObject('ambari', App.db.data);
+};
+
 App.db.setServiceConfigs = function (serviceConfigs) {
   App.db.data = localStorage.getObject('ambari');
   App.db.data.Installer.serviceConfigs = serviceConfigs;
   localStorage.setObject('ambari', App.db.data);
 };
 
-App.db.setAdvancedServiceConfig = function (serviceConfigs) {
+App.db.setAdvancedServiceConfig = function(serviceConfigs) {
   App.db.data = localStorage.getObject('ambari');
   App.db.data.Installer.advanceServiceConfigs = serviceConfigs;
   localStorage.setObject('ambari', App.db.data);
@@ -213,12 +219,6 @@ App.db.setServiceConfigProperties = func
   localStorage.setObject('ambari', App.db.data);
 };
 
-App.db.setSlaveProperties = function (slaveProperties) {
-  App.db.data = localStorage.getObject('ambari');
-  App.db.data.Installer.slaveProperties = slaveProperties;
-  localStorage.setObject('ambari', App.db.data);
-};
-
 App.db.setClusterStatus = function (status) {
   App.db.data = localStorage.getObject('ambari');
   App.db.data.Installer.clusterStatus = status;
@@ -364,7 +364,7 @@ App.db.getServiceConfigs = function () {
   return App.db.data.Installer.serviceConfigs;
 };
 
-App.db.getAdvancedServiceConfig = function () {
+App.db.getAdvancedServiceConfig = function() {
   App.db.data = localStorage.getObject('ambari');
   return App.db.data.Installer.advanceServiceConfigs;
 };
@@ -379,7 +379,6 @@ App.db.getSlaveProperties = function () 
   return App.db.data.Installer.slaveProperties;
 };
 
-
 App.db.getClusterStatus = function () {
   console.log('TRACE: Entering db:getClusterStatus function');
   App.db.data = localStorage.getObject('ambari');

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/common/chart/linear_time.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/common/chart/linear_time.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/common/chart/linear_time.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/common/chart/linear_time.js Sun Dec  9 15:10:57 2012
@@ -86,6 +86,8 @@ App.ChartLinearTimeView = Ember.View.ext
 
       _seriesProperties: null,
 
+      renderer: 'area',
+
       popupSuffix: '-popup',
 
       isPopup: false,
@@ -362,14 +364,19 @@ App.ChartLinearTimeView = Ember.View.ext
         var legendElement = document.querySelector(legendElementId);
         var timelineElement = document.querySelector(timelineElementId);
 
+        var strokeWidth = 1;
+        if (this.get('renderer') != 'area') {
+          strokeWidth = 2;
+        }
+
         var _graph = new Rickshaw.Graph({
           height: 150,
           element: chartElement,
           series: seriesData,
           interpolation: 'step-after',
           stroke: true,
-          renderer: 'area',
-          strokeWidth: 1
+          renderer: this.get('renderer'),
+          strokeWidth: strokeWidth
         });
         _graph.renderer.unstack = false;
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/load.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/load.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/load.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/load.js Sun Dec  9 15:10:57 2012
@@ -35,7 +35,7 @@ App.ChartClusterMetricsLoad = App.ChartL
       clusterName: App.router.get('clusterController.clusterName')
     }, "/data/cluster_metrics/load_1hr.json");
   }.property('App.router.clusterController.clusterName'),
-  
+  renderer: 'line',
   title: "Cluster Load",
   
   transformToSeries: function(jsonData){

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/memory.js Sun Dec  9 15:10:57 2012
@@ -35,7 +35,7 @@ App.ChartClusterMetricsMemory = App.Char
   }.property('App.router.clusterController.clusterName'),
   title: "Memory Usage",
   yAxisFormatter: App.ChartLinearTimeView.BytesFormatter,
-  
+  renderer: 'line',
   transformToSeries: function (jsonData) {
     var seriesArray = [];
     if (jsonData && jsonData.metrics && jsonData.metrics.memory) {

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/network.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/network.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/network.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/dashboard/cluster_metrics/network.js Sun Dec  9 15:10:57 2012
@@ -36,7 +36,8 @@ App.ChartClusterMetricsNetwork = App.Cha
   }.property('App.router.clusterController.clusterName'),
   title: "Network Usage",
   yAxisFormatter: App.ChartLinearTimeView.BytesFormatter,
-  
+  renderer: 'line',
+
   transformToSeries : function (jsonData) {
     var seriesArray = [];
     if (jsonData && jsonData.metrics && jsonData.metrics.network) {

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/disk.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/disk.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/disk.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/disk.js Sun Dec  9 15:10:57 2012
@@ -30,7 +30,7 @@ App.ChartHostMetricsDisk = App.ChartLine
   id: "host-metrics-disk",
   title: "Disk Usage",
   yAxisFormatter: App.ChartLinearTimeView.BytesFormatter,
-
+  renderer: 'line',
   url: function () {
     return App.formatUrl(App.apiPrefix + "/clusters/{clusterName}/hosts/{hostName}?fields=metrics/disk/disk_total[{fromSeconds},{toSeconds},{stepSeconds}],metrics/part_max_used[{fromSeconds},{toSeconds},{stepSeconds}],metrics/disk/disk_free[{fromSeconds},{toSeconds},{stepSeconds}]", {
       clusterName: App.router.get('clusterController.clusterName'),

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/load.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/load.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/load.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/load.js Sun Dec  9 15:10:57 2012
@@ -29,7 +29,7 @@ var App = require('app');
 App.ChartHostMetricsLoad = App.ChartLinearTimeView.extend({
   id: "host-metrics-load",
   title: "Load",
-
+  renderer: 'line',
   url: function () {
     return App.formatUrl(App.apiPrefix + "/clusters/{clusterName}/hosts/{hostName}?fields=metrics/load/load_fifteen[{fromSeconds},{toSeconds},{stepSeconds}],metrics/load/load_one[{fromSeconds},{toSeconds},{stepSeconds}],metrics/load/load_five[{fromSeconds},{toSeconds},{stepSeconds}]", {
       clusterName: App.router.get('clusterController.clusterName'),

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/memory.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/memory.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/memory.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/memory.js Sun Dec  9 15:10:57 2012
@@ -30,7 +30,7 @@ App.ChartHostMetricsMemory = App.ChartLi
   id: "host-metrics-memory",
   title: "Memory Usage",
   yAxisFormatter: App.ChartLinearTimeView.BytesFormatter,
-
+  renderer: 'line',
   url: function () {
     return App.formatUrl(App.apiPrefix + "/clusters/{clusterName}/hosts/{hostName}?fields=metrics/memory/swap_free[{fromSeconds},{toSeconds},{stepSeconds}],metrics/memory/mem_total[{fromSeconds},{toSeconds},{stepSeconds}],metrics/memory/mem_free[{fromSeconds},{toSeconds},{stepSeconds}],metrics/memory/mem_cached[{fromSeconds},{toSeconds},{stepSeconds}],metrics/memory/mem_buffers[{fromSeconds},{toSeconds},{stepSeconds}]", {
       clusterName: App.router.get('clusterController.clusterName'),

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/network.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/network.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/network.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/network.js Sun Dec  9 15:10:57 2012
@@ -30,7 +30,7 @@ App.ChartHostMetricsNetwork = App.ChartL
   id: "host-metrics-network",
   title: "Network Usage",
   yAxisFormatter: App.ChartLinearTimeView.BytesFormatter,
-
+  renderer: 'line',
   url: function () {
     return App.formatUrl(App.apiPrefix + "/clusters/{clusterName}/hosts/{hostName}?fields=metrics/network/bytes_in[{fromSeconds},{toSeconds},{stepSeconds}],metrics/network/bytes_out[{fromSeconds},{toSeconds},{stepSeconds}],metrics/network/pkts_in[{fromSeconds},{toSeconds},{stepSeconds}],metrics/network/pkts_out[{fromSeconds},{toSeconds},{stepSeconds}]", {
       clusterName: App.router.get('clusterController.clusterName'),

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/processes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/processes.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/processes.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/host/metrics/processes.js Sun Dec  9 15:10:57 2012
@@ -29,7 +29,7 @@ var App = require('app');
 App.ChartHostMetricsProcesses = App.ChartLinearTimeView.extend({
   id: "host-metrics-processes",
   title: "Processes",
-
+  renderer: 'line',
   url: function () {
     return App.formatUrl(App.apiPrefix + "/clusters/{clusterName}/hosts/{hostName}?fields=metrics/process/proc_total[{fromSeconds},{toSeconds},{stepSeconds}],metrics/process/proc_run[{fromSeconds},{toSeconds},{stepSeconds}]", {
       clusterName: App.router.get('clusterController.clusterName'),

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/service/info/metrics/hbase/regionserver_queuesize.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/service/info/metrics/hbase/regionserver_queuesize.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/service/info/metrics/hbase/regionserver_queuesize.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/service/info/metrics/hbase/regionserver_queuesize.js Sun Dec  9 15:10:57 2012
@@ -29,7 +29,7 @@ var App = require('app');
 App.ChartServiceMetricsHBASE_RegionServerQueueSize = App.ChartLinearTimeView.extend({
   id: "service-metrics-hbase-regionserver-queuesize",
   title: "RegionServer Queue Size",
-
+  renderer: 'line',
   url: function () {
     return App.formatUrl(App.apiPrefix + "/clusters/{clusterName}/services/HBASE/components/HBASE_REGIONSERVER?fields=metrics/hbase/regionserver/flushQueueSize[{fromSeconds},{toSeconds},{stepSeconds}],metrics/hbase/regionserver/compactionQueueSize[{fromSeconds},{toSeconds},{stepSeconds}]", {
       clusterName: App.router.get('clusterController.clusterName')

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/service/info/metrics/hbase/regionserver_rw_requests.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/service/info/metrics/hbase/regionserver_rw_requests.js?rev=1419002&r1=1419001&r2=1419002&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/service/info/metrics/hbase/regionserver_rw_requests.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/main/service/info/metrics/hbase/regionserver_rw_requests.js Sun Dec  9 15:10:57 2012
@@ -29,7 +29,7 @@ var App = require('app');
 App.ChartServiceMetricsHBASE_RegionServerReadWriteRequests = App.ChartLinearTimeView.extend({
   id: "service-metrics-hbase-regionserver-rw-requests",
   title: "RegionServer Requests",
-
+  renderer: 'line',
   url: function () {
     return App.formatUrl(App.apiPrefix + "/clusters/{clusterName}/services/HBASE/components/HBASE_REGIONSERVER?fields=metrics/hbase/regionserver/readRequestsCount[{fromSeconds},{toSeconds},{stepSeconds}],metrics/hbase/regionserver/writeRequestsCount[{fromSeconds},{toSeconds},{stepSeconds}]", {
       clusterName: App.router.get('clusterController.clusterName')