incubator-ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From yus...@apache.org
Subject svn commit: r1402309 [2/5] - in /incubator/ambari/branches/AMBARI-666: ./ ambari-web/app/ ambari-web/app/assets/img/ ambari-web/app/controllers/ ambari-web/app/controllers/installer/ ambari-web/app/controllers/main/ ambari-web/app/controllers/main/host...
Date Thu, 25 Oct 2012 20:02:40 GMT
Added: 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=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js Thu Oct 25 20:02:35 2012
@@ -0,0 +1,320 @@
+/**
+ * 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.
+ */
+var App = require('app');
+App.WizardStep9Controller = Em.Controller.extend({
+  name:'wizardStep9Controller',
+  hosts:[],
+  progress:'0',
+  isStepCompleted:false,
+  isSubmitDisabled:function () {
+    return !this.get('isStepCompleted');
+  }.property('isStepCompleted'),
+
+  mockHostData:require('data/mock/step9_hosts'),
+  pollData_1:require('data/mock/step9_pollData_1'),
+  pollData_2:require('data/mock/step9_pollData_2'),
+  pollDataCounter:0,
+
+  status:function () {
+    if (this.hosts.everyProperty('status', 'success')) {
+      return 'success';
+    } else if (this.hosts.someProperty('status', 'failed')) {
+      return 'failed';
+    } else if (this.hosts.someProperty('status', 'warning')) {
+      return 'warning';
+    } else {
+      return 'info';
+    }
+  }.property('hosts.@each.status'),
+
+  navigateStep:function () {
+    this.loadStep();
+    //TODO: uncomment following line after the hook up with the API call
+    if (this.get('content.cluster.isCompleted') === false) {
+      //this.startPolling();
+    } else {
+      this.set('isStepCompleted', true);
+      this.set('progress', '100');
+    }
+  },
+
+  clearStep:function () {
+    this.hosts.clear();
+    this.set('status', 'info');
+    this.set('progress', '0');
+    this.set('isStepCompleted', false);
+  },
+
+  loadStep:function () {
+    console.log("TRACE: Loading step9: Install, Start and Test");
+    this.clearStep();
+    this.renderHosts(this.loadHosts());
+  },
+
+  loadHosts:function () {
+    var hostInfo = [];
+    hostInfo = this.get('content.hostsInfo');
+    var hosts = new Ember.Set();
+    for (var index in hostInfo) {
+      hosts.add(hostInfo[index]);
+      console.log("TRACE: host name is: " + hostInfo[index].name);
+    }
+    return hosts.filterProperty('bootStatus', 'success');
+  },
+
+  renderHosts:function (hostsInfo) {
+    var self = this;
+    hostsInfo.forEach(function (_hostInfo) {
+      var hostInfo = App.HostInfo.create({
+        name:_hostInfo.name,
+        status:_hostInfo.status,
+        message:_hostInfo.message,
+        progress:_hostInfo.progress
+      });
+
+      console.log('pushing ' + hostInfo.name);
+      self.hosts.pushObject(hostInfo);
+    });
+  },
+
+  onSuccessPerHost:function (actions, contentHost) {
+    if (actions.everyProperty('status', 'completed')) {
+      contentHost.set('status', 'success');
+    }
+  },
+
+  onWarningPerHost:function (actions, contentHost) {
+    if (actions.findProperty('status', 'failed') || actions.findProperty('status', 'aborted')) {
+      contentHost.set('status', 'warning');
+      this.set('status', 'warning');
+    }
+  },
+
+  onInProgressPerHost:function (actions, contentHost) {
+    var runningAction = actions.findProperty('status', 'inprogress');
+    if (runningAction !== null && runningAction !== undefined) {
+      contentHost.set('message', runningAction.message);
+    }
+  },
+
+  progressPerHost:function (actions, contentHost) {
+    var totalProgress = 0;
+    var actionsPerHost = actions.length;
+    var completedActions = actions.filterProperty('status', 'completed').length
+        + actions.filterProperty('status', 'failed').length +
+        actions.filterProperty('status', 'aborted').length;
+    var progress = Math.floor((completedActions / actionsPerHost) * 100);
+    console.log('INFO: progressPerHost is: ' + progress);
+    contentHost.set('progress', progress.toString());
+    return progress;
+  },
+
+  isSuccess:function (polledData) {
+    return polledData.everyProperty('status', 'success');
+  },
+
+  isStepFailed:function (polledData) {
+    var self = this;
+    var result = false;
+    polledData.forEach(function (_polledData) {
+      var successFactor = _polledData.sf;
+      var actionsPerRole = polledData.filterProperty('role', _polledData.role);
+      var actionsFailed = actionsPerRole.filterProperty('status', 'failed');
+      var actionsAborted = actionsPerRole.filterProperty('status', 'aborted');
+      if ((((actionsFailed.length + actionsAborted.length) / actionsPerRole.length) * 100) <= successFactor) {
+        console.log('TRACE: Entering success factor and result is failed');
+        result = true;
+      }
+    });
+    return result;
+  },
+
+  getFailedHostsForFailedRoles:function (polledData) {
+    var hostArr = new Ember.Set();
+    polledData.forEach(function (_polledData) {
+      var successFactor = _polledData.sf;
+      var actionsPerRole = polledData.filterProperty('role', _polledData.role);
+      var actionsFailed = actionsPerRole.filterProperty('status', 'failed');
+      var actionsAborted = actionsPerRole.filterProperty('status', 'aborted');
+      if ((((actionsFailed.length + actionsAborted.length) / actionsPerRole.length) * 100) <= successFactor) {
+        actionsFailed.forEach(function (_actionFailed) {
+          hostArr.add(_actionFailed.name);
+        });
+        actionsAborted.forEach(function (_actionFailed) {
+          hostArr.add(_actionFailed.name);
+        });
+      }
+    });
+    return hostArr;
+  },
+
+  setHostsStatus:function (hosts, status) {
+    var self = this;
+    hosts.forEach(function (_host) {
+      var host = self.hosts.findProperty('name', _host);
+      host.set('status', status);
+    });
+  },
+
+  // polling from ui stops only when no action has 'pending', 'queued' or 'inprogress' status
+
+  finishStep:function (polledData) {
+    var self = this;
+    if (!polledData.someProperty('status', 'pending') && !polledData.someProperty('status', 'queued') && !polledData.someProperty('status', 'inprogress')) {
+      this.set('progress', '100');
+      if (this.isSuccess(polledData)) {
+        this.set('status', 'success');
+      } else {
+        if (this.isStepFailed(polledData)) {
+          self.set('status', 'failed');
+          this.setHostsStatus(this.getFailedHostsForFailedRoles(polledData), 'failed');
+        }
+      }
+      this.set('isStepCompleted', true);
+    }
+  },
+
+  parseHostInfo:function (polledData) {
+    console.log('TRACE: Entering host info function');
+    var self = this;
+    var result = false;
+    var totalProgress = 0;
+    this.hosts.forEach(function (_content) {
+      var actions = polledData.filterProperty('name', _content.name);
+      if (actions.length === 0) {
+        alert('For testing with mockData follow the sequence: hit referesh,"mockData btn", "pollData btn", again "pollData btn"');
+        //exit();
+      }
+      if (actions !== null && actions !== undefined && actions.length !== 0) {
+        this.onSuccessPerHost(actions, _content);    // every action should be a success
+        this.onWarningPerHost(actions, _content);    // any action should be a faliure
+        this.onInProgressPerHost(actions, _content); // current running action for a host
+        totalProgress = totalProgress + self.progressPerHost(actions, _content);
+      }
+    }, this);
+    totalProgress = Math.floor(totalProgress / this.hosts.length);
+    this.set('progress', totalProgress.toString());
+    console.log("INFO: right now the progress is: " + this.get('progress'));
+    this.finishStep(polledData);
+    return this.get('isStepCompleted');
+  },
+
+
+  retry:function () {
+    if (this.get('isSubmitDisabled')) {
+      return;
+    }
+    this.hosts.clear();
+    this.renderHosts(this.loadHosts());
+    //this.startPolling();
+  },
+
+  startPolling:function () {
+    this.set('isSubmitDisabled', true);
+    this.doPolling();
+  },
+
+  doPolling:function () {
+    var self = this;
+    $.ajax({
+      type:'GET',
+      url:'/ambari_server/api/polling',
+      async:false,
+      timeout:5000,
+      success:function (data) {
+        console.log("TRACE: In success function for the GET bootstrap call");
+        var result = self.parseHostInfo(data);
+        if (result !== true) {
+          window.setTimeout(self.doPolling, 3000);
+        } else {
+          self.stopPolling();
+        }
+      },
+
+      error:function () {
+        console.log("ERROR");
+        self.stopPolling();
+      },
+
+      statusCode:{
+        404:function () {
+          console.log("URI not found.");
+        }
+      },
+
+      dataType:'application/json'
+    });
+
+  },
+
+  stopPolling:function () {
+    //TODO: uncomment following line after the hook up with the API call
+    // this.set('isStepCompleted',true);
+  },
+
+  submit:function () {
+    if (!this.get('isSubmitDisabled')) {
+      this.set('content.cluster.status', this.get('status'));
+      this.set('content.cluster.isCompleted', true);
+      App.router.send('next');
+    }
+  },
+
+  back:function () {
+    if (!this.get('isSubmitDisabled')) {
+      App.router.send('back');
+    }
+  },
+
+  hostLogPopup:function (event) {
+    App.ModalPopup.show({
+      header:Em.I18n.t('installer.step3.hostLog.popup.header'),
+      onPrimary:function () {
+        this.hide();
+      },
+      bodyClass:Ember.View.extend({
+        templateName:require('templates/installer/step3HostLogPopup')
+      })
+    });
+  },
+  mockBtn:function () {
+    this.set('isSubmitDisabled', false);
+    this.hosts.clear();
+    var hostInfo = this.mockHostData;
+    this.renderHosts(hostInfo);
+
+  },
+  pollBtn:function () {
+    this.set('isSubmitDisabled', false);
+    var data1 = this.pollData_1;
+    var data2 = this.pollData_2;
+    if ((this.get('pollDataCounter') / 2) === 0) {
+      console.log("TRACE: In pollBtn function data1");
+      var counter = parseInt(this.get('pollDataCounter')) + 1;
+      this.set('pollDataCounter', counter.toString());
+      this.parseHostInfo(data1);
+    } else {
+      console.log("TRACE: In pollBtn function data2");
+      var counter = parseInt(this.get('pollDataCounter')) + 1;
+      this.set('pollDataCounter', counter.toString());
+      this.parseHostInfo(data2);
+    }
+
+  }
+
+});

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=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js Thu Oct 25 20:02:35 2012
@@ -235,6 +235,9 @@ Em.I18n.translations = {
   'hosts.decommission.popup.header': 'Confirmation',
   'hosts.delete.popup.body': 'Are you sure?',
   'hosts.delete.popup.header': 'Confirmation',
+  'hosts.cant.do.popup.header': 'Operation not allowed',
+  'hosts.cant.do.popup.masterList.body': 'You cannot delete this host because it is hosting following master services: {0}.',
+  'hosts.cant.do.popup.workingList.body': 'You cannot delete this host because following slave services are not fully stopped or decommissioned: {0}.',
 
   'charts.horizon.chart.showText': 'show',
   'charts.horizon.chart.hideText': 'hide',

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=1402309&r1=1402308&r2=1402309&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 Thu Oct 25 20:02:35 2012
@@ -63,7 +63,7 @@ App.Host.FIXTURES = [
     disk_usage: '20',
     load_avg: '0.2, 1.2, 2.4',
     ip: '255.255.255.255',
-    health_status: 'DEAD',
+    health_status: 'DEAD-ORANGE',
     cpu_usage: 36,
     memory_usage: 29,
     network_usage: 56,
@@ -74,7 +74,7 @@ App.Host.FIXTURES = [
     host_name: 'n_host3',
     cluster_id: 2,
     components:[4, 5, 7],
-    health_status: 'LIVE',
+    health_status: 'DEAD-YELLOW',
     cpu_usage: 23,
     memory_usage: 16,
     network_usage: 16,
@@ -111,7 +111,7 @@ App.Host.FIXTURES = [
     id: 6,
     host_name: 'a_host6',
     cluster_id: 1,
-    components:[4, 5],
+    components:[5],
     cpu: '2x2.5GHz',
     memory: '8GB',
     disk_usage: '20',

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js?rev=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js Thu Oct 25 20:02:35 2012
@@ -20,18 +20,17 @@
 var App = require('app');
 
 App.ServiceInfo = Ember.Object.extend({
-  elementId: 'service',
-  serviceName: '',
-  displayName: '',
-  isMaster: '',
-  isClient: '',
-  isDisabled: '',
-  isHidden: '',
-  isSelected: 'true',
-  description: ''
+  elementId:'service',
+  serviceName:'',
+  displayName:'',
+  isMaster:'',
+  isClient:'',
+  isDisabled:'',
+  isHidden:'',
+  isSelected:'true',
+  description:''
 });
 
-
 /*App.User = Em.Object.extend({
  username: null
  });*/
@@ -56,21 +55,29 @@ App.ServiceModel = Em.Object.extend({
  });
  */
 
+
 App.Component = DS.Model.extend({
   componentName:DS.attr('string'),
   label:DS.attr('string'),
   type:DS.attr('boolean'),
   service:DS.belongsTo('App.Service'),
   host:DS.belongsTo('App.Host'),
-  workStatus: DS.attr('boolean')
+  workStatus:DS.attr('boolean'),
+  isMaster: function(){
+    return this.get('type');
+  }.property('type'),
+  isSlave: function(){
+    return !this.get('type');
+  }.property('type'),
+  // checkedForHostFilter: true // this is for host page to set checkboxes checked
 });
 
 App.Component.FIXTURES = [
   {
     id:1,
     component_name:'NameNode',
-    label: 'NN',
-    type: true,
+    label:'NN',
+    type:true,
     service_id:1,
     host_id:1,
     work_status:false
@@ -78,8 +85,8 @@ App.Component.FIXTURES = [
   {
     id:2,
     component_name:'SNameNode',
-    label: 'SNN',
-    type: true,
+    label:'SNN',
+    type:true,
     service_id:1,
     host_id:2,
     work_status:true
@@ -87,17 +94,17 @@ App.Component.FIXTURES = [
   {
     id:3,
     component_name:'DataNode',
-    label: 'DN',
+    label:'DN',
     service_id:1,
-    type: false,
+    type:false,
     host_id:2,
     work_status:true
   },
   {
     id:4,
     component_name:'JobTracker',
-    label: 'JT',
-    type: true,
+    label:'JT',
+    type:true,
     service_id:2,
     host_id:4,
     work_status:true
@@ -105,8 +112,8 @@ App.Component.FIXTURES = [
   {
     id:5,
     component_name:'TaskTracker',
-    label: 'TT',
-    type: false,
+    label:'TT',
+    type:false,
     service_id:2,
     host_id:4,
     work_status:true
@@ -114,8 +121,8 @@ App.Component.FIXTURES = [
   {
     id:6,
     component_name:'HBase Master',
-    label: 'HBM',
-    type: true,
+    label:'HBM',
+    type:true,
     service_id:3,
     host_id:4,
     work_status:true
@@ -123,8 +130,8 @@ App.Component.FIXTURES = [
   {
     id:7,
     component_name:'Region Server',
-    label: 'RS',
-    type: false,
+    label:'RS',
+    type:false,
     service_id:3,
     host_id:2,
     work_status:true
@@ -141,21 +148,21 @@ App.Component.FIXTURES = [
 ];
 
 App.Service = DS.Model.extend({
-  serviceName: DS.attr('string'),
-  label: DS.attr('string'),
-  components: DS.hasMany('App.Component'),
-  serviceAudit: DS.hasMany('App.ServiceAudit'),
-  healthStatus: DS.attr('string'),
-  workStatus: DS.attr('boolean'),
-  alerts: DS.hasMany('App.Alert'),
-  quickLinks: DS.hasMany('App.QuickLinks')
+  serviceName:DS.attr('string'),
+  label:DS.attr('string'),
+  components:DS.hasMany('App.Component'),
+  serviceAudit:DS.hasMany('App.ServiceAudit'),
+  healthStatus:DS.attr('string'),
+  workStatus:DS.attr('boolean'),
+  alerts:DS.hasMany('App.Alert'),
+  quickLinks:DS.hasMany('App.QuickLinks')
 });
 
 App.Service.Health = {
-  live: "LIVE",
-  dead: "DEAD",
-  start: "STARTING",
-  stop: "STOPPING"
+  live:"LIVE",
+  dead:"DEAD",
+  start:"STARTING",
+  stop:"STOPPING"
 }
 
 App.Service.FIXTURES = [
@@ -163,134 +170,134 @@ App.Service.FIXTURES = [
     id:1,
     service_name:'hdfs',
     label:'HDFS',
-    components: [1, 2, 3],
-    service_audit: [1, 2, 3],
-    health_status: App.Service.Health.live,
-    work_status: true,
-    alerts: [1, 2],
-    quick_links: [1, 2, 3, 4]
+    components:[1, 2, 3],
+    service_audit:[1, 2, 3],
+    health_status:App.Service.Health.live,
+    work_status:true,
+    alerts:[1, 2],
+    quick_links:[1, 2, 3, 4]
   },
   {
     id:2,
     service_name:'mapreduce',
     label:'MapReduce',
-    components: [4, 5],
-    service_audit: [4, 5, 6],
-    health_status: App.Service.Health.start,
-    work_status: true,
-    alerts: [3, 4],
-    quick_links: [5, 6, 7, 8, 9, 10]
+    components:[4, 5],
+    service_audit:[4, 5, 6],
+    health_status:App.Service.Health.start,
+    work_status:true,
+    alerts:[3, 4],
+    quick_links:[5, 6, 7, 8, 9, 10]
   },
   {
     id:3,
     service_name:'hbase',
     label:'HBase',
-    components: [6, 7],
-    health_status: App.Service.Health.dead,
-    work_status: false,
-    alerts: [5, 6],
-    quick_links: [11, 12, 13, 14]
+    components:[6, 7],
+    health_status:App.Service.Health.dead,
+    work_status:false,
+    alerts:[5, 6],
+    quick_links:[11, 12, 13, 14]
   },
   {
     id:4,
     service_name:'zookeeper',
     label:'Zookeeper',
-    health_status: App.Service.Health.stop,
-    work_status: false,
-    alerts: [7, 8]
+    health_status:App.Service.Health.stop,
+    work_status:false,
+    alerts:[7, 8]
   },
   {
     id:5,
     service_name:'oozie',
     label:'Oozie',
-    health_status: App.Service.Health.dead,
-    work_status: false,
-    alerts: [9, 10]
+    health_status:App.Service.Health.dead,
+    work_status:false,
+    alerts:[9, 10]
   },
   {
     id:6,
     service_name:'hive',
     label:'Hive',
-    health_status: App.Service.Health.dead,
-    work_status: false,
-    alerts: [11, 12]
+    health_status:App.Service.Health.dead,
+    work_status:false,
+    alerts:[11, 12]
   }
 ];
 
 App.QuickLinks = DS.Model.extend({
-  label: DS.attr('string'),
-  url: DS.attr('string')
+  label:DS.attr('string'),
+  url:DS.attr('string')
 });
 
 App.QuickLinks.FIXTURES = [
   {
-    id: 1,
-    label: 'NameNode UI',
-    url: ''
+    id:1,
+    label:'NameNode UI',
+    url:''
   },
   {
-    id: 2,
-    label: 'NameNode logs',
-    url: ''
+    id:2,
+    label:'NameNode logs',
+    url:''
   },
   {
-    id: 3,
-    label: 'NameNode JMX',
-    url: ''
+    id:3,
+    label:'NameNode JMX',
+    url:''
   },
   {
-    id: 4,
-    label: 'Thread Stacks',
-    url: ''
+    id:4,
+    label:'Thread Stacks',
+    url:''
   },
   {
-    id: 5,
-    label: 'JobTracker UI',
-    url: ''
+    id:5,
+    label:'JobTracker UI',
+    url:''
   },
   {
-    id: 6,
-    label: 'Scheduling Info',
-    url: ''
+    id:6,
+    label:'Scheduling Info',
+    url:''
   },
   {
-    id: 7,
-    label: 'Running Jobs',
-    url: ''
+    id:7,
+    label:'Running Jobs',
+    url:''
   },
   {
-    id: 8,
-    label: 'Retired Jobs',
-    url: ''
+    id:8,
+    label:'Retired Jobs',
+    url:''
   },
   {
-    id: 9,
-    label: 'JobHistory Server',
-    url: ''
+    id:9,
+    label:'JobHistory Server',
+    url:''
   },
   {
-    id: 10,
-    label: 'JobTracker Logs',
-    url: ''
+    id:10,
+    label:'JobTracker Logs',
+    url:''
   },
   {
-    id: 11,
-    label: 'HBase Master UI',
-    url: ''
+    id:11,
+    label:'HBase Master UI',
+    url:''
   },
   {
-    id: 12,
-    label: 'HBase Logs',
-    url: ''
+    id:12,
+    label:'HBase Logs',
+    url:''
   },
   {
-    id: 13,
-    label: 'Zookeeper Info',
-    url: ''
+    id:13,
+    label:'Zookeeper Info',
+    url:''
   },
   {
-    id: 14,
-    label: 'HBase Master JMX',
-    url: ''
+    id:14,
+    label:'HBase Master JMX',
+    url:''
   }
 ];

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=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js Thu Oct 25 20:02:35 2012
@@ -91,7 +91,7 @@ App.Router = Em.Router.extend({
   getWizardCurrentStep: function (wizardType) {
     var loginName = this.getLoginName();
     var currentStep = App.db.getWizardCurrentStep(wizardType);
-    console.log('getInstallerCurrentStep: loginName=' + loginName + ", currentStep=" + currentStep);
+    console.log('getWizardCurrentStep: loginName=' + loginName + ", currentStep=" + currentStep);
     if (!currentStep) {
       currentStep = '1';
     }

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js?rev=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js Thu Oct 25 20:02:35 2012
@@ -35,6 +35,26 @@ module.exports = Em.Route.extend({
     router.get('mainController').connectOutlet('addHost');
   },
 
+  step0: Em.Route.extend({
+    route: '/step0',
+    connectOutlets: function (router) {
+      console.log('in addHost.step0:connectOutlets');
+      var controller = router.get('addHostController');
+      controller.setCurrentStep('0', false);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep1', controller.get('content'));
+    },
+
+    next: function (router) {
+      var addHostController = router.get('addHostController');
+      var wizardStep1Controller = router.get('wizardStep1Controller');
+
+      addHostController.saveClusterInfo(wizardStep1Controller);
+
+      router.transitionTo('step1');
+    }
+  }),
+
   step1: Em.Route.extend({
     route: '/step1',
     connectOutlets: function (router) {
@@ -129,7 +149,7 @@ module.exports = Em.Route.extend({
     next: function (router, context) {
       var addHostController = router.get('addHostController');
       var wizardStep5Controller = router.get('wizardStep5Controller');
-      addHostController.saveMasterComponentHosts( wizardStep5Controller );
+      addHostController.saveMasterComponentHosts(wizardStep5Controller);
       router.transitionTo('step5');
     }
   }),
@@ -144,17 +164,68 @@ module.exports = Em.Route.extend({
       controller.connectOutlet('wizardStep6', controller.get('content'));
     },
     back: Em.Router.transitionTo('step4'),
-    next: function(router){
+    next: function (router) {
       var addHostController = router.get('addHostController');
       var wizardStep6Controller = router.get('wizardStep6Controller');
 
-      if(wizardStep6Controller.validate()){
+      if (wizardStep6Controller.validate()) {
         addHostController.saveSlaveComponentHosts(wizardStep6Controller);
-        router.transitionTo('step7');
+        router.transitionTo('step6');
       }
     }
   }),
 
+  step6: Em.Route.extend({
+    route: '/step6',
+    connectOutlets: function (router) {
+      console.log('in addhost.step6:connectOutlets');
+      var controller = router.get('addHostController');
+      controller.setCurrentStep('6', false);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep7', controller.get('content'));
+    },
+    back: Em.Router.transitionTo('step5'),
+    next: function (router) {
+      var addHostController = router.get('addHostController');
+      var wizardStep7Controller = router.get('wizardStep7Controller');
+      addHostController.saveServiceConfigProperties(wizardStep7Controller);
+      router.transitionTo('step7');
+    }
+  }),
+
+  step7: Em.Route.extend({
+    route: '/step7',
+    connectOutlets: function (router, context) {
+      console.log('in addHost.step7:connectOutlets');
+      var controller = router.get('addHostController');
+      controller.setCurrentStep('7', false);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep8', controller.get('content'));
+    },
+    back: Em.Router.transitionTo('step6'),
+    next: Em.Router.transitionTo('step8')
+  }),
+
+  step8: Em.Route.extend({
+    route: '/step8',
+    connectOutlets: function (router, context) {
+      console.log('in addHost.step8:connectOutlets');
+      var controller = router.get('addHostController');
+      controller.setInfoForStep9();
+      controller.setCurrentStep('8', false);
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep9', controller.get('content'));
+    },
+    back: Em.Router.transitionTo('step7'),
+    next: function (router) {
+      var addHostController = router.get('addHostController');
+      var wizardStep9Controller = router.get('wizardStep9Controller');
+      addHostController.saveClusterInfo(wizardStep9Controller);
+      addHostController.saveInstalledHosts(wizardStep9Controller);
+      router.transitionTo('step9');
+    }
+  }),
+
 //  step6: Em.Route.extend({
 //    route: '/step6',
 //    connectOutlets: function (router, 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=1402309&r1=1402308&r2=1402309&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 Oct 25 20:02:35 2012
@@ -25,6 +25,7 @@ module.exports = Em.Route.extend({
     console.log('in /installer:enter');
 
     if (router.getAuthenticated()) {
+      router.get('mainController').stopLoadOperationsPeriodically();
       console.log('In installer with successful authenticated');
       // router.loadAllPriorSteps(router.getInstallerCurrentStep());
       Ember.run.next(function () {
@@ -159,47 +160,51 @@ module.exports = Em.Route.extend({
   step7: Em.Route.extend({
     route: '/step7',
     connectOutlets: function (router, context) {
-      router.setNavigationFlow('step7');
+      var controller = router.get('installerController');
       router.setInstallerCurrentStep('7', false);
-      router.get('installerController').connectOutlet('installerStep7');
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep7', controller.get('content'));
     },
     back: Em.Router.transitionTo('step6'),
-    next: Em.Router.transitionTo('step8')
+    next: function(router){
+      var installerController = router.get('installerController');
+      var wizardStep7Controller = router.get('wizardStep7Controller');
+      installerController.saveServiceConfigProperties( wizardStep7Controller );
+      router.transitionTo('step8');
+    }
   }),
 
   step8: Em.Route.extend({
     route: '/step8',
-
     connectOutlets: function (router, context) {
-      router.setNavigationFlow('step8');
+      console.log('in installer.step8:connectOutlets');
+      var controller = router.get('installerController');
       router.setInstallerCurrentStep('8', false);
-      router.get('installerController').connectOutlet('installerStep8');
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep8', controller.get('content'));
     },
     back: Em.Router.transitionTo('step7'),
-
-    next: function (router, context) {
-      App.db.setClusterStatus({status: 'pending', isCompleted: false});
-      var hostInfo = App.db.getHosts();
-      for (var index in hostInfo) {
-        hostInfo[index].status = "pending";
-        hostInfo[index].message = 'Information';
-        hostInfo[index].progress = '0';
-      }
-      App.db.setHosts(hostInfo);
-      console.log("TRACE: host name is: " + hostInfo[index].name);
-      router.transitionTo('step9');
-    }
+    next: Em.Router.transitionTo('step9')
   }),
 
   step9: Em.Route.extend({
     route: '/step9',
     connectOutlets: function (router, context) {
-      router.setNavigationFlow('step9');
+      console.log('in installer.step9:connectOutlets');
+      var controller = router.get('installerController');
+      controller.setInfoForStep9();
       router.setInstallerCurrentStep('9', false);
-      router.get('installerController').connectOutlet('installerStep9');
+      controller.loadAllPriorSteps();
+      controller.connectOutlet('wizardStep9', controller.get('content'));
     },
     back: Em.Router.transitionTo('step8'),
-    next: Em.Router.transitionTo('step10')
+    next: function (router) {
+      var addHostController = router.get('installerController');
+      var wizardStep9Controller = router.get('wizardStep9Controller');
+      addHostController.saveClusterInfo(wizardStep9Controller);
+      addHostController.saveInstalledHosts(wizardStep9Controller);
+      router.transitionTo('step10');
+    }
   }),
 
   step10: Em.Route.extend({

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/main.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/main.js?rev=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/main.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/main.js Thu Oct 25 20:02:35 2012
@@ -21,6 +21,7 @@ module.exports = Em.Route.extend({
   enter:function (router) {
     console.log('in /main:enter');
     if (router.getAuthenticated()) {
+      router.get('mainController').startLoadOperationsPeriodically();
       // TODO: redirect to last known state
       /*
        Ember.run.next(function () {

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=1402309&r1=1402308&r2=1402309&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 Oct 25 20:02:35 2012
@@ -127,10 +127,9 @@ footer {
   .brand {
     font-size: 17px;
     border-right: 1px solid rgba(0, 0, 0, 0.08);
-    .operations-count{
-      margin-top: 5px;
-      background-color: #006DCC;
-    }
+  }
+  .operations-count{
+    background-color: #006DCC;
   }
   li {
     font-size: 15px;
@@ -340,6 +339,8 @@ a:focus {
 
 @status-live-marker: url("/img/health-status-live.png");
 @status-dead-marker: url("/img/health-status-dead.png");
+@status-dead-orange-marker: url("/img/health-status-dead-orange.png");
+@status-dead-yellow-marker: url("/img/health-status-dead-yellow.png");
 @status-ok-marker: url("/img/status-ok.jpg");
 @status-corrupt-marker: url("/img/status-corrupt.jpg");
 @arrow-right: url("/img/arrow-right.png");
@@ -418,6 +419,14 @@ a:focus {
     .tab-marker-position;
     background-image: @status-dead-marker;
   }
+  .health-status-DEAD-ORANGE {
+    .tab-marker-position;
+    background-image: @status-dead-orange-marker;
+  }
+  .health-status-DEAD-YELLOW {
+    .tab-marker-position;
+    background-image: @status-dead-yellow-marker;
+  }
   dt {
     text-align: left;
     width: 120px;
@@ -723,6 +732,12 @@ a:focus {
   .health-status-DEAD {
     background-image: @status-dead-marker;
   }
+  .health-status-DEAD-ORANGE {
+    background-image: @status-dead-orange-marker;
+  }
+  .health-status-DEAD-YELLOW {
+    background-image: @status-dead-yellow-marker;
+  }
   .box-header {
     .btn-group {
       float: left;
@@ -806,6 +821,17 @@ a:focus {
     }
     .page-listing {
       width: 100px;
+
+      .table {
+        th.name {
+          width: 300px;
+          a.filter-label {
+            width: 57px;
+            display: block;
+            float: left;
+          }
+        }
+      }
     }
   }
 }
@@ -821,6 +847,16 @@ a:focus {
     background-repeat: no-repeat;
     background-position: 0px 4px;
   }
+  .health-status-DEAD-ORANGE {
+    background-image: @status-dead-orange-marker;
+    background-repeat: no-repeat;
+    background-position: 0px 4px;
+  }
+  .health-status-DEAD-YELLOW {
+    background-image: @status-dead-yellow-marker;
+    background-repeat: no-repeat;
+    background-position: 0px 4px;
+  }
   .back {
     display: block;
     width: 105px;
@@ -1507,3 +1543,7 @@ ul.inline li {
   width: 105px;
   margin-bottom: 10px;
 }
+
+#step8-content{
+  max-height: 570px;
+}
\ No newline at end of file

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=1402309&r1=1402308&r2=1402309&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 Thu Oct 25 20:02:35 2012
@@ -20,11 +20,9 @@
     <div class="navbar-inner">
       <a class="brand" href="#">
         My Cluster
-        {{#if view.isInHostsPath}}
-          {{#if view.backgroundOperationsCount}}
-            <span class="label operations-count" {{action "showBackgroundOperationsPopup" target="App.router.mainHostController"}}>{{view.backgroundOperationsCount}}</span>
+          {{#if backgroundOperationsCount}}
+            <span class="label operations-count" {{action "showBackgroundOperationsPopup" target="controller"}}>{{backgroundOperationsCount}}</span>
           {{/if}}
-        {{/if}}
       </a>
       {{view App.MainMenuView}}
     </div>

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/background_operations_popup.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/background_operations_popup.hbs?rev=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/background_operations_popup.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/background_operations_popup.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,44 @@
+<!--
+* 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.
+-->
+{{#each operation in backgroundOperations.tasks}}
+{{#view App.MainBackgroundOperation contentBinding="operation"}}
+<a class="open-details" {{action openDetails target="view"}} href="#">
+  <i {{bindAttr class="view.iconClass"}}></i>
+</a>
+{{operation.command}} {{operation.role}} on {{operation.hostname}}
+<div class="operation-details">
+  {{#if operation.details.length}}
+    {{#each detail in operation.details}}
+    <div>{{detail.startTime}}: {{detail.name}}</div>
+    {{/each}}
+  {{/if}}
+  <a {{action showOperationLog target="view"}} href="#">
+    {{#if view.isOpenShowLog}}Hide{{else}}Show{{/if}} operation log
+  </a>
+  {{#if view.isOpenShowLog}}
+  <div class="operation-log">
+    <dl class="dl-horizontal">
+      <dt>exitcode:</dt><dd>{{view.logDetails.exitcode}}</dd>
+      <dt>stdout:</dt><dd>{{view.logDetails.stdout}}</dd>
+      <dt>stderror:</dt><dd>{{view.logDetails.stderror}}</dd>
+    </dl>
+  </div>
+  {{/if}}
+</div>
+{{/view}}
+{{/each}}
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs?rev=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs Thu Oct 25 20:02:35 2012
@@ -19,24 +19,28 @@
   <div class="box-header">
     <div class="button-section">
       <div class="btn-group">
-        <button {{bindAttr disabled="controller.isDisabled"}} class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
+        <button {{bindAttr disabled="controller.isDisabled"}} class="btn btn-primary dropdown-toggle"
+                                                              data-toggle="dropdown">
           Rack
           <span class="caret"></span>
         </button>
         <ul class="dropdown-menu">
           {{#each clusters}}
           <li>
-            <a href="javascript:void(null)" data-toggle="modal" {{action "assignedToRackPopup" this target="controller"}}>
+            <a href="javascript:void(null)"
+               data-toggle="modal" {{action "assignedToRackPopup" this target="controller"}}>
               {{clusterName}}
             </a>
           </li>
           {{/each}}
         </ul>
       </div>
-      <button {{bindAttr disabled="controller.isDisabled"}} class="btn btn-primary decommission" data-toggle="modal" {{action "decommissionButtonPopup" target="controller"}}>
+      <button {{bindAttr disabled="controller.isDisabled"}} class="btn btn-primary decommission"
+                                                            data-toggle="modal" {{action "decommissionButtonPopup" target="controller"}}>
         Decommission
       </button>
-      <button {{bindAttr disabled="controller.isDisabled"}} class="btn btn-primary" data-toggle="modal" {{action "deleteButtonPopup" target="controller"}}>
+      <button {{bindAttr disabled="controller.isDisabled"}} class="btn btn-primary"
+                                                            data-toggle="modal" {{action "deleteButtonPopup" target="controller"}}>
         Delete
       </button>
       <button class="btn btn-inverse add-host-button" {{action addHost}}>
@@ -53,11 +57,16 @@
           {{view Ember.Checkbox checkedBinding="allChecked" class="checkbox"}}
         </label>
       </th>
-      <th>
-        <a href="#" {{action sortByName target="controller" }}>Name</a>
-        {{#if controller.isSort}}
-        <i class="icon-arrow-up"{{bindAttr class="controller.sortClass"}}></i>
-        {{/if}}
+      <th class="name">
+        <a class="filter-label" href="#" {{action sortByName target="controller" }}>Name
+          {{#if controller.isSort}}
+          <i class="icon-arrow-up"{{bindAttr class="controller.sortClass"}}></i>
+          {{/if}}
+        </a>
+
+        <div class="span1">
+          {{view Ember.TextField placeholder="search" valueBinding="view.filterByName"}}
+        </div>
       </th>
       <th>Rack</th>
       <th>CPU</th>
@@ -71,19 +80,47 @@
             <span class="caret"></span>
           </button>
           <ul class="dropdown-menu filter-components" id="filter-dropdown">
-            {{#each component in componentsForFilter}}
             <li>
-              <label>
-                {{view view.ComponentCheckboxView contentBinding="component"}}                                {{unbound component.componentName}}
+              <label class="checkbox">
+                {{view Ember.Checkbox checkedBinding="view.allComponentsChecked"}} All
               </label>
             </li>
-            {{/each}}
+
+            <li>
+              <label class="checkbox">
+                {{view Ember.Checkbox checkedBinding="view.masterComponentsChecked"}} Master Components:
+              </label>
+              <ul>
+                {{#each component in masterComponents}}
+                <li>
+                  <label class="checkbox">
+                    {{view view.ComponentCheckboxView contentBinding="component"}} {{unbound component.componentName}}
+                  </label>
+                </li>
+                {{/each}}
+              </ul>
+            </li>
+
+            <li>
+              <label class="checkbox">
+                {{view Ember.Checkbox checkedBinding="view.slaveComponentsChecked"}} Slave Components:
+              </label>
+              <ul>
+                {{#each component in slaveComponents}}
+                <li>
+                  <label class="checkbox">
+                    {{view view.ComponentCheckboxView contentBinding="component" }} {{unbound component.componentName}}
+                  </label>
+                </li>
+                {{/each}}
+              </ul>
+            </li>
+
           </ul>
           <button {{bindAttr disabled="view.isApplyDisabled"}} class="btn" {{action "applyFilters" target="view"}}>
             Apply
           </button>
         </div>
-
       </th>
     </tr>
     </thead>
@@ -103,7 +140,11 @@
       <td>{{host.cluster.clusterName}}</td>
       <td>{{host.cpu}}</td>
       <td>{{host.memory}}</td>
-      <td>{{host.diskUsage}}</td>
+      <td>
+        <div class="progress progress-info">
+          <div class="bar" {{bindAttr style="view.usageStyle"}} style="width: 20%"></div>
+        </div>
+      </td>
       <td>{{host.loadAvg}}</td>
       <td>
         {{view.labels}}
@@ -114,7 +155,7 @@
     </tbody>
   </table>
   <div class="box-footer">
-    <hr />
+    <hr/>
     <div class="footer-pagination">
       <ul class="nav nav-pills">
         <li class="disabled">Show Hosts</li>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/background_operations_popup.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/background_operations_popup.hbs?rev=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/background_operations_popup.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/background_operations_popup.hbs Thu Oct 25 20:02:35 2012
@@ -15,13 +15,12 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 -->
-
-{{#each operation in backgroundOperations.tasks}}
-{{#view App.MainBackgroundOperation contentBinding="operation"}}
+{{#each operation in hostOperations}}
+{{#view App.MainHostDetailsOperations contentBinding="operation"}}
 <a class="open-details" {{action openDetails target="view"}} href="#">
   <i {{bindAttr class="view.iconClass"}}></i>
 </a>
-{{operation.command}} {{operation.role}} on {{operation.hostname}}
+{{operation.command}} {{operation.role}} on {{operation.hostName}}
 <div class="operation-details">
   {{#if operation.details.length}}
     {{#each detail in operation.details}}
@@ -34,9 +33,9 @@
   {{#if view.isOpenShowLog}}
   <div class="operation-log">
     <dl class="dl-horizontal">
-      <dt>exitcode:</dt><dd>{{view.logDetails.exitcode}}</dd>
-      <dt>stdout:</dt><dd>{{view.logDetails.stdout}}</dd>
-      <dt>stderror:</dt><dd>{{view.logDetails.stderror}}</dd>
+      <dt>Exit Code:</dt><dd>{{operation.logs.exitcode}}</dd>
+      <dt>Std Out:</dt><dd>{{operation.logs.stdout}}</dd>
+      <dt>Error:</dt><dd>{{operation.logs.stderror}}</dd>
     </dl>
   </div>
   {{/if}}

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/details.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/details.hbs?rev=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/details.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/details.hbs Thu Oct 25 20:02:35 2012
@@ -29,7 +29,7 @@
       <!-- dropdown menu links -->
         {{#each option in view.maintenance}}
         <li>
-        <a {{action deleteButtonPopup target="controller"}} href="#">{{option.label}}</a>
+        <a {{action validateDeletion target="controller"}} href="#">{{option.label}}</a>
         </li>
         {{/each}}
       </ul>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/summary.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/summary.hbs?rev=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/summary.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host/summary.hbs Thu Oct 25 20:02:35 2012
@@ -37,6 +37,18 @@
           <span class="caret"></span>
         </button>
         <ul class="dropdown-menu">
+          {{#if view.isDataNode}}
+            <li>
+              <a href="javascript:void(null)" data-toggle="modal" {{action "decommission" view.content target="controller"}}>
+                Decommission
+              </a>
+            </li>
+            <li>
+              <a href="javascript:void(null)" data-toggle="modal" {{action "recommission" view.content target="controller"}}>
+                Recommission
+              </a>
+            </li>
+          {{/if}}
             <li {{bindAttr class="view.content.workStatus::hidden"}}>
               <a href="javascript:void(null)" data-toggle="modal" {{action "stopComponent" view.content target="controller"}}>
                 Stop

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/menu_item.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/menu_item.hbs?rev=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/menu_item.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/menu_item.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,30 @@
+<!--
+* 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.
+-->
+<a href="#/main/{{unbound view.content.routing}}">
+  {{unbound view.content.label}}
+  {{#if view.alertsCount}}
+    <span class="label label-important alerts-count">
+      {{view.alertsCount}}
+    </span>
+  {{/if}}
+  {{#if view.hostDetailsOperationsCount}}
+    <span class="label operations-count" {{action "showBackgroundOperationsPopup" target="App.router.mainHostDetailsController"}}>
+      {{view.hostDetailsOperationsCount}}
+    </span>
+  {{/if}}
+</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=1402309&r1=1402308&r2=1402309&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 Thu Oct 25 20:02:35 2012
@@ -16,213 +16,242 @@
 * limitations under the License.
 -->
 <div class="row-fluid service-block">
-	<div class="span6">
-    <ul class="nav nav-pills move">
-      <li class="dropdown">
-        <a class="dropdown-toggle" data-toggle="dropdown" href="#">Quick Links <b class="caret"></b></a>
-        <ul class="dropdown-menu">
-          {{#each controller.content.quickLinks}}
-            <a href="javascript:void(null)">{{label}}</a>
-          {{/each}}
-        </ul>
-      </li>
+<div class="span6">
+<ul class="nav nav-pills move">
+  <li class="dropdown">
+    <a class="dropdown-toggle" data-toggle="dropdown" href="#">Quick Links <b class="caret"></b></a>
+    <ul class="dropdown-menu">
+      {{#each controller.content.quickLinks}}
+      <a href="javascript:void(null)">{{label}}</a>
+      {{/each}}
     </ul>
+  </li>
+</ul>
 
-    <div class="box">
-      <div class="box-header">
-        <h4>{{controller.content.label}} Summary</h4>
-      </div>
-      <div class="service-content">
-        <table id="summary-info" class="table table-bordered table-striped table-condensed">
-          <tbody>
-          {{#each component in controller.content.components}}
-            <tr>
-            {{#if component.type}}
-              <td class="summary-label">{{component.componentName}}</td>
-              <td><a {{action selectHost component.host}} href="javascript:void(null)">{{component.host.hostName}}</a></td>
-            {{else}}
-              <td class="summary-label">{{component.componentName}}s</td>
-              <td><a {{action filterHosts component}} href="javascript:void(null)">{{component.componentName}}s</a></td>
-            {{/if}}
-            </tr>
-          {{/each}}
-          {{#if view.serviceStatus.hdfs}}
-            <tr>
-              <td>{{t services.service.summary.version}}</td>
-              <td>{{view.attributes.version}}</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.nameNode}}</td>
-              <td><a {{bindAttr href="view.attributes.namenode_addr"}}>{{view.attributes.namenode_addr}}</a></td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.nameNodeUptime}}</td>
-              <td>{{view.attributes.start_time.d}}day {{view.attributes.start_time.h}}hr {{view.attributes.start_time.m}}min</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.nameNodeHeap}}</td>
-              <td>{{view.attributes.memory_heap_used}} / {{view.attributes.memory_heap_max}} ({{view.attributes.memory_heap_percent_used}} used)</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.dataNodes}}</td>
-              <td>
-                <a href="javascript:void(null)">{{view.attributes.live_nodes}} live</a> / <a href="javascript:void(null)">{{view.attributes.dead_nodes}} dead</a> / <a href="javascript:void(null)">{{view.attributes.decommissioning_nodes}} decom</a>
-              </td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.diskCapacity}}</td>
-              <td>{{view.attributes.used_bytes}} / {{view.attributes.dfs_total_bytes}} ({{view.attributes.dfs_percent_disk_used}} used)</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.blocksTotal}}</td>
-              <td>{{view.attributes.dfs_blocks_total}}</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.blockErrors}}</td>
-              <td>{{view.attributes.dfs_blocks_corrupt}} corr / {{view.attributes.dfs_blocks_missing}} miss / {{view.attributes.dfs_blocks_underreplicated}} underrep</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.totalFiles}}</td>
-              <td>{{view.attributes.dfs_dirfiles_count}}</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.pendingUpgradeStatus}}</td>
-              <td>
-                {{#if view.attributes.pending_upgrades}}
-                Pending upgrade
-                {{else}}
-                No pending upgrade
-                {{/if}}
-              </td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.safeModeStatus}}</td>
-              <td>
-                {{#if view.attributes.safemode}}
-                In safe mode
-                {{else}}
-                Not in safe mode
-                {{/if}}
-              </td>
-            </tr>
+<div class="box">
+  <div class="box-header">
+    <h4>{{controller.content.label}} Summary</h4>
+  </div>
+  <div class="service-content">
+    <table id="summary-info" class="table table-bordered table-striped table-condensed">
+      <tbody>
+      {{#each component in controller.content.components}}
+      <tr>
+        {{#if component.type}}
+        <td class="summary-label">{{component.componentName}}</td>
+        <td><a {{action selectHost component.host}} href="javascript:void(null)">{{component.host.hostName}}</a></td>
+        {{else}}
+        <td class="summary-label">{{component.componentName}}s</td>
+        <td><a {{action filterHosts component}} href="javascript:void(null)">{{component.componentName}}s</a></td>
+        {{/if}}
+      </tr>
+      {{/each}}
+      {{#if view.serviceStatus.hdfs}}
+      <tr>
+        <td>{{t services.service.summary.version}}</td>
+        <td>{{view.attributes.version}}</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.nameNode}}</td>
+        <td><a {{bindAttr href="view.attributes.namenode_addr"}}>{{view.attributes.namenode_addr}}</a></td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.nameNodeUptime}}</td>
+        <td>{{view.attributes.start_time.d}}day {{view.attributes.start_time.h}}hr {{view.attributes.start_time.m}}min</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.nameNodeHeap}}</td>
+        <td>{{view.attributes.memory_heap_used}} / {{view.attributes.memory_heap_max}} ({{view.attributes.memory_heap_percent_used}}
+          used)
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.dataNodes}}</td>
+        <td>
+          <a href="javascript:void(null)">{{view.attributes.live_nodes}} live</a> / <a
+            href="javascript:void(null)">{{view.attributes.dead_nodes}} dead</a> / <a
+            href="javascript:void(null)">{{view.attributes.decommissioning_nodes}} decom</a>
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.diskCapacity}}</td>
+        <td>{{view.attributes.used_bytes}} / {{view.attributes.dfs_total_bytes}} ({{view.attributes.dfs_percent_disk_used}}
+          used)
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.blocksTotal}}</td>
+        <td>{{view.attributes.dfs_blocks_total}}</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.blockErrors}}</td>
+        <td>{{view.attributes.dfs_blocks_corrupt}} corr / {{view.attributes.dfs_blocks_missing}} miss
+          / {{view.attributes.dfs_blocks_underreplicated}} underrep
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.totalFiles}}</td>
+        <td>{{view.attributes.dfs_dirfiles_count}}</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.pendingUpgradeStatus}}</td>
+        <td>
+          {{#if view.attributes.pending_upgrades}}
+          Pending upgrade
+          {{else}}
+          No pending upgrade
           {{/if}}
-          {{#if view.serviceStatus.mapreduce}}
-            <tr>
-              <td>{{t services.service.summary.version}}</td>
-              <td>{{view.attributes.version}}</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.jobTracker}}</td>
-              <td><a {{bindAttr href="view.attributes.jobtracker_addr"}}>{{view.attributes.jobtracker_addr}}</a></td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.jobTrackerUptime}}</td>
-              <td>{{view.attributes.start_time.d}}day {{view.attributes.start_time.h}}hr {{view.attributes.start_time.m}}min</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.trackersLiveTotal}}</td>
-              <td>
-                <a href="javascript:void(null)">{{view.attributes.trackers_live}} live</a> / {{view.attributes.trackers_total}} total
-              </td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.trackersBlacklistGraylist}}</td>
-              <td>
-                <a href="javascript:void(null)">{{view.attributes.trackers_blacklisted}} blacklist</a> / <a href="javascript:void(null)">{{view.attributes.trackers_graylisted}} graylist</a> / <a href="javascript:void(null)">{{view.attributes.trackers_excluded}} excl.</a>
-              </td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.jobTrackerHeap}}</td>
-              <td>{{view.attributes.memory_heap_used}} / {{view.attributes.memory_heap_max}} ({{view.attributes.memory_heap_percent_used}} used)</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.totalSlotsCapacity}}</td>
-              <td>{{view.attributes.map_task_capacity}} maps / {{view.attributes.reduce_task_capacity}} reduces / {{view.attributes.average_node_capacity}} avg per node</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.totalJobs}}</td>
-              <td>{{view.attributes.job_total_submissions}} submitted / {{view.attributes.job_total_completions}} completed</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.currentSlotUtiliMaps}}</td>
-              <td>{{view.attributes.occupied_map_slots}} occupied / {{view.attributes.reserved_map_slots}} reserved</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.currentSlotUtiliReduces}}</td>
-              <td>{{view.attributes.occupied_reduce_slots}} occupied / {{view.attributes.reserved_reduce_slots}} reserved</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.tasksMaps}}</td>
-              <td>{{view.attributes.running_map_tasks}} running / {{view.attributes.waiting_maps}} waiting</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.tasksReduces}}</td>
-              <td>{{view.attributes.running_reduce_tasks}} running / {{view.attributes.waiting_reduces}} waiting</td>
-            </tr>
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.safeModeStatus}}</td>
+        <td>
+          {{#if view.attributes.safemode}}
+          In safe mode
+          {{else}}
+          Not in safe mode
           {{/if}}
-          {{#if view.serviceStatus.hbase}}
-            <tr>
-              <td>{{t services.service.summary.version}}</td>
-              <td>{{view.attributes.version}}</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.hbaseMaster}}</td>
-              <td><a {{bindAttr href="view.attributes.hbasemaster_addr"}}>{{view.attributes.hbasemaster_addr}}</a></td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.regionServerCount}}</td>
-              <td>
-                <a href="javascript:void(null)">{{view.attributes.live_regionservers}} live</a> / <a href="javascript:void(null)">{{view.attributes.dead_regionservers}} dead</a>
-              </td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.regionInTransition}}</td>
-              <td>{{view.attributes.regions_in_transition_count}}</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.masterStarted}}</td>
-              <td>{{view.attributes.start_time.d}}day {{view.attributes.start_time.h}}hr {{view.attributes.start_time.m}}min</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.masterActivated}}</td>
-              <td>{{view.attributes.active_time.d}}day {{view.attributes.active_time.h}}hr {{view.attributes.active_time.m}}min</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.averageLoad}}</td>
-              <td>{{view.attributes.average_load}} regions per RegionServer</td>
-            </tr>
-            <tr>
-              <td>{{t services.service.summary.masterHeap}}</td>
-              <td>{{view.attributes.memory_heap_used}} / {{view.attributes.memory_heap_max}} ({{view.attributes.memory_heap_percent_used}} used)</td>
-            </tr>
-          {{/if}}
-          </tbody>
-        </table>
-        {{!view view.moreStatsView}}
-      </div>
-      {{!
+        </td>
+      </tr>
+      {{/if}}
+      {{#if view.serviceStatus.mapreduce}}
+      <tr>
+        <td>{{t services.service.summary.version}}</td>
+        <td>{{view.attributes.version}}</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.jobTracker}}</td>
+        <td><a {{bindAttr href="view.attributes.jobtracker_addr"}}>{{view.attributes.jobtracker_addr}}</a></td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.jobTrackerUptime}}</td>
+        <td>{{view.attributes.start_time.d}}day {{view.attributes.start_time.h}}hr {{view.attributes.start_time.m}}min</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.trackersLiveTotal}}</td>
+        <td>
+          <a href="javascript:void(null)">{{view.attributes.trackers_live}} live</a>
+          / {{view.attributes.trackers_total}} total
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.trackersBlacklistGraylist}}</td>
+        <td>
+          <a href="javascript:void(null)">{{view.attributes.trackers_blacklisted}} blacklist</a> / <a
+            href="javascript:void(null)">{{view.attributes.trackers_graylisted}} graylist</a> / <a
+            href="javascript:void(null)">{{view.attributes.trackers_excluded}} excl.</a>
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.jobTrackerHeap}}</td>
+        <td>{{view.attributes.memory_heap_used}} / {{view.attributes.memory_heap_max}} ({{view.attributes.memory_heap_percent_used}}
+          used)
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.totalSlotsCapacity}}</td>
+        <td>{{view.attributes.map_task_capacity}} maps / {{view.attributes.reduce_task_capacity}} reduces
+          / {{view.attributes.average_node_capacity}} avg per node
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.totalJobs}}</td>
+        <td>{{view.attributes.job_total_submissions}} submitted / {{view.attributes.job_total_completions}}
+          completed
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.currentSlotUtiliMaps}}</td>
+        <td>{{view.attributes.occupied_map_slots}} occupied / {{view.attributes.reserved_map_slots}} reserved</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.currentSlotUtiliReduces}}</td>
+        <td>{{view.attributes.occupied_reduce_slots}} occupied / {{view.attributes.reserved_reduce_slots}} reserved
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.tasksMaps}}</td>
+        <td>{{view.attributes.running_map_tasks}} running / {{view.attributes.waiting_maps}} waiting</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.tasksReduces}}</td>
+        <td>{{view.attributes.running_reduce_tasks}} running / {{view.attributes.waiting_reduces}} waiting</td>
+      </tr>
+      {{/if}}
+      {{#if view.serviceStatus.hbase}}
+      <tr>
+        <td>{{t services.service.summary.version}}</td>
+        <td>{{view.attributes.version}}</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.hbaseMaster}}</td>
+        <td><a {{bindAttr href="view.attributes.hbasemaster_addr"}}>{{view.attributes.hbasemaster_addr}}</a></td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.regionServerCount}}</td>
+        <td>
+          <a href="javascript:void(null)">{{view.attributes.live_regionservers}} live</a> / <a
+            href="javascript:void(null)">{{view.attributes.dead_regionservers}} dead</a>
+        </td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.regionInTransition}}</td>
+        <td>{{view.attributes.regions_in_transition_count}}</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.masterStarted}}</td>
+        <td>{{view.attributes.start_time.d}}day {{view.attributes.start_time.h}}hr {{view.attributes.start_time.m}}min</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.masterActivated}}</td>
+        <td>{{view.attributes.active_time.d}}day {{view.attributes.active_time.h}}hr {{view.attributes.active_time.m}}min</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.averageLoad}}</td>
+        <td>{{view.attributes.average_load}} regions per RegionServer</td>
+      </tr>
+      <tr>
+        <td>{{t services.service.summary.masterHeap}}</td>
+        <td>{{view.attributes.memory_heap_used}} / {{view.attributes.memory_heap_max}} ({{view.attributes.memory_heap_percent_used}}
+          used)
+        </td>
+      </tr>
+      {{/if}}
+      </tbody>
+    </table>
+    {{!view view.moreStatsView}}
+  </div>
+  {{!
       <div class="box-footer">
       </div>
       }}
+</div>
+</div>
+<div class="span6">
+  <div class="box">
+    <div class="box-header">
+      <h4>Alerts</h4>
     </div>
-	</div>
-	<div class="span6">
-		<div class="box">
-			<div class="box-header">
-				<h4>Alerts</h4>
-			</div>
-			<ul class="alerts">
-				{{#each controller.content.alerts}}
-				<li class="status-{{unbound status}}">
-					<p><span class="title">{{title}}</span> <a href="javascript:void(null)">{{service.label}}</a><span class="date-time">{{date}}</span></p>
-					<p><span>{{status}}:</span> <span>{{message}}</span></p>
-				</li>
-				{{/each}}
-			</ul>
-			<div class="box-footer">
-				<hr />
-				<a class="go-to" href="javascript:void(null)">Go to Nagios</a>
-			</div>
-		</div>
-	</div>
+    <ul class="alerts">
+      {{#each controller.content.alerts}}
+      <li class="status-{{unbound status}}">
+        <p><span class="title">{{title}}</span> <a href="javascript:void(null)">{{service.label}}</a><span
+            class="date-time">{{date}}</span></p>
+
+        <p><span>{{status}}:</span> <span>{{message}}</span></p>
+      </li>
+      {{/each}}
+
+      {{#each view.service.alerts}}
+      <div>
+        Message:{{ message }}<br/>
+      </div>
+      {{/each}}
+    </ul>
+    <div class="box-footer">
+      <hr/>
+      <a class="go-to" href="javascript:void(null)">Go to Nagios</a>
+    </div>
+  </div>
+</div>
 </div>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/item.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/item.hbs?rev=1402309&r1=1402308&r2=1402309&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/item.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/item.hbs Thu Oct 25 20:02:35 2012
@@ -33,23 +33,25 @@
     </ul>
   </div>
   {{#if controller.content.workStatus}}
-    <a href="javascript:void(null)" class="btn disabled">
-      <i class="icon-play"></i>
-      Start
-    </a>
-    <a href="javascript:void(null)" class="btn btn-danger" data-toggle="modal" {{action "stopConfirmPopup" target="controller"}}>
-      <i class="icon-stop icon-white"></i>
-      Stop
-    </a>
+  <a href="javascript:void(null)" class="btn disabled">
+    <i class="icon-play"></i>
+    Start
+  </a>
+  <a href="javascript:void(null)" class="btn btn-danger"
+     data-toggle="modal" {{action "stopConfirmPopup" target="controller"}}>
+    <i class="icon-stop icon-white"></i>
+    Stop
+  </a>
   {{else}}
-    <a href="javascript:void(null)" class="btn btn-success" data-toggle="modal" {{action "startConfirmPopup" target="controller"}}>
-      <i class="icon-play icon-white"></i>
-      Start
-    </a>
-    <a href="javascript:void(null)" class="btn disabled">
-      <i class="icon-stop"></i>
-      Stop
-    </a>
+  <a href="javascript:void(null)" class="btn btn-success"
+     data-toggle="modal" {{action "startConfirmPopup" target="controller"}}>
+    <i class="icon-play icon-white"></i>
+    Start
+  </a>
+  <a href="javascript:void(null)" class="btn disabled">
+    <i class="icon-stop"></i>
+    Stop
+  </a>
   {{/if}}
 </div>
-{{outlet}}
\ No newline at end of file
+    {{outlet}}
\ No newline at end of file

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/master_hosts.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/master_hosts.hbs?rev=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/master_hosts.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/master_hosts.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,9 @@
+{{#if view.hasNoHosts}}
+  No host assigned
+{{/if}}
+{{#if view.hasOneHost}}
+  {{value}}
+{{/if}}
+{{#if view.hasMultipleHosts}}
+  <a href="#" {{action showHosts target="view"}}>{{value.firstObject}} and {{view.otherLength}}</a>
+{{/if}}

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/master_hosts_popup.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/master_hosts_popup.hbs?rev=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/master_hosts_popup.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/master_hosts_popup.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,5 @@
+<ul>
+  {{#each host in view.serviceConfig.value}}
+    <li>{{host}}</li>
+  {{/each}}
+</ul>

Added: 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=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,15 @@
+{{#if view.hasNoHosts}}
+  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.hasOneHost}}
+      {{view.hosts.firstObject.hostname}}
+    {{/if}}
+    {{#if view.hasMultipleHosts}}
+      {{view.hosts.firstObject.hostname}} and {{view.otherLength}}
+    {{/if}}
+  </a>
+{{/if}}

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts_popup.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts_popup.hbs?rev=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts_popup.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_component_hosts_popup.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,31 @@
+<div id="slave-hosts-popup" class="alert alert-info">Select which hosts should belong to which {{selectedComponentName}} group.</div>
+<table class="table table-striped">
+  <thead>
+    <tr>
+      <th>Host</th>
+      <th>Group</th>
+    </tr>
+  </thead>
+  <tbody>
+  {{#each host in hosts}}
+    <tr>
+      <td>
+        <label>{{host.hostname}}</label>
+      </td>
+      <td>
+        {{#view App.SlaveComponentDropDownGroupView contentBinding="host"}}
+        <select {{action changeGroup target="view" on="change"}}>
+          {{#each groupName in controller.getGroupsForDropDown}}
+            {{#view view.optionTag contentBinding="groupName"}}
+              <option value="{{unbound groupName}}" {{bindAttr selected="view.selected"}}>
+                {{groupName}}
+              </option>
+            {{/view}}
+          {{/each}}
+        </select>
+        {{/view}}
+      </td>
+    </tr>
+  {{/each}}
+  </tbody>
+</table>

Added: 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=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_hosts.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/slave_hosts.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,12 @@
+{{#if view.hasNoHosts}}
+  No host assigned
+{{else}}
+  <a href="#" {{action showEditSlaveComponentGroups view.serviceConfig.category target="controller"}}>
+    {{#if view.hasOneHost}}
+      {{hosts.firstObject.hostname}}
+    {{/if}}
+    {{#if view.hasMultipleHosts}}
+      {{hosts.firstObject.hostname}} and {{view.otherLength}}
+    {{/if}}
+  </a>
+{{/if}}

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step1.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step1.hbs?rev=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step1.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step1.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,42 @@
+<!--
+* 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.
+-->
+
+<h2>{{t installer.step1.body.header}}</h2>
+<p class="alert alert-info">
+  {{t installer.step1.body}}
+</p>
+<div {{bindAttr class="view.onError:error :control-group"}}>
+  <label class="control-label" for="cluster-name">{{t installer.step1.clusterName}}
+    <a href="javascript:void(null)"
+       rel="popover"
+      {{translateAttr title="installer.step1.clusterName.tooltip.title"
+       data-content="installer.step1.clusterName.tooltip.content"}}>Learn more</a>
+  </label>
+
+  <div class="controls">
+    {{view Ember.TextField id="cluster-name" valueBinding="content.name" placeholder="cluster name" target="controller"}}
+    <p class="help-inline">{{clusterNameError}}</p>
+  </div>
+</div>
+
+<div class="btn-area">
+  <a class="btn btn-success pull-right" {{bindAttr disabled="invalidClusterName"}} {{action "submit" target="controller"}}>Next &rarr;</a>
+</div>
+
+
+

Added: 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=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step7.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step7.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,129 @@
+<!--
+* 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="serviceConfig">
+  <h2>{{t installer.step7.header}}</h2>
+
+  <div class="alert alert-info">
+    {{t installer.step7.body}}
+  </div>
+
+  <ul class="nav nav-tabs">
+    {{#each service in controller.stepConfigs}}
+      {{#view App.WizardStep7.ServiceConfigTab}}
+        <a class="active" href="#{{unbound service.serviceName}}"
+           data-toggle="tab" {{action selectService service target="view"}}>
+          {{service.displayName}}{{#if service.errorCount}}<span
+          class="badge badge-important">{{service.errorCount}}</span>{{/if}}</a>
+      {{/view}}
+    {{/each}}
+  </ul>
+
+  <div class="accordion">
+    {{#each category in selectedService.configCategories}}
+    <div class="accordion-group">
+      <div class="accordion-heading">
+        <a class="accordion-toggle">
+          {{category.name}}
+        </a>
+      </div>
+
+      {{#unless category.isForSlaveComponent}}
+        {{#view App.WizardStep7.ServiceConfigsByCategoryView categoryBinding="category" serviceConfigsBinding="selectedService.configs"}}
+          <form class="form-horizontal">
+
+            {{#each view.categoryConfigs}}
+              {{#if isVisible}}
+              <div {{bindAttr class="errorMessage:error: :control-group"}}>
+                <label class="control-label">{{displayName}}</label>
+
+                <div class="controls">
+                  {{view viewClass serviceConfigBinding="this" categoryConfigsBinding="view.categoryConfigs"}}
+                  <span class="help-inline">{{errorMessage}}</span>
+                </div>
+              </div>
+              {{/if}}
+            {{/each}}
+
+          </form>
+        {{/view}}
+      {{/unless}}
+
+      {{#if category.isForSlaveComponent}}
+        {{#view App.WizardStep7.ServiceConfigsByCategoryView categoryBinding="category" serviceConfigsBinding="selectedService.configs" controllerBinding="App.router.slaveComponentGroupsController"}}
+            <div class="slave-component-group-menu">
+              {{view App.SlaveComponentGroupsMenu}}
+            </div>
+
+            {{#view App.AddSlaveComponentGroupButton slaveComponentNameBinding="category.name"}}
+            <a
+              class="btn add-slave-component-group btn-large" {{action addSlaveComponentGroup target="controller"}}><i
+              class="icon-plus"></i></a>
+            {{/view}}
+            <div class="remove-group-error control-group warning">
+              <span class="help-inline">You cannot delete this group since there are hosts assigned to it. You must assign them to another group before you can delete this group.</span>
+            </div>
+
+            <form class="form-horizontal">
+
+              {{#view App.SlaveComponentChangeGroupNameView}}
+                <label class="control-label">Group name</label>
+
+                <div class="controls">
+                  <div class="span6">
+                    <input class="span9" type="text" {{bindAttr value="view.content.name"}}>
+                    <button class="btn" {{action changeGroupName target="view"}}>Save</button>
+                  </div>
+                  <span class="help-inline">{{view.errorMessage}}</span>
+                </div>
+              {{/view}}
+
+
+              {{#each view.categoryConfigs}}
+                {{#if isVisible}}
+                <div {{bindAttr class="errorMessage:error: :control-group"}}>
+                  <label class="control-label">{{displayName}}</label>
+
+                  <div class="controls">
+                    {{view viewClass serviceConfigBinding="this" categoryConfigsBinding="view.categoryConfigs"}}
+                    <span class="help-inline">{{errorMessage}}</span>
+                  </div>
+                </div>
+                {{/if}}
+              {{/each}}
+
+            </form>
+
+
+        {{/view}}
+      {{/if}}
+    </div>
+    {{/each}}
+  </div>
+
+  {{#if isSubmitDisabled}}
+  <div class="alert">{{t installer.step7.attentionNeeded}}</div>
+  {{/if}}
+
+  <div class="btn-area">
+    <a class="btn" {{action back href="true"}}>&larr; Back</a>
+
+    <a class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}}
+      {{action submit target="controller"}}>Next &rarr;</a>
+  </div>
+</div>

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step8.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step8.hbs?rev=1402309&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step8.hbs (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step8.hbs Thu Oct 25 20:02:35 2012
@@ -0,0 +1,50 @@
+<!--
+* 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.
+-->
+
+<h2>{{t installer.step8.header}}</h2>
+
+<div class="alert alert-info">
+    {{t installer.step8.body}}
+</div>
+<div id="step8-content" class="well pre-scrollable">
+{{#each item in controller.clusterInfo}}
+<p>
+		<b>{{item.display_name}}</b> : {{item.config_value}}
+</p>
+{{/each}}
+
+	<div>
+		<p><b>Services</b></p>
+		{{#each controller.services}}
+		<div>
+			<ul><em><b>{{display_name}}</b></em>
+
+				<div>
+					{{#each component in this.service_components}}
+					<ul><span class="text text-info">{{component.display_name }} : </span>{{component.component_value}}</ul>
+					{{/each}}
+				</div>
+			</ul>
+		</div>
+		{{/each}}
+	</div>
+</div>
+<div class="btn-area">
+    <a class="btn pull-left" {{action back href="true"}}>&larr; Back</a>
+    <a class="btn btn-success pull-right" {{action submit target="controller"}}>Next &rarr;</a>
+</div>



Mime
View raw message