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/11/08 03:53:33 UTC

svn commit: r1406902 - in /incubator/ambari/branches/AMBARI-666: ./ ambari-web/app/ ambari-web/app/controllers/ ambari-web/app/controllers/wizard/ ambari-web/app/models/ ambari-web/app/routes/ ambari-web/app/styles/ ambari-web/app/templates/wizard/ amb...

Author: yusaku
Date: Thu Nov  8 02:53:32 2012
New Revision: 1406902

URL: http://svn.apache.org/viewvc?rev=1406902&view=rev
Log:
AMBARI-964. Implement summary page of the installer wizard. (Jaimin Jetly via yusaku)

Modified:
    incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt
    incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/installer.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service_config.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less
    incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step10.hbs
    incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step9.hbs
    incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step10_view.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step2_view.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step9_view.js

Modified: incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt?rev=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt (original)
+++ incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt Thu Nov  8 02:53:32 2012
@@ -12,6 +12,9 @@ AMBARI-666 branch (unreleased changes)
 
   NEW FEATURES
 
+  AMBARI-964. Implement summary page of installer wizard. (Jaimin Jetly
+  via yusaku)
+
   AMBARI-974. Decommissioning of datanodes. (Jitendra Pandey via mahadev)
 
   AMBARI-975. Fix support for cascading updates to configs. (Hitesh Shah

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/installer.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/installer.js?rev=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/installer.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/installer.js Thu Nov  8 02:53:32 2012
@@ -55,6 +55,13 @@ App.InstallerController = Em.Controller.
     }
   }.observes('currentStep'),
 
+  setLowerStepsDisable: function (stepNo) {
+    for (var i = 1; i < stepNo; i++) {
+      var step = this.get('isStepDisabled').findProperty('step', i);
+      step.set('value', true);
+    }
+  },
+
   prevInstallStatus: function () {
     console.log('Inside the prevInstallStep function: The name is ' + App.router.get('loginController.loginName'));
     var result = App.db.isCompleted()
@@ -204,7 +211,7 @@ App.InstallerController = Em.Controller.
     cluster: null,
     hosts: null,
     services: null,
-    hostsInfo: null,
+    hostsInfo: [],
     slaveComponentHosts: null,
     hostSlaveComponents: null,
     masterComponentHosts: null,
@@ -227,7 +234,6 @@ App.InstallerController = Em.Controller.
     console.log("InstallerController:loadClusterInfo: loaded data ", cluster);
   },
 
-
   /**
    * Save all info about cluster to model
    * @param stepController Step1WizardController
@@ -266,6 +272,7 @@ App.InstallerController = Em.Controller.
     for (var index in hostInfo) {
       hostInfo[index].status = "pending";
       hostInfo[index].message = 'Waiting';
+      hostInfo[index].logTasks = [];
       hostInfo[index].tasks = [];
       hostInfo[index].progress = '0';
     }
@@ -410,13 +417,14 @@ App.InstallerController = Em.Controller.
       var host = hosts.findProperty('name', hostInfo[index].name);
       if (host) {
         hostInfo[index].status = host.status;
+        hostInfo[index].logTasks = host.logTasks;
         hostInfo[index].tasks = host.tasks;
         hostInfo[index].message = host.message;
         hostInfo[index].progress = host.progress;
       }
     }
     App.db.setHosts(hostInfo);
-    console.log('installerController:saveInstalledHosts: save hosts ', hostInfo);
+    this.set('content.hostsInfo', hostInfo);
   },
 
   /**
@@ -677,7 +685,7 @@ App.InstallerController = Em.Controller.
   loadHostToMasterComponent: function () {
     var list = App.db.getHostToMasterComponent();
     this.set('content.hostToMasterComponent', list);
-    console.log("AddHostController.loadHostToMasterComponent: loaded list ", list);
+    console.log("InstallerController.loadHostToMasterComponent: loaded list ", list);
   },
 
   /**
@@ -686,6 +694,7 @@ App.InstallerController = Em.Controller.
   loadAllPriorSteps: function () {
     var step = this.get('currentStep');
     switch (step) {
+      case '10':
       case '9':
       case '8':
       case '7':
@@ -727,16 +736,19 @@ App.InstallerController = Em.Controller.
       timeout: 5000,
       success: function (data) {
         var jsonData = jQuery.parseJSON(data);
+        var installSartTime = new Date().getTime();
         console.log("TRACE: STep8 -> In success function for the installService call");
         console.log("TRACE: STep8 -> value of the url is: " + url);
         if (jsonData) {
           var requestId = jsonData.href.match(/.*\/(.*)$/)[1];
+
           console.log('requestId is: ' + requestId);
           var clusterStatus = {
             status: 'PENDING',
             requestId: requestId,
             isInstallError: false,
-            isCompleted: false
+            isCompleted: false,
+            installStartTime: installSartTime
           };
           self.saveClusterStatus(clusterStatus);
         } else {
@@ -762,6 +774,4 @@ App.InstallerController = Em.Controller.
 
   }
 
-
-
 });

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js?rev=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js Thu Nov  8 02:53:32 2012
@@ -18,22 +18,310 @@
 
 var App = require('app');
 
-App.WizardStep10Controller = Em.ArrayController.extend({
+App.WizardStep10Controller = Em.Controller.extend({
   name: 'wizardStep10Controller',
-  content: [],
-
-  clearStep: function() {
-    this.clear();
+  clusterInfo: [],
+  clearStep: function () {
+    this.get('clusterInfo').clear();
   },
 
-  loadStep: function() {
+  loadStep: function () {
     console.log("TRACE: Loading step10: Summary Page");
     this.clearStep();
+    this.loadInstalledHosts(this.loadRegisteredHosts());
+    var installFlag = this.loadMasterComponents();
+    var startFlag = this.loadStartedServices();
+    if (installFlag && startFlag) {
+      this.loadInstallTime();
+    }
+  },
+
+  loadRegisteredHosts: function () {
+    var masterHosts = this.get('content.masterComponentHosts').mapProperty('hostName').uniq();
+    var slaveHosts = this.get('content.slaveComponentHosts');
+    var hostObj = [];
+    slaveHosts.forEach(function (_hosts) {
+      hostObj = hostObj.concat(_hosts.hosts);
+    }, this);
+    slaveHosts = hostObj.mapProperty('hostname').uniq();
+    var registeredHosts = masterHosts.concat(slaveHosts).uniq();
+    var registerHostsStatement = registeredHosts.length + ' hosts registered to the cluster.';
+    var registerHostsObj = Ember.Object.create({
+      id: 1,
+      displayStatement: registerHostsStatement,
+      status: []
+    });
+    this.get('clusterInfo').pushObject(registerHostsObj);
+
+    return registerHostsObj;
+  },
+
+  loadInstalledHosts: function (host) {
+    var hosts = this.get('content.hostsInfo');
+    var hostsInfo = [];
+    for (var index in hosts) {
+      hostsInfo.pushObject(hosts[index]);
+      console.log('Step10 SUMMARY: value of hosts is: ' + hosts[index].status);
+    }
+    var succededHosts = hostsInfo.filterProperty('status', 'success');
+    var warnedHosts = hostsInfo.filterProperty('status', 'warning').concat(hostsInfo.filterProperty('status', 'failed'));
+    if (succededHosts.length) {
+      var successStatement = succededHosts.length + ' nodes succeded completely to install and start all service components assigned to them.';
+      this.get('clusterInfo').findProperty('id', 1).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: successStatement
+      }));
+    }
+
+    if (warnedHosts.length) {
+      var warnStatement = warnedHosts.length + ' warnings';
+      this.get('clusterInfo').findProperty('id', 1).get('status').pushObject(Ember.Object.create({
+        id: 2,
+        displayStatement: warnStatement,
+        statements: []
+      }));
+
+      warnedHosts.forEach(function (_host) {
+        var clusterState;
+        console.log("Content.cluster.staus is: " + this.get('content.cluster.status'));
+        if (this.get('content.cluster.status') === 'INSTALL FAILED') {
+          clusterState = 'Installing ';
+        } else if (this.get('content.cluster.status') === 'START FAILED') {
+          clusterState = 'Starting ';
+        }
+        console.log('host value is: ' + JSON.stringify(_host));
+        var failedTasks = _host.tasks.filterProperty('Tasks.status', 'FAILED');
+        failedTasks.forEach(function (_task) {
+          var taskStatement = clusterState + _task.Tasks.role + ' failed on ' + _host.name;
+          console.log('Over here in SUMMARY page...');
+          this.get('clusterInfo').findProperty('id', 1).get('status').findProperty('id', 2).get('statements').pushObject(Ember.Object.create({
+            status: 'failed',
+            displayStatement: taskStatement
+          }));
+        }, this);
+
+        var abortedTasks = _host.tasks.filterProperty('Tasks.status', 'ABORTED');
+        abortedTasks.forEach(function (_task) {
+          var abortStatement = clusterState + _task.Tasks.role + ' aborted on ' + _host.name;
+          this.get('clusterInfo').findProperty('id', 1).get('status').findProperty('id', 2).get('statements').pushObject(Ember.Object.create({
+            status: 'aborted',
+            displayStatement: abortStatement
+          }));
+        }, this);
+
+        var timedOutTasks = _host.tasks.filterProperty('Tasks.status', 'TIMEDOUT');
+        timedOutTasks.forEach(function (_task) {
+          var abortStatement = clusterState + _task.Tasks.role + ' timed out on ' + _host.name;
+          this.get('clusterInfo').findProperty('id', 1).get('status').findProperty('id', 2).get('statements').pushObject(Ember.Object.create({
+            status: 'timedout',
+            displayStatement: timedOutTasks
+          }));
+        }, this);
+      }, this);
+    }
+  },
+
+  loadMasterComponents: function () {
+    var components = this.get('content.masterComponentHosts');
+    var statement;
+    if (this.get('content.cluster.status') === 'INSTALL FAILED') {
+      this.get('clusterInfo').pushObject(Ember.Object.create({
+        id: 2,
+        displayStatement: 'Installing master services failed',
+        status: []
+      }));
+      return false;
+    } else {
+      this.get('clusterInfo').pushObject(Ember.Object.create({
+        id: 2,
+        displayStatement: 'Master services installed',
+        status: []
+      }));
+    }
+
+    console.log('STEP10 master components:  ' + JSON.stringify(components));
+    components.forEach(function (_component) {
+      switch (_component.component) {
+        case 'NAMENODE':
+          this.loadNn(_component);
+          break;
+        case 'SECONDARY_NAMENODE':
+          this.loadSnn(_component);
+          break;
+        case 'JOBTRACKER' :
+          this.loadJt(_component);
+          break;
+        case 'ZOOKEEPER_SERVER' :
+          this.loadZk(_component);
+          break;
+        case 'HBASE_MASTER':
+          this.loadHb(_component);
+          break;
+        case 'HIVE_SERVER':
+          this.loadHiveServer(_component);
+          break;
+        case 'OOZIE_SERVER':
+          this.loadOozieServer(_component);
+          break;
+        case 'GANGLIA_SERVER':
+          this.loadGanglia(_component)
+          break;
+        case 'NAGIOS_SERVER':
+          this.loadNagios(_component);
+          break;
+      }
+    }, this);
+    return true;
+  },
+
+  loadNn: function (component) {
+    if (component.get('hostName')) {
+      var statement = 'NameNode installed on ' + component.get('hostName');
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to NameNode component');
+    }
+  },
+
+  loadSnn: function (component) {
+    if (component.get('hostName')) {
+      var statement = 'SecondaryNameNode installed on ' + component.get('hostName');
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to SecondaryNameNode component');
+    }
+  },
+
+  loadJt: function (component) {
+    if (component.get('hostName')) {
+      var statement = 'JobTracker installed on ' + component.get('hostName');
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to JobTracker component');
+    }
+  },
+
+  loadZk: function (component) {
+    var hostLength = component.get('hostName').length;
+    if (hostLength) {
+      var hostVal;
+      if (hostLength === 1) {
+        hostVal = 'host';
+      } else {
+        hostVal = 'hosts';
+      }
+      var statement = 'ZooKeeper installed on ' + component.get('hostName').length + ' ' + hostVal;
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to Zookeeper component');
+    }
+  },
+
+  loadHb: function (component) {
+    if (component.get('hostName')) {
+      var statement = 'HBase Master installed on ' + component.get('hostName');
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to HBase Master component');
+    }
+  },
+
+  loadHiveServer: function (component) {
+    if (component.get('hostName')) {
+      var statement = 'Hive Metastore installed on ' + component.get('hostName');
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to Hive server component');
+    }
+  },
 
+  loadOozieServer: function (component) {
+    if (component.get('hostName')) {
+      var statement = 'Hive Metastore installed on ' + component.get('hostName');
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to Oozie server component');
+    }
   },
 
-  navigateStep: function() {
-    this.loadStep();
+  loadGanglia: function (component) {
+    if (component.get('hostName')) {
+      var statement = 'Ganglia Server installed on ' + component.get('hostName');
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to Ganglia server component');
+    }
+  },
+
+  loadNagios: function (component) {
+    if (component.get('hostName')) {
+      var statement = 'Ganglia Server installed on ' + component.get('hostName');
+      this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
+        id: 1,
+        displayStatement: statement
+      }));
+    } else {
+      console.log('ERROR: no host name assigned to Nagios server component');
+    }
+  },
+
+  loadStartedServices: function (component) {
+    if (this.get('content.cluster.status') === 'STARTED') {
+      var statement = 'All services started'
+      this.get('clusterInfo').pushObject(Ember.Object.create({
+        id: 3,
+        displayStatement: 'All services started',
+        status: []
+      }));
+      this.get('clusterInfo').pushObject(Ember.Object.create({
+        id: 4,
+        displayStatement: 'All tests passed',
+        status: []
+      }));
+      return true;
+    } else {
+      this.get('clusterInfo').pushObject(Ember.Object.create({
+        id: 3,
+        displayStatement: 'Starting services failed',
+        status: []
+      }));
+      return false;
+    }
+  },
+
+  loadInstallTime: function() {
+    var statement = 'Install and start of all services completed in '  + this.get('content.cluster.serviceStartTime') + ' minutes';
+    this.get('clusterInfo').pushObject(Ember.Object.create({
+      id: 5,
+      displayStatement: 'All services started',
+      status: []
+    }));
   }
+
+
 });
 

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=1406902&r1=1406901&r2=1406902&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 Thu Nov  8 02:53:32 2012
@@ -32,7 +32,7 @@ App.WizardStep9Controller = Em.Controlle
   polledData: [],
 
   status: function () {
-    if (this.hosts.everyProperty('status', 'success')) {
+    if (this.hosts.length && this.hosts.everyProperty('status', 'success')) {
       return 'success';
     } else if (this.hosts.someProperty('status', 'failed')) {
       return 'failed';
@@ -48,11 +48,11 @@ App.WizardStep9Controller = Em.Controlle
     //TODO: uncomment following line after the hook up with the API call
     if (this.get('content.cluster.isCompleted') === false) {
       this.loadStep();
-      if (App.db.getClusterStatus().isInstallError === true) {
+      if (this.get('content.cluster.status') === 'INSTALL FAILED') {
         this.set('isStepCompleted', true);
         this.set('status', 'failed');
         this.set('progress', '100');
-      } else if (App.db.getClusterStatus().isStartError === true) {
+      } else if (this.get('content.cluster.status') === 'START FAILED') {
         this.launchStartServices();
       } else {
         this.startPolling();
@@ -94,6 +94,7 @@ App.WizardStep9Controller = Em.Controlle
         name: _hostInfo.name,
         status: _hostInfo.status,
         tasks: _hostInfo.tasks,
+        logTasks: _hostInfo.logTasks,
         message: _hostInfo.message,
         progress: _hostInfo.progress
       });
@@ -234,7 +235,7 @@ App.WizardStep9Controller = Em.Controlle
         console.log("ERROR");
         var clusterStatus = {
           name: clusterName,
-          status: 'PENDING',
+          status: 'START FAILED',
           isStartError: true,
           isCompleted: false
         };
@@ -356,20 +357,26 @@ App.WizardStep9Controller = Em.Controlle
         clusterStatus = {
           status: 'INSTALLED',
           requestId: requestId,
-          isCompleted: true
+          isCompleted: true,
+          installStartTime: this.get('content.cluster.installStartTime')
         }
         if (this.isSuccess(polledData)) {
           clusterStatus.status = 'STARTED';
+          var serviceSartTime = new Date().getTime();
+          var timeToStart = Math.floor((serviceSartTime - this.get('content.cluster.installStartTime')) / 60000);
+          clusterStatus.installTime = timeToStart;
           this.set('status', 'success');
         } else {
           if (this.isStepFailed(polledData)) {
-            clusterStatus.status = 'FAILED';
+            clusterStatus.status = 'START FAILED';      // 'START FAILED' implies to step10 that installation was successful but start failed
             this.set('status', 'failed');
             this.setHostsStatus(this.getFailedHostsForFailedRoles(polledData));
           }
         }
         App.router.get('installerController').saveClusterStatus(clusterStatus);
         this.set('isStepCompleted', true);
+        this.setTasksPerHost();
+        App.router.get('installerController').saveInstalledHosts(this);
         return true;
       }
     } else if (this.get('content.cluster.status') === 'PENDING') {
@@ -377,10 +384,15 @@ App.WizardStep9Controller = Em.Controlle
         clusterStatus = {
           status: 'PENDING',
           requestId: requestId,
-          isCompleted: true
+          isCompleted: true,
+          installStartTime: this.get('content.cluster.installStartTime')
         }
+        var serviceSartTime = new Date().getTime();
+        var timeToStart = serviceSartTime - this.get('content.cluster.installStartTime');
+        console.log("STEP9: ********The time difference is = " + serviceSartTime / 60000);
         if (this.isStepFailed(polledData)) {
-          clusterStatus.status = 'FAILED';
+          console.log("In installation failure");
+          clusterStatus.status = 'INSTALL FAILED';
           this.set('progress', '100');
           this.set('status', 'failed');
           this.setHostsStatus(this.getFailedHostsForFailedRoles(polledData), 'failed');
@@ -389,9 +401,10 @@ App.WizardStep9Controller = Em.Controlle
         } else {
           clusterStatus.status = 'INSTALLED';
           this.set('progress', '34');
-          App.router.get('installerController').saveInstalledHosts(this);
           this.launchStartServices();  //TODO: uncomment after the actual hookup
         }
+        this.setTasksPerHost();
+        App.router.get('installerController').saveInstalledHosts(this);
         return true;
       }
     }
@@ -400,21 +413,43 @@ App.WizardStep9Controller = Em.Controlle
 
   getCompletedTasksForHost: function (host) {
     var hostname = host.get('name');
-    var tasksPerHost = host.tasks.filterProperty('Tasks.host_name', hostname);
+    var tasksPerHost = host.logTasks.filterProperty('Tasks.host_name', hostname);
     var succededTasks = tasksPerHost.filterProperty('Tasks.status', 'COMPLETED');
     var inProgressTasks = tasksPerHost.filterProperty('Tasks.status', 'IN_PROGRESS');
     var listedTasksPerHost = succededTasks.concat(inProgressTasks).uniq();
     return listedTasksPerHost;
   },
 
+  setTasksPerHost: function () {
+    console.log("In setTasksPerHost fo step9*****************");
+    var tasksData = this.get('polledData');
+    this.get('hosts').forEach(function (_host) {
+      var tasksPerHost = tasksData.filterProperty('Tasks.host_name', _host.name); // retrieved from polled Data
+      if (tasksPerHost.length === 0) {
+        //alert('For testing with mockData follow the sequence: hit referesh,"mockData btn", "pollData btn", again "pollData btn"');
+        //exit();
+      }
+      if (tasksPerHost !== null && tasksPerHost !== undefined && tasksPerHost.length !== 0) {
+        tasksPerHost.forEach(function (_taskPerHost) {
+          console.log('In step9 _taskPerHost function.');
+          //if (_taskPerHost.Tasks.status !== 'PENDING' && _taskPerHost.Tasks.status !== 'QUEUED' &&  _taskPerHost.Tasks.status !== 'IN_PROGRESS') {
+          _host.tasks.pushObject(_taskPerHost);
+          //}
+        }, this);
+      }
+    }, this);
+  },
+
   // This is done at HostRole level.
-  setTasksStatePerHost: function (tasksPerHost, host) {
+  setLogTasksStatePerHost: function (tasksPerHost, host) {
     var tasks = [];
+    console.log('In step9 setTasksStatePerHost function.');
     tasksPerHost.forEach(function (_taskPerHost) {
+      console.log('In step9 _taskPerHost function.');
       if (_taskPerHost.Tasks.status !== 'PENDING' && _taskPerHost.Tasks.status !== 'QUEUED') {
-        var task = host.tasks.findProperty('Tasks.id', _taskPerHost.Tasks.id);
+        var task = host.logTasks.findProperty('Tasks.id', _taskPerHost.Tasks.id);
         if (!(task && (task.Tasks.command === _taskPerHost.Tasks.command))) {
-          host.tasks.pushObject(_taskPerHost);
+          host.logTasks.pushObject(_taskPerHost);
         }
       }
     }, this);
@@ -442,10 +477,10 @@ App.WizardStep9Controller = Em.Controlle
         //exit();
       }
       if (actionsPerHost !== null && actionsPerHost !== undefined && actionsPerHost.length !== 0) {
-        this.onSuccessPerHost(actionsPerHost, _host);    // every action should be a success
-        this.onWarningPerHost(actionsPerHost, _host);    // any action should be a faliure
-        this.onInProgressPerHost(actionsPerHost, _host); // current running action for a host
-        this.setTasksStatePerHost(actionsPerHost, _host);
+        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.onInProgressPerHost(actionsPerHost, _host);  // current running action for a host
         totalProgress = self.progressPerHost(actionsPerHost, _host);
       }
     }, this);

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js?rev=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js Thu Nov  8 02:53:32 2012
@@ -126,7 +126,10 @@ Em.I18n.translations = {
   'installer.step9.host.status.failed': 'failures encountered',
   'installer.step9.hostLog.popup.header': 'Tasks executed on ',
 
-'installer.step10.header': 'Summary',
+  'installer.step10.header': 'Summary',
+  'installer.step10.body': 'Here is the summary of the cluster install process.',
+
+
   'form.create': 'Create',
   'form.save': 'Save',
   'form.cancel': 'Cancel',

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=1406902&r1=1406901&r2=1406902&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 Thu Nov  8 02:53:32 2012
@@ -110,7 +110,6 @@ App.ServiceConfigProperty = Ember.Object
     switch (this.get('name')) {
       case 'namenode.host':
         var temp = masterComponentHostsInDB.findProperty('component','NAMENODE');
-        console.log("this is temp: " + temp.hostName);
         this.set('value', temp.hostName);
         break;
       case 'snamenode.host':

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=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js Thu Nov  8 02:53:32 2012
@@ -35,6 +35,7 @@ App.Router = Em.Router.extend({
 
   clearAllSteps: function() {
     this.get('installerController.content').set('cluster',null);
+    this.get('wizardStep2Controller').set('hasSubmitted',false);
     /*this.get('installerController.content').set({
       cluster: null,
       hosts: null,

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=1406902&r1=1406901&r2=1406902&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 Thu Nov  8 02:53:32 2012
@@ -243,7 +243,7 @@ module.exports = Em.Route.extend({
     next: function (router) {
       var installerController = router.get('installerController');
       var wizardStep8Controller = router.get('wizardStep8Controller');
-        installerController.installServices();   //TODO: Uncomment for the actual hookupq
+      installerController.installServices();   //TODO: Uncomment for the actual hookup
       installerController.setInfoForStep9();
       router.transitionTo('step9');
     }
@@ -256,6 +256,9 @@ module.exports = Em.Route.extend({
       var controller = router.get('installerController');
       router.setInstallerCurrentStep('9', false);
       controller.loadAllPriorSteps();
+      if (!App.testMode) {              //if test mode is ON don't disable prior steps link.
+        controller.setLowerStepsDisable(9);
+      }
       controller.connectOutlet('wizardStep9', controller.get('content'));
     },
     back: Em.Router.transitionTo('step8'),
@@ -268,7 +271,7 @@ module.exports = Em.Route.extend({
     next: function (router) {
       var installerController = router.get('installerController');
       var wizardStep9Controller = router.get('wizardStep9Controller');
-      installerController.saveClusterInfo(wizardStep9Controller);
+     // installerController.saveClusterInfo(wizardStep9Controller);
       installerController.saveInstalledHosts(wizardStep9Controller);
       router.transitionTo('step10');
     }
@@ -281,7 +284,7 @@ module.exports = Em.Route.extend({
       var controller = router.get('installerController');
       router.setInstallerCurrentStep('10', false);
       controller.loadAllPriorSteps();
-      controller.connectOutlet('wizardStep10');
+      controller.connectOutlet('wizardStep10',controller.get('content'));
     },
     back: Em.Router.transitionTo('step9'),
     complete: function (router, context) {

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=1406902&r1=1406901&r2=1406902&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 Thu Nov  8 02:53:32 2012
@@ -1627,4 +1627,8 @@ ul.inline li {
 
 #step8-content {
   max-height: 570px;
-}
\ No newline at end of file
+}
+
+#step10-content {
+  max-height: 440px;
+}

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step10.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step10.hbs?rev=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step10.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step10.hbs Thu Nov  8 02:53:32 2012
@@ -17,10 +17,31 @@
 -->
 
 <h2>{{t installer.step10.header}}</h2>
+<div class="alert alert-info">
+  {{t installer.step10.body}}
+</div>
+<div id="step10-content" class="well pre-scrollable">
+  {{#each item in clusterInfo}}
+  <ul>
+    {{item.displayStatement}}
+    {{#each status in item.status}}
+    <ul>
+      {{status.displayStatement}}
+      {{#each statement in status.statements}}
+      <ul>
+        {{statement.displayStatement}}
+      </ul>
+      {{/each}}
+    </ul>
+    {{/each}}
+  </ul>
+  {{/each}}
+</div>
+
 <div class="btn-area">
   <a
-    class="btn pull-left" {{bindAttr disabled="isSubmitDisabled"}} {{action back}}>&larr;
+          class="btn pull-left" {{bindAttr disabled="isSubmitDisabled"}} {{action back}}>&larr;
     Back</a>
   <a
-    class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action complete}}>Complete &rarr;</a>
+          class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action complete}}>Complete &rarr;</a>
 </div>

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=1406902&r1=1406901&r2=1406902&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 Thu Nov  8 02:53:32 2012
@@ -113,9 +113,6 @@
     {{/if}}
     <div class="btn-area">
       <a
-              class="btn pull-left" {{bindAttr disabled="isSubmitDisabled"}} {{action back target="controller"}}>&larr;
-        Back</a>
-      <a
               class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action submit target="controller"}}>Next &rarr;</a>
     </div>
   </div>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step10_view.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step10_view.js?rev=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step10_view.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step10_view.js Thu Nov  8 02:53:32 2012
@@ -25,7 +25,7 @@ App.WizardStep10View = Em.View.extend({
 
   didInsertElement: function () {
     var controller = this.get('controller');
-    controller.navigateStep();
+    controller.loadStep();
   }
 
 });
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step2_view.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step2_view.js?rev=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step2_view.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step2_view.js Thu Nov  8 02:53:32 2012
@@ -27,7 +27,8 @@ App.WizardStep2View = Em.View.extend({
   didInsertElement: function () {
     $("[rel=popover]").popover({'placement': 'right', 'trigger': 'hover'});
     this.set('hostNameErr', false);
-    //this.set('controller.sshKeyNullErr', false);
+    this.set('controller.hostsError',null);
+    this.set('controller.sshKeyError',null);
   },
 
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step9_view.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step9_view.js?rev=1406902&r1=1406901&r2=1406902&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step9_view.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step9_view.js Thu Nov  8 02:53:32 2012
@@ -127,13 +127,14 @@ App.HostStatusView = Em.View.extend({
         hostObj: function () {
           return this.get('parentView.obj');
         }.property('parentView.obj'),
-        tasks: [],
+
+        logTasks: [],
 
         roles: function () {
           var roleArr = [];
-          var tasks = this.get('tasks');
+          var tasks = this.get('logTasks');
           if (tasks.length) {
-            var role = this.get('tasks').mapProperty('Tasks.role').uniq();
+            var role = this.get('logTasks').mapProperty('Tasks.role').uniq();
             role.forEach(function (_role) {
               var statusArr = [];
               var roleObj = {};
@@ -149,11 +150,11 @@ App.HostStatusView = Em.View.extend({
             }, this);
           }
           return roleArr;
-        }.property('tasks.@each'),
+        }.property('logTasks.@each'),
 
         didInsertElement: function () {
           console.log('The value of event context is: ' + host.name);
-          this.set('tasks', self.get('controller').getCompletedTasksForHost(event.context));
+          this.set('logTasks', self.get('controller').getCompletedTasksForHost(event.context));
         }
       })
     });