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 14:32:49 UTC

svn commit: r1418944 - in /incubator/ambari/branches/AMBARI-666/ambari-web/app: ./ assets/data/wizard/bootstrap/ controllers/wizard/ models/ styles/ templates/wizard/ views/wizard/

Author: yusaku
Date: Sun Dec  9 13:32:45 2012
New Revision: 1418944

URL: http://svn.apache.org/viewvc?rev=1418944&view=rev
Log:
AMBARI-1059. Refactor cluster management. (yusaku)

Added:
    incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/
    incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json
    incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_1.json
    incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_2.json
    incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3_host_log_popup.hbs
Removed:
    incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3HostLogPopup.hbs
Modified:
    incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step2_controller.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step3_controller.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js
    incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less
    incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3.hbs
    incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step3_view.js

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json?rev=1418944&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json Sun Dec  9 13:32:45 2012
@@ -0,0 +1,5 @@
+{
+  "status": "OK",
+  "log": "Running Bootstrap now",
+  "requestId": "1"
+}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_1.json
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_1.json?rev=1418944&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_1.json (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_1.json Sun Dec  9 13:32:45 2012
@@ -0,0 +1,16 @@
+{
+  "status": "RUNNING",
+  "hostsStatus": [
+    {
+      "status": "RUNNING",
+      "hostName": "dev001",
+      "log": "STDOUT\n\nSTDERR\nWarning: Permanently added 'dev001,10.0.2.15' (RSA) to the list of known hosts.\n"
+    },
+    {
+      "status": "RUNNING",
+      "hostName": "dev002",
+      "log": "STDOUT\n\nSTDERR\nWarning: Permanently added 'dev002,10.0.2.16' (RSA) to the list of known hosts.\n"
+    }
+  ],
+  "log": ""
+}

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_2.json
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_2.json?rev=1418944&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_2.json (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/assets/data/wizard/bootstrap/poll_2.json Sun Dec  9 13:32:45 2012
@@ -0,0 +1,16 @@
+{
+  "status": "SUCCESS",
+  "hostsStatus": [
+    {
+      "status": "FAILED",
+      "hostName": "dev001",
+      "log": "STDOUT\n\nSTDERR\nWarning: Permanently added 'dev001,10.0.2.15' (RSA) to the list of known hosts.\r\n/etc/yum.repos.d/ambari.repo: No such file or directory\nSTDOUT\n\nSTDERR\nPermission denied, please try again.\r\nConnection closed by UNKNOWN\r\nlost connection\nSTDOUT\n\nSTDERR\npython: can't open file '/tmp/setupAgent.py': [Errno 2] No such file or directory\n"
+    },
+    {
+      "status": "DONE",
+      "hostName": "dev002",
+      "log": "STDOUT\n\nSTDERR\nWarning: Permanently added 'dev002,10.0.2.16' (RSA) to the list of known hosts.\r\n/etc/yum.repos.d/ambari.repo: No such file or directory\nSTDOUT\n\nSTDERR\nPermission denied, please try again.\r\nConnection closed by UNKNOWN\r\nlost connection\nSTDOUT\n\nSTDERR\npython: can't open file '/tmp/setupAgent.py': [Errno 2] No such file or directory\n"
+    }
+  ],
+  "log": "\n\nINFO:root:BootStrapping hosts ['dev001','dev002'] using /root/dev/ambari/ambari-server/src/main/python with sshKey File /tmp/bootstrap/1/sshKey using tmp dir /tmp/bootstrap/1 ambari: localhost\nINFO:root:Running scp command scp -o ConnectTimeout=3 -o StrictHostKeyChecking=no -i /tmp/bootstrap/1/sshKey /etc/yum.repos.d/ambari.repo root@dev001:/etc/yum.repos.d\nINFO:root:scp /etc/yum.repos.d/ambari.repo done for host dev001, exitcode=1\nINFO:root:Parallel scp returns for repo file\nINFO:root:Running scp command scp -o ConnectTimeout=3 -o StrictHostKeyChecking=no -i /tmp/bootstrap/1/sshKey /root/dev/ambari/ambari-server/src/main/python/setupAgent.py root@dev001:/tmp\nINFO:root:scp /root/dev/ambari/ambari-server/src/main/python/setupAgent.py done for host dev001, exitcode=1\nINFO:root:Parallel scp returns for agent script\nINFO:root:Running setup agent...\nINFO:root:Running ssh command ssh -o ConnectTimeOut=3 -o StrictHostKeyChecking=no -i /tmp/bootstrap/1/sshKey r
 oot@dev001 python /tmp/setupAgent.py tmp localhost\nINFO:root:Setup agent done for host dev001, exitcode=2\nINFO:root:Parallel ssh returns for setup agent\n"
+}
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step2_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step2_controller.js?rev=1418944&r1=1418943&r2=1418944&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step2_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step2_controller.js Sun Dec  9 13:32:45 2012
@@ -140,15 +140,17 @@ App.WizardStep2Controller = Em.Controlle
 
     var bootStrapData = JSON.stringify({'verbose': true, 'sshKey': this.get('sshKey'), hosts: this.get('hostNameArr')});
 
-    // TODO: skipping bootstrap for now
-    if (true) {
+    if (App.skipBootstrap) {
       App.router.send('next');
       return true;
     }
 
+    var method = App.testMode ? 'GET' : 'POST';
+    var url = App.testMode ? '/data/wizard/bootstrap/bootstrap.json' : '/api/bootstrap';
+
     $.ajax({
-      type: 'POST',
-      url: '/api/bootstrap',
+      type: method,
+      url: url,
       data: bootStrapData,
       timeout: 10000,
       contentType: 'application/json',

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=1418944&r1=1418943&r2=1418944&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 13:32:45 2012
@@ -42,8 +42,16 @@ App.WizardStep3Controller = Em.Controlle
 
   navigateStep: function () {
     this.loadStep();
-    if (App.db.getBootStatus() === false) {
-      this.startBootstrap();
+    if (App.db.getInstallType().installType !== 'manual') {
+      if (App.db.getBootStatus() === false) {
+        this.startBootstrap();
+      }
+    } else {
+      // TODO: assume manually bootstrapped hosts are all successful for now
+      this.get('hosts').forEach(function (_host) {
+        _host.set('bootStatus', 'DONE');
+        _host.set('bootLog', 'Success');
+      });
     }
   },
 
@@ -55,7 +63,7 @@ App.WizardStep3Controller = Em.Controlle
     console.log("TRACE: Loading step3: Confirm Hosts");
     this.clearStep();
     var hosts = this.loadHosts();
-    // hosts.setEach('bootStatus', 'pending');
+    // hosts.setEach('bootStatus', 'RUNNING');
     this.renderHosts(hosts);
   },
 
@@ -88,30 +96,27 @@ App.WizardStep3Controller = Em.Controlle
   },
 
   /**
-   * Parses and updates the content, and governs the possibility
-   * of the next doBootstrap (polling) call.
-   * Returns true if polling should stop (no hosts are in "pending" state); false otherwise
+   * Parses and updates the content based on bootstrap API response.
+   * Returns true if polling should continue (some hosts are in "RUNNING" state); false otherwise
    */
-  parseHostInfo: function (hostsFromServer, hostsFromContent) {
-    var result = true;  // default value as true implies
-    hostsFromServer.forEach(function (_hostFromServer) {
-      var host = hostsFromContent.findProperty('name', _hostFromServer.name);
+  parseHostInfo: function (hostsStatusFromServer) {
+    hostsStatusFromServer.forEach(function (_hostStatus) {
+      var host = this.get('bootHosts').findProperty('name', _hostStatus.hostName);
       if (host !== null && host !== undefined) { // check if hostname extracted from REST API data matches any hostname in content
-        host.set('bootStatus', _hostFromServer.status);
-        host.set('cpu', _hostFromServer.cpu);
-        host.set('memory', _hostFromServer.memory);
+        host.set('bootStatus', _hostStatus.status);
+        host.set('bootLog', _hostStatus.log);
       }
-    });
-    // if the data rendered by REST API has no hosts or no hosts are in "pending" state, polling will stop
-    return this.hosts.length == 0 || !this.hosts.someProperty('bootStatus', 'pending');
+    }, this);
+    // if the data rendered by REST API has hosts in "RUNNING" state, polling will continue
+    return this.get('bootHosts').length != 0 && this.get('bootHosts').someProperty('bootStatus', 'RUNNING');
   },
 
   /* Returns the current set of visible hosts on view (All, Succeeded, Failed) */
   visibleHosts: function () {
     if (this.get('category') === 'Success') {
-      return (this.hosts.filterProperty('bootStatus', 'success'));
+      return (this.hosts.filterProperty('bootStatus', 'DONE'));
     } else if (this.get('category') === 'Error') {
-      return (this.hosts.filterProperty('bootStatus', 'error'));
+      return (this.hosts.filterProperty('bootStatus', 'FAILED'));
     } else { // if (this.get('category') === 'All Hosts')
       return this.hosts;
     }
@@ -179,27 +184,42 @@ App.WizardStep3Controller = Em.Controlle
     }
   },
 
+  numPolls: 0,
+
   startBootstrap: function () {
     //this.set('isSubmitDisabled', true);    //TODO: uncomment after actual hookup
+    this.numPolls = 0;
     this.set('bootHosts', this.get('hosts'));
     this.doBootstrap();
   },
 
   doBootstrap: function () {
+    this.numPolls++;
     var self = this;
-    var url = '/api/bootstrap';
+    var url = App.testMode ? '/data/wizard/bootstrap/poll_' + this.numPolls + '.json' : '/api/bootstrap/1';
     $.ajax({
       type: 'GET',
       url: url,
       timeout: 5000,
       success: function (data) {
-        console.log("TRACE: In success function for the GET bootstrap call");
-        var result = self.parseHostInfo(data, this.get('bootHosts'));
-        window.setTimeout(self.doBootstrap, 3000);
+        if (data.hostsStatus !== null) {
+          // in case of bootstrapping just one server, the server returns an object rather than an array...
+          if (!(data.hostsStatus instanceof Array)) {
+            data.hostsStatus = [ data.hostsStatus ];
+          }
+          console.log("TRACE: In success function for the GET bootstrap call");
+          var result = self.parseHostInfo(data.hostsStatus);
+          if (result) {
+            window.setTimeout(function () { self.doBootstrap() }, 3000);
+            return;
+          }
+        }
+        console.log('Bootstrap failed');
+        self.stopBootstrap();
       },
 
       error: function () {
-        console.log("ERROR");
+        console.log('Bootstrap failed');
         self.stopBootstrap();
       },
 
@@ -210,6 +230,7 @@ App.WizardStep3Controller = Em.Controlle
 
   stopBootstrap: function () {
     //TODO: uncomment following line after the hook up with the API call
+    console.log('stopBootstrap() called');
     // this.set('isSubmitDisabled',false);
   },
 
@@ -220,14 +241,21 @@ App.WizardStep3Controller = Em.Controlle
     }
   },
 
-  hostLogPopup: function (event) {
+  hostLogPopup: function (event, context) {
+    var host = event.context;
+
     App.ModalPopup.show({
-      header: Em.I18n.t('installer.step3.hostLog.popup.header'),
+
+      header: Em.I18n.t('installer.step3.hostLog.popup.header').format(host.get('name')),
+      secondary: null,
+
       onPrimary: function () {
         this.hide();
       },
+
       bodyClass: Ember.View.extend({
-        templateName: require('templates/wizard/step3HostLogPopup')
+        templateName: require('templates/wizard/step3_host_log_popup'),
+        host: host
       })
     });
   },

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js?rev=1418944&r1=1418943&r2=1418944&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js Sun Dec  9 13:32:45 2012
@@ -20,6 +20,7 @@
 window.App = require('app');
 
 App.testMode = false;
+App.skipBootstrap = false;
 
 require('messages');
 require('utils/data_table');

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=1418944&r1=1418943&r2=1418944&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js Sun Dec  9 13:32:45 2012
@@ -88,8 +88,7 @@ Em.I18n.translations = {
   'installer.step3.header':'Confirm Hosts',
   'installer.step3.body':'Here are the results of the host discovery process.<br>' +
     'Please verify and remove the ones that you do not want to be part of the cluster.',
-  'installer.step3.hostLog.popup.header':'Log file for the host',
-  'installer.step3.hostLog.popup.body':'Placeholder for the log file',
+  'installer.step3.hostLog.popup.header':'Bootstrap log for {0}',
   'installer.step3.hosts.remove.popup.header':'Remove Hosts',
   'installer.step3.hosts.remove.popup.body':'Are you sure you want to remove the selected host(s)?',
   'installer.step3.hosts.retry.popup.header':'Retry Host Discovery',

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js?rev=1418944&r1=1418943&r2=1418944&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js Sun Dec  9 13:32:45 2012
@@ -21,12 +21,50 @@ var App = require('app');
 App.HostInfo = Ember.Object.extend({
   elementId: 'host',
   name: '',
-  bootStatus: 'pending',
   cpu: '2',
   memory: '2',
   message: 'Information',
   barColor: 'progress-info',
   isChecked: true,
-  horizonData:
-    [{"cpu":"61","date":"2012-09-05T11:03:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"36","status":"LIVE","rackName":"Rack-0","io":"23"},{"cpu":"1","date":"2012-09-05T11:06:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"54","status":"LIVE","rackName":"Rack-0","io":"96"},{"cpu":"36","date":"2012-09-05T11:09:00+03:00","id":"0","memory":"65","name":"Node-0.0","network":"42","status":"LIVE","rackName":"Rack-0","io":"49"},{"cpu":"50","date":"2012-09-05T11:12:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"67"},{"cpu":"79","date":"2012-09-05T11:15:00+03:00","id":"0","memory":"91","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"47"},{"cpu":"65","date":"2012-09-05T11:18:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"90","status":"LIVE","rackName":"Rack-0","io":"74"},{"cpu":"42","date":"2012-09-05T11:21:00+03:00","id":"0","memory":"96","name":"Node-0.
 0","network":"29","status":"LIVE","rackName":"Rack-0","io":"6"},{"cpu":"76","date":"2012-09-05T11:24:00+03:00","id":"0","memory":"28","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"1"},{"cpu":"24","date":"2012-09-05T11:27:00+03:00","id":"0","memory":"66","name":"Node-0.0","network":"75","status":"LIVE","rackName":"Rack-0","io":"31"},{"cpu":"71","date":"2012-09-05T11:30:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"1","status":"LIVE","rackName":"Rack-0","io":"36"},{"cpu":"3","date":"2012-09-05T11:33:00+03:00","id":"0","memory":"57","name":"Node-0.0","network":"12","status":"LIVE","rackName":"Rack-0","io":"71"},{"cpu":"85","date":"2012-09-05T11:36:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"54"},{"cpu":"49","date":"2012-09-05T11:39:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"28","status":"LIVE","rackName":"Rack-0","io":"60"},{"cpu":"46","date":"2012-09-05
 T11:42:00+03:00","id":"0","memory":"75","name":"Node-0.0","network":"7","status":"LIVE","rackName":"Rack-0","io":"86"},{"cpu":"61","date":"2012-09-05T11:45:00+03:00","id":"0","memory":"11","name":"Node-0.0","network":"65","status":"LIVE","rackName":"Rack-0","io":"65"},{"cpu":"5","date":"2012-09-05T11:48:00+03:00","id":"0","memory":"24","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"62"},{"cpu":"30","date":"2012-09-05T11:51:00+03:00","id":"0","memory":"40","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"98"},{"cpu":"5","date":"2012-09-05T11:54:00+03:00","id":"0","memory":"38","name":"Node-0.0","network":"17","status":"LIVE","rackName":"Rack-0","io":"27"},{"cpu":"22","date":"2012-09-05T11:57:00+03:00","id":"0","memory":"80","name":"Node-0.0","network":"62","status":"LIVE","rackName":"Rack-0","io":"38"}]
+
+  bootLog: null,
+
+  bootStatus: 'RUNNING',
+
+  bootStatusForDisplay: function() {
+    switch (this.get('bootStatus')) {
+      case 'DONE':
+        return 'Success';
+      case 'FAILED':
+        return 'Failed';
+      case 'RUNNING':
+        return 'Running';
+    }
+  }.property('bootStatus'),
+
+  bootBarColor: function() {
+    switch (this.get('bootStatus')) {
+      case 'DONE':
+        return 'progress-success';
+      case 'FAILED':
+        return 'progress-danger';
+      case 'RUNNING':
+      default:
+        return 'progress-info';
+    }
+  }.property('bootStatus'),
+
+  isBootDone: function() {
+    switch (this.get('bootStatus')) {
+      case 'DONE':
+      case 'FAILED':
+        return true;
+      case 'RUNNING':
+      default:
+        return false;
+    }
+
+  }.property('bootStatus')
+  /* horizonData:
+    [{"cpu":"61","date":"2012-09-05T11:03:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"36","status":"LIVE","rackName":"Rack-0","io":"23"},{"cpu":"1","date":"2012-09-05T11:06:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"54","status":"LIVE","rackName":"Rack-0","io":"96"},{"cpu":"36","date":"2012-09-05T11:09:00+03:00","id":"0","memory":"65","name":"Node-0.0","network":"42","status":"LIVE","rackName":"Rack-0","io":"49"},{"cpu":"50","date":"2012-09-05T11:12:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"67"},{"cpu":"79","date":"2012-09-05T11:15:00+03:00","id":"0","memory":"91","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"47"},{"cpu":"65","date":"2012-09-05T11:18:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"90","status":"LIVE","rackName":"Rack-0","io":"74"},{"cpu":"42","date":"2012-09-05T11:21:00+03:00","id":"0","memory":"96","name":"Node-0.
 0","network":"29","status":"LIVE","rackName":"Rack-0","io":"6"},{"cpu":"76","date":"2012-09-05T11:24:00+03:00","id":"0","memory":"28","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"1"},{"cpu":"24","date":"2012-09-05T11:27:00+03:00","id":"0","memory":"66","name":"Node-0.0","network":"75","status":"LIVE","rackName":"Rack-0","io":"31"},{"cpu":"71","date":"2012-09-05T11:30:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"1","status":"LIVE","rackName":"Rack-0","io":"36"},{"cpu":"3","date":"2012-09-05T11:33:00+03:00","id":"0","memory":"57","name":"Node-0.0","network":"12","status":"LIVE","rackName":"Rack-0","io":"71"},{"cpu":"85","date":"2012-09-05T11:36:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"54"},{"cpu":"49","date":"2012-09-05T11:39:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"28","status":"LIVE","rackName":"Rack-0","io":"60"},{"cpu":"46","date":"2012-09-05
 T11:42:00+03:00","id":"0","memory":"75","name":"Node-0.0","network":"7","status":"LIVE","rackName":"Rack-0","io":"86"},{"cpu":"61","date":"2012-09-05T11:45:00+03:00","id":"0","memory":"11","name":"Node-0.0","network":"65","status":"LIVE","rackName":"Rack-0","io":"65"},{"cpu":"5","date":"2012-09-05T11:48:00+03:00","id":"0","memory":"24","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"62"},{"cpu":"30","date":"2012-09-05T11:51:00+03:00","id":"0","memory":"40","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"98"},{"cpu":"5","date":"2012-09-05T11:54:00+03:00","id":"0","memory":"38","name":"Node-0.0","network":"17","status":"LIVE","rackName":"Rack-0","io":"27"},{"cpu":"22","date":"2012-09-05T11:57:00+03:00","id":"0","memory":"80","name":"Node-0.0","network":"62","status":"LIVE","rackName":"Rack-0","io":"38"}] */
 });

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=1418944&r1=1418943&r2=1418944&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 13:32:45 2012
@@ -260,6 +260,9 @@ h1 {
         margin-bottom: 0;
       }
     }
+    .progress {
+      margin-bottom: 0;
+    }
   }
   #step4, #step6 {
     a.selected {

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3.hbs?rev=1418944&r1=1418943&r2=1418944&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3.hbs Sun Dec  9 13:32:45 2012
@@ -61,11 +61,10 @@
         <thead>
         <tr>
           <th class="span1">{{view Ember.Checkbox checkedBinding="allChecked"}}</th>
-          <th class="span2">Status</th>
-          <!--  given by the parsing function that parses data from bootstrap call -->
-          <th class="span4">Host</th>
+          <th class="span3">Host</th>
           <!-- retrieved from local storage initially -->
-          <th class="span2">Message</th>
+          <th class="span3">Progress</th>
+          <th class="span2">Status</th>
           <!-- given by the parsing function that parses data from bootstrap call, dynamically assign the color -->
           <th class="span3">Action</th>
           <!-- trash icon -->
@@ -81,14 +80,17 @@
           {{view Ember.Checkbox checkedBinding="host.isChecked"}}
         </td>
         <td>
-          {{host.bootStatus}}
+          {{host.name}}
         </td>
         <td>
-          {{host.name}}
+          <div {{bindAttr class="host.bootBarColor host.isBootDone::progress-striped host.isBootDone::active :progress"}}>
+            <div class="bar" style="width:100%">
+            </div>
+          </div>
         </td>
         <td>
           <a href="javascript:void(null)"
-             data-toggle="modal" {{action hostLogPopup target="controller"}}>{{host.message}}</a>
+             data-toggle="modal" {{action hostLogPopup host target="controller"}}>{{host.bootStatusForDisplay}}</a>
         </td>
         <td>
           {{#if view.isRemovable}}<a class="btn btn-mini" {{action remove target="view"}}><i class="icon-trash"></i>

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3_host_log_popup.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3_host_log_popup.hbs?rev=1418944&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3_host_log_popup.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step3_host_log_popup.hbs Sun Dec  9 13:32:45 2012
@@ -0,0 +1,24 @@
+{{!
+* 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 id="host-log">
+  <div>
+    <pre class="bootLog">{{view.host.bootLog}}</pre>
+  </div>
+</div>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step3_view.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step3_view.js?rev=1418944&r1=1418943&r2=1418944&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step3_view.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/views/wizard/step3_view.js Sun Dec  9 13:32:45 2012
@@ -52,3 +52,5 @@ App.WizardHostView = Em.View.extend({
   }.property('hostInfo.bootStatus')
 
 });
+
+