Repository: ambari
Updated Branches:
  refs/heads/trunk edf653280 -> 9c75be753


AMBARI-6458. Display and support default service actions for the new services. 
(Buzhor Denys via alexantonenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9c75be75
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9c75be75
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9c75be75

Branch: refs/heads/trunk
Commit: 9c75be7535fb707abec484c6b85a01ef10f4c79d
Parents: edf6532
Author: Alex Antonenko <hiv...@gmail.com>
Authored: Thu Jul 10 20:32:35 2014 +0300
Committer: Alex Antonenko <hiv...@gmail.com>
Committed: Thu Jul 10 20:32:35 2014 +0300

----------------------------------------------------------------------
 ambari-web/app/models/service.js               |   3 +-
 ambari-web/app/templates/main/service/item.hbs |   2 +-
 ambari-web/app/views/main/service/item.js      | 155 +++++++++++++-------
 3 files changed, 106 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/9c75be75/ambari-web/app/models/service.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/service.js b/ambari-web/app/models/service.js
index 567d6fd..7c3c6cd 100644
--- a/ambari-web/app/models/service.js
+++ b/ambari-web/app/models/service.js
@@ -78,7 +78,8 @@ App.Service = DS.Model.extend(App.ServiceModelMixin, {
   serviceTypes: function() {
     var typeServiceMap = {
       GANGLIA: ['MONITORING'],
-      NAGIOS:  ['MONITORING']
+      NAGIOS:  ['MONITORING'],
+      HDFS: ['HA_MODE']
     };
     return typeServiceMap[this.get('serviceName')] || [];
   }.property('serviceName'),

http://git-wip-us.apache.org/repos/asf/ambari/blob/9c75be75/ambari-web/app/templates/main/service/item.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/item.hbs 
b/ambari-web/app/templates/main/service/item.hbs
index 7b904f0..a13ffd9 100644
--- a/ambari-web/app/templates/main/service/item.hbs
+++ b/ambari-web/app/templates/main/service/item.hbs
@@ -83,7 +83,7 @@
 
         <!-- Other service actions -->
         {{#each option in view.maintenance}}
-        <li {{bindAttr class="option.disabled:disabled"}}>
+        <li {{bindAttr class="option.disabled:disabled 
option.isHidden:hidden"}}>
           <a {{action "doAction" option target="controller" href=true}}><i 
{{bindAttr class="option.cssClass"}}></i>
 {{option.label}}</a>
         </li>

http://git-wip-us.apache.org/repos/asf/ambari/blob/9c75be75/ambari-web/app/views/main/service/item.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/item.js 
b/ambari-web/app/views/main/service/item.js
index 234059b..d685097 100644
--- a/ambari-web/app/views/main/service/item.js
+++ b/ambari-web/app/views/main/service/item.js
@@ -21,74 +21,125 @@ var batchUtils = require('utils/batch_scheduled_requests');
 
 App.MainServiceItemView = Em.View.extend({
   templateName: require('templates/main/service/item'),
+
+  serviceName: function() {
+    return this.get('controller.content.serviceName');
+  }.property('controller.content.serviceName'),
+
+  displayName: function() {
+    return this.get('controller.content.displayName');
+  }.property('controller.content.displayName'),
+
+  isPassive: function() {
+    return this.get('controller.content.passiveState') === 'ON';
+  }.property('controller.content.passiveState'),
+
+  actionMap: function() {
+    return {
+      RESTART_ALL: {
+        action: 'restartAllHostComponents',
+        context: this.get('serviceName'),
+        label: Em.I18n.t('restart.service.all'),
+        cssClass: 'icon-repeat',
+        disabled: false
+      },
+      RUN_SMOKE_TEST: {
+        action: 'runSmokeTest',
+        label: Em.I18n.t('services.service.actions.run.smoke'),
+        cssClass: 'icon-thumbs-up-alt'
+      },
+      REFRESH_CONFIGS: {
+        action: 'refreshConfigs',
+        label: Em.I18n.t('hosts.host.details.refreshConfigs'),
+        cssClass: 'icon-refresh',
+        disabled: !this.get('controller.content.isRestartRequired')
+      },
+      ROLLING_RESTART: {
+        action: 'rollingRestart',
+        context: this.get('rollingRestartComponent'),
+        label: Em.I18n.t('rollingrestart.dialog.title'),
+        cssClass: 'icon-time',
+        disabled: false
+      },
+      TOGGLE_PASSIVE: {
+        action: 'turnOnOffPassive',
+        context: this.get('isPassive') ? 
Em.I18n.t('passiveState.turnOffFor').format(this.get('displayName')) : 
Em.I18n.t('passiveState.turnOnFor').format(this.get('displayName')),
+        label: this.get('isPassive') ? Em.I18n.t('passiveState.turnOff') : 
Em.I18n.t('passiveState.turnOn'),
+        cssClass: 'icon-medkit',
+        disabled: false
+      },
+      TOGGLE_HA: {
+        action: App.isHaEnabled ? 'disableHighAvailability' : 
'enableHighAvailability',
+        label: App.isHaEnabled ? 
Em.I18n.t('admin.highAvailability.button.disable') : 
Em.I18n.t('admin.highAvailability.button.enable'),
+        cssClass: App.isHaEnabled ? 'icon-arrow-down' : 'icon-arrow-up',
+        isHidden: (App.isHAEnabled && !App.autoRollbackHA)
+      },
+      MOVE_COMPONENT: {
+        action: 'reassignMaster',
+        context: '',
+        label: Em.I18n.t('services.service.actions.reassign.master'),
+        cssClass: 'icon-share-alt',
+        disabled: false
+      }
+    }
+  },
+  /**
+   * Create option for MOVE_COMPONENT or ROLLING_RESTART task.
+   *
+   * @param {Object} option - one of the options that return by 
<code>actionMap()</code>
+   * @param {Object} fields - option fields to add/rewrite
+   * @return {Object}
+   */
+  createOption: function(option, fields) {
+    return $.extend(true, {}, option, fields);
+  },
+
   maintenance: function(){
+    var self = this;
     var options = [];
     var service = this.get('controller.content');
-    var hosts = App.router.get('mainHostController.hostsCountMap')['TOTAL'];
     var allMasters = 
this.get('controller.content.hostComponents').filterProperty('isMaster').mapProperty('componentName').uniq();
-    var disabled = this.get('controller.isStopDisabled');
-    var serviceName = service.get('serviceName');
-    var displayName = service.get('displayName');
-    var disableRefreshConfgis = !service.get('isRestartRequired');
+    var allSlaves = 
this.get('controller.content.hostComponents').filterProperty('isSlave').mapProperty('componentName').uniq();
+    var actionMap = this.actionMap();
 
     if (this.get('controller.isClientsOnlyService')) {
-      if (serviceName != 'TEZ') {
-        options.push({action: 'runSmokeTest', cssClass: 'icon-thumbs-up-alt', 
'label': Em.I18n.t('services.service.actions.run.smoke')});
+      options.push(actionMap.RUN_SMOKE_TEST);
+      options.push(actionMap.REFRESH_CONFIGS);
+      if (this.get('serviceName') === 'TEZ') {
+        options = options.without(actionMap.RUN_SMOKE_TEST);
       }
-      options.push({action: 'refreshConfigs', cssClass: 'icon-refresh', 
'label': Em.I18n.t('hosts.host.details.refreshConfigs'), disabled: 
disableRefreshConfgis});
     } else {
-      // Restart All action
-      options.push({action:'restartAllHostComponents', cssClass: 
'icon-repeat', context: serviceName, 'label': Em.I18n.t('restart.service.all'), 
disabled: false});
-      // Rolling Restart action
-      var rrComponentName = 
batchUtils.getRollingRestartComponentName(serviceName);
-      if (rrComponentName) {
-        var label = 
Em.I18n.t('rollingrestart.dialog.title').format(App.format.role(rrComponentName));
-        options.push({action:'rollingRestart', cssClass: 'icon-time', context: 
rrComponentName, 'label': label, disabled: false});
-      }
-      if (serviceName == 'FLUME') {
-        options.push({action: 'refreshConfigs', cssClass: 'icon-refresh', 
'label': Em.I18n.t('hosts.host.details.refreshConfigs'), disabled: 
disableRefreshConfgis});
+      if (this.get('serviceName') === 'FLUME') {
+        options.push(actionMap.REFRESH_CONFIGS);
       }
-      if (serviceName == 'HDFS') {
-        if (App.isHaEnabled) {
-          if (App.supports.autoRollbackHA) {
-            options.push({action: 'disableHighAvailability', cssClass: 
'icon-arrow-down', 'label': 
Em.I18n.t('admin.highAvailability.button.disable')});
-          }
-        } else {
-          options.push({action: 'enableHighAvailability', cssClass: 
'icon-arrow-up', 'label': Em.I18n.t('admin.highAvailability.button.enable')});
-        }
+      options.push(actionMap.RESTART_ALL);
+      allSlaves.forEach(function(slave) {
+        options.push(self.createOption(actionMap.ROLLING_RESTART, {
+          context: slave,
+          label: actionMap.ROLLING_RESTART.label.format(App.format.role(slave))
+        }));
+      });
+      allMasters.filter(function(master) {
+        return App.get('components.reassignable').contains(master);
+      }).forEach(function(master) {
+        options.push(self.createOption(actionMap.MOVE_COMPONENT, {
+          context: master,
+          label: actionMap.MOVE_COMPONENT.label.format(App.format.role(master))
+        }));
+      });
+      if (service.get('serviceTypes').contains('HA_MODE')) {
+        options.push(actionMap.TOGGLE_HA);
       }
-      // Service Check and Reassign Master actions
-      switch (serviceName) {
-        case 'GANGLIA':
-        case 'NAGIOS':
-          break;
-        case 'YARN':
-        case 'HDFS':
-        case 'MAPREDUCE':
-          if (App.supports.reassignMaster && hosts > 1) {
-            allMasters.forEach(function (hostComponent) {
-              if (App.get('components.reassignable').contains(hostComponent)) {
-                options.push({action: 'reassignMaster', context: 
hostComponent, cssClass: 'icon-share-alt',
-                  'label': 
Em.I18n.t('services.service.actions.reassign.master').format(App.format.role(hostComponent)),
 disabled: false});
-              }
-            })
-          }
-        default:
-          options.push({action: 'runSmokeTest', cssClass: 
'icon-thumbs-up-alt', 'label': Em.I18n.t('services.service.actions.run.smoke'), 
disabled:disabled});
-      }
-      var requestLabel = service.get('passiveState') === "OFF" ?
-          Em.I18n.t('passiveState.turnOnFor').format(displayName) :
-          Em.I18n.t('passiveState.turnOffFor').format(displayName);
-      var passiveLabel = service.get('passiveState') === "OFF" ?
-          Em.I18n.t('passiveState.turnOn') :
-          Em.I18n.t('passiveState.turnOff');
-      options.push({action:'turnOnOffPassive', cssClass: 'icon-medkit', 
context:requestLabel, 'label':passiveLabel , disabled: false});
+      options.push(actionMap.RUN_SMOKE_TEST);
+      options.push(actionMap.TOGGLE_PASSIVE);
     }
     return options;
   }.property('controller.content', 
'controller.isStopDisabled','controller.isClientsOnlyService'),
+
   isMaintenanceActive: function() {
     return this.get('maintenance').length !== 0;
   }.property('maintenance'),
+
   hasConfigTab: function() {
     return 
!App.get('services.noConfigTypes').concat('HCATALOG').contains('controller.content.serviceName');
   }.property('controller.content.serviceName','App.services.noConfigTypes'),

Reply via email to