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:22:36 UTC

svn commit: r1418938 [2/3] - in /incubator/ambari/branches/AMBARI-666/ambari-web: ./ app/ app/assets/data/apps/ app/assets/data/clusters/ app/assets/data/users/ app/controllers/ app/controllers/global/ app/controllers/main/ app/controllers/main/admin/ ...

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js Sun Dec  9 13:22:27 2012
@@ -80,8 +80,7 @@ App.WizardStep7Controller = Em.Controlle
           _config.category = 'Advanced';
           _config.displayName = _config.name;
           _config.defaultValue = _config.value;
-          if (/\${.*}/.test(_config.value)) {
-            console.log("Step7: The name that matched regex: " + _config.name);
+          if (/\${.*}/.test(_config.value) || (service.serviceName !== 'OOZIE' && service.serviceName !== 'HBASE')) {
             _config.isRequired = false;
             _config.value = '';
           } else if(/^\s+$/.test(_config.value)){

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js Sun Dec  9 13:22:27 2012
@@ -29,7 +29,11 @@ App.WizardStep8Controller = Em.Controlle
   configMapping: require('data/config_mapping'),
 
   selectedServices: function () {
-    return this.get('content.services').filterProperty('isSelected', true);
+    var services = App.Service.find();
+    this.get('content.services').forEach(function (item) {
+      item.set('isInstalled', services.someProperty('serviceName', item.get('serviceName')));
+    });
+    return this.get('content.services').filterProperty('isSelected', true).filterProperty('isInstalled', false);
   }.property('content.services').cacheable(),
 
   clearStep: function () {
@@ -236,7 +240,7 @@ App.WizardStep8Controller = Em.Controlle
       hostObj = hostObj.concat(_hosts.hosts);
     }, this);
 
-    slaveHosts = hostObj.mapProperty('hostname').uniq();
+    slaveHosts = hostObj.mapProperty('hostName').uniq();
 
     var totalHosts = masterHosts.concat(slaveHosts).uniq();
     this.set('totalHosts', totalHosts);
@@ -593,6 +597,7 @@ App.WizardStep8Controller = Em.Controlle
    * Onclick handler for <code>next</code> button
    */
   submit: function () {
+    debugger;
 
     if (App.testMode) {
       // App.router.send('next');
@@ -614,7 +619,11 @@ App.WizardStep8Controller = Em.Controlle
   /* Following create* functions are called on submitting step8 */
 
   createCluster: function () {
-    var self = this;
+
+    if (this.get('content.cluster.isCompleted')){
+      return false;
+    }
+
     var clusterName = this.get('clusterInfo').findProperty('config_name', 'cluster').config_value;
     var url = '/api/clusters/' + clusterName;
     $.ajax({
@@ -715,15 +724,18 @@ App.WizardStep8Controller = Em.Controlle
     });
   },
 
-  registerHostsToCluster: function () {
-    this.get('totalHosts').forEach(function (_hostname) {
-      this.registerHostToCluster(_hostname);
-    }, this);
+  registerHostsToCluster: function() {
+    var allHosts = this.get('content.hostsInfo');
+    for(var hostName in allHosts){
+      if(!allHosts[hostName].isInstalled){
+        this.registerHostToCluster(hostName);
+      }
+    }
   },
 
-  registerHostToCluster: function (hostname) {
+  registerHostToCluster: function (hostName) {
     var clusterName = this.get('clusterInfo').findProperty('config_name', 'cluster').config_value;
-    var url = '/api/clusters/' + clusterName + '/hosts/' + hostname;
+    var url = '/api/clusters/' + clusterName + '/hosts/' + hostName;
     $.ajax({
       type: 'POST',
       url: url,
@@ -764,14 +776,16 @@ App.WizardStep8Controller = Em.Controlle
       if (_slaveHosts.componentName !== 'CLIENT') {
         slaveObj.component = _slaveHosts.componentName;
         _slaveHosts.hosts.forEach(function (_slaveHost) {
-          slaveObj.hostName = _slaveHost.hostname;
+          slaveObj.hostName = _slaveHost.hostName;
+          slaveObj.isInstalled = _slaveHost.isInstalled;
           this.createHostComponent(slaveObj);
         }, this);
       } else {
         this.get('content.clients').forEach(function (_client) {
           slaveObj.component = _client.component_name;
           _slaveHosts.hosts.forEach(function (_slaveHost) {
-            slaveObj.hostName = _slaveHost.hostname;
+            slaveObj.hostName = _slaveHost.hostName;
+            slaveObj.isInstalled = _slaveHost.isInstalled;
             this.createHostComponent(slaveObj);
           }, this);
         }, this);
@@ -787,6 +801,11 @@ App.WizardStep8Controller = Em.Controlle
   },
 
   createHostComponent: function (hostComponent) {
+    console.log(hostComponent);
+    if (hostComponent.isInstalled) {
+      return false;
+    }
+
     var clusterName = this.get('clusterInfo').findProperty('config_name', 'cluster').config_value;
     var url = '/api/clusters/' + clusterName + '/hosts/' + hostComponent.hostName + '/host_components/' + hostComponent.component;
 
@@ -814,9 +833,11 @@ App.WizardStep8Controller = Em.Controlle
 
   createConfigurations: function () {
     var selectedServices = this.get('selectedServices');
-    this.createConfigSite(this.createGlobalSiteObj());
-    this.createConfigSite(this.createCoreSiteObj());
-    this.createConfigSite(this.createHdfsSiteObj('HDFS'));
+    if (!this.get('content.cluster.isCompleted')){
+      this.createConfigSite(this.createGlobalSiteObj());
+      this.createConfigSite(this.createCoreSiteObj());
+      this.createConfigSite(this.createHdfsSiteObj('HDFS'));
+    }
     if (selectedServices.someProperty('serviceName', 'MAPREDUCE')) {
       this.createConfigSite(this.createMrSiteObj('MAPREDUCE'));
     }

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js Sun Dec  9 13:22:27 2012
@@ -44,14 +44,13 @@ App.WizardStep9Controller = Em.Controlle
   }.property('hosts.@each.status'),
 
   navigateStep: function () {
-
-    //TODO: uncomment following line after the hook up with the API call
     if (this.get('content.cluster.isCompleted') === false) {
       this.loadStep();
       if (this.get('content.cluster.status') === 'INSTALL FAILED') {
-        this.set('isStepCompleted', true);
-        this.set('status', 'failed');
+        this.hosts.setEach('status', 'failed');
         this.set('progress', '100');
+        this.set('isStepCompleted', true);
+        //this.set('status', 'failed');
       } else if (this.get('content.cluster.status') === 'START FAILED') {
         this.launchStartServices();
       } else {
@@ -229,7 +228,7 @@ App.WizardStep9Controller = Em.Controlle
           isStartError: false,
           isCompleted: false
         };
-        App.router.get('installerController').saveClusterStatus(clusterStatus);
+        App.router.get(self.get('content.controllerName')).saveClusterStatus(clusterStatus);
         self.startPolling();
       },
 
@@ -242,7 +241,7 @@ App.WizardStep9Controller = Em.Controlle
           isCompleted: false
         };
 
-        App.router.get('installerController').saveClusterStatus(clusterStatus);
+        App.router.get(self.get('content.controllerName')).saveClusterStatus(clusterStatus);
       },
 
       statusCode: require('data/statusCodes')
@@ -364,8 +363,8 @@ App.WizardStep9Controller = Em.Controlle
         }
         if (this.isSuccess(polledData)) {
           clusterStatus.status = 'STARTED';
-          var serviceSartTime = new Date().getTime();
-          var timeToStart = Math.floor((serviceSartTime - this.get('content.cluster.installStartTime')) / 60000);
+          var serviceStartTime = new Date().getTime();
+          var timeToStart = Math.floor((serviceStartTime - this.get('content.cluster.installStartTime')) / 60000);
           clusterStatus.installTime = timeToStart;
           this.set('status', 'success');
         } else {
@@ -375,10 +374,10 @@ App.WizardStep9Controller = Em.Controlle
             this.setHostsStatus(this.getFailedHostsForFailedRoles(polledData));
           }
         }
-        App.router.get('installerController').saveClusterStatus(clusterStatus);
+        App.router.get(this.get('content.controllerName')).saveClusterStatus(clusterStatus);
         this.set('isStepCompleted', true);
         this.setTasksPerHost();
-        App.router.get('installerController').saveInstalledHosts(this);
+        App.router.get(this.get('content.controllerName')).saveInstalledHosts(this);
         return true;
       }
     } else if (this.get('content.cluster.status') === 'PENDING') {
@@ -389,16 +388,13 @@ App.WizardStep9Controller = Em.Controlle
           isCompleted: true,
           installStartTime: this.get('content.cluster.installStartTime')
         }
-        var serviceSartTime = new Date().getTime();
-        var timeToStart = serviceSartTime - this.get('content.cluster.installStartTime');
-        console.log("STEP9: ********The time difference is = " + serviceSartTime / 60000);
         if (this.isStepFailed(polledData)) {
           console.log("In installation failure");
           clusterStatus.status = 'INSTALL FAILED';
           this.set('progress', '100');
           this.set('status', 'failed');
           this.setHostsStatus(this.getFailedHostsForFailedRoles(polledData), 'failed');
-          App.router.get('installerController').saveClusterStatus(clusterStatus);
+          App.router.get(this.get('content.controllerName')).saveClusterStatus(clusterStatus);
           this.set('isStepCompleted', true);
         } else {
           clusterStatus.status = 'INSTALLED';
@@ -406,7 +402,7 @@ App.WizardStep9Controller = Em.Controlle
           this.launchStartServices();  //TODO: uncomment after the actual hookup
         }
         this.setTasksPerHost();
-        App.router.get('installerController').saveInstalledHosts(this);
+        App.router.get(this.get('content.controllerName')).saveInstalledHosts(this);
         return true;
       }
     }
@@ -459,7 +455,7 @@ App.WizardStep9Controller = Em.Controlle
      totalProgress = 0;
      }  */
     var tasksData = polledData.tasks;
-    console.log("The value of tasksData is: " + tasksData);
+    console.log("The value of tasksData is: ", tasksData);
     if (!tasksData) {
       console.log("Step9: ERROR: NO tasks availaible to process");
     }
@@ -525,7 +521,7 @@ App.WizardStep9Controller = Em.Controlle
       dataType: 'text',
       success: function (data) {
         console.log("TRACE: In success function for the GET bootstrap call");
-        console.log("TRACE: STep9 -> The value is: " + jQuery.parseJSON(data));
+        console.log("TRACE: STep9 -> The value is: ", jQuery.parseJSON(data));
         var result = self.parseHostInfo(jQuery.parseJSON(data));
         if (result !== true) {
           window.setTimeout(function () {

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js Sun Dec  9 13:22:27 2012
@@ -283,6 +283,7 @@ module.exports = [
     "value": "<templateName[0]>",
     "filename": "mapred-site.xml"
   },
+  /*
   {
     "name": "oozie.service.StoreService.jdbc.url",
     "templateName": ["oozie_data_dir"],
@@ -290,9 +291,11 @@ module.exports = [
     "value": "<templateName[0]>\/<foreignKey[0]>",
     "filename": "oozie-site.xml"
   },
+  */
   {
     "name": "oozie.base.url",
     "templateName": ["oozieserver_host"],
+    "foreignKey": null,
     "value": "http://<templateName[0]>:11000/oozie",
     "filename": "oozie-site.xml"
   },
@@ -300,22 +303,32 @@ module.exports = [
   {
     "name": "oozie.service.JPAService.jdbc.password",
     "templateName": [],
+    "foreignKey": null,
     "value": " ",
     "filename": "oozie-site.xml"
   },
   {
     "name": "oozie.db.schema.name",
     "templateName": [],
+    "foreignKey": null,
     "value": "oozie",
     "filename": "oozie-site.xml"
   },
   {
     "name": "oozie.service.JPAService.jdbc.url",
     "templateName": [],
+    "foreignKey": null,
     "value": "jdbc:derby:/var/data/oozie/oozie-db;create=true",
     "filename": "oozie-site.xml"
   },
   {
+    "name": "oozie.action.ssh.http.command.post.options",
+    "templateName": [],
+    "foreignKey": null,
+    "value": " ",
+    "filename": "oozie-site.xml"
+  },
+  {
     "name": "javax.jdo.option.ConnectionURL",
     "templateName": ["hive_mysql_host", "hive_database_name"],
     "foreignKey": null,

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js Sun Dec  9 13:22:27 2012
@@ -31,15 +31,15 @@ App.hostsMapper = App.QuickDataMapper.cr
     cpu : 'Hosts.cpu_count',
     memory : 'Hosts.total_mem',
     disk_info: 'Hosts.disk_info',
-    $disk_usage: '40',
+    $disk_usage: '-',
     $health_status: 'LIVE',
-    $load_avg: '0.2, 1.2, 2.4',
+    $load_avg: '-',
     $cpu_usage: 33,
     $memory_usage: 26,
     $network_usage: 36,
     $io_usage: 39,
     last_heart_beat_time : "Hosts.last_heartbeat_time",
-    os : 'Hosts.os_arch',
+    os_arch : 'Hosts.os_arch',
     os_type : 'Hosts.os_type',
     ip : 'Hosts.ip'
   }

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/runs_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/runs_mapper.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/runs_mapper.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/runs_mapper.js Sun Dec  9 13:22:27 2012
@@ -24,7 +24,7 @@ App.runsMapper = App.QuickDataMapper.cre
     if(!this.get('model')) {
       return;
     }
-    if(json.workflows) {
+    if(json && json.workflows) {
       var result = [];
       json.workflows.forEach(function(item) {
         var o = this.parseIt(item, this.config);
@@ -41,6 +41,7 @@ App.runsMapper = App.QuickDataMapper.cre
         r = r.substr(0, r.length - 1);
         r += '}}';
         o.workflow_context = r;
+
         result.push(o);
       }, this);
       App.store.loadMany(this.get('model'), result);
@@ -49,7 +50,6 @@ App.runsMapper = App.QuickDataMapper.cre
   config : {
     id: 'workflowId',
     app_name: 'workflowName',
-    $type: 'Pig',
     num_jobs_total: 'numJobsTotal',
     num_jobs_completed: 'numJobsCompleted',
     user_name:'userName',

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/server_data_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/server_data_mapper.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/server_data_mapper.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/server_data_mapper.js Sun Dec  9 13:22:27 2012
@@ -95,7 +95,7 @@ App.QuickDataMapper = App.ServerDataMapp
   getJsonProperty: function (json, path) {
     var pathArr = path.split('.');
     var current = json;
-    while (pathArr.length) {
+    while (pathArr.length && current) {
       if (pathArr[0].substr(-1) == ']') {
         var index = parseInt(pathArr[0].substr(-2, 1));
         var attr = pathArr[0].substr(0, pathArr[0].length - 3);

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js Sun Dec  9 13:22:27 2012
@@ -43,13 +43,13 @@ App.servicesMapper = App.QuickDataMapper
     decommision_data_nodes: 'decommission_data_nodes',
     capacity_used: 'nameNodeComponent.ServiceComponentInfo.CapacityUsed',
     capacity_total: 'nameNodeComponent.ServiceComponentInfo.CapacityTotal',
-    ///// dfsTotalBlocks: 'nameNodeComponent.host_components[0].metrics.dfs.namenode.????',
-    ///// dfsCorruptBlocks: DS.attr('number'),
-    ///// dfsMissingBlocks: DS.attr('number'),
-    ///// dfsUnderReplicatedBlocks: DS.attr('number'),
-    ///// dfsTotalFiles: DS.attr('number'),
-    upgradeStatus: 'nameNodeComponent.ServiceComponentInfo.UpgradeFinalized',
-    safeModeStatus: 'nameNodeComponent.ServiceComponentInfo.Safemode'
+    dfs_total_blocks: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.BlocksTotal',
+    dfs_corrupt_blocks: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.CorruptBlocks',
+    dfs_missing_blocks: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.MissingBlocks',
+    dfs_under_replicated_blocks: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.UnderReplicatedBlocks',
+    dfs_total_files: 'nameNodeComponent.host_components[0].metrics.dfs.FSNamesystem.FilesTotal',
+    upgrade_status: 'nameNodeComponent.ServiceComponentInfo.UpgradeFinalized',
+    safe_mode_status: 'nameNodeComponent.ServiceComponentInfo.Safemode'
   },
   
   mapReduceConfig: {
@@ -63,17 +63,18 @@ App.servicesMapper = App.QuickDataMapper
     black_list_trackers: 'black_list_trackers',
     gray_list_trackers: 'gray_list_trackers',
     map_slots: 'map_slots',
-    reduce_slots: 'reduce_slots'
-//    jobsSubmitted: DS.attr('number'),
-//    jobsCompleted: DS.attr('number'),
-//    mapSlotsOccupied: DS.attr('number'),
-//    mapSlotsReserved: DS.attr('number'),
-//    reduceSlotsOccupied: DS.attr('number'),
-//    reduceSlotsReserved: DS.attr('number'),
-//    mapsRunning: DS.attr('number'),
-//    mapsWaiting: DS.attr('number'),
-//    reducesRunning: DS.attr('number'),
-//    reducesWaiting: DS.attr('number')
+    reduce_slots: 'reduce_slots',
+    jobs_submitted: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.jobs_submitted',
+    jobs_completed: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.jobs_completed',
+    map_slots_occupied: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.occupied_map_slots',
+    map_slots_reserved: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.reserved_map_slots',
+    reduce_slots_occupied: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.occupied_reduce_slots',
+    reduce_slots_reserved: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.reserved_reduce_slots',
+    maps_running: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.running_maps',
+    maps_waiting: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.waiting_maps',
+    reduces_running: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.running_reduces',
+    reduces_waiting: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.waiting_reduces',
+    trackers_decommisioned: 'jobTrackerComponent.host_components[0].metrics.mapred.jobtracker.trackers_decommissioned'
   },
 
   model2: App.Component,
@@ -149,23 +150,29 @@ App.servicesMapper = App.QuickDataMapper
                 item.alive_trackers = [];
                 item.gray_list_trackers = [];
                 item.black_list_trackers = [];
-                liveNodesJson.forEach(function(nj){
-                  item.alive_trackers.push(nj.hostname);
-                  if(nj.slots && nj.slots.map_slots)
-                    item.map_slots += nj.slots.map_slots;
-                  if(nj.slots && nj.slots.map_slots_used)
-                    item.map_slots_used += nj.slots.map_slots_used;
-                  if(nj.slots && nj.slots.reduce_slots)
-                    item.reduce_slots += nj.slots.reduce_slots;
-                  if(nj.slots && nj.slots.reduce_slots_used)
-                    item.reduce_slots_used += nj.slots.reduce_slots_used;
-                });
-                grayNodesJson.forEach(function(nj){
-                  item.gray_list_trackers.push(nj.hostname);
-                });
-                blackNodesJson.forEach(function(nj){
-                  item.black_list_trackers.push(nj.hostname);
-                });
+                if (liveNodesJson != null) {
+                  liveNodesJson.forEach(function(nj){
+                    item.alive_trackers.push(nj.hostname);
+                    if(nj.slots && nj.slots.map_slots)
+                      item.map_slots += nj.slots.map_slots;
+                    if(nj.slots && nj.slots.map_slots_used)
+                      item.map_slots_used += nj.slots.map_slots_used;
+                    if(nj.slots && nj.slots.reduce_slots)
+                      item.reduce_slots += nj.slots.reduce_slots;
+                    if(nj.slots && nj.slots.reduce_slots_used)
+                      item.reduce_slots_used += nj.slots.reduce_slots_used;
+                  });
+                }
+                if (grayNodesJson != null) {
+                  grayNodesJson.forEach(function(nj){
+                    item.gray_list_trackers.push(nj.hostname);
+                  });
+                }
+                if (blackNodesJson != null) {
+                  blackNodesJson.forEach(function(nj){
+                    item.black_list_trackers.push(nj.hostname);
+                  });
+                }
               }
               if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "TASKTRACKER") {
                 if(!item.task_trackers){

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/users_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/users_mapper.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/users_mapper.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/users_mapper.js Sun Dec  9 13:22:27 2012
@@ -21,7 +21,7 @@ App.usersMapper = App.QuickDataMapper.cr
   model : App.User,
   config : {
     user_name : 'Users.user_name',
-    roles : 'Users.roles'
+    roles : 'Users.roles',
+    type: 'Users.type'
   }
-
 });

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=1418938&r1=1418937&r2=1418938&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:22:27 2012
@@ -18,246 +18,254 @@
 
 Em.I18n.translations = {
 
-  'app.name': 'Ambari',
+  'app.name':'Ambari',
 
-  'login.header': 'Sign in',
-  'login.username': 'Username',
-  'login.password': 'Password',
-  'login.loginButton': 'Sign in',
-  'login.error': 'Invalid username/password combination.',
-
-  'services.nagios.description': 'Nagios Monitoring and Alerting system',
-  'services.ganglia.description': 'Ganglia Metrics Collection system',
-  'services.hdfs.description': 'Apache Hadoop Distributed File System',
-  'services.mapreduce.description': 'Apache Hadoop Distributed Processing Framework',
-  'services.sqoop.description': 'Tool for transferring bulk data between Apache Hadoop and structured data stores such as relational databases',
-  'services.pig.description': 'Scripting platform for analyzing large datasets',
-  'services.hive.description': 'Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service',
-  'services.oozie.description': 'System for workflow coordination and execution of Apache Hadoop jobs',
-  'services.zookeeper.description': 'ZooKeeper desc',
-  'services.hbase.description': 'Non-relational distributed database and centralized service for configuration management & synchronization',
-
-  'topnav.help.href': 'http://incubator.apache.org/ambari/install.html',
-
-  'installer.header': 'Cluster Install Wizard',
-  'installer.step1.header': 'Welcome',
-  'installer.step1.body.header': 'Welcome to Apache Ambari!',
-  'installer.step1.body': 'Ambari makes it easy to install, manage, and monitor Hadoop clusters.<br>' +
+  'login.header':'Sign in',
+  'login.username':'Username',
+  'login.password':'Password',
+  'login.loginButton':'Sign in',
+  'login.error':'Invalid username/password combination.',
+
+  'services.nagios.description':'Nagios Monitoring and Alerting system',
+  'services.ganglia.description':'Ganglia Metrics Collection system',
+  'services.hdfs.description':'Apache Hadoop Distributed File System',
+  'services.mapreduce.description':'Apache Hadoop Distributed Processing Framework',
+  'services.sqoop.description':'Tool for transferring bulk data between Apache Hadoop and structured data stores such as relational databases',
+  'services.pig.description':'Scripting platform for analyzing large datasets',
+  'services.hive.description':'Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service',
+  'services.oozie.description':'System for workflow coordination and execution of Apache Hadoop jobs',
+  'services.zookeeper.description':'ZooKeeper desc',
+  'services.hbase.description':'Non-relational distributed database and centralized service for configuration management & synchronization',
+
+  'topnav.help.href':'http://incubator.apache.org/ambari/install.html',
+
+  'installer.header':'Cluster Install Wizard',
+  'installer.step1.header':'Welcome',
+  'installer.step1.body.header':'Welcome to Apache Ambari!',
+  'installer.step1.body':'Ambari makes it easy to install, manage, and monitor Hadoop clusters.<br>' +
     'We will walk you through the cluster installation process with this step-by-step wizard.',
-  'installer.step1.clusterName': 'Name your cluster',
-  'installer.step1.clusterName.tooltip.title': 'Cluster Name',
-  'installer.step1.clusterName.tooltip.content': 'Enter a unique cluster name. Cluster name cannot be changed later.',
-  'installer.step1.clusterName.error.required': 'Cluster Name is required',
-  'installer.step1.clusterName.error.whitespaces': 'Cluster Name cannot contain white spaces',
-  'installer.step1.clusterName.error.specialChar': 'Cluster Name cannot contain special characters',
-
-  'installer.step2.header': 'Install Options',
-  'installer.step2.body': 'Enter the list of hosts to be included in the cluster, provide your SSH key, and optionally specify a local repository.',
-  'installer.step2.targetHosts': 'Target Hosts',
-  'installer.step2.targetHosts.info': 'Enter a list of host names, one per line',
-  'installer.step2.hostPattern.tooltip.title': 'Pattern Expressions',
-  'installer.step2.hostPattern.tooltip.content': 'You can use pattern expressions to specify a number of target hosts.  Explain brackets.',
-  'installer.step2.hostName.error.required': 'You must specify at least one host name',
-  'installer.step2.hostName.error.notRequired': 'Host Names will be ignored if not using SSH to automatically configure hosts',
-  'installer.step2.hostName.error.invalid': 'Invalid Host Name(s) - cannot start or end with a hyphen',
-  'installer.step2.sshKey': 'Host Connectivity Information',
-  'installer.step2.sshKey.info': 'Provide your SSH Private Key (<b>id_rsa</b> for <b>root</b>)',
-  'installer.step2.sshKey.error.required': 'SSH Private Key is required',
-  'installer.step2.passphrase.error.match': 'Passphrases do not match',
-  'installer.step2.manualInstall.label': 'Do not use SSH to automatically configure hosts ',
-  'installer.step2.manualInstall.info': 'By not using SSH to connect to the target hosts, you must manually install and start the ' +
+  'installer.step1.clusterName':'Name your cluster',
+  'installer.step1.clusterName.tooltip.title':'Cluster Name',
+  'installer.step1.clusterName.tooltip.content':'Enter a unique cluster name. Cluster name cannot be changed later.',
+  'installer.step1.clusterName.error.required':'Cluster Name is required',
+  'installer.step1.clusterName.error.whitespaces':'Cluster Name cannot contain white spaces',
+  'installer.step1.clusterName.error.specialChar':'Cluster Name cannot contain special characters',
+
+  'installer.step2.header':'Install Options',
+  'installer.step2.body':'Enter the list of hosts to be included in the cluster, provide your SSH key, and optionally specify a local repository.',
+  'installer.step2.targetHosts':'Target Hosts',
+  'installer.step2.targetHosts.info':'Enter a list of host names, one per line',
+  'installer.step2.hostPattern.tooltip.title':'Pattern Expressions',
+  'installer.step2.hostPattern.tooltip.content':'You can use pattern expressions to specify a number of target hosts.  Explain brackets.',
+  'installer.step2.hostName.error.required':'You must specify at least one host name',
+  'installer.step2.hostName.error.notRequired':'Host Names will be ignored if not using SSH to automatically configure hosts',
+  'installer.step2.hostName.error.invalid':'Invalid Host Name(s) - cannot start or end with a hyphen',
+  'installer.step2.sshKey':'Host Connectivity Information',
+  'installer.step2.sshKey.info':'Provide your SSH Private Key (<b>id_rsa</b> for <b>root</b>)',
+  'installer.step2.sshKey.error.required':'SSH Private Key is required',
+  'installer.step2.passphrase.error.match':'Passphrases do not match',
+  'installer.step2.manualInstall.label':'Do not use SSH to automatically configure hosts ',
+  'installer.step2.manualInstall.info':'By not using SSH to connect to the target hosts, you must manually install and start the ' +
     'Ambari Agent on each host in order for the wizard to perform the necessary configurations and software installs.',
-  'installer.step2.advancedOption': 'Advanced Options',
-  'installer.step2.repoConf': 'Software Repository Configuration File Path',
-  'installer.step2.localRepo.header': 'Software Repository',
-  'installer.step2.localRepo.label': 'Use a local software repository',
-  'installer.step2.localRepo.error.required': 'Local repository file path is required',
-  'installer.step2.localRepo.info': 'The repository configuration file should be installed on each host in your cluster. ' +
+  'installer.step2.advancedOption':'Advanced Options',
+  'installer.step2.repoConf':'Software Repository Configuration File Path',
+  'installer.step2.localRepo.header':'Software Repository',
+  'installer.step2.localRepo.label':'Use a local software repository',
+  'installer.step2.localRepo.error.required':'Local repository file path is required',
+  'installer.step2.localRepo.info':'The repository configuration file should be installed on each host in your cluster. ' +
     'This file instructs the package manager to use your local software repository to retrieve software packages, instead of ' +
     'downloading them from the internet.',
-  'installer.step2.localRepo.tooltip.title': 'Local Software Repository',
-  'installer.step2.localRepo.tooltip.content': 'The repository configuration file should be installed on each host ' +
+  'installer.step2.localRepo.tooltip.title':'Local Software Repository',
+  'installer.step2.localRepo.tooltip.content':'The repository configuration file should be installed on each host ' +
     'in your cluster. This file instructs package manager to use your local' +
     'software repository to retrieve software packages, instead of using the internet.',
-  'installer.step2.manualInstall.tooltip.title': 'Not Using SSH (Manual Install)',
-  'installer.step2.manualInstall.tooltip.content': 'If you do not wish Ambari to automatically configure the target hosts via SSH,' +
+  'installer.step2.manualInstall.tooltip.title':'Not Using SSH (Manual Install)',
+  'installer.step2.manualInstall.tooltip.content':'If you do not wish Ambari to automatically configure the target hosts via SSH,' +
     ' you have the option of configuring them yourself.  This involves installing and starting Ambari Agent on each of your target hosts.',
-  'installer.step2.manualInstall.popup.header': 'Before You Proceed',
-  'installer.step2.manualInstall.popup.body': 'You must install Ambari Agents on each host you want to manage before you proceed.  <a href="#" target="_blank">Learn more</a>',
+  'installer.step2.manualInstall.popup.header':'Before You Proceed',
+  'installer.step2.manualInstall.popup.body':'You must install Ambari Agents on each host you want to manage before you proceed.  <a href="#" target="_blank">Learn more</a>',
 
-  'installer.step3.header': 'Confirm Hosts',
-  'installer.step3.body': 'Here are the results of the host discovery process.<br>' +
+  '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.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',
-  'installer.step3.hosts.retry.popup.body': 'Are you sure you want to retry discovery of the selected host(s)?',
-
-  'installer.step4.header': 'Choose Services',
-  'installer.step4.body': 'Choose which services you want to install on your cluster.<br>Note that some services have dependencies (e.g., HBase requires ZooKeeper.)',
-  'installer.step4.mapreduceCheck.popup.header': 'MapReduce Needed',
-  'installer.step4.mapreduceCheck.popup.body': 'You did not select MapReduce, but it is needed by other services you selected.  We will automatically add MapReduce.  Is this OK?',
-  'installer.step4.monitoringCheck.popup.header': 'Limited Functionality Warning',
-  'installer.step4.monitoringCheck.popup.body': 'You did not select Nagios and/or Ganglia.  If both are not selected, monitoring and alerts will not function properly.  Is this OK?',
-
-  'installer.step5.header': 'Assign Masters',
-  'installer.step5.attention': ' hosts not running master services',
-  'installer.step5.body': 'Assign master components to hosts you want to run them on.',
-
-  'installer.step6.header': 'Assign Slaves and Clients',
-  'installer.step6.body': 'Assign slave and client components to hosts you want to run them on. <br/>Client component will install ',
-  'installer.step6.error.mustSelectOne': 'You must assign at least one host to each.',
-
-  'installer.step7.header': 'Customize Services',
-  'installer.step7.body': 'We have come up with recommended configurations for the services you selected.  Customize them as you see fit.',
-  'installer.step7.attentionNeeded': '<strong>Attention:</strong> Some configurations need your attention before you can proceed.',
-
-  'installer.step8.header': 'Review',
-  'installer.step8.body': 'Please review the cluster configuration before installation',
-
-  'installer.step9.header': 'Install, Start and Test',
-  'installer.step9.body': 'Please wait while the selected services are installed, started, and tested on your new cluster.',
-  'installer.step9.status.success': 'Successfully installed the cluster',
-  'installer.step9.status.failed': 'Failure in installation',
-  'installer.step9.host.status.success': 'Success',
-  'installer.step9.host.status.warning': 'Warnings encountered',
-  'installer.step9.host.status.failed': 'Failures encountered',
-  'installer.step9.hostLog.popup.header': 'Tasks executed on ',
-
-  'installer.step10.header': 'Summary',
-  'installer.step10.body': 'Here is the summary of the cluster install process.',
-
-
-  'form.create': 'Create',
-  'form.save': 'Save',
-  'form.cancel': 'Cancel',
-  'form.password': 'Password',
-  'form.passwordRetype': 'Retype Password',
-  'form.saveSuccess': 'Successfully saved.',
-  'form.saveError': 'Sorry, errors occured.',
-
-  'form.validator.invalidIp': 'Please enter valid ip address',
-
-  'admin.advanced.title': 'Advanced',
-  'admin.advanced.caution': 'This section is for advanced user only.<br/>Proceed with caution.',
-  'admin.advanced.button.uninstallIncludingData': 'Uninstall cluster including all data.',
-  'admin.advanced.button.uninstallKeepData': 'Uninstall cluster but keep data.',
+  'installer.step3.hostLog.popup.header':'Log file for the host',
+  'installer.step3.hostLog.popup.body':'Placeholder for the log file',
+  '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',
+  'installer.step3.hosts.retry.popup.body':'Are you sure you want to retry discovery of the selected host(s)?',
+
+  'installer.step4.header':'Choose Services',
+  'installer.step4.body':'Choose which services you want to install on your cluster.<br>Note that some services have dependencies (e.g., HBase requires ZooKeeper.)',
+  'installer.step4.mapreduceCheck.popup.header':'MapReduce Needed',
+  'installer.step4.mapreduceCheck.popup.body':'You did not select MapReduce, but it is needed by other services you selected.  We will automatically add MapReduce.  Is this OK?',
+  'installer.step4.monitoringCheck.popup.header':'Limited Functionality Warning',
+  'installer.step4.monitoringCheck.popup.body':'You did not select Nagios and/or Ganglia.  If both are not selected, monitoring and alerts will not function properly.  Is this OK?',
+
+  'installer.step5.header':'Assign Masters',
+  'installer.step5.attention':' hosts not running master services',
+  'installer.step5.body':'Assign master components to hosts you want to run them on.',
+
+  'installer.step6.header':'Assign Slaves and Clients',
+  'installer.step6.body':'Assign slave and client components to hosts you want to run them on. <br/>Client component will install ',
+  'installer.step6.error.mustSelectOne':'You must assign at least one host to each.',
+
+  'installer.step7.header':'Customize Services',
+  'installer.step7.body':'We have come up with recommended configurations for the services you selected.  Customize them as you see fit.',
+  'installer.step7.attentionNeeded':'<strong>Attention:</strong> Some configurations need your attention before you can proceed.',
+
+  'installer.step8.header':'Review',
+  'installer.step8.body':'Please review the cluster configuration before installation',
+
+  'installer.step9.header':'Install, Start and Test',
+  'installer.step9.body':'Please wait while the selected services are installed, started, and tested on your new cluster.',
+  'installer.step9.status.success':'Successfully installed the cluster',
+  'installer.step9.status.failed':'Failure in installation',
+  'installer.step9.host.status.success':'Success',
+  'installer.step9.host.status.warning':'Warnings encountered',
+  'installer.step9.host.status.failed':'Failures encountered',
+  'installer.step9.hostLog.popup.header':'Tasks executed on ',
+
+  'installer.step10.header':'Summary',
+  'installer.step10.body':'Here is the summary of the cluster install process.',
+
+
+  'form.create':'Create',
+  'form.save':'Save',
+  'form.cancel':'Cancel',
+  'form.password':'Password',
+  'form.passwordRetype':'Retype Password',
+  'form.saveSuccess':'Successfully saved.',
+  'form.saveError':'Sorry, errors occured.',
+
+  'form.validator.invalidIp':'Please enter valid ip address',
+
+  'admin.advanced.title':'Advanced',
+  'admin.advanced.caution':'This section is for advanced user only.<br/>Proceed with caution.',
+  'admin.advanced.button.uninstallIncludingData':'Uninstall cluster including all data.',
+  'admin.advanced.button.uninstallKeepData':'Uninstall cluster but keep data.',
 
-  'admin.advanced.popup.header': 'Uninstall Cluster',
+  'admin.advanced.popup.header':'Uninstall Cluster',
 
   /*'admin.advanced.popup.text':'Uninstall Cluster',*/
 
-  'admin.audit.grid.date': "Date/Time",
-  'admin.audit.grid.category': "Category",
-  'admin.audit.grid.operationName': "Operation",
-  'admin.audit.grid.performedBy': "Performed By",
-  'admin.audit.grid.service': "Category",
-
-  'admin.authentication.form.method.database': 'Use Ambari Database to authenticate users',
-  'admin.authentication.form.method.ldap': 'Use LDAP/Active Directory to authenticate',
-  'admin.authentication.form.primaryServer': 'Primary Server',
-  'admin.authentication.form.secondaryServer': 'Secondary Server',
-  'admin.authentication.form.useSsl': 'Use SSL',
-  'admin.authentication.form.bind.anonymously': "Bind Anonymously",
-  'admin.authentication.form.bind.useCrenedtials': "Use Credentials To Bind",
-  'admin.authentication.form.bindUserDN': 'Bind User DN',
-  'admin.authentication.form.searchBaseDN': 'Search Base DN',
-  'admin.authentication.form.usernameAttribute': 'Username Attribute',
-
-  'admin.authentication.form.userDN': 'User DN',
-  'admin.authentication.form.password': 'Password',
-  'admin.authentication.form.configurationTest': 'Configuration Test',
-  'admin.authentication.form.testConfiguration': 'Test Configuration',
-
-  'admin.authentication.form.test.success': 'The configuration passes the test',
-  'admin.authentication.form.test.fail': 'The configuration fails the test',
-
-  'admin.security.title': 'Kerberos Security has not been enabled on this cluster.',
-  'admin.security.button.enable': 'Enable Kerberos Security on this cluster',
-
-  'admin.users.ldapAuthentionUsed': 'LDAP Authentication is being used to authenticate users',
-  'admin.users.deleteYourselfMessage': 'You can\'t delete yourself',
-  'admin.users.addButton': 'Add User',
-  'admin.users.delete': 'delete',
-  'admin.users.edit': 'edit',
-  'admin.users.privileges': 'Admin',
-  'admin.users.password': 'Password',
-  'admin.users.passwordRetype': 'Retype Password',
-  'admin.users.username': 'Username',
-
-  'question.sure': 'Are you sure?',
-
-  'services.service.start': 'Start',
-  'services.service.stop': 'Stop',
-  'services.service.confirmation.header': 'Confirmation',
-  'services.service.confirmation.body': 'Are you sure?',
-  'services.service.summary.version': 'Version',
-  'services.service.summary.nameNode': 'NameNode Web UI',
-  'services.service.summary.nameNodeUptime': 'NameNode Uptime',
-  'services.service.summary.nameNodeHeap': 'NameNode Heap',
-  'services.service.summary.pendingUpgradeStatus': 'Upgrade Status',
-  'services.service.summary.safeModeStatus': 'Safe Mode Status',
-  'services.service.summary.dataNodes': 'DataNodes',
-  'services.service.summary.diskCapacity': 'HDFS Disk Capacity',
-  'services.service.summary.blocksTotal': 'Blocks (total)',
-  'services.service.summary.blockErrors': 'Block Errors',
-  'services.service.summary.totalFiles': 'Total Files + Dirs',
-  'services.service.summary.jobTracker': 'JobTracker',
-  'services.service.summary.jobTrackerWebUI': 'JobTracker Web UI',
-  'services.service.summary.jobTrackerUptime': 'JobTracker Uptime',
-  'services.service.summary.trackersLiveTotal': 'Trackers',
-  'services.service.summary.trackersBlacklistGraylist': 'Trackers',
-  'services.service.summary.jobTrackerHeap': 'JobTracker Heap',
-  'services.service.summary.totalSlotsCapacity': 'Total Slots Capacity',
-  'services.service.summary.totalJobs': 'Total Jobs',
-  'services.service.summary.currentSlotUtiliMaps': 'Map Slots',
-  'services.service.summary.currentSlotUtiliReduces': 'Reduce Slots',
-  'services.service.summary.tasksMaps': 'Tasks: Maps',
-  'services.service.summary.tasksReduces': 'Tasks: Reduces',
-  'services.service.summary.hbaseMaster': 'HBase Master Web UI',
-  'services.service.summary.regionServerCount': 'Region Server Count',
-  'services.service.summary.regionInTransition': 'Region In Transition',
-  'services.service.summary.masterStarted': 'Master Started',
-  'services.service.summary.masterActivated': 'Master Activated',
-  'services.service.summary.averageLoad': 'Average Load',
-  'services.service.summary.masterHeap': 'Master Heap',
-  'services.service.summary.moreStats': 'more stats here',
-  'services.service.actions.run.rebalancer': 'Run Rebalancer',
-  'services.service.actions.run.compaction': 'Run Compaction',
-  'services.service.actions.run.smoke': 'Run Smoke Test',
-  'services.service.actions.maintenance': 'Maintenance',
-
-  'services.add.header': 'Add Service Wizard',
-
-  'host.singular': 'host',
-  'host.plural': 'hosts',
-
-  'hosts.host.start.popup.header': 'Confirmation',
-  'hosts.host.stop.popup.header': 'Confirmation',
-  'hosts.host.start.popup.body': 'Are you sure?',
-  'hosts.host.stop.popup.body': 'Are you sure?',
-  'hosts.assignedToRack.popup.body': 'Are you sure?',
-  'hosts.assignedToRack.popup.header': 'Confirmation',
-  'hosts.decommission.popup.body': 'Are you sure?',
-  '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}.',
-  'hosts.assignToRack.sure': 'Sure you want to assign {0} to {1}?',
-  'hosts.add.header': 'Add Host Wizard',
-  'hosts.add.step2.warning': 'Hosts are already part of the cluster and will be ignored',
-  'hosts.assignRack': 'Assign Rack',
-
-  'charts.horizon.chart.showText': 'show',
-  'charts.horizon.chart.hideText': 'hide',
-  'charts.horizon.chart.attributes.cpu': 'CPU',
-  'charts.horizon.chart.attributes.memory': 'Memory',
-  'charts.horizon.chart.attributes.network': 'Network',
-  'charts.horizon.chart.attributes.io': 'I/O',
+  'admin.audit.grid.date':"Date/Time",
+  'admin.audit.grid.category':"Category",
+  'admin.audit.grid.operationName':"Operation",
+  'admin.audit.grid.performedBy':"Performed By",
+  'admin.audit.grid.service':"Category",
+
+  'admin.authentication.form.method.database':'Use Ambari Database to authenticate users',
+  'admin.authentication.form.method.ldap':'Use LDAP/Active Directory to authenticate',
+  'admin.authentication.form.primaryServer':'Primary Server',
+  'admin.authentication.form.secondaryServer':'Secondary Server',
+  'admin.authentication.form.useSsl':'Use SSL',
+  'admin.authentication.form.bind.anonymously':"Bind Anonymously",
+  'admin.authentication.form.bind.useCrenedtials':"Use Credentials To Bind",
+  'admin.authentication.form.bindUserDN':'Bind User DN',
+  'admin.authentication.form.searchBaseDN':'Search Base DN',
+  'admin.authentication.form.usernameAttribute':'Username Attribute',
+
+  'admin.authentication.form.userDN':'User DN',
+  'admin.authentication.form.password':'Password',
+  'admin.authentication.form.configurationTest':'Configuration Test',
+  'admin.authentication.form.testConfiguration':'Test Configuration',
+
+  'admin.authentication.form.test.success':'The configuration passes the test',
+  'admin.authentication.form.test.fail':'The configuration fails the test',
+
+  'admin.security.title':'Kerberos Security has not been enabled on this cluster.',
+  'admin.security.button.enable':'Enable Kerberos Security on this cluster',
+
+  'admin.users.ldapAuthentionUsed':'LDAP Authentication is being used to authenticate users',
+  'admin.users.delete.yourself.message':'You can\'t delete yourself',
+  'admin.users.delete.yourself.header':'Deleting warning',
+
+  'admin.users.delete.header':'Delete {0}',
+
+  'admin.users.addButton':'Add Local User',
+  'admin.users.delete':'delete',
+  'admin.users.edit':'edit',
+  'admin.users.privileges':'Admin',
+  'admin.users.type':'Type',
+  'admin.users.action':'Action',
+  'admin.users.password':'Password',
+  'admin.users.passwordRetype':'Retype Password',
+  'admin.users.username':'Username',
+
+  'question.sure':'Are you sure?',
+  'yes':'Yes',
+  'no':'No',
+
+  'services.service.start':'Start',
+  'services.service.stop':'Stop',
+  'services.service.confirmation.header':'Confirmation',
+  'services.service.confirmation.body':'Are you sure?',
+  'services.service.summary.version':'Version',
+  'services.service.summary.nameNode':'NameNode Web UI',
+  'services.service.summary.nameNodeUptime':'NameNode Uptime',
+  'services.service.summary.nameNodeHeap':'NameNode Heap',
+  'services.service.summary.pendingUpgradeStatus':'Upgrade Status',
+  'services.service.summary.safeModeStatus':'Safe Mode Status',
+  'services.service.summary.dataNodes':'DataNodes',
+  'services.service.summary.diskCapacity':'HDFS Disk Capacity',
+  'services.service.summary.blocksTotal':'Blocks (total)',
+  'services.service.summary.blockErrors':'Block Errors',
+  'services.service.summary.totalFiles':'Total Files + Dirs',
+  'services.service.summary.jobTracker':'JobTracker',
+  'services.service.summary.jobTrackerWebUI':'JobTracker Web UI',
+  'services.service.summary.jobTrackerUptime':'JobTracker Uptime',
+  'services.service.summary.trackersLiveTotal':'Trackers',
+  'services.service.summary.trackersBlacklistGraylist':'Trackers',
+  'services.service.summary.jobTrackerHeap':'JobTracker Heap',
+  'services.service.summary.totalSlotsCapacity':'Total Slots Capacity',
+  'services.service.summary.totalJobs':'Total Jobs',
+  'services.service.summary.currentSlotUtiliMaps':'Map Slots',
+  'services.service.summary.currentSlotUtiliReduces':'Reduce Slots',
+  'services.service.summary.tasksMaps':'Tasks: Maps',
+  'services.service.summary.tasksReduces':'Tasks: Reduces',
+  'services.service.summary.hbaseMaster':'HBase Master Web UI',
+  'services.service.summary.regionServerCount':'Region Server Count',
+  'services.service.summary.regionInTransition':'Region In Transition',
+  'services.service.summary.masterStarted':'Master Started',
+  'services.service.summary.masterActivated':'Master Activated',
+  'services.service.summary.averageLoad':'Average Load',
+  'services.service.summary.masterHeap':'Master Heap',
+  'services.service.summary.moreStats':'more stats here',
+  'services.service.actions.run.rebalancer':'Run Rebalancer',
+  'services.service.actions.run.compaction':'Run Compaction',
+  'services.service.actions.run.smoke':'Run Smoke Test',
+  'services.service.actions.maintenance':'Maintenance',
+
+  'services.add.header':'Add Service Wizard',
+
+  'host.singular':'host',
+  'host.plural':'hosts',
+
+  'hosts.host.start.popup.header':'Confirmation',
+  'hosts.host.stop.popup.header':'Confirmation',
+  'hosts.host.start.popup.body':'Are you sure?',
+  'hosts.host.stop.popup.body':'Are you sure?',
+  'hosts.assignedToRack.popup.body':'Are you sure?',
+  'hosts.assignedToRack.popup.header':'Confirmation',
+  'hosts.decommission.popup.body':'Are you sure?',
+  '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}.',
+  'hosts.assignToRack.sure':'Sure you want to assign {0} to {1}?',
+  'hosts.add.header':'Add Host Wizard',
+  'hosts.add.step2.warning':'Hosts are already part of the cluster and will be ignored',
+  'hosts.assignRack':'Assign Rack',
+
+  'charts.horizon.chart.showText':'show',
+  'charts.horizon.chart.hideText':'hide',
+  'charts.horizon.chart.attributes.cpu':'CPU',
+  'charts.horizon.chart.attributes.memory':'Memory',
+  'charts.horizon.chart.attributes.network':'Network',
+  'charts.horizon.chart.attributes.io':'I/O',
 
   'metric.default':'combined',
   'metric.cpu':'cpu',
@@ -266,70 +274,70 @@ Em.I18n.translations = {
   'metric.io':'io',
   'metric.more':'more',
   'metric.more.cpu':'CPU',
-  'metric.more.disk': 'Disk',
-  'metric.more.load': 'Load',
+  'metric.more.disk':'Disk',
+  'metric.more.load':'Load',
   'metric.more.memory':'Memory',
-  'metric.more.network': 'Network',
-  'metric.more.process': 'Process',
+  'metric.more.network':'Network',
+  'metric.more.process':'Process',
 
-  'dashboard.services': 'Services',
-  'dashboard.services.hosts': 'Hosts',
-  'dashboard.services.uptime': '{0} days {1} hrs {2} mins',
-  'dashboard.services.hdfs.summary': '{0} of {1} nodes live, {2}% capacity free',
-  'dashboard.services.hdfs.nanmenode': 'NameNode',
-  'dashboard.services.hdfs.snanmenode': 'Secondary NameNode',
-  'dashboard.services.hdfs.capacity': 'HDFS Disk Capacity',
-  'dashboard.services.hdfs.capacityUsed': '{0} / {1} ({2}% used)',
-  'dashboard.services.hdfs.totalFilesAndDirs': 'Total Files + Directories',
-  'dashboard.services.hdfs.datanodes': 'DataNodes',
-  'dashboard.services.hdfs.datanodecounts': 'DataNodes Status',
-  'dashboard.services.hdfs.version': 'Version',
-  'dashboard.services.hdfs.nameNodeWebUI': 'NameNode Web UI',
-  'dashboard.services.hdfs.nodes.live': 'live',
-  'dashboard.services.hdfs.nodes.dead': 'dead',
-  'dashboard.services.hdfs.nodes.decom': 'decom',
-  'dashboard.services.hdfs.nodes.uptime': 'NameNode Uptime',
-  'dashboard.services.hdfs.nodes.heap': 'NameNode Heap',
-  'dashboard.services.hdfs.nodes.heapUsed': '{0} / {1} ({2}% used)',
-  'dashboard.services.hdfs.chart.label': 'Capacity (Free/Used)',
-
-  'dashboard.services.mapreduce.summary': '{0} of {1} trackers live, {2} jobs running, {3} jobs waiting',
-  'dashboard.services.mapreduce.taskTrackers': 'TaskTrackers',
-  'dashboard.services.mapreduce.taskTrackerCounts': 'TaskTrackers Status',
-  'dashboard.services.mapreduce.trackers': 'Trackers',
-  'dashboard.services.mapreduce.nodes.blacklist': 'blacklist',
-  'dashboard.services.mapreduce.nodes.graylist': 'graylist',
-  'dashboard.services.mapreduce.slotCapacity': 'Total Slots Capacity',
-  'dashboard.services.mapreduce.trackersSummary': '{0} live / {1} total',
-  'dashboard.services.mapreduce.jobs': 'Total Jobs',
-  'dashboard.services.mapreduce.jobsSummary': '{0} submitted / {1} completed',
-  'dashboard.services.mapreduce.mapSlots': 'Map Slots',
-  'dashboard.services.mapreduce.mapSlotsSummary': '{0} occuped / {1} reserved',
-  'dashboard.services.mapreduce.reduceSlots': 'Reduce Slots',
-  'dashboard.services.mapreduce.tasks.maps': 'Tasks: Maps',
-  'dashboard.services.mapreduce.tasks.reduces': 'Tasks: Reduces',
-  'dashboard.services.mapreduce.reduceSlotsSummary': '{0} occuped / {1} reserved',
-  'dashboard.services.mapreduce.tasksSummary': '{0} running / {1} waiting',
-  'dashboard.services.mapreduce.slotCapacitySummary': '{0} maps / {1} reduces / {2} avg per node',
-  'dashboard.services.mapreduce.jobTrackerHeap': 'JobTracker Heap',
-  'dashboard.services.mapreduce.jobTrackerHeapSummary': '{0} of {1} ({2}% used)',
-  'dashboard.services.mapreduce.jobTrackerUptime': 'Job Trackers Uptime',
-  'dashboard.services.mapreduce.chart.label': 'Jobs Running',
-
-  'dashboard.services.hbase.summary': '{0} of {1} region servers up, {2} average load',
-  'dashboard.services.hbase.masterServerHeap': 'Master Server Heap',
-  'dashboard.services.hbase.masterServerHeap.summary': '{0} of {1} ({2}% used)',
-  'dashboard.services.hbase.masterServerUptime': 'Master Server Uptime',
-  'dashboard.services.hbase.averageLoad': 'Average Load',
-  'dashboard.services.hbase.regionServers': 'Region Servers',
-  'dashboard.services.hbase.regionServersSummary': '{0} live / {1} total',
-  'dashboard.services.hbase.chart.label': 'Request Count',
-
-
-  'timeRange.presets.1hour': '1h',
-  'timeRange.presets.12hour': '12h',
-  'timeRange.presets.1day': '1d',
-  'timeRange.presets.1week': '1wk',
-  'timeRange.presets.1month': '1mo',
-  'timeRange.presets.1year': '1yr'
+  'dashboard.services':'Services',
+  'dashboard.services.hosts':'Hosts',
+  'dashboard.services.uptime':'{0} days {1} hrs {2} mins',
+  'dashboard.services.hdfs.summary':'{0} of {1} nodes live, {2}% capacity free',
+  'dashboard.services.hdfs.nanmenode':'NameNode',
+  'dashboard.services.hdfs.snanmenode':'Secondary NameNode',
+  'dashboard.services.hdfs.capacity':'HDFS Disk Capacity',
+  'dashboard.services.hdfs.capacityUsed':'{0} / {1} ({2}% used)',
+  'dashboard.services.hdfs.totalFilesAndDirs':'Total Files + Directories',
+  'dashboard.services.hdfs.datanodes':'DataNodes',
+  'dashboard.services.hdfs.datanodecounts':'DataNodes Status',
+  'dashboard.services.hdfs.version':'Version',
+  'dashboard.services.hdfs.nameNodeWebUI':'NameNode Web UI',
+  'dashboard.services.hdfs.nodes.live':'live',
+  'dashboard.services.hdfs.nodes.dead':'dead',
+  'dashboard.services.hdfs.nodes.decom':'decom',
+  'dashboard.services.hdfs.nodes.uptime':'NameNode Uptime',
+  'dashboard.services.hdfs.nodes.heap':'NameNode Heap',
+  'dashboard.services.hdfs.nodes.heapUsed':'{0} / {1} ({2}% used)',
+  'dashboard.services.hdfs.chart.label':'Capacity (Free/Used)',
+
+  'dashboard.services.mapreduce.summary':'{0} of {1} trackers live, {2} jobs running, {3} jobs waiting',
+  'dashboard.services.mapreduce.taskTrackers':'TaskTrackers',
+  'dashboard.services.mapreduce.taskTrackerCounts':'TaskTrackers Status',
+  'dashboard.services.mapreduce.trackers':'Trackers',
+  'dashboard.services.mapreduce.nodes.blacklist':'blacklist',
+  'dashboard.services.mapreduce.nodes.graylist':'graylist',
+  'dashboard.services.mapreduce.slotCapacity':'Total Slots Capacity',
+  'dashboard.services.mapreduce.trackersSummary':'{0} live / {1} total',
+  'dashboard.services.mapreduce.jobs':'Total Jobs',
+  'dashboard.services.mapreduce.jobsSummary':'{0} submitted / {1} completed',
+  'dashboard.services.mapreduce.mapSlots':'Map Slots',
+  'dashboard.services.mapreduce.mapSlotsSummary':'{0} occupied / {1} reserved',
+  'dashboard.services.mapreduce.reduceSlots':'Reduce Slots',
+  'dashboard.services.mapreduce.tasks.maps':'Tasks: Maps',
+  'dashboard.services.mapreduce.tasks.reduces':'Tasks: Reduces',
+  'dashboard.services.mapreduce.reduceSlotsSummary':'{0} occuped / {1} reserved',
+  'dashboard.services.mapreduce.tasksSummary':'{0} running / {1} waiting',
+  'dashboard.services.mapreduce.slotCapacitySummary':'{0} maps / {1} reduces / {2} avg per node',
+  'dashboard.services.mapreduce.jobTrackerHeap':'JobTracker Heap',
+  'dashboard.services.mapreduce.jobTrackerHeapSummary':'{0} of {1} ({2}% used)',
+  'dashboard.services.mapreduce.jobTrackerUptime':'Job Trackers Uptime',
+  'dashboard.services.mapreduce.chart.label':'Jobs Running',
+
+  'dashboard.services.hbase.summary':'{0} of {1} region servers up, {2} average load',
+  'dashboard.services.hbase.masterServerHeap':'Master Server Heap',
+  'dashboard.services.hbase.masterServerHeap.summary':'{0} of {1} ({2}% used)',
+  'dashboard.services.hbase.masterServerUptime':'Master Server Uptime',
+  'dashboard.services.hbase.averageLoad':'Average Load',
+  'dashboard.services.hbase.regionServers':'Region Servers',
+  'dashboard.services.hbase.regionServersSummary':'{0} live / {1} total',
+  'dashboard.services.hbase.chart.label':'Request Count',
+
+
+  'timeRange.presets.1hour':'1h',
+  'timeRange.presets.12hour':'12h',
+  'timeRange.presets.1day':'1d',
+  'timeRange.presets.1week':'1wk',
+  'timeRange.presets.1month':'1mo',
+  'timeRange.presets.1year':'1yr'
 };
\ No newline at end of file

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/form.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/form.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/form.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/form.js Sun Dec  9 13:22:27 2012
@@ -23,30 +23,35 @@ App.Form = Em.View.extend({
   /**
    * generating fields from fieldsOptions
    */
-  classNames: ["form-horizontal"],
-  i18nprefix: 'form.',
-  fields: [],
-  field: {},
-  messages: [],
-  object: false,
-  result: 0, // save result var (-1 - error; 0 - init; 1 - success)
-  templateName: require('templates/common/form'),
-  tagName: 'form',
+  classNames:["form-horizontal"],
+  i18nprefix:'form.',
+  fields:[],
+  field:{},
+  messages:[],
+  object:false,
+  result:0, // save result var (-1 - error; 0 - init; 1 - success)
+  templateName:require('templates/common/form'),
+  tagName:'form',
 
-  init: function () {
-    this._super();
+  init:function () {
     var thisForm = this;
-    if (!this.fields.length)
-      $.each(this.fieldsOptions,
-        function () {
-          var field = App.FormField.create(this);
+    console.warn("FIELDS LEN:", this.fields.length);
+
+    if (!this.fields.length) {
+      this.fieldsOptions.forEach(
+        function (options) {
+          var field = App.FormField.create(options);
+          console.warn("CREATED FIELD VALUE:", field.get('value'));
           field.set('form', thisForm);
           thisForm.fields.push(field);
           thisForm.set("field." + field.get('name'), field);
-        });
+        }
+      );
+    }
+    this._super();
   },
 
-  getField: function (name) {
+  getField:function (name) {
     var field = false;
     $.each(this.fields, function () {
       if (this.get('name') == name) {
@@ -56,7 +61,7 @@ App.Form = Em.View.extend({
     return field;
   },
 
-  isValid: function () {
+  isValid:function () {
     var isValid = true;
     $.each(this.fields, function () {
       this.validate();
@@ -69,12 +74,15 @@ App.Form = Em.View.extend({
     return isValid;
   },
 
-  isObjectNew: function () {
+  isObjectNew:function () {
     var object = this.get('object');
+    if(object instanceof App.User){
+      return false;
+    }
     return !(object instanceof DS.Model && object.get('id'));
   }.property("object"),
 
-  updateValues: function () {
+  updateValues:function () {
     var object = this.get('object');
     if (object instanceof Em.Object) {
       $.each(this.fields, function () {
@@ -90,16 +98,17 @@ App.Form = Em.View.extend({
    *
    */
 
-  getValues: function () {
+  getValues:function () {
     var values = {};
-    $.each(this.fields, function () {
-      if (!(this.get('displayType') == 'password' && validator.empty(this.get('value')))) // if this is not empty password field
+    $.each(this.get('fields'), function () {
+      if (!(this.get('displayType') == 'password' && validator.empty(this.get('value')))) { // if this is not empty password field
         values[this.get('name')] = this.get('value');
+      }
     });
     return values;
   },
 
-  clearValues: function () {
+  clearValues:function () {
     $.each(this.fields, function () {
       this.set('value', '');
     });
@@ -109,7 +118,7 @@ App.Form = Em.View.extend({
    * need to refactor for integration
    * @return {Boolean}
    */
-  save: function () {
+  save:function () {
     var thisForm = this;
     var object = this.get('object');
     if (!this.get('isObjectNew')) {
@@ -129,7 +138,18 @@ App.Form = Em.View.extend({
     return true;
   },
 
-  resultText: function () {
+  visibleFields:function () {
+    var fields = this.get('fields');
+    var visible = [];
+    fields.forEach(function (field) {
+      if (!field.get('isHiddenField')) {
+        visible.push(field);
+      }
+    });
+    return visible;
+  }.property('fields'),
+
+  resultText:function () {
     var text = "";
     switch (this.get('result')) {
       case -1:
@@ -143,7 +163,7 @@ App.Form = Em.View.extend({
     return text;
   }.property('result'),
 
-  saveButtonText: function () {
+  saveButtonText:function () {
     return Em.I18n.t(this.get('i18nprefix') + (this.get('isObjectNew') ? "create" : "save"));
   }.property('isObjectNew')
 
@@ -154,24 +174,31 @@ App.Form = Em.View.extend({
 });
 
 App.FormField = Em.Object.extend({ // try to realize this as view
-  name: '',
-  displayName: '',
+  name:'',
+  displayName:'',
 //  defaultValue:'', NOT REALIZED YET
-  description: '',
-  disabled: false,
-  displayType: 'string', // string, digits, number, directories, textarea, checkbox
-  disableRequiredOnPresent: false,
-  errorMessage: '',
-  form: false,
-  isRequired: true, // by default a config property is required
-  unit: '',
-  value: '',
+  description:'',
+  disabled:false,
+  displayType:'string', // string, digits, number, directories, textarea, checkbox
+  disableRequiredOnPresent:false,
+  errorMessage:'',
+  form:false,
+  isRequired:true, // by default a config property is required
+  unit:'',
+  value:'',
+
+  observeValue:function () {
+
+    if (this.get('displayType') == 'hidden')
+      console.warn(" FORM FIELD VALUE: ", this.get('value'));
 
-  isValid: function () {
+  }.observes('value'),
+
+  isValid:function () {
     return this.get('errorMessage') === '';
   }.property('errorMessage'),
 
-  viewClass: function () {
+  viewClass:function () {
     var options = {};
     var element = Em.TextField;
     switch (this.get('displayType')) {
@@ -192,12 +219,15 @@ App.FormField = Em.Object.extend({ // tr
       case 'textarea':
         element = Em.TextArea;
         break;
+      case 'hidden':
+        options.type = "hidden";
+        break;
     }
 
     return element.extend(options);
   }.property('displayType'),
 
-  validate: function () {
+  validate:function () {
     var digitsRegex = /^\d+$/;
     var numberRegex = /^[-,+]?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/;
     var value = this.get('value');
@@ -260,5 +290,9 @@ App.FormField = Em.Object.extend({ // tr
     if (!isError) {
       this.set('errorMessage', '');
     }
-  }.observes('value')
+  }.observes('value'),
+
+  isHiddenField:function () {
+    return this.get('displayType') == 'hidden';
+  }.property('type')
 });
\ No newline at end of file

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=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js Sun Dec  9 13:22:27 2012
@@ -18,6 +18,7 @@
 
 
 var App = require('app');
+var misc = require('utils/misc');
 
 App.Host = DS.Model.extend({
   hostName: DS.attr('string'),
@@ -27,7 +28,7 @@ App.Host = DS.Model.extend({
   memory: DS.attr('string'),
   diskUsage: DS.attr('string'),
   loadAvg: DS.attr('string'),
-  os: DS.attr('string'),
+  osArch: DS.attr('string'),
   ip: DS.attr('string'),
   healthStatus: DS.attr('string'),
   cpuUsage: DS.attr('number'),
@@ -38,7 +39,12 @@ App.Host = DS.Model.extend({
   osType: DS.attr("string"),
   diskInfo: DS.attr('string'),
 
-
+  /**
+   * formatted bytes to appropriate value
+   */
+  memoryFormatted: function () {
+    return misc.formatBandwidth(this.get('memory'));
+  }.property('memory'),
   /**
    * Return true if host not heartbeating last 180 seconds
    */

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/run.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/run.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/run.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/run.js Sun Dec  9 13:22:27 2012
@@ -55,7 +55,6 @@ App.Run = DS.Model.extend({
   isRunning: function () {
     return !this.get('numJobsTotal') == this.get('numJobsCompleted');
   }.property('numJobsTotal', 'numJobsCompleted'),
-
   /**
    * Sum of input bandwidth for all jobs with appropriate measure
    */
@@ -85,7 +84,21 @@ App.Run = DS.Model.extend({
    */
   lastUpdateTimeFormatted: function() {
     return date.dateFormat(this.get('lastUpdateTime'));
-  }.property('lastUpdateTime')
+  }.property('lastUpdateTime'),
+  /**
+   * Type value based on first part of id
+   */
+  type: function() {
+    if (this.get('id').indexOf('pig_') === 0) {
+      return 'Pig';
+    }
+    if (this.get('id').indexOf('hive_') === 0) {
+      return 'Hive';
+    }
+    if (this.get('id').indexOf('mr_') === 0) {
+      return 'mapReduce';
+    }
+  }.property('id')
 });
 
 App.Run.FIXTURES = [];

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service/mapreduce.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service/mapreduce.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service/mapreduce.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service/mapreduce.js Sun Dec  9 13:22:27 2012
@@ -38,7 +38,8 @@ App.MapReduceService = App.Service.exten
   mapsRunning: DS.attr('number'),
   mapsWaiting: DS.attr('number'),
   reducesRunning: DS.attr('number'),
-  reducesWaiting: DS.attr('number')
+  reducesWaiting: DS.attr('number'),
+  trackersDecommisioned: DS.attr('number')
 });
 
 App.MapReduceService.FIXTURES = [];

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/user.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/user.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/user.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/user.js Sun Dec  9 13:22:27 2012
@@ -26,17 +26,17 @@ App.UserModel = Em.Object.extend({
 
 App.User = DS.Model.extend({
   userName:DS.attr('string'),
-  password:DS.attr('string'),
   roles:DS.attr('string'),
+  type:DS.attr('string'),
   auditItems:DS.hasMany('App.ServiceAudit'),
-  admin: function () {
+  admin:function () {
     return !!(/^admin/.test(this.get('roles')))
   }.property('userName')
 });
 
 App.UserForm = App.Form.extend({
   className:App.User,
-  object: function(){
+  object:function () {
     return App.router.get('mainAdminUserEditController.content');
   }.property('App.router.mainAdminUserEditController.content'),
 
@@ -44,7 +44,8 @@ App.UserForm = App.Form.extend({
     { name:"userName", displayName:"Username" },
     { name:"password", displayName:"Password", displayType:"password", isRequired: function(){ return this.get('form.isObjectNew'); }.property('form.isObjectNew') },
     { name:"passwordRetype", displayName:"Retype Password", displayType:"password", validator:"passwordRetype", isRequired: false },
-    { name:"admin", displayName:"Admin", displayType:"checkbox", isRequired:false }
+    { name:"admin", displayName:"Admin", displayType:"checkbox", isRequired:false },
+    { name:"roles", displayName:"Role", isRequired:false, isHidden:true }
   ],
   fields:[],
   disableUsername:function () {
@@ -61,64 +62,70 @@ App.UserForm = App.Form.extend({
     }
   }.observes('isObjectNew'),
 
-  isValid: function(){
+  getValues:function () {
+    var values = this._super();
+    values.type = ['local'];
+    return values;
+  },
+
+  isValid:function () {
     var isValid = this._super();
     thisForm = this;
 
     var passField = this.get('field.password');
     var passRetype = this.get('field.passwordRetype');
 
-    if(!validator.empty(passField.get('value'))) {
-      if(passField.get('value') != passRetype.get('value')) {
+    if (!validator.empty(passField.get('value'))) {
+      if (passField.get('value') != passRetype.get('value')) {
         passRetype.set('errorMessage', "Passwords are different");
         isValid = false;
       }
     }
 
-    if(isValid && this.get('isObjectNew')) {
+    if (isValid && this.get('isObjectNew')) {
       var users = App.User.find();
       var userNameField = this.getField('userName');
       var userName = userNameField.get('value');
 
-      users.forEach(function(user){
-        if(userName == user.get('userName')) {
+      users.forEach(function (user) {
+        if (userName == user.get('userName')) {
           userNameField.set('errorMessage', 'User with the same name is already exists');
           return isValid = false;
         }
       });
     }
-    
+
     return isValid;
   }
 });
 App.User.FIXTURES = [];
 /*
-App.User.FIXTURES = [
-  {
-    id:1,
-    user_name:'admin',
-    password:'admin',
-    admin:1
-  },
-  {
-    id:2,
-    user_name:'vrossi',
-    admin:1
-  },
-  {
-    id:3,
-    user_name:'casey.stoner',
-    admin:0
-  },
-  {
-    id:4,
-    user_name:'danip',
-    admin:0
-  },
-  {
-    id:5,
-    user_name:'test',
-    password:'test',
-    admin:0
-  }
-];*/
\ No newline at end of file
+ App.User.FIXTURES = [
+ {
+ id:1,
+ user_name:'admin',
+ password:'admin',
+ admin:1
+ },
+ {
+ id:2,
+ user_name:'vrossi',
+ admin:1
+ },
+ {
+ id:3,
+ user_name:'casey.stoner',
+ admin:0
+ },
+ {
+ id:4,
+ user_name:'danip',
+ admin:0
+ },
+ {
+ id:5,
+ user_name:'test',
+ password:'test',
+ admin:0
+ }
+ ];*/

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=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/router.js Sun Dec  9 13:22:27 2012
@@ -102,11 +102,18 @@ App.Router = Em.Router.extend({
     App.db.setLoginName(loginName);
   },
 
-  // that works incorrectly
+  /**
+   * Set user model to local storage
+   * @param user
+   */
   setUser: function (user) {
     App.db.setUser(user);
   },
-  // that works incorrectly
+
+  /**
+   * Get user model from local storage
+   * @return {*}
+   */
   getUser: function () {
     return App.db.getUser();
   },
@@ -221,19 +228,14 @@ App.Router = Em.Router.extend({
     }
   },
 
-  defaultSection: 'installer',
-
   getSection: function () {
-    var section = App.db.getSection();
-    console.log("The section is: " + section);
-    var section = localStorage.getItem(this.getLoginName() + 'section');
-
-    return section || this.defaultSection;
-
-  },
-
-  setSection: function (section) {
-    App.db.setSection(section);
+    var clusterController = App.router.get('clusterController');
+    clusterController.loadClusterName(false);
+    if (clusterController.get('clusterName')) {
+      return 'main.index';
+    } else {
+      return 'installer';
+    }
   },
 
   root: Em.Route.extend({

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=1418938&r1=1418937&r2=1418938&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 Sun Dec  9 13:22:27 2012
@@ -132,7 +132,6 @@ module.exports = Em.Route.extend({
       addHostController.saveServices(wizardStep4Controller);
       addHostController.saveClients(wizardStep4Controller);
       App.db.setMasterComponentHosts(undefined);
-      App.db.setHostToMasterComponent(undefined);
       router.transitionTo('step4');
     }
   }),

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js Sun Dec  9 13:22:27 2012
@@ -50,7 +50,6 @@ module.exports = Em.Route.extend({
       addServiceController.saveServices(wizardStep4Controller);
       addServiceController.saveClients(wizardStep4Controller);
       App.db.setMasterComponentHosts(undefined);
-      App.db.setHostToMasterComponent(undefined);
       router.transitionTo('step2');
     }
   }),
@@ -72,6 +71,7 @@ module.exports = Em.Route.extend({
       var wizardStep5Controller = router.get('wizardStep5Controller');
       addServiceController.saveMasterComponentHosts(wizardStep5Controller);
       App.db.setSlaveComponentHosts(undefined);
+      App.db.setHostSlaveComponents(undefined);
       router.transitionTo('step3');
     }
   }),
@@ -92,6 +92,7 @@ module.exports = Em.Route.extend({
 
       if (wizardStep6Controller.validate()) {
         addServiceController.saveSlaveComponentHosts(wizardStep6Controller);
+        addServiceController.get('content').set('serviceConfigProperties', null);
         App.db.setServiceConfigProperties(null);
         router.transitionTo('step4');
       }
@@ -140,7 +141,6 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router, context) {
       console.log('in addService.step6:connectOutlets');
       var controller = router.get('addServiceController');
-      controller.setInfoForStep9();
       controller.setCurrentStep('6', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep9', controller.get('content'));
@@ -149,13 +149,16 @@ module.exports = Em.Route.extend({
     retry: function(router,context) {
       var addServiceController = router.get('addSrviceController');
       var wizardStep9Controller = router.get('wizardStep9Controller');
-      addServiceController.installServices();
-      wizardStep9Controller.navigateStep();
+      if (!wizardStep9Controller.get('isSubmitDisabled')) {
+        addServiceController.installServices();
+        addServiceController.setInfoForStep9();
+        wizardStep9Controller.navigateStep();
+      }
     },
     next: function (router) {
       var addServiceController = router.get('addServiceController');
       var wizardStep9Controller = router.get('wizardStep9Controller');
-      addServiceController.saveClusterInfo(wizardStep9Controller);
+      //addServiceController.saveClusterInfo(wizardStep9Controller);
       addServiceController.saveInstalledHosts(wizardStep9Controller);
       router.transitionTo('step7');
     }
@@ -168,7 +171,7 @@ module.exports = Em.Route.extend({
       var controller = router.get('addServiceController');
       controller.setCurrentStep('7', false);
       controller.loadAllPriorSteps();
-      controller.connectOutlet('wizardStep10');
+      controller.connectOutlet('wizardStep10', controller.get('content'));
     },
     back: Em.Router.transitionTo('step6'),
     complete: 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=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js Sun Dec  9 13:22:27 2012
@@ -167,7 +167,6 @@ module.exports = Em.Route.extend({
       controller.saveClients(wizardStep4Controller);
 
       App.db.setMasterComponentHosts(undefined);
-      App.db.setHostToMasterComponent(undefined);
       router.transitionTo('step5');
     }
   }),
@@ -274,6 +273,7 @@ module.exports = Em.Route.extend({
       var wizardStep9Controller = router.get('wizardStep9Controller');
       if (!wizardStep9Controller.get('isSubmitDisabled')) {
         installerController.installServices();
+        installerController.setInfoForStep9();
         wizardStep9Controller.navigateStep();
       }
     },
@@ -299,8 +299,7 @@ module.exports = Em.Route.extend({
     complete: function (router, context) {
       if (true) {   // this function will be moved to installerController where it will validate
         var controller = router.get('installerController');
-        controller.setCurrentStep('1', false);
-        router.setSection('main');
+        controller.finish();
         router.transitionTo('main.index');
       } else {
         console.log('cluster installation failure');

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=1418938&r1=1418937&r2=1418938&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 Sun Dec  9 13:22:27 2012
@@ -21,6 +21,7 @@ module.exports = Em.Route.extend({
   enter:function (router) {
     console.log('in /main:enter');
     if (router.getAuthenticated()) {
+      var clusterController = App.router.get('clusterController').loadClusterName(false);
       router.get('mainController').initialize();
       // TODO: redirect to last known state
     } else {

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=1418938&r1=1418937&r2=1418938&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:22:27 2012
@@ -487,7 +487,7 @@ a:focus {
     .name {
       line-height: 21px;
       margin-left: 0;
-      width: 130px;
+      width: 145px;
       a {
         margin-left: 5px
       }
@@ -510,13 +510,21 @@ a:focus {
       }
     }
 
-    .chart {
+    .dashboard-mini-chart {
       right: 0;
       top: 27px;
       position: absolute;
       overflow: visible; // for quick links
       text-align: center;
-
+      width: 200px;
+      height: 200px;
+      .chart-container{
+        .chart-x-axis{
+          left: 0%;
+          width: 100%;
+          text-align: left;
+        }
+      } 
       .chartLabel {
         font-size: 11px;
         color: #7b7b7b;
@@ -662,6 +670,14 @@ a:focus {
   }
 }
 
+.mini-chart{
+  position: absolute;
+  .chart-container{
+    width: 130px;
+    height: 130px;
+  }
+}
+
 /*end chart/graph styles*/
 
 /*****end styles for dashboard page*****/
@@ -694,6 +710,9 @@ a:focus {
     }
     li {
       line-height: 24px;
+      a {
+        padding: 3px 10px;
+      }
     }
   }
   .add-service-button {
@@ -913,6 +932,7 @@ a:focus {
 
   margin-top: 27px;
 
+  /*
   .component-operation-button {
     background-color: #E5E5E5;
     background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#F1F1F1));
@@ -923,6 +943,7 @@ a:focus {
     background-repeat: repeat-x;
     color: #000000;
   }
+  */
   .caret {
     border-top-color: #000000;
     border-bottom-color: #000000;
@@ -1006,7 +1027,7 @@ a:focus {
     padding-bottom: 0;
     border: 1px solid #DEDEDE;
     border-radius: 4px;
-    background: #F5F5F5;
+    background: #FFF;
   }
   .host-components .btn-group {
     margin: 0 5px 10px 0;

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/apps.less
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/apps.less?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/apps.less (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/apps.less Sun Dec  9 13:22:27 2012
@@ -1,4 +1,5 @@
 #apps{
+
   td .red {
     color: red;
   }
@@ -6,15 +7,27 @@
     vertical-align:top;
   }
   .avg-table {
+    table-layout: fixed;
     background-color: #F9F9F9;
     td {
       text-align:center;
       border:none;
+      &.avg-star{
+        border-left:1px solid #DDD;
+        width: 30px;
+      }
     }
   }
-  td.avg-star{
-    border-left:1px solid #DDD;
+
+  #dataTable {
+    table-layout: fixed;
+    td {
+      &.appId {
+        word-wrap: break-word;
+      }
+    }
   }
+
   .dropdown-menu label.checkbox {
     margin-left: 10px;
   }
@@ -126,7 +139,9 @@
   tr.containerRow > td{
     background: #f9f9f9;
   }
-
+  button {
+    margin: 0 2px;
+  }
   svg{
     vertical-align: top; //remove extra spaces after svg element
   }
@@ -141,6 +156,7 @@
     background: #fff;
     padding: 10px;
     box-sizing: border-box;
+    width: auto;
   }
 
   #jobs h2{
@@ -172,5 +188,29 @@
     }
   }
 
+  div.view-wrapper {
+    float: left;
+  }
+
+  a.ui-icon-circle-close {
+    float: right;
+    opacity: 0.2;
+    padding: 1px;
+    position: relative;
+    top: -32px;
+    &:hover {
+      opacity: 0.7;
+    }
+  }
+  .notActive {
+    a.ui-icon-circle-close {
+      visibility: hidden;
+    }
+  }
+}
+.btn-group button.single-btn-group{
+  -webkit-border-radius: 4px;
+  border-radius: 4px;
+  -moz-border-radius: 4px;
 }
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/admin/user.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/admin/user.hbs?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/admin/user.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/admin/user.hbs Sun Dec  9 13:22:27 2012
@@ -17,14 +17,15 @@
 }}
 
 {{#if view.ldapUser}}
-  <p class="text-info">{{t admin.users.ldapAuthentionUsed}}.</p>
+<p class="text-info">{{t admin.users.ldapAuthentionUsed}}.</p>
 {{else}}
 <table class="table table-bordered table-striped span6">
   <thead>
   <tr>
     <th style="width:50%">{{t admin.users.username}}</th>
-    <th style="width:15%">{{t admin.users.privileges}}<i class="icon-question-sign"></i></th>
-    <th style="width:15%">Action</th>
+    <th style="width:10%">{{t admin.users.privileges}}</th>
+    <th style="width:20%">{{t admin.users.type}}</th>
+    <th style="width:20%">{{t admin.users.action}}</th>
   </tr>
   </thead>
   <tbody>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/admin/user/edit.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/admin/user/edit.hbs?rev=1418938&r1=1418937&r2=1418938&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/admin/user/edit.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/admin/user/edit.hbs Sun Dec  9 13:22:27 2012
@@ -18,6 +18,7 @@
 
 <form class="form-horizontal">
   {{#each field in view.userForm.fields}}
+  {{#unless field.isHidden}}
   <div class="control-group">
     <label class="control-label" for="input{{unbound field.name}}">{{unbound field.displayName}}</label>
     <div class="controls">
@@ -25,6 +26,7 @@
       <span class="help-inline">{{field.errorMessage}}</span>
     </div>
   </div>
+  {{/unless}}
   {{/each}}
   <div class="control-group">
     <div class="controls">