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 12:53:23 UTC

svn commit: r1418895 [3/5] - in /incubator/ambari/branches/AMBARI-666: ./ ambari-web/ ambari-web/app/ ambari-web/app/assets/data/alerts/ ambari-web/app/assets/data/background_operations/ ambari-web/app/assets/data/dashboard/ ambari-web/app/assets/data/...

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -116,33 +116,33 @@ App.WizardStep9Controller = Em.Controlle
           case 'PENDING':
             return 'Preparing to install ' + task.role;
           case 'QUEUED' :
-            return task.role + ' is Queued for installation';
+            return task.role + ' is queued for installation';
           case 'IN_PROGRESS':
             return 'Installing ' + task.role;
           case 'COMPLETED' :
             return 'Successfully installed ' + task.role;
           case 'FAILED':
-            return 'Faliure in installing ' + task.role;
+            return 'Failed to install ' + task.role;
         }
       case 'UNINSTALL':
         switch (task.status) {
           case 'PENDING':
             return 'Preparing to uninstall ' + task.role;
           case 'QUEUED' :
-            return task.role + ' is Queued for uninstallation';
+            return task.role + ' is queued for uninstallation';
           case 'IN_PROGRESS':
-            return 'Unnstalling ' + task.role;
+            return 'Uninstalling ' + task.role;
           case 'COMPLETED' :
             return 'Successfully uninstalled ' + task.role;
           case 'FAILED':
-            return 'Faliure in uninstalling ' + task.role;
+            return 'Failed to uninstall ' + task.role;
         }
       case 'START' :
         switch (task.status) {
           case 'PENDING':
             return 'Preparing to start ' + task.role;
           case 'QUEUED' :
-            return task.role + ' is Queued for starting';
+            return task.role + ' is queued for starting';
           case 'IN_PROGRESS':
             return 'Starting ' + task.role;
           case 'COMPLETED' :
@@ -153,13 +153,13 @@ App.WizardStep9Controller = Em.Controlle
       case 'STOP' :
         switch (task.status) {
           case 'PENDING':
-            return 'Preparing to stop ' + role;
+            return 'Preparing to stop ' + task.role;
           case 'QUEUED' :
-            return task.role + ' is Queued for stopping';
+            return task.role + ' is queued for stopping';
           case 'IN_PROGRESS':
             return 'Stopping ' + task.role;
           case 'COMPLETED' :
-            return role + ' stoped successfully';
+            return role + ' stopped successfully';
           case 'FAILED':
             return role + ' failed to stop';
         }
@@ -168,7 +168,7 @@ App.WizardStep9Controller = Em.Controlle
           case 'PENDING':
             return 'Preparing to execute' + task.role;
           case 'QUEUED' :
-            return task.role + ' is Queued for execution';
+            return task.role + ' is queued for execution';
           case 'IN_PROGRESS':
             return 'Execution of ' + task.role + ' in progress';
           case 'COMPLETED' :
@@ -181,7 +181,7 @@ App.WizardStep9Controller = Em.Controlle
           case 'PENDING':
             return 'Preparing to abort ' + task.role;
           case 'QUEUED' :
-            return task.role + ' is Queued for Aborting';
+            return task.role + ' is queued for aborting';
           case 'IN_PROGRESS':
             return 'Aborting ' + task.role;
           case 'COMPLETED' :
@@ -500,7 +500,7 @@ App.WizardStep9Controller = Em.Controlle
   getUrl: function () {
     var clusterName = this.get('content.cluster.name');
     var requestId = App.db.getClusterStatus().requestId;
-    var url = '/api/clusters/' + clusterName + '/requests/' + requestId;
+    var url = '/api/clusters/' + clusterName + '/requests/' + requestId + '?fields=tasks/*';
     console.log("URL for step9 is: " + url);
     return url;
   },

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js?rev=1418895&r1=1418894&r2=1418895&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/service_components.js Sun Dec  9 11:53:15 2012
@@ -45,7 +45,7 @@ module.exports = new Ember.Set([
   {
     service_name: 'HDFS',
     component_name: 'HDFS_CLIENT',
-    display_name: 'Hadoop Client',
+    display_name: 'HDFS Client',
     isMaster: false,
     isClient: true,
     description: 'Client component for HDFS'

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js?rev=1418895&r1=1418894&r2=1418895&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js Sun Dec  9 11:53:15 2012
@@ -19,8 +19,8 @@
 
 window.App = require('app');
 
-//App.testMode = true;
-App.testMode = false;
+App.testMode = true;
+//App.testMode = false;
 
 require('messages');
 require('utils/data_table');
@@ -31,6 +31,11 @@ require('controllers');
 require('views');
 require('router');
 
+require('mappers/server_data_mapper');
+require('mappers/services_mapper');
+
+require('utils/http_client');
+
 App.initialize();
 
 console.log('after initialize');

Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/alerts_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/alerts_mapper.js?rev=1418895&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/alerts_mapper.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/alerts_mapper.js Sun Dec  9 11:53:15 2012
@@ -0,0 +1,35 @@
+/**
+ * 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.
+ */
+
+//todo: refactor it
+App.alertsMapper = App.ServerDataMapper.create({
+  map: function (json) {
+    if (json.alerts) {
+      $.each(json.alerts, function (i, _alert) {
+        var alert = App.store.createRecord(App.Alert, {
+          alertId: _alert.service_description,
+          title: _alert.service_description,
+          serviceType: _alert.service_type,
+          date: new Date(_alert.last_hard_state_change * 1000),
+          status: _alert.current_state,
+          message: _alert.plugin_output
+        });
+      });
+    }
+  }
+});

Added: 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=1418895&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js Sun Dec  9 11:53:15 2012
@@ -0,0 +1,38 @@
+/**
+ * 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.
+ */
+
+//todo: refactor it
+App.hostsMapper = App.ServerDataMapper.create({
+  map: function (json) {
+    if (json.items) {
+      json.items.forEach(function (data) {
+        if (data.Hosts) {
+          App.store.createRecord(App.Host, {
+            id: data.Hosts.host_name,
+            hostName: data.Hosts.host_name,
+            cpuCount: data.Hosts.cpu_count,
+            totalMem: data.Hosts.total_mem,
+            osArch: data.Hosts.os_arch,
+            osType: data.Hosts.os_type,
+            ip: data.Hosts.ip
+          });
+        }
+      });
+    }
+  }
+});

Added: 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=1418895&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/server_data_mapper.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/server_data_mapper.js Sun Dec  9 11:53:15 2012
@@ -0,0 +1,45 @@
+/**
+ * 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.ServerDataMapper = Em.Object.extend({
+  jsonKey: false,
+  map: function (json) {
+    if (json) {
+      var model = this.get('model');
+      var jsonKey = this.get('jsonKey');
+
+      if (jsonKey && json[jsonKey]) { // if data come as { hdfs: {...} }
+        json = json[jsonKey];
+      }
+
+      $.each(json, function (field, value) {
+        model.set(field, value);
+      })
+    }
+  }
+});
+
+
+App.QuickDataMapper = App.ServerDataMapper.extend({
+  config : {},
+  map : function(json){
+    //todo: move code here
+  }
+});

Added: 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=1418895&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js Sun Dec  9 11:53:15 2012
@@ -0,0 +1,116 @@
+/**
+ * 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.
+ */
+/*
+App.servicesMapper = App.ServerDataMapper.create({
+  map: function (json) {
+    if (json.items) {
+      json.items.forEach(function (data) {
+        if (data.ServiceInfo) {
+          var service = App.store.createRecord(App.Service, {
+            id: data.ServiceInfo.service_name.toLowerCase(),
+            serviceName: data.ServiceInfo.service_name.toLowerCase()
+          });
+
+          if (data.components) {
+            var components = service.get('components');
+            $.each(data.components, function (i, _component) {
+              if (_component.ServiceComponentInfo) {
+                var component = App.store.createRecord(App.ServiceComponent, {
+                  id: _component.ServiceComponentInfo.component_name,
+                  componentName: _component.ServiceComponentInfo.component_name
+                });
+                components.pushObject(component);
+
+                if (_component.host_components) {
+                  var hostComponents = component.get('hostComponents');
+                  $.each(_component.host_components, function (j, _hostComponent) {
+                    var _hostRoles = _hostComponent.HostRoles;
+                    var hostComponent = App.store.createRecord(App.HostComponent, {
+                      hostComponentId: _hostRoles.component_name + ":" + _hostRoles.host_name,
+                      host: App.Host.find(_hostRoles.host_name),
+                      hostName: _hostRoles.host_name,
+                      state: _hostRoles.state
+                    });
+                    hostComponents.pushObject(hostComponent);
+                  });
+                }
+              }
+            });
+          }
+        }
+      });
+    }
+  }
+});
+*/
+App.servicesMapper = App.QuickDataMapper.create({
+  config : {
+    id : 'ServiceInfo.service_name',
+    service_name : 'ServiceInfo.service_name',
+    components_key : 'components',
+    components : {
+        id : 'ServiceComponentInfo.component_name',
+        component_name : 'ServiceComponentInfo.component_name',
+        //service_id : 'ServiceComponentInfo.service_name',
+        service_name : 'ServiceComponentInfo.service_name',
+        state: 'host_components[0].HostRoles.state',
+        host_name: 'host_components[0].HostRoles.host_name'
+      }
+  },
+  map:function(json){
+    if(json.items){
+      var result = [];
+      json.items.forEach(function(item){
+        result.push(this.parseIt(item, this.config));
+      }, this)
+
+      App.store.loadMany(App.Service1, result);
+    }
+  },
+  parseIt : function(data, config){
+    var result = {};
+    for(var i in config){
+      if(i.substr(-4) !== '_key' && typeof config[i] == 'string'){
+        result[i] = this.getJsonProperty(data, config[i]);
+      } else if(typeof config[i] == 'object'){
+        result[i] = [];
+        var _data = data[config[i+'_key']];
+        var l = _data.length;
+        for(var index = 0; index<l; index++){
+          result[i].push(this.parseIt(_data[index], config[i]));
+        }
+      }
+    }
+    return result;
+  },
+  getJsonProperty:function(json, path){
+    var pathArr = path.split('.');
+    var current = json;
+    while(pathArr.length){
+      if(pathArr[0].substr(-1) == ']'){
+        var index = parseInt(pathArr[0].substr(-2,1));
+        var attr = pathArr[0].substr(0, pathArr[0].length-3);
+        current = current[attr][index];
+      } else {
+        current = current[pathArr[0]];
+      }
+      pathArr.splice(0,1);
+    }
+    return current;
+  }
+});

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -26,16 +26,16 @@ Em.I18n.translations = {
   'login.loginButton': 'Sign in',
   'login.error': 'Invalid username/password combination.',
 
-  'services.nagios.description': 'Nagios desc',
-  'services.ganglia.description': 'Ganglia desc',
-  'services.hdfs.description': 'HDFS desc',
-  'services.mapreduce.description': 'MapReduce desc',
-  'services.sqoop.description': 'Sqoop desc',
-  'services.pig.description': 'Pig desc',
-  'services.hive.description': 'Hive/HCat desc',
-  'services.oozie.description': 'Oozie desc',
+  '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': 'HBase 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',
 
@@ -57,7 +57,7 @@ Em.I18n.translations = {
   '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': 'Host Names cannot be left empty',
+  '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',
@@ -69,7 +69,7 @@ Em.I18n.translations = {
     '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.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. ' +
@@ -121,9 +121,9 @@ Em.I18n.translations = {
   'installer.step9.body': 'Wait to complete the cluster installation. Installing, Starting and Testing selected services',
   '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': 'tolerable failures encountered',
-  'installer.step9.host.status.failed': 'failures encountered',
+  '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',
@@ -230,6 +230,9 @@ Em.I18n.translations = {
 
   '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?',
@@ -243,6 +246,10 @@ Em.I18n.translations = {
   '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',
@@ -264,9 +271,6 @@ Em.I18n.translations = {
   'metric.more.network': 'Network',
   'metric.more.process': 'Process',
 
-  'hosts.add.header': 'Add Host Wizard',
-  'hosts.add.step2.warning': 'Hosts are already part of the cluster and will be ignored',
-
   'dashboard.services': 'Services',
   'dashboard.services.hosts': 'Hosts',
   'dashboard.services.uptime': '{0} days {1} hrs {2} mins',
@@ -306,6 +310,7 @@ Em.I18n.translations = {
   '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',

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models.js?rev=1418895&r1=1418894&r2=1418895&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models.js Sun Dec  9 11:53:15 2012
@@ -35,4 +35,5 @@ require('models/rack');
 require('models/job');
 require('models/run');
 require('models/app');
-require('models/background_operation');
\ No newline at end of file
+require('models/background_operation');
+require('models/protoRelations');

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/alert.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/alert.js?rev=1418895&r1=1418894&r2=1418895&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/alert.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/alert.js Sun Dec  9 11:53:15 2012
@@ -28,13 +28,13 @@ App.AlertStatus = {
  * which comes back from NAGIOS server.
  */
 App.Alert = DS.Model.extend({
-  title: DS.attr('string', {key: 'service_description'}),
-  serviceType: DS.attr('string', {key: 'service_type'}),
-  date: DS.attr('date', {key: 'last_hard_state_change'}),
-  status: DS.attr('string', {key: 'current_state'}),
-  message: DS.attr('string', {key: 'plugin_output'}),
-  primaryKey: 'last_hard_state_change',
-  alerts: DS.hasMany('App.Alert'),
+  alertId: DS.attr('string'),
+  title: DS.attr('string'),
+  serviceType: DS.attr('string'),
+  date: DS.attr('date'),
+  status: DS.attr('string'),
+  message: DS.attr('string'),
+  primaryKey: 'alertId',
 
   /**
    * Used to show correct icon in UI
@@ -113,104 +113,8 @@ App.Alert = DS.Model.extend({
  * RESTAdapter will contact server.
  */
 App.Alert.reopenClass({
-  url: "http://nagiosserver/hdp/nagios/nagios_alerts.php?q1=alerts&alert_type=all"
+//  url: "http://nagiosserver/hdp/nagios/nagios_alerts.php?q1=alerts&alert_type=all"
 });
 
 App.Alert.FIXTURES = [
-  {
-    id: 1,
-    title: 'Corrupt/Missing Block',
-    service_id: 1,
-    date: 'August 29, 2012 17:00',
-    status: 'corrupt',
-    message: 'message'
-  },
-  {
-    id: 2,
-    title: 'Corrupt/Missing Block',
-    service_id: 1,
-    date: 'August 30, 2012 17:00',
-    status: 'ok',
-    message: 'message'
-  },
-  {
-    id: 3,
-    title: 'Corrupt/Missing Block',
-    service_id: 2,
-    date: 'August 29, 2012 17:00',
-    status: 'corrupt',
-    message: 'message'
-  },
-  {
-    id: 4,
-    title: 'Corrupt/Missing Block',
-    service_id: 2,
-    date: 'August 30, 2012 17:00',
-    status: 'ok',
-    message: 'message'
-  },
-  {
-    id: 5,
-    title: 'Corrupt/Missing Block',
-    service_id: 3,
-    date: 'August 29, 2012 17:00',
-    status: 'corrupt',
-    message: 'message'
-  },
-  {
-    id: 6,
-    title: 'Corrupt/Missing Block',
-    service_id: 3,
-    date: 'August 30, 2012 17:00',
-    status: 'ok',
-    message: 'message'
-  },
-  {
-    id: 7,
-    title: 'Corrupt/Missing Block',
-    service_id: 4,
-    date: 'August 29, 2012 17:00',
-    status: 'corrupt',
-    message: 'message'
-  },
-  {
-    id: 8,
-    title: 'Corrupt/Missing Block',
-    service_id: 4,
-    date: 'August 30, 2012 17:00',
-    status: 'ok',
-    message: 'message'
-  },
-  {
-    id: 9,
-    title: 'Corrupt/Missing Block',
-    service_id: 5,
-    date: 'August 29, 2012 17:00',
-    status: 'corrupt',
-    message: 'message'
-  },
-  {
-    id: 10,
-    title: 'Corrupt/Missing Block',
-    service_id: 5,
-    date: 'August 30, 2012 17:00',
-    status: 'ok',
-    message: 'message'
-  },
-  {
-    id: 11,
-    title: 'Corrupt/Missing Block',
-    service_id: 6,
-    date: 'August 29, 2012 17:00',
-    status: 'corrupt',
-    message: 'message'
-  },
-  {
-    id: 12,
-    title: 'Corrupt/Missing Block',
-    service_id: 6,
-    date: 'August 30, 2012 17:00',
-    status: 'ok',
-    message: 'message'
-  }
 ];

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/app.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/app.js?rev=1418895&r1=1418894&r2=1418895&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/app.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/app.js Sun Dec  9 11:53:15 2012
@@ -25,13 +25,7 @@ App.App = DS.Model.extend({
   numJobsTotal: DS.attr('number'),
   userName: DS.attr('string'),
   executionTime: DS.attr('string'),
-  runs: DS.hasMany('App.Run'),
-  isRunning: function () {
-    if (!this.get('isLoaded')) {
-      return false;
-    }
-    return this.get('runs').someProperty('isRunning', true);
-  }.property('runs.@each.isRunning')
+  runs: DS.hasMany('App.Run')
 });
 
 App.App.FIXTURES = [

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/job.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/job.js?rev=1418895&r1=1418894&r2=1418895&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/job.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/job.js Sun Dec  9 11:53:15 2012
@@ -19,6 +19,7 @@
 
 var App = require('app');
 var date = require('utils/date');
+var misc = require('utils/misc');
 
 App.Job = DS.Model.extend({
   jobId:DS.attr('string'),
@@ -51,7 +52,21 @@ App.Job = DS.Model.extend({
     return date.dateFormatInterval(parseInt((parseInt(this.get('finishTime')) - parseInt(this.get('launchTime')))/1000));
   }.property('launchTime', 'finishTime'),
   jobTimeline:DS.attr('string'),
-  jobTaskview:DS.attr('string')
+  jobTaskview:DS.attr('string'),
+  /**
+   *  Sum of input bandwidth for all jobs with appropriate measure
+   */
+  inputFormatted: function () {
+    var input = this.get('input');
+    return misc.formatBandwidth(input);
+  }.property('input'),
+  /**
+   *  Sum of output bandwidth for all jobs with appropriate measure
+   */
+  outputFormatted: function () {
+    var output = this.get('output');
+    return misc.formatBandwidth(output);
+  }.property('output')
 });
 
 App.Job.FIXTURES = [
@@ -83,8 +98,8 @@ App.Job.FIXTURES = [
     job_counters:null,
     job_timeline:'[[{"x":0,"y":0},{"x":1,"y":0},{"x":2,"y":0},{"x":3,"y":0},{"x":4,"y":0},{"x":5,"y":0},{"x":6,"y":0},{"x":7,"y":0},{"x":8,"y":0},{"x":9,"y":0},{"x":10,"y":0},{"x":11,"y":0},{"x":12,"y":0},{"x":13,"y":0},{"x":14,"y":0},{"x":15,"y":0},{"x":16,"y":0},{"x":17,"y":0},{"x":18,"y":0},{"x":19,"y":0},{"x":20,"y":0},{"x":21,"y":0},{"x":22,"y":0},{"x":23,"y":0},{"x":24,"y":0},{"x":25,"y":0},{"x":26,"y":0},{"x":27,"y":0},{"x":28,"y":0},{"x":29,"y":0},{"x":30,"y":0},{"x":31,"y":0},{"x":32,"y":0},{"x":33,"y":0},{"x":34,"y":0},{"x":35,"y":0},{"x":36,"y":0},{"x":37,"y":0},{"x":38,"y":0},{"x":39,"y":0},{"x":40,"y":0},{"x":41,"y":0},{"x":42,"y":0},{"x":43,"y":0},{"x":44,"y":0},{"x":45,"y":0},{"x":46,"y":0},{"x":47,"y":0},{"x":48,"y":0},{"x":49,"y":0},{"x":50,"y":0},{"x":51,"y":0},{"x":52,"y":0},{"x":53,"y":0},{"x":54,"y":0},{"x":55,"y":0},{"x":56,"y":0},{"x":57,"y":0},{"x":58,"y":0},{"x":59,"y":0},{"x":60,"y":0},{"x":61,"y":0},{"x":62,"y":0},{"x":63,"y":0},{"x":64,"y":0},{"x"
 :65,"y":0},{"x":66,"y":0},{"x":67,"y":0},{"x":68,"y":0},{"x":69,"y":0},{"x":70,"y":0},{"x":71,"y":0},{"x":72,"y":0},{"x":73,"y":0},{"x":74,"y":0},{"x":75,"y":0},{"x":76,"y":0},{"x":77,"y":0},{"x":78,"y":0},{"x":79,"y":0},{"x":80,"y":0},{"x":81,"y":0},{"x":82,"y":0},{"x":83,"y":0},{"x":84,"y":0},{"x":85,"y":0},{"x":86,"y":0},{"x":87,"y":0},{"x":88,"y":0},{"x":89,"y":0},{"x":90,"y":0},{"x":91,"y":0},{"x":92,"y":0},{"x":93,"y":0},{"x":94,"y":0},{"x":95,"y":0},{"x":96,"y":0},{"x":97,"y":0},{"x":98,"y":0},{"x":99,"y":0},{"x":100,"y":0},{"x":101,"y":0},{"x":102,"y":0},{"x":103,"y":0},{"x":104,"y":0},{"x":105,"y":0},{"x":106,"y":0},{"x":107,"y":0},{"x":108,"y":0},{"x":109,"y":0},{"x":110,"y":0},{"x":111,"y":0},{"x":112,"y":0},{"x":113,"y":0},{"x":114,"y":0},{"x":115,"y":0},{"x":116,"y":0},{"x":117,"y":0},{"x":118,"y":0},{"x":119,"y":0},{"x":120,"y":0},{"x":121,"y":0},{"x":122,"y":0},{"x":123,"y":0},{"x":124,"y":0},{"x":125,"y":0},{"x":126,"y":0},{"x":127,"y":0},{"x":128,"y":0},{"x"
 :129,"y":0},{"x":130,"y":0},{"x":131,"y":0},{"x":132,"y":0},{"x":133,"y":0},{"x":134,"y":0},{"x":135,"y":0},{"x":136,"y":0},{"x":137,"y":0},{"x":138,"y":0},{"x":139,"y":0},{"x":140,"y":0},{"x":141,"y":0},{"x":142,"y":0},{"x":143,"y":0},{"x":144,"y":0},{"x":145,"y":2},{"x":146,"y":2},{"x":147,"y":2},{"x":148,"y":2},{"x":149,"y":2},{"x":150,"y":2},{"x":151,"y":2},{"x":152,"y":2},{"x":153,"y":2},{"x":154,"y":2},{"x":155,"y":2},{"x":156,"y":2},{"x":157,"y":2},{"x":158,"y":2},{"x":159,"y":2},{"x":160,"y":2},{"x":161,"y":2},{"x":162,"y":2},{"x":163,"y":2},{"x":164,"y":2},{"x":165,"y":2},{"x":166,"y":2},{"x":167,"y":2},{"x":168,"y":2},{"x":169,"y":2},{"x":170,"y":2},{"x":171,"y":2},{"x":172,"y":2},{"x":173,"y":2},{"x":174,"y":2},{"x":175,"y":2},{"x":176,"y":2},{"x":177,"y":2},{"x":178,"y":2},{"x":179,"y":2},{"x":180,"y":2},{"x":181,"y":2},{"x":182,"y":2},{"x":183,"y":2},{"x":184,"y":2},{"x":185,"y":2},{"x":186,"y":2},{"x":187,"y":2},{"x":188,"y":2},{"x":189,"y":2},{"x":190,"y":2},{
 "x":191,"y":2},{"x":192,"y":2},{"x":193,"y":2},{"x":194,"y":2},{"x":195,"y":2},{"x":196,"y":2},{"x":197,"y":2},{"x":198,"y":2},{"x":199,"y":2},{"x":200,"y":2},{"x":201,"y":2},{"x":202,"y":2},{"x":203,"y":2},{"x":204,"y":2},{"x":205,"y":2},{"x":206,"y":2},{"x":207,"y":2},{"x":208,"y":2},{"x":209,"y":2},{"x":210,"y":2},{"x":211,"y":2},{"x":212,"y":2},{"x":213,"y":2},{"x":214,"y":2},{"x":215,"y":2},{"x":216,"y":2},{"x":217,"y":2},{"x":218,"y":2},{"x":219,"y":2},{"x":220,"y":2},{"x":221,"y":2},{"x":222,"y":2},{"x":223,"y":2},{"x":224,"y":2},{"x":225,"y":2},{"x":226,"y":2},{"x":227,"y":2},{"x":228,"y":2},{"x":229,"y":2},{"x":230,"y":2},{"x":231,"y":2},{"x":232,"y":2},{"x":233,"y":2},{"x":234,"y":2},{"x":235,"y":2},{"x":236,"y":2},{"x":237,"y":2},{"x":238,"y":2},{"x":239,"y":2},{"x":240,"y":2},{"x":241,"y":2},{"x":242,"y":2},{"x":243,"y":2},{"x":244,"y":2},{"x":245,"y":2},{"x":246,"y":2},{"x":247,"y":2},{"x":248,"y":2},{"x":249,"y":2},{"x":250,"y":2},{"x":251,"y":2},{"x":252,"y":2
 },{"x":253,"y":2},{"x":254,"y":2},{"x":255,"y":2},{"x":256,"y":2},{"x":257,"y":2},{"x":258,"y":2},{"x":259,"y":2},{"x":260,"y":2},{"x":261,"y":2},{"x":262,"y":2},{"x":263,"y":2},{"x":264,"y":2},{"x":265,"y":2},{"x":266,"y":2},{"x":267,"y":2},{"x":268,"y":2},{"x":269,"y":2},{"x":270,"y":2},{"x":271,"y":2},{"x":272,"y":2},{"x":273,"y":2},{"x":274,"y":1},{"x":275,"y":1},{"x":276,"y":1},{"x":277,"y":1},{"x":278,"y":1},{"x":279,"y":0},{"x":280,"y":0},{"x":281,"y":0},{"x":282,"y":0},{"x":283,"y":0},{"x":284,"y":0},{"x":285,"y":0},{"x":286,"y":0},{"x":287,"y":0},{"x":288,"y":0},{"x":289,"y":0},{"x":290,"y":0},{"x":291,"y":0},{"x":292,"y":0},{"x":293,"y":0},{"x":294,"y":0},{"x":295,"y":0},{"x":296,"y":0},{"x":297,"y":0},{"x":298,"y":0},{"x":299,"y":0},{"x":300,"y":0},{"x":301,"y":0},{"x":302,"y":0},{"x":303,"y":0},{"x":304,"y":0},{"x":305,"y":0},{"x":306,"y":0},{"x":307,"y":0},{"x":308,"y":0},{"x":309,"y":0},{"x":310,"y":0},{"x":311,"y":0},{"x":312,"y":0},{"x":313,"y":0},{"x":314,"y
 ":0},{"x":315,"y":0},{"x":316,"y":0},{"x":317,"y":0},{"x":318,"y":0},{"x":319,"y":0},{"x":320,"y":0},{"x":321,"y":0},{"x":322,"y":0},{"x":323,"y":0},{"x":324,"y":0},{"x":325,"y":0},{"x":326,"y":0},{"x":327,"y":0},{"x":328,"y":0},{"x":329,"y":0},{"x":330,"y":0},{"x":331,"y":0},{"x":332,"y":0},{"x":333,"y":0},{"x":334,"y":0},{"x":335,"y":0},{"x":336,"y":0},{"x":337,"y":0},{"x":338,"y":0},{"x":339,"y":0},{"x":340,"y":0},{"x":341,"y":0},{"x":342,"y":0},{"x":343,"y":0},{"x":344,"y":0},{"x":345,"y":0},{"x":346,"y":0},{"x":347,"y":0},{"x":348,"y":0},{"x":349,"y":0},{"x":350,"y":0},{"x":351,"y":0},{"x":352,"y":0},{"x":353,"y":0},{"x":354,"y":0},{"x":355,"y":0},{"x":356,"y":0},{"x":357,"y":0},{"x":358,"y":0},{"x":359,"y":0},{"x":360,"y":0},{"x":361,"y":0},{"x":362,"y":0},{"x":363,"y":0},{"x":364,"y":0},{"x":365,"y":0},{"x":366,"y":0},{"x":367,"y":0},{"x":368,"y":0},{"x":369,"y":0},{"x":370,"y":0},{"x":371,"y":0},{"x":372,"y":0},{"x":373,"y":0},{"x":374,"y":0},{"x":375,"y":0},{"x":376
 ,"y":0},{"x":377,"y":0},{"x":378,"y":0},{"x":379,"y":0},{"x":380,"y":0},{"x":381,"y":0},{"x":382,"y":0},{"x":383,"y":0},{"x":384,"y":0},{"x":385,"y":0},{"x":386,"y":0},{"x":387,"y":0},{"x":388,"y":0},{"x":389,"y":0},{"x":390,"y":0},{"x":391,"y":0},{"x":392,"y":0},{"x":393,"y":0},{"x":394,"y":0},{"x":395,"y":0},{"x":396,"y":0},{"x":397,"y":0},{"x":398,"y":0},{"x":399,"y":0},{"x":400,"y":0},{"x":401,"y":0},{"x":402,"y":0},{"x":403,"y":0},{"x":404,"y":0},{"x":405,"y":0},{"x":406,"y":0},{"x":407,"y":0},{"x":408,"y":0},{"x":409,"y":0},{"x":410,"y":0},{"x":411,"y":0},{"x":412,"y":0},{"x":413,"y":0},{"x":414,"y":0},{"x":415,"y":0},{"x":416,"y":0},{"x":417,"y":0},{"x":418,"y":0},{"x":419,"y":0},{"x":420,"y":0},{"x":421,"y":0},{"x":422,"y":0},{"x":423,"y":0},{"x":424,"y":0},{"x":425,"y":0},{"x":426,"y":0},{"x":427,"y":0},{"x":428,"y":0},{"x":429,"y":0},{"x":430,"y":0},{"x":431,"y":0},{"x":432,"y":0},{"x":433,"y":0},{"x":434,"y":0},{"x":435,"y":0},{"x":436,"y":0},{"x":437,"y":0},{"x":
 438,"y":0},{"x":439,"y":0},{"x":440,"y":0},{"x":441,"y":0},{"x":442,"y":0},{"x":443,"y":0},{"x":444,"y":0},{"x":445,"y":0},{"x":446,"y":0},{"x":447,"y":0},{"x":448,"y":0},{"x":449,"y":0},{"x":450,"y":0},{"x":451,"y":0},{"x":452,"y":0},{"x":453,"y":0},{"x":454,"y":0},{"x":455,"y":0},{"x":456,"y":0},{"x":457,"y":0},{"x":458,"y":0},{"x":459,"y":0},{"x":460,"y":0},{"x":461,"y":0},{"x":462,"y":0},{"x":463,"y":0},{"x":464,"y":0},{"x":465,"y":0},{"x":466,"y":0},{"x":467,"y":0},{"x":468,"y":0},{"x":469,"y":0},{"x":470,"y":0},{"x":471,"y":0},{"x":472,"y":0},{"x":473,"y":0},{"x":474,"y":0},{"x":475,"y":0},{"x":476,"y":0},{"x":477,"y":0},{"x":478,"y":0},{"x":479,"y":0},{"x":480,"y":0},{"x":481,"y":0},{"x":482,"y":0},{"x":483,"y":0},{"x":484,"y":0},{"x":485,"y":0},{"x":486,"y":0},{"x":487,"y":0},{"x":488,"y":0},{"x":489,"y":0},{"x":490,"y":0},{"x":491,"y":0},{"x":492,"y":0},{"x":493,"y":0},{"x":494,"y":0},{"x":495,"y":0},{"x":496,"y":0},{"x":497,"y":0},{"x":498,"y":0},{"x":499,"y":0}],[
 {"x":0,"y":0},{"x":1,"y":0},{"x":2,"y":0},{"x":3,"y":0},{"x":4,"y":0},{"x":5,"y":0},{"x":6,"y":0},{"x":7,"y":0},{"x":8,"y":0},{"x":9,"y":0},{"x":10,"y":0},{"x":11,"y":0},{"x":12,"y":0},{"x":13,"y":0},{"x":14,"y":0},{"x":15,"y":0},{"x":16,"y":0},{"x":17,"y":0},{"x":18,"y":0},{"x":19,"y":0},{"x":20,"y":0},{"x":21,"y":0},{"x":22,"y":0},{"x":23,"y":0},{"x":24,"y":0},{"x":25,"y":0},{"x":26,"y":0},{"x":27,"y":0},{"x":28,"y":0},{"x":29,"y":0},{"x":30,"y":0},{"x":31,"y":0},{"x":32,"y":0},{"x":33,"y":0},{"x":34,"y":0},{"x":35,"y":0},{"x":36,"y":0},{"x":37,"y":0},{"x":38,"y":0},{"x":39,"y":0},{"x":40,"y":0},{"x":41,"y":0},{"x":42,"y":0},{"x":43,"y":0},{"x":44,"y":0},{"x":45,"y":0},{"x":46,"y":0},{"x":47,"y":0},{"x":48,"y":0},{"x":49,"y":0},{"x":50,"y":0},{"x":51,"y":0},{"x":52,"y":0},{"x":53,"y":0},{"x":54,"y":0},{"x":55,"y":0},{"x":56,"y":0},{"x":57,"y":0},{"x":58,"y":0},{"x":59,"y":0},{"x":60,"y":0},{"x":61,"y":0},{"x":62,"y":0},{"x":63,"y":0},{"x":64,"y":0},{"x":65,"y":0},{"x":66,"
 y":0},{"x":67,"y":0},{"x":68,"y":0},{"x":69,"y":0},{"x":70,"y":0},{"x":71,"y":0},{"x":72,"y":0},{"x":73,"y":0},{"x":74,"y":0},{"x":75,"y":0},{"x":76,"y":0},{"x":77,"y":0},{"x":78,"y":0},{"x":79,"y":0},{"x":80,"y":0},{"x":81,"y":0},{"x":82,"y":0},{"x":83,"y":0},{"x":84,"y":0},{"x":85,"y":0},{"x":86,"y":0},{"x":87,"y":0},{"x":88,"y":0},{"x":89,"y":0},{"x":90,"y":0},{"x":91,"y":0},{"x":92,"y":0},{"x":93,"y":0},{"x":94,"y":0},{"x":95,"y":0},{"x":96,"y":0},{"x":97,"y":0},{"x":98,"y":0},{"x":99,"y":0},{"x":100,"y":0},{"x":101,"y":0},{"x":102,"y":0},{"x":103,"y":0},{"x":104,"y":0},{"x":105,"y":0},{"x":106,"y":0},{"x":107,"y":0},{"x":108,"y":0},{"x":109,"y":0},{"x":110,"y":0},{"x":111,"y":0},{"x":112,"y":0},{"x":113,"y":0},{"x":114,"y":0},{"x":115,"y":0},{"x":116,"y":0},{"x":117,"y":0},{"x":118,"y":0},{"x":119,"y":0},{"x":120,"y":0},{"x":121,"y":0},{"x":122,"y":0},{"x":123,"y":0},{"x":124,"y":0},{"x":125,"y":0},{"x":126,"y":0},{"x":127,"y":0},{"x":128,"y":0},{"x":129,"y":0},{"x":130
 ,"y":0},{"x":131,"y":0},{"x":132,"y":0},{"x":133,"y":0},{"x":134,"y":0},{"x":135,"y":0},{"x":136,"y":0},{"x":137,"y":0},{"x":138,"y":0},{"x":139,"y":0},{"x":140,"y":0},{"x":141,"y":0},{"x":142,"y":0},{"x":143,"y":0},{"x":144,"y":0},{"x":145,"y":0},{"x":146,"y":0},{"x":147,"y":0},{"x":148,"y":0},{"x":149,"y":0},{"x":150,"y":0},{"x":151,"y":0},{"x":152,"y":0},{"x":153,"y":0},{"x":154,"y":0},{"x":155,"y":0},{"x":156,"y":0},{"x":157,"y":0},{"x":158,"y":0},{"x":159,"y":0},{"x":160,"y":0},{"x":161,"y":0},{"x":162,"y":0},{"x":163,"y":0},{"x":164,"y":0},{"x":165,"y":0},{"x":166,"y":0},{"x":167,"y":0},{"x":168,"y":0},{"x":169,"y":0},{"x":170,"y":0},{"x":171,"y":0},{"x":172,"y":0},{"x":173,"y":0},{"x":174,"y":0},{"x":175,"y":0},{"x":176,"y":0},{"x":177,"y":0},{"x":178,"y":0},{"x":179,"y":0},{"x":180,"y":0},{"x":181,"y":0},{"x":182,"y":0},{"x":183,"y":0},{"x":184,"y":0},{"x":185,"y":0},{"x":186,"y":0},{"x":187,"y":0},{"x":188,"y":0},{"x":189,"y":0},{"x":190,"y":0},{"x":191,"y":0},{"x":
 192,"y":0},{"x":193,"y":0},{"x":194,"y":0},{"x":195,"y":0},{"x":196,"y":0},{"x":197,"y":0},{"x":198,"y":0},{"x":199,"y":0},{"x":200,"y":0},{"x":201,"y":0},{"x":202,"y":0},{"x":203,"y":0},{"x":204,"y":0},{"x":205,"y":0},{"x":206,"y":0},{"x":207,"y":0},{"x":208,"y":0},{"x":209,"y":0},{"x":210,"y":0},{"x":211,"y":0},{"x":212,"y":0},{"x":213,"y":0},{"x":214,"y":0},{"x":215,"y":0},{"x":216,"y":0},{"x":217,"y":0},{"x":218,"y":0},{"x":219,"y":0},{"x":220,"y":0},{"x":221,"y":0},{"x":222,"y":0},{"x":223,"y":0},{"x":224,"y":0},{"x":225,"y":0},{"x":226,"y":0},{"x":227,"y":0},{"x":228,"y":0},{"x":229,"y":0},{"x":230,"y":0},{"x":231,"y":0},{"x":232,"y":0},{"x":233,"y":0},{"x":234,"y":0},{"x":235,"y":0},{"x":236,"y":0},{"x":237,"y":0},{"x":238,"y":0},{"x":239,"y":0},{"x":240,"y":0},{"x":241,"y":0},{"x":242,"y":0},{"x":243,"y":0},{"x":244,"y":0},{"x":245,"y":0},{"x":246,"y":0},{"x":247,"y":0},{"x":248,"y":0},{"x":249,"y":0},{"x":250,"y":0},{"x":251,"y":0},{"x":252,"y":0},{"x":253,"y":0},{"
 x":254,"y":0},{"x":255,"y":0},{"x":256,"y":0},{"x":257,"y":0},{"x":258,"y":0},{"x":259,"y":0},{"x":260,"y":0},{"x":261,"y":0},{"x":262,"y":0},{"x":263,"y":0},{"x":264,"y":0},{"x":265,"y":0},{"x":266,"y":0},{"x":267,"y":0},{"x":268,"y":0},{"x":269,"y":0},{"x":270,"y":0},{"x":271,"y":0},{"x":272,"y":0},{"x":273,"y":0},{"x":274,"y":0},{"x":275,"y":0},{"x":276,"y":0},{"x":277,"y":0},{"x":278,"y":0},{"x":279,"y":0},{"x":280,"y":0},{"x":281,"y":0},{"x":282,"y":0},{"x":283,"y":0},{"x":284,"y":0},{"x":285,"y":0},{"x":286,"y":0},{"x":287,"y":0},{"x":288,"y":1},{"x":289,"y":1},{"x":290,"y":1},{"x":291,"y":1},{"x":292,"y":1},{"x":293,"y":1},{"x":294,"y":1},{"x":295,"y":1},{"x":296,"y":1},{"x":297,"y":1},{"x":298,"y":1},{"x":299,"y":1},{"x":300,"y":1},{"x":301,"y":1},{"x":302,"y":1},{"x":303,"y":1},{"x":304,"y":1},{"x":305,"y":1},{"x":306,"y":1},{"x":307,"y":1},{"x":308,"y":1},{"x":309,"y":1},{"x":310,"y":1},{"x":311,"y":1},{"x":312,"y":1},{"x":313,"y":1},{"x":314,"y":1},{"x":315,"y":1}
 ,{"x":316,"y":1},{"x":317,"y":1},{"x":318,"y":1},{"x":319,"y":1},{"x":320,"y":1},{"x":321,"y":1},{"x":322,"y":1},{"x":323,"y":1},{"x":324,"y":1},{"x":325,"y":1},{"x":326,"y":1},{"x":327,"y":1},{"x":328,"y":1},{"x":329,"y":1},{"x":330,"y":1},{"x":331,"y":1},{"x":332,"y":1},{"x":333,"y":1},{"x":334,"y":1},{"x":335,"y":1},{"x":336,"y":1},{"x":337,"y":1},{"x":338,"y":1},{"x":339,"y":1},{"x":340,"y":1},{"x":341,"y":1},{"x":342,"y":1},{"x":343,"y":1},{"x":344,"y":1},{"x":345,"y":1},{"x":346,"y":1},{"x":347,"y":1},{"x":348,"y":1},{"x":349,"y":1},{"x":350,"y":1},{"x":351,"y":1},{"x":352,"y":1},{"x":353,"y":1},{"x":354,"y":1},{"x":355,"y":1},{"x":356,"y":1},{"x":357,"y":1},{"x":358,"y":1},{"x":359,"y":1},{"x":360,"y":1},{"x":361,"y":1},{"x":362,"y":1},{"x":363,"y":1},{"x":364,"y":1},{"x":365,"y":1},{"x":366,"y":1},{"x":367,"y":1},{"x":368,"y":1},{"x":369,"y":1},{"x":370,"y":1},{"x":371,"y":1},{"x":372,"y":1},{"x":373,"y":1},{"x":374,"y":1},{"x":375,"y":1},{"x":376,"y":1},{"x":377,"y"
 :1},{"x":378,"y":1},{"x":379,"y":1},{"x":380,"y":1},{"x":381,"y":1},{"x":382,"y":1},{"x":383,"y":1},{"x":384,"y":1},{"x":385,"y":1},{"x":386,"y":1},{"x":387,"y":1},{"x":388,"y":0},{"x":389,"y":0},{"x":390,"y":0},{"x":391,"y":0},{"x":392,"y":0},{"x":393,"y":0},{"x":394,"y":0},{"x":395,"y":0},{"x":396,"y":0},{"x":397,"y":0},{"x":398,"y":0},{"x":399,"y":0},{"x":400,"y":0},{"x":401,"y":0},{"x":402,"y":0},{"x":403,"y":0},{"x":404,"y":0},{"x":405,"y":0},{"x":406,"y":0},{"x":407,"y":0},{"x":408,"y":0},{"x":409,"y":0},{"x":410,"y":0},{"x":411,"y":0},{"x":412,"y":0},{"x":413,"y":0},{"x":414,"y":0},{"x":415,"y":0},{"x":416,"y":0},{"x":417,"y":0},{"x":418,"y":0},{"x":419,"y":0},{"x":420,"y":0},{"x":421,"y":0},{"x":422,"y":0},{"x":423,"y":0},{"x":424,"y":0},{"x":425,"y":0},{"x":426,"y":0},{"x":427,"y":0},{"x":428,"y":0},{"x":429,"y":0},{"x":430,"y":0},{"x":431,"y":0},{"x":432,"y":0},{"x":433,"y":0},{"x":434,"y":0},{"x":435,"y":0},{"x":436,"y":0},{"x":437,"y":0},{"x":438,"y":0},{"x":439,
 "y":0},{"x":440,"y":0},{"x":441,"y":0},{"x":442,"y":0},{"x":443,"y":0},{"x":444,"y":0},{"x":445,"y":0},{"x":446,"y":0},{"x":447,"y":0},{"x":448,"y":0},{"x":449,"y":0},{"x":450,"y":0},{"x":451,"y":0},{"x":452,"y":0},{"x":453,"y":0},{"x":454,"y":0},{"x":455,"y":0},{"x":456,"y":0},{"x":457,"y":0},{"x":458,"y":0},{"x":459,"y":0},{"x":460,"y":0},{"x":461,"y":0},{"x":462,"y":0},{"x":463,"y":0},{"x":464,"y":0},{"x":465,"y":0},{"x":466,"y":0},{"x":467,"y":0},{"x":468,"y":0},{"x":469,"y":0},{"x":470,"y":0},{"x":471,"y":0},{"x":472,"y":0},{"x":473,"y":0},{"x":474,"y":0},{"x":475,"y":0},{"x":476,"y":0},{"x":477,"y":0},{"x":478,"y":0},{"x":479,"y":0},{"x":480,"y":0},{"x":481,"y":0},{"x":482,"y":0},{"x":483,"y":0},{"x":484,"y":0},{"x":485,"y":0},{"x":486,"y":0},{"x":487,"y":0},{"x":488,"y":0},{"x":489,"y":0},{"x":490,"y":0},{"x":491,"y":0},{"x":492,"y":0},{"x":493,"y":0},{"x":494,"y":0},{"x":495,"y":0},{"x":496,"y":0},{"x":497,"y":0},{"x":498,"y":0},{"x":499,"y":0}],[{"x":0,"y":0},{"x":1
 ,"y":0},{"x":2,"y":0},{"x":3,"y":0},{"x":4,"y":0},{"x":5,"y":0},{"x":6,"y":0},{"x":7,"y":0},{"x":8,"y":0},{"x":9,"y":0},{"x":10,"y":0},{"x":11,"y":0},{"x":12,"y":0},{"x":13,"y":0},{"x":14,"y":0},{"x":15,"y":0},{"x":16,"y":0},{"x":17,"y":0},{"x":18,"y":0},{"x":19,"y":0},{"x":20,"y":0},{"x":21,"y":0},{"x":22,"y":0},{"x":23,"y":0},{"x":24,"y":0},{"x":25,"y":0},{"x":26,"y":0},{"x":27,"y":0},{"x":28,"y":0},{"x":29,"y":0},{"x":30,"y":0},{"x":31,"y":0},{"x":32,"y":0},{"x":33,"y":0},{"x":34,"y":0},{"x":35,"y":0},{"x":36,"y":0},{"x":37,"y":0},{"x":38,"y":0},{"x":39,"y":0},{"x":40,"y":0},{"x":41,"y":0},{"x":42,"y":0},{"x":43,"y":0},{"x":44,"y":0},{"x":45,"y":0},{"x":46,"y":0},{"x":47,"y":0},{"x":48,"y":0},{"x":49,"y":0},{"x":50,"y":0},{"x":51,"y":0},{"x":52,"y":0},{"x":53,"y":0},{"x":54,"y":0},{"x":55,"y":0},{"x":56,"y":0},{"x":57,"y":0},{"x":58,"y":0},{"x":59,"y":0},{"x":60,"y":0},{"x":61,"y":0},{"x":62,"y":0},{"x":63,"y":0},{"x":64,"y":0},{"x":65,"y":0},{"x":66,"y":0},{"x":67,"y":0}
 ,{"x":68,"y":0},{"x":69,"y":0},{"x":70,"y":0},{"x":71,"y":0},{"x":72,"y":0},{"x":73,"y":0},{"x":74,"y":0},{"x":75,"y":0},{"x":76,"y":0},{"x":77,"y":0},{"x":78,"y":0},{"x":79,"y":0},{"x":80,"y":0},{"x":81,"y":0},{"x":82,"y":0},{"x":83,"y":0},{"x":84,"y":0},{"x":85,"y":0},{"x":86,"y":0},{"x":87,"y":0},{"x":88,"y":0},{"x":89,"y":0},{"x":90,"y":0},{"x":91,"y":0},{"x":92,"y":0},{"x":93,"y":0},{"x":94,"y":0},{"x":95,"y":0},{"x":96,"y":0},{"x":97,"y":0},{"x":98,"y":0},{"x":99,"y":0},{"x":100,"y":0},{"x":101,"y":0},{"x":102,"y":0},{"x":103,"y":0},{"x":104,"y":0},{"x":105,"y":0},{"x":106,"y":0},{"x":107,"y":0},{"x":108,"y":0},{"x":109,"y":0},{"x":110,"y":0},{"x":111,"y":0},{"x":112,"y":0},{"x":113,"y":0},{"x":114,"y":0},{"x":115,"y":0},{"x":116,"y":0},{"x":117,"y":0},{"x":118,"y":0},{"x":119,"y":0},{"x":120,"y":0},{"x":121,"y":0},{"x":122,"y":0},{"x":123,"y":0},{"x":124,"y":0},{"x":125,"y":0},{"x":126,"y":0},{"x":127,"y":0},{"x":128,"y":0},{"x":129,"y":0},{"x":130,"y":0},{"x":131,"y"
 :0},{"x":132,"y":0},{"x":133,"y":0},{"x":134,"y":0},{"x":135,"y":0},{"x":136,"y":0},{"x":137,"y":0},{"x":138,"y":0},{"x":139,"y":0},{"x":140,"y":0},{"x":141,"y":0},{"x":142,"y":0},{"x":143,"y":0},{"x":144,"y":0},{"x":145,"y":0},{"x":146,"y":0},{"x":147,"y":0},{"x":148,"y":0},{"x":149,"y":0},{"x":150,"y":0},{"x":151,"y":0},{"x":152,"y":0},{"x":153,"y":0},{"x":154,"y":0},{"x":155,"y":0},{"x":156,"y":0},{"x":157,"y":0},{"x":158,"y":0},{"x":159,"y":0},{"x":160,"y":0},{"x":161,"y":0},{"x":162,"y":0},{"x":163,"y":0},{"x":164,"y":0},{"x":165,"y":0},{"x":166,"y":0},{"x":167,"y":0},{"x":168,"y":0},{"x":169,"y":0},{"x":170,"y":0},{"x":171,"y":0},{"x":172,"y":0},{"x":173,"y":0},{"x":174,"y":0},{"x":175,"y":0},{"x":176,"y":0},{"x":177,"y":0},{"x":178,"y":0},{"x":179,"y":0},{"x":180,"y":0},{"x":181,"y":0},{"x":182,"y":0},{"x":183,"y":0},{"x":184,"y":0},{"x":185,"y":0},{"x":186,"y":0},{"x":187,"y":0},{"x":188,"y":0},{"x":189,"y":0},{"x":190,"y":0},{"x":191,"y":0},{"x":192,"y":0},{"x":193,
 "y":0},{"x":194,"y":0},{"x":195,"y":0},{"x":196,"y":0},{"x":197,"y":0},{"x":198,"y":0},{"x":199,"y":0},{"x":200,"y":0},{"x":201,"y":0},{"x":202,"y":0},{"x":203,"y":0},{"x":204,"y":0},{"x":205,"y":0},{"x":206,"y":0},{"x":207,"y":0},{"x":208,"y":0},{"x":209,"y":0},{"x":210,"y":0},{"x":211,"y":0},{"x":212,"y":0},{"x":213,"y":0},{"x":214,"y":0},{"x":215,"y":0},{"x":216,"y":0},{"x":217,"y":0},{"x":218,"y":0},{"x":219,"y":0},{"x":220,"y":0},{"x":221,"y":0},{"x":222,"y":0},{"x":223,"y":0},{"x":224,"y":0},{"x":225,"y":0},{"x":226,"y":0},{"x":227,"y":0},{"x":228,"y":0},{"x":229,"y":0},{"x":230,"y":0},{"x":231,"y":0},{"x":232,"y":0},{"x":233,"y":0},{"x":234,"y":0},{"x":235,"y":0},{"x":236,"y":0},{"x":237,"y":0},{"x":238,"y":0},{"x":239,"y":0},{"x":240,"y":0},{"x":241,"y":0},{"x":242,"y":0},{"x":243,"y":0},{"x":244,"y":0},{"x":245,"y":0},{"x":246,"y":0},{"x":247,"y":0},{"x":248,"y":0},{"x":249,"y":0},{"x":250,"y":0},{"x":251,"y":0},{"x":252,"y":0},{"x":253,"y":0},{"x":254,"y":0},{"x":2
 55,"y":0},{"x":256,"y":0},{"x":257,"y":0},{"x":258,"y":0},{"x":259,"y":0},{"x":260,"y":0},{"x":261,"y":0},{"x":262,"y":0},{"x":263,"y":0},{"x":264,"y":0},{"x":265,"y":0},{"x":266,"y":0},{"x":267,"y":0},{"x":268,"y":0},{"x":269,"y":0},{"x":270,"y":0},{"x":271,"y":0},{"x":272,"y":0},{"x":273,"y":0},{"x":274,"y":0},{"x":275,"y":0},{"x":276,"y":0},{"x":277,"y":0},{"x":278,"y":0},{"x":279,"y":0},{"x":280,"y":0},{"x":281,"y":0},{"x":282,"y":0},{"x":283,"y":0},{"x":284,"y":0},{"x":285,"y":0},{"x":286,"y":0},{"x":287,"y":0},{"x":288,"y":0},{"x":289,"y":0},{"x":290,"y":0},{"x":291,"y":0},{"x":292,"y":0},{"x":293,"y":0},{"x":294,"y":0},{"x":295,"y":0},{"x":296,"y":0},{"x":297,"y":0},{"x":298,"y":0},{"x":299,"y":0},{"x":300,"y":0},{"x":301,"y":0},{"x":302,"y":0},{"x":303,"y":0},{"x":304,"y":0},{"x":305,"y":0},{"x":306,"y":0},{"x":307,"y":0},{"x":308,"y":0},{"x":309,"y":0},{"x":310,"y":0},{"x":311,"y":0},{"x":312,"y":0},{"x":313,"y":0},{"x":314,"y":0},{"x":315,"y":0},{"x":316,"y":0},{"x
 ":317,"y":0},{"x":318,"y":0},{"x":319,"y":0},{"x":320,"y":0},{"x":321,"y":0},{"x":322,"y":0},{"x":323,"y":0},{"x":324,"y":0},{"x":325,"y":0},{"x":326,"y":0},{"x":327,"y":0},{"x":328,"y":0},{"x":329,"y":0},{"x":330,"y":0},{"x":331,"y":0},{"x":332,"y":0},{"x":333,"y":0},{"x":334,"y":0},{"x":335,"y":0},{"x":336,"y":0},{"x":337,"y":0},{"x":338,"y":0},{"x":339,"y":0},{"x":340,"y":0},{"x":341,"y":0},{"x":342,"y":0},{"x":343,"y":0},{"x":344,"y":0},{"x":345,"y":0},{"x":346,"y":0},{"x":347,"y":0},{"x":348,"y":0},{"x":349,"y":0},{"x":350,"y":0},{"x":351,"y":0},{"x":352,"y":0},{"x":353,"y":0},{"x":354,"y":0},{"x":355,"y":0},{"x":356,"y":0},{"x":357,"y":0},{"x":358,"y":0},{"x":359,"y":0},{"x":360,"y":0},{"x":361,"y":0},{"x":362,"y":0},{"x":363,"y":0},{"x":364,"y":0},{"x":365,"y":0},{"x":366,"y":0},{"x":367,"y":0},{"x":368,"y":0},{"x":369,"y":0},{"x":370,"y":0},{"x":371,"y":0},{"x":372,"y":0},{"x":373,"y":0},{"x":374,"y":0},{"x":375,"y":0},{"x":376,"y":0},{"x":377,"y":0},{"x":378,"y":0},
 {"x":379,"y":0},{"x":380,"y":0},{"x":381,"y":0},{"x":382,"y":0},{"x":383,"y":0},{"x":384,"y":0},{"x":385,"y":0},{"x":386,"y":0},{"x":387,"y":0},{"x":388,"y":1},{"x":389,"y":1},{"x":390,"y":1},{"x":391,"y":1},{"x":392,"y":1},{"x":393,"y":1},{"x":394,"y":1},{"x":395,"y":1},{"x":396,"y":1},{"x":397,"y":1},{"x":398,"y":1},{"x":399,"y":1},{"x":400,"y":1},{"x":401,"y":1},{"x":402,"y":1},{"x":403,"y":1},{"x":404,"y":1},{"x":405,"y":1},{"x":406,"y":1},{"x":407,"y":1},{"x":408,"y":1},{"x":409,"y":1},{"x":410,"y":1},{"x":411,"y":1},{"x":412,"y":1},{"x":413,"y":1},{"x":414,"y":1},{"x":415,"y":1},{"x":416,"y":1},{"x":417,"y":1},{"x":418,"y":1},{"x":419,"y":1},{"x":420,"y":1},{"x":421,"y":1},{"x":422,"y":1},{"x":423,"y":0},{"x":424,"y":0},{"x":425,"y":0},{"x":426,"y":0},{"x":427,"y":0},{"x":428,"y":0},{"x":429,"y":0},{"x":430,"y":0},{"x":431,"y":0},{"x":432,"y":0},{"x":433,"y":0},{"x":434,"y":0},{"x":435,"y":0},{"x":436,"y":0},{"x":437,"y":0},{"x":438,"y":0},{"x":439,"y":0},{"x":440,"y":
 0},{"x":441,"y":0},{"x":442,"y":0},{"x":443,"y":0},{"x":444,"y":0},{"x":445,"y":0},{"x":446,"y":0},{"x":447,"y":0},{"x":448,"y":0},{"x":449,"y":0},{"x":450,"y":0},{"x":451,"y":0},{"x":452,"y":0},{"x":453,"y":0},{"x":454,"y":0},{"x":455,"y":0},{"x":456,"y":0},{"x":457,"y":0},{"x":458,"y":0},{"x":459,"y":0},{"x":460,"y":0},{"x":461,"y":0},{"x":462,"y":0},{"x":463,"y":0},{"x":464,"y":0},{"x":465,"y":0},{"x":466,"y":0},{"x":467,"y":0},{"x":468,"y":0},{"x":469,"y":0},{"x":470,"y":0},{"x":471,"y":0},{"x":472,"y":0},{"x":473,"y":0},{"x":474,"y":0},{"x":475,"y":0},{"x":476,"y":0},{"x":477,"y":0},{"x":478,"y":0},{"x":479,"y":0},{"x":480,"y":0},{"x":481,"y":0},{"x":482,"y":0},{"x":483,"y":0},{"x":484,"y":0},{"x":485,"y":0},{"x":486,"y":0},{"x":487,"y":0},{"x":488,"y":0},{"x":489,"y":0},{"x":490,"y":0},{"x":491,"y":0},{"x":492,"y":0},{"x":493,"y":0},{"x":494,"y":0},{"x":495,"y":0},{"x":496,"y":0},{"x":497,"y":0},{"x":498,"y":0},{"x":499,"y":0}]]',

[... 107 lines stripped ...]
Added: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/protoRelations.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/protoRelations.js?rev=1418895&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/protoRelations.js (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/protoRelations.js Sun Dec  9 11:53:15 2012
@@ -0,0 +1,155 @@
+/**
+ * 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.Service1 = DS.Model.extend({
+  //primaryKey : 'serviceName',
+  serviceName: DS.attr('string'),
+  description: DS.attr('string'),
+  components: DS.hasMany('App.Service1Component', { embedded: true }),
+
+  displayName: function() {
+    switch (this.get('serviceName').toLowerCase()) {
+      case 'hdfs':
+        return 'HDFS';
+      case 'mapreduce':
+        return 'MapReduce';
+      case 'hbase':
+        return 'HBase';
+      case 'oozie':
+        return 'Oozie';
+      case 'hive':
+        return 'Hive/HCatalog';
+      case 'zookeeper':
+        return 'ZooKeeper';
+      case 'pig':
+        return 'Pig';
+      case 'sqoop':
+        return 'Sqoop';
+      case 'templeton':
+        return 'Templeton';
+      case 'ganglia':
+        return 'Ganglia';
+      case 'nagios':
+        return 'Nagios';
+    }
+    return this.get('serviceName');
+  }.property('serviceName')
+});
+
+App.Service1.Health = {
+  live:"LIVE",
+  dead:"DEAD",
+  start:"STARTING",
+  stop:"STOPPING"
+};
+
+App.Service1Component = DS.Model.extend({
+  componentName: DS.attr('string'),
+  hostComponents: DS.hasMany('App.HostComponent1'),
+  service: DS.belongsTo('App.Service1'),
+  state : DS.attr('string'),
+  host_name : DS.attr('string'),
+
+  displayName: function() {
+    switch (this.get('componentName')) {
+      case 'NAMENODE':
+        return 'NameNode';
+      case 'SNAMENODE':
+        return 'SNameNode';
+      case 'DATANODE':
+        return 'DataNode';
+      case 'HDFS_CLIENT':
+        return 'HDFS Client';
+      case 'JOBTRACKER':
+        return 'JobTracker';
+      case 'TASKTRACKER':
+        return 'TaskTracker';
+      case 'MAPREDUCE_CLIENT':
+        return 'MapReduce Client';
+      case 'ZOOKEEPER_SERVER':
+        return 'ZooKeeper Server';
+      case 'ZOOKEEPER_CLIENT':
+        return 'ZooKeeper Client';
+      case 'HIVE_SERVER':
+        return 'Hive Server';
+      case 'HIVE_CLIENT':
+        return 'Hive Client';
+      case 'HIVE_MYSQL':
+        return 'Hive MySQL';
+      case 'HBASE_MASTER':
+        return 'HBase Master';
+      case 'HBASE_REGIONSERVER':
+        return 'RegionServer';
+      case 'HBASE_CLIENT':
+        return 'HBase Client';
+      case 'PIG_CLIENT':
+        return 'Pig Client';
+      case 'SQOOP_CLIENT':
+        return 'Sqoop Client';
+      case 'TEMPLETON_SERVER':
+        return 'Templeton Server';
+      case 'TEMPLETON_CLIENT':
+        return 'Templeton Client';
+      case 'OOZIE_SERVER':
+        return 'Oozie Server';
+      case 'OOZIE_CLIENT':
+        return 'Oozie Client';
+      case 'NAGIOS_SERVER':
+        return 'Nagios Server';
+      case 'GANGLIA_SERVER':
+        return 'Ganglia Collector';
+      case 'GANGLIA_MONITOR':
+        return 'Ganglia Monitor';
+    }
+    return this.get('componentName');
+  }.property('componentName'),
+
+  isMaster: function() {
+    switch (this.get('componentName')) {
+      case 'NAMENODE':
+      case 'SNAMENODE':
+      case 'JOBTRACKER':
+      case 'ZOOKEEPER_SERVER':
+      case 'HIVE_SERVER':
+      case 'HBASE_MASTER':
+      case 'NAGIOS_SERVER':
+      case 'GANGLIA_SERVER':
+      case 'OOZIE_SERVER':
+      case 'TEMPLETON_SERVER':
+        return true;
+      default:
+        return false;
+    }
+    return this.get('componentName');
+  }.property('componentName')
+});
+
+App.HostComponent1 = DS.Model.extend({
+  primaryKey: 'hostComponentId',
+  hostComponentId: DS.attr('string'), // component_name + host_name
+  state: DS.attr('string'),
+  host: DS.belongsTo('App.Host'),
+  hostName: DS.attr('string')
+});
+
+// A hack to allow App.<model>.find() with the DS.FixtureAdapter
+App.Service1.FIXTURES = [];
+App.Service1Component.FIXTURES = [];
+App.HostComponent1.FIXTURES = [];

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -19,6 +19,7 @@
 
 var App = require('app');
 var date = require('utils/date');
+var misc = require('utils/misc');
 
 App.Run = DS.Model.extend({
   runId:DS.attr('string'),
@@ -27,22 +28,77 @@ App.Run = DS.Model.extend({
   userName:DS.attr('string'),
   startTime:DS.attr('string'),
   lastUpdateTime:DS.attr('string'),
-  numJobsTotal:DS.attr('number'),
-  numJobsCompleted:DS.attr('number'),
-  input: DS.attr('number'),
-  output: DS.attr('number'),
   appId:DS.attr('number'),
   jobs:DS.hasMany('App.Job'),
+  /**
+   * Number of comleted jobs.
+   * Field calculates dynamicaly using <code>jobs</code> property
+   */
+  numJobsCompleted: function() {
+    return this.get('jobs').filterProperty('status', 'RUNNING').length;
+  }.property('jobs.@each.status'),
   duration: function() {
     return date.dateFormatInterval(parseInt((parseInt(this.get('lastUpdateTime')) - parseInt(this.get('startTime')))/1000));
   }.property('lastUpdateTime', 'startTime'),
+  /**
+   * Status of running jobs
+   * Field calculates dynamicaly using <code>jobs</code> property
+   */
   isRunning: function () {
     if (!this.get('isLoaded')) {
       return false;
     }
-    console.log('RUN: ' + this.get('id')+' '+this.get('jobs').someProperty('status', 'RUNNING'));
     return this.get('jobs').someProperty('status', 'RUNNING');
   }.property('jobs.@each.status'),
+  /**
+   * Sum of input bandwidth for all jobs
+   * Field calculates dynamicaly using <code>jobs</code> property
+   */
+  input: function () {
+    var sum = 0;
+    this.get('jobs').forEach(
+        function(item){
+          sum += item.get('input') || 0;
+        });
+    return sum;
+  }.property('jobs.@each.input'),
+  /**
+   *  Sum of input bandwidth for all jobs with appropriate measure
+   * Field calculates dynamicaly using <code>jobs</code> property
+   */
+  inputFormatted: function () {
+    var input = this.get('input');
+    input = misc.formatBandwidth(input);
+    return input;
+  }.property('input'),
+  /**
+   * Sum of output bandwidth for all jobs
+   * Field calculates dynamicaly using <code>jobs</code> property
+   */
+  output: function () {
+    var sum = 0;
+    this.get('jobs').forEach(
+        function(item){
+          sum += item.get('output') || 0;
+        });
+    return sum;
+  }.property('jobs.@each.output'),
+  /**
+   *  Sum of output bandwidth for all jobs with appropriate measure
+   *  Field calculates dynamicaly using <code>jobs</code> property
+   */
+  outputFormatted: function () {
+    var output = this.get('output');
+    output = misc.formatBandwidth(output);
+    return output;
+  }.property('output'),
+  /**
+   * Number of jobs on this run
+   * Field calculates dynamicaly using <code>jobs</code> property
+   */
+  numJobsTotal: function() {
+    return this.get('jobs.content').length;
+  }.property('jobs'),
   lastUpdateTimeFormatted: function() {
     return date.dateFormat(this.get('lastUpdateTime'));
   }.property('lastUpdateTime')
@@ -57,10 +113,6 @@ App.Run.FIXTURES = [
     user_name:'user3',
     start_time:1347539541501,
     last_update_time:'1347639541501',
-    num_jobs_total:5,
-    num_jobs_completed:0,
-    input: 11,
-    output: 30,
     app_id:1,
     jobs:[1, 2, 3, 4, 5]
   },
@@ -72,10 +124,6 @@ App.Run.FIXTURES = [
     user_name:'user1',
     start_time:1347339951502,
     last_update_time:'1347439951502',
-    num_jobs_total:5,
-    num_jobs_completed:2,
-    input: 10,
-    output: 30,
     app_id:4,
     jobs:[4, 5, 1, 3, 6]
   },
@@ -87,10 +135,6 @@ App.Run.FIXTURES = [
     user_name:'user2',
     start_time:1341539841503,
     last_update_time:'1341639841503',
-    num_jobs_total:5,
-    num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:1,
     jobs:[6, 7, 8, 9, 10]
   },
@@ -102,10 +146,7 @@ App.Run.FIXTURES = [
     user_name:'user1',
     start_time:1347539591504,
     last_update_time:'1347639591504',
-    num_jobs_total:3,
     num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:2,
     jobs:[8, 9, 10]
   },
@@ -117,10 +158,6 @@ App.Run.FIXTURES = [
     user_name:'user5',
     start_time:1347531541505,
     last_update_time:'1347631541505',
-    num_jobs_total:3,
-    num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:2,
     jobs:[8, 9, 10]
   },
@@ -132,10 +169,6 @@ App.Run.FIXTURES = [
     user_name:'user1',
     start_time:1342439541506,
     last_update_time:'1342639541506',
-    num_jobs_total:3,
-    num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:2,
     jobs:[8, 9, 10]
   },
@@ -147,10 +180,6 @@ App.Run.FIXTURES = [
     user_name:'jsmith',
     start_time:1347539541507,
     last_update_time:'1347639541507',
-    num_jobs_total:4,
-    num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:4,
     jobs:[1, 3, 5, 7]
   },
@@ -162,10 +191,6 @@ App.Run.FIXTURES = [
     user_name:'jsmith',
     start_time:1347539541508,
     last_update_time:'1347639541508',
-    num_jobs_total:4,
-    num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:3,
     jobs:[1, 3, 5, 7]
   },
@@ -177,10 +202,6 @@ App.Run.FIXTURES = [
     user_name:'user1',
     start_time:1347539541509,
     last_update_time:'1347639541509',
-    num_jobs_total:4,
-    num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:3,
     jobs:[1, 3, 5, 7]
   },
@@ -192,10 +213,6 @@ App.Run.FIXTURES = [
     user_name:'user1',
     start_time:1347539541510,
     last_update_time:'1347639541510',
-    num_jobs_total:4,
-    num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:3,
     jobs:[1, 3, 5, 7]
   },
@@ -207,10 +224,6 @@ App.Run.FIXTURES = [
     user_name:'user1',
     start_time:1347539541511,
     last_update_time:'1347639541511',
-    num_jobs_total:4,
-    num_jobs_completed:0,
-    input: 10,
-    output: 30,
     app_id:3,
     jobs:[1, 3, 5, 7]
   }

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=1418895&r1=1418894&r2=1418895&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 Sun Dec  9 11:53:15 2012
@@ -210,9 +210,10 @@ App.Service.FIXTURES = [
   {
     id:4,
     service_name:'zookeeper',
-    label:'Zookeeper',
+    label:'ZooKeeper',
     health_status:App.Service.Health.stop,
     work_status:false,
+    components:[1, 2, 3],
     alerts:[7, 8]
   },
   {
@@ -221,14 +222,16 @@ App.Service.FIXTURES = [
     label:'Oozie',
     health_status:App.Service.Health.dead,
     work_status:false,
+    components:[8],
     alerts:[9, 10]
   },
   {
     id:6,
     service_name:'hive',
-    label:'Hive',
+    label:'Hive + HCatalog',
     health_status:App.Service.Health.dead,
     work_status:false,
+    components:[5],
     alerts:[11, 12]
   }
 ];

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -49,21 +49,21 @@ App.Router = Em.Router.extend({
     });*/
   },
 
-
-  setInstallerCurrentStep: function (currentStep, completed) {
-    App.db.setInstallerCurrentStep(currentStep, completed);
-    this.set('installerController.currentStep', currentStep);
+  /**
+   * Temporary fix for getting cluster name
+   * @return {*}
+   */
+  getClusterName: function(){
+    return App.db.getClusterName();
   },
 
+
+  /**
+   * Get current step of Installer wizard
+   * @return {*}
+   */
   getInstallerCurrentStep: function () {
-    var loginName = this.getLoginName();
-    var currentStep = App.db.getInstallerCurrentStep();
-    console.log('getInstallerCurrentStep: loginName=' + loginName + ", currentStep=" + currentStep);
-    if (!currentStep) {
-      currentStep = '1';
-    }
-    console.log('returning currentStep=' + currentStep);
-    return currentStep;
+    return this.getWizardCurrentStep('installer');
   },
 
   /**

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -24,7 +24,6 @@ module.exports = Em.Route.extend({
 
     Ember.run.next(function () {
       var addHostController = router.get('addHostController');
-      addHostController.loadAllPriorSteps();
       router.transitionTo('step' + addHostController.get('currentStep'));
     });
 

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -24,7 +24,6 @@ module.exports = Em.Route.extend({
 
     Ember.run.next(function () {
       var addServiceController = router.get('addServiceController');
-      addServiceController.loadAllPriorSteps();
       router.transitionTo('step' + addServiceController.get('currentStep'));
     });
 

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -28,10 +28,12 @@ module.exports = Em.Route.extend({
     if (router.getAuthenticated()) {
       router.get('mainController').stopLoadOperationsPeriodically();
       console.log('In installer with successful authenticated');
-      // router.loadAllPriorSteps(router.getInstallerCurrentStep());
+
       Ember.run.next(function () {
-        router.transitionTo('step' + router.getInstallerCurrentStep());
+        var installerController = router.get('installerController');
+        router.transitionTo('step' + installerController.get('currentStep'));
       });
+
     } else {
       console.log('In installer but its not authenticated');
       console.log('value of authenticated is: ' + router.getAuthenticated());
@@ -49,7 +51,9 @@ module.exports = Em.Route.extend({
       this._super(router, event);
     } else {
       router.set('backBtnForHigherStep', true);
-      router.transitionTo('step' + router.getInstallerCurrentStep());
+
+      var installerController = router.get('installerController');
+      router.transitionTo('step' + installerController.get('currentStep'));
     }
   },
 
@@ -63,7 +67,7 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router) {
       console.log('in installer.step1:connectOutlets');
       var controller = router.get('installerController');
-      router.setInstallerCurrentStep('1', false);
+      controller.setCurrentStep('1', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep1', controller.get('content'));
     },
@@ -81,10 +85,9 @@ module.exports = Em.Route.extend({
     route: '/step2',
     connectOutlets: function (router, context) {
       router.setNavigationFlow('step2');
-      var controller = router.get('installerController');
-      router.setInstallerCurrentStep('2', false);
 
       var controller = router.get('installerController');
+      controller.setCurrentStep('2', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep2', controller.get('content.hosts'));
     },
@@ -118,7 +121,7 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router) {
       console.log('in installer.step3:connectOutlets');
       var controller = router.get('installerController');
-      router.setInstallerCurrentStep('3', false);
+      controller.setCurrentStep('3', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep3', controller.get('content'));
     },
@@ -149,8 +152,8 @@ module.exports = Em.Route.extend({
     route: '/step4',
     connectOutlets: function (router, context) {
       router.setNavigationFlow('step4');
-      router.setInstallerCurrentStep('4', false);
       var controller = router.get('installerController');
+      controller.setCurrentStep('4', false);
       controller.loadAllPriorSteps();
       controller.loadServices();
       controller.connectOutlet('wizardStep4', controller.get('content.services'));
@@ -173,8 +176,9 @@ module.exports = Em.Route.extend({
     route: '/step5',
     connectOutlets: function (router, context) {
       router.setNavigationFlow('step5');
-      router.setInstallerCurrentStep('5', false);
+
       var controller = router.get('installerController');
+      controller.setCurrentStep('5', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep5', controller.get('content'));
     },
@@ -193,8 +197,9 @@ module.exports = Em.Route.extend({
     route: '/step6',
     connectOutlets: function (router, context) {
       router.setNavigationFlow('step6');
-      router.setInstallerCurrentStep('6', false);
+
       var controller = router.get('installerController');
+      controller.setCurrentStep('6', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep6', controller.get('content'));
     },
@@ -217,7 +222,7 @@ module.exports = Em.Route.extend({
     route: '/step7',
     connectOutlets: function (router, context) {
       var controller = router.get('installerController');
-      router.setInstallerCurrentStep('7', false);
+      controller.setCurrentStep('7', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep7', controller.get('content'));
     },
@@ -235,7 +240,7 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router, context) {
       console.log('in installer.step8:connectOutlets');
       var controller = router.get('installerController');
-      router.setInstallerCurrentStep('8', false);
+      controller.setCurrentStep('8', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep8', controller.get('content'));
     },
@@ -254,7 +259,7 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router, context) {
       console.log('in installer.step9:connectOutlets');
       var controller = router.get('installerController');
-      router.setInstallerCurrentStep('9', false);
+      controller.setCurrentStep('9', false);
       controller.loadAllPriorSteps();
       if (!App.testMode) {              //if test mode is ON don't disable prior steps link.
         controller.setLowerStepsDisable(9);
@@ -262,7 +267,7 @@ module.exports = Em.Route.extend({
       controller.connectOutlet('wizardStep9', controller.get('content'));
     },
     back: Em.Router.transitionTo('step8'),
-    retry: function (router, context) {
+    retry: function (router) {
       var installerController = router.get('installerController');
       var wizardStep9Controller = router.get('wizardStep9Controller');
       installerController.installServices();
@@ -282,16 +287,17 @@ module.exports = Em.Route.extend({
     connectOutlets: function (router, context) {
       console.log('in installer.step10:connectOutlets');
       var controller = router.get('installerController');
-      router.setInstallerCurrentStep('10', false);
+      controller.setCurrentStep('10', false);
       controller.loadAllPriorSteps();
       controller.connectOutlet('wizardStep10',controller.get('content'));
     },
     back: Em.Router.transitionTo('step9'),
     complete: function (router, context) {
       if (true) {   // this function will be moved to installerController where it will validate
-        router.setInstallerCurrentStep('1', true);
+        var controller = router.get('installerController');
+        controller.setCurrentStep('1', false);
         router.setSection('main');
-        router.transitionTo('main');
+        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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -23,9 +23,6 @@ module.exports = Em.Route.extend({
     if (router.getAuthenticated()) {
       router.get('mainController').startLoadOperationsPeriodically();
       // TODO: redirect to last known state
-       Ember.run.next(function () {
-         router.transitionTo('dashboard');
-       });
     } else {
       Ember.run.next(function () {
         router.transitionTo('login');
@@ -38,6 +35,13 @@ module.exports = Em.Route.extend({
     redirectsTo:'dashboard'
   }),
 
+  test: Em.Route.extend({
+    route: '/test',
+    connectOutlets:function (router, context) {
+      router.get('mainController').connectOutlet('mainTest');
+    }
+  }),
+
   connectOutlets:function (router, context) {
     router.get('applicationController').connectOutlet('main');
   },
@@ -320,9 +324,6 @@ module.exports = Em.Route.extend({
     service:Em.Route.extend({
       route:'/:service_id',
       connectOutlets:function (router, service) {
-//        if (service.name == "undefined") {
-//          service = App.Service.find(1);
-//        }
         router.get('mainServiceController').connectOutlet('mainServiceItem', service);
         router.transitionTo('summary');
       },

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -212,9 +212,24 @@ h1 {
     padding-left: 0;
   }
   #installOptions {
+    .sshKey-file-view {
+      width: 486px;
+      height: 200px;
+      overflow-y: auto;
+      border: 1px solid #ccc;
+      margin-top: 5px;
+      padding: 8px;
+      font-family: Consolas,"Liberation Mono",Courier,monospace;
+    }
+    .manual-install {
+      margin-top: 10px;
+    }
     #targetHosts {
 
     }
+    .span6{
+      min-width: 504px;
+    }
     #hostConnectivity {
       margin-top: 20px;
       .control-group {
@@ -247,68 +262,6 @@ h1 {
   #step6 .pre-scrollable {
     max-height: 440px;
   }
-  #serviceConfig {
-    .accordion-heading {
-      background-color: #f0f0f0;
-    }
-    .accordion-group {
-      margin-bottom: 20px;
-      .control-group {
-        margin: 10px 0;
-      }
-      form {
-        margin-bottom: 0;
-      }
-    }
-    .badge {
-      margin-left: 4px;
-    }
-    .slave-component-group-menu {
-      float: left;
-      .nav {
-        margin-bottom: 10px;
-      }
-      .nav li {
-        position: relative;
-        a {
-          padding-right: 24px;
-        }
-        .icon-remove {
-          border: 1px solid white;
-          position: absolute;
-          right: 7px;
-          top: 10px;
-          z-index: 2;
-          cursor: default;
-          color: #555555;
-        }
-        .icon-remove:hover {
-          border: 1px solid grey;
-        }
-      }
-    }
-    .remove-group-error {
-      display: none;
-    }
-    .add-slave-component-group {
-      margin-bottom: 10px;
-    }
-    .master-host, .master-hosts, .slave-hosts {
-      padding-top: 5px;
-      line-height: 20px;
-    }
-    #attention {
-      margin: 20px 0;
-    }
-    .retyped-password {
-      margin-left: 14px;
-    }
-    #slave-hosts-popup {
-      ul {
-        list-style-type: none;
-      }
-    }
-  }
   #deploy {
     #overallProgress {
     }
@@ -336,6 +289,69 @@ h1 {
   }
 }
 
+#serviceConfig {
+  .accordion-heading {
+    background-color: #f0f0f0;
+  }
+  .accordion-group {
+    margin-bottom: 20px;
+    .control-group {
+      margin: 10px 0;
+    }
+    form {
+      margin-bottom: 0;
+    }
+  }
+  .badge {
+    margin-left: 4px;
+  }
+  .slave-component-group-menu {
+    float: left;
+    .nav {
+      margin-bottom: 10px;
+    }
+    .nav li {
+      position: relative;
+      a {
+        padding-right: 24px;
+      }
+      .icon-remove {
+        border: 1px solid white;
+        position: absolute;
+        right: 7px;
+        top: 10px;
+        z-index: 2;
+        cursor: default;
+        color: #555555;
+      }
+      .icon-remove:hover {
+        border: 1px solid grey;
+      }
+    }
+  }
+  .remove-group-error {
+    display: none;
+  }
+  .add-slave-component-group {
+    margin-bottom: 10px;
+  }
+  .master-host, .master-hosts, .slave-hosts {
+    padding-top: 5px;
+    line-height: 20px;
+  }
+  #attention {
+    margin: 20px 0;
+  }
+  .retyped-password {
+    margin-left: 14px;
+  }
+  #slave-hosts-popup {
+    ul {
+      list-style-type: none;
+    }
+  }
+}
+
 a:focus {
   outline: none;
 }
@@ -491,6 +507,7 @@ a:focus {
   border-collapse: collapse;
 
   td.summary-label {
+    width: 180px;
     text-align: right;
   }
 
@@ -628,16 +645,16 @@ a:focus {
 #services-menu {
   .nav-list {
     .tab-marker-position {
-
       background-position: 6px 5px;
       background-repeat: no-repeat;
       list-style: none;
       height: 20px;
       width: 20px;
-      margin-left: 0; //      padding-left: 30px;
-    //      padding-right: 30px;
-    //      background-position: 12px 9px;
-    //      background-repeat: no-repeat;
+      margin-left: 0;
+      // padding-left: 30px;
+      // padding-right: 30px;
+      // background-position: 12px 9px;
+      // background-repeat: no-repeat;
     }
     .health-status-LIVE {
       .tab-marker-position;
@@ -647,6 +664,9 @@ a:focus {
       .tab-marker-position;
       background-image: @status-dead-marker;
     }
+    .health-status-undefined {
+      .tab-marker-position;
+    }
     li {
       line-height: 24px;
     }
@@ -749,6 +769,15 @@ a:focus {
   .health-status-DEAD-YELLOW {
     background-image: @status-dead-yellow-marker;
   }
+  .host-name-search{
+    position: relative;
+    top: 0px;
+    left: 10px;
+  }
+  .host-name-pos{
+    position: relative;
+    top: 10px;
+  }
   .box-header {
     .btn-group {
       float: left;
@@ -766,7 +795,7 @@ a:focus {
       background: #EDF5FC;
     }
     th, td {
-      width: 130px;
+      width: 82px;
     }
     th.first, td.first {
       width: 30px;
@@ -856,6 +885,9 @@ a:focus {
   }
 
   #host-details {
+
+    margin-top: 27px;
+
     .component-operation-button{
       background-color: #E5E5E5;
       background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#F1F1F1));
@@ -1580,7 +1612,7 @@ ul.inline li {
 
 #host-details > .host-maintenance {
   text-align: right;
-  margin-top: -20px;
+  margin-top: -28px;
 }
 
 #host-details > .host-maintenance > div {
@@ -1626,9 +1658,8 @@ ul.inline li {
 }
 
 #step8-content {
-  max-height: 570px;
+  max-height: 440px;
 }
-
 #step10-content {
   max-height: 440px;
 }

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=1418895&r1=1418894&r2=1418895&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 11:53:15 2012
@@ -5,9 +5,12 @@
   .table thead th{
     vertical-align:top;
   }
-  .avg-table td {
-    text-align:center;
-    border:none;
+  .avg-table {
+    background-color: #F9F9F9;
+    td {
+      text-align:center;
+      border:none;
+    }
   }
   td.avg-star{
     border-left:1px solid #DDD;
@@ -107,9 +110,17 @@
   }
   #graph1 {
     margin-left: 30px;
+    width: 440px;
+    #legend_container {
+      margin: 40px 0 0 20px;
+    }
   }
   #graph2 {
     margin-right: 30px;
+    width: 500px;
+    #tasks_legend_container {
+      margin: 40px 0 0 20px;
+    }
   }
 
   tr.containerRow > td{
@@ -140,7 +151,7 @@
   td .table-striped tbody
   tr:nth-child(odd) td,
   tr:nth-child(even) th{
-    background: none;
+    background-color: none;
   }
 
   .sorting_asc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAHgAAAMBAQAAAAAAAAAAAAAAAAAFCAYKAQACAQUAAAAAAAAAAAAAAAAABQMCBAYHCBAAAQUAAQMEAwAAAAAAAAAAAwECBAUGABESByExIghBMxQRAAIBAwMDAwUAAAAAAAAAAAECAwAEBRESBiExUUHhB2GBIhMU/9oADAMBAAIRAxEAPwDvA8k+Qc54sxGj32qlNi0ucrjTj/JqGlmROyJXQ2u/bOsZTmBExPd70/HXmQcW41lOX5+145h0L391KEHhR3Z28Ii6sx9AKgubiO1gaeU6Io19h9TUg/S/7eP+wia3NbBIFbuqiyn3VTCjIMArHHTJarEDGGiNU8vOKVsc7/VxBuGR3yV683X86/Cq/GpssrhP2S8emiSKRm1JS5VfyLH0WfQug7KwZR0CilWHy39++ObQTgkgeV9ux+xq9uc6U8pLfZzP6mClZpKWrvq1DilJAt4Mewh/0hRyBOsaUMoVKLvXtVU6t6+nL/HZTJYi4/rxU81tdbSu+N2Rtp7jcpB0OnUa9aoeOOVdsgDL4I1pFS+NPHmcsQ2+fw+UpLWOwwwWNVQ1kCaIcgaiONkmLGEZrDDXtcnXo5PfjC+5VybKWrWWSyF5cWbEEpJNI6kqdQSrMRqD1B9KjS2t423xoqt5AArb8
 QVPRwoo4UUcKK//2Q==) no-repeat 85% 50%; }

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/login.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/login.hbs?rev=1418895&r1=1418894&r2=1418895&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/login.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/login.hbs Sun Dec  9 11:53:15 2012
@@ -26,8 +26,6 @@
     <label>{{t login.username}}</label>
     {{view Ember.TextField valueBinding="loginName" class="span4"}}
     <label>{{t login.password}}</label>
-    {{view Ember.TextField type="password" valueBinding="password" class="span4"}}
-    <div>
-        <a class="btn btn-success" {{action "submit" target="controller"}}>{{t login.loginButton}}</a>
-    </div>
+    {{view view.passTextField type="password" valueBinding="password" class="span4"}}
+        <button class="btn btn-success" {{action "submit" target="controller"}}>{{t login.loginButton}}</button>
 </div>

Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps.hbs?rev=1418895&r1=1418894&r2=1418895&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/apps.hbs Sun Dec  9 11:53:15 2012
@@ -54,12 +54,12 @@
             </tbody>
   </table>
     <div id="filter_info" class="row">
-      <div class="span3">Show:
-        <a href="javascript:void(0)" class="selected" {{action "changeViewType" target="view"}} data-view-type="all">All ({{view.content.length}})</a> &#124;
-        <a href="javascript:void(0)" {{action "changeViewType" target="view"}} data-view-type="filtered">Filtered ({{view.filtered}})</a> &#124;
-        <a href="javascript:void(0)" {{action "changeViewType" target="view"}} data-view-type="starred">Starred ({{view.staredData.count}})</a>
+      <div class="span3" id="filter_buttons">Show:
+        <a href="javascript:void(0)" class="all selected" {{action "clickViewType" target="view"}} data-view-type="all">All ({{view.content.length}})</a> &#124;
+        <a href="javascript:void(0)" class="filtered" {{action "clickViewType" target="view"}} data-view-type="filtered">Filtered ({{view.filtered}})</a> &#124;
+        <a href="javascript:void(0)" class="stared" {{action "clickViewType" target="view"}} data-view-type="starred">Starred ({{view.staredData.count}})</a>
       </div>
-      <div class="span2"><a href="#" {{action "clearFilters" target="view"}}>Clear filters</a>&nbsp;&#124;&nbsp;<a href="#" {{action "clearStars" target="controller"}}>Clear stars</a></div>
+      <div class="span2"><a href="#" {{action "clearFilters" target="view"}}>Clear filters</a>&nbsp;&#124;&nbsp;<a href="#" {{action "clearStars" target="view"}}>Clear stars</a></div>
     </div>
     <div>
     </div>
@@ -78,7 +78,7 @@
       <th>Run Date</th>
     </tr>
     <tr>
-      <th></th>
+      <th>{{view view.starFilterView viewName="starFilterViewInstance"}}</th>
       <th>{{view view.appidFilterView}}</th>
       <th>{{view view.nameFilterView}}</th>
       <th>{{view view.typeSelectView}}</th>