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 2014/08/12 20:50:32 UTC

git commit: AMBARI-6832. Config History: integrate API call to set/get notes, show current version, etc. (yusaku)

Repository: ambari
Updated Branches:
  refs/heads/trunk dceec5cc6 -> 389b2505d


AMBARI-6832. Config History: integrate API call to set/get notes, show current version, etc. (yusaku)


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

Branch: refs/heads/trunk
Commit: 389b2505d575b66615526e913b9fda91218dd752
Parents: dceec5c
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Tue Aug 12 11:28:52 2014 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Tue Aug 12 11:28:52 2014 -0700

----------------------------------------------------------------------
 .../main/dashboard/config_history_controller.js | 70 +++++++++++++++++---
 .../controllers/main/service/info/configs.js    | 11 ++-
 ambari-web/app/mappers/server_data_mapper.js    |  6 +-
 .../mappers/service_config_version_mapper.js    |  5 +-
 ambari-web/app/utils/ajax/ajax.js               | 10 ++-
 .../views/common/configs/config_history_flow.js | 13 +++-
 .../views/main/dashboard/config_history_view.js |  9 ++-
 7 files changed, 98 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/389b2505/ambari-web/app/controllers/main/dashboard/config_history_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/dashboard/config_history_controller.js b/ambari-web/app/controllers/main/dashboard/config_history_controller.js
index 8989b56..936634a 100644
--- a/ambari-web/app/controllers/main/dashboard/config_history_controller.js
+++ b/ambari-web/app/controllers/main/dashboard/config_history_controller.js
@@ -26,10 +26,11 @@ App.MainConfigHistoryController = Em.ArrayController.extend(App.TableServerMixin
     return this.get('dataSource').filterProperty('isRequested');
   }.property('dataSource.@each.isRequested'),
   isPolling: false,
+  totalCount: 0,
   filteredCount: 0,
   mockUrl: '/data/configurations/service_versions.json',
   realUrl: function () {
-    return App.apiPrefix + '/clusters/' + App.get('clusterName') + '/configurations/serviceconfigversions?<parameters>fields=serviceconfigversion,user,appliedtime,createtime,service_name&minimal_response=true';
+    return App.apiPrefix + '/clusters/' + App.get('clusterName') + '/configurations/serviceconfigversions?<parameters>fields=serviceconfigversion,user,appliedtime,createtime,service_name,service_config_version_note&minimal_response=true';
   }.property('App.clusterName'),
 
   /**
@@ -60,14 +61,12 @@ App.MainConfigHistoryController = Em.ArrayController.extend(App.TableServerMixin
       name: 'author',
       key: 'user',
       type: 'MATCH'
-    }
-    //TODO uncomment when API contains "notes" property
-    /*,
+    },
     {
       name: 'notes',
       key: '',
       type: 'MATCH'
-    }*/
+    }
   ],
 
   sortProps: [
@@ -82,11 +81,11 @@ App.MainConfigHistoryController = Em.ArrayController.extend(App.TableServerMixin
     {
       name: 'author',
       key: 'user'
-    }/*,
+    },
     {
       name: 'notes',
       key: ''
-    }*/
+    }
   ],
 
   modifiedFilter: Em.Object.create({
@@ -136,10 +135,30 @@ App.MainConfigHistoryController = Em.ArrayController.extend(App.TableServerMixin
   }),
 
   /**
-   * get data from server and push it to model
+   * load all data components required by config history table
+   *  - total counter of service config versions(called in parallel)
+   *  - current versions
+   *  - filtered versions
+   * @return {*}
+   */
+  load: function () {
+    var dfd = $.Deferred();
+    var self = this;
+
+    this.updateTotalCounter();
+    this.loadCurrentVersions().complete(function () {
+      self.loadConfigVersionsToModel().done(function () {
+        dfd.resolve();
+      });
+    });
+    return dfd.promise();
+  },
+
+  /**
+   * get filtered service config versions from server and push it to model
    * @return {*}
    */
-  loadHistoryToModel: function () {
+  loadConfigVersionsToModel: function () {
     var dfd = $.Deferred();
     var queryParams = this.getQueryParameters();
 
@@ -151,6 +170,37 @@ App.MainConfigHistoryController = Em.ArrayController.extend(App.TableServerMixin
     return dfd.promise();
   },
 
+  loadCurrentVersions: function () {
+    return App.ajax.send({
+      name: 'service.serviceConfigVersions.get.current',
+      sender: this,
+      data: {},
+      success: 'loadCurrentVersionsSuccess'
+    })
+  },
+
+  loadCurrentVersionsSuccess: function (data, opt, params) {
+    var currentConfigVersions = {};
+
+    for (var service in data.Clusters.desired_serviceconfigversions) {
+      currentConfigVersions[service + '_' + data.Clusters.desired_serviceconfigversions[service].serviceconfigversion] = true;
+    }
+    App.cache['currentConfigVersions'] = currentConfigVersions;
+  },
+
+  updateTotalCounter: function () {
+    return App.ajax.send({
+      name: 'service.serviceConfigVersions.get.total',
+      sender: this,
+      data: {},
+      success: 'updateTotalCounterSuccess'
+    })
+  },
+
+  updateTotalCounterSuccess: function (data, opt, params) {
+    this.set('totalCount', data.itemTotal);
+  },
+
   getUrl: function (queryParams) {
     var params = '';
     if (App.get('testMode')) {
@@ -171,7 +221,7 @@ App.MainConfigHistoryController = Em.ArrayController.extend(App.TableServerMixin
 
     setTimeout(function () {
       if (self.get('isPolling')) {
-        self.loadHistoryToModel().done(function () {
+        self.load().done(function () {
           self.doPolling();
         })
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/389b2505/ambari-web/app/controllers/main/service/info/configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js
index b2cd153..6f373af 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -52,6 +52,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
   selectedVersion: null,
   // file names of changed configs
   modifiedFileNames: [],
+  // note passed on configs save
+  serviceConfigVersionNote: '',
   versionLoaded: false,
   isCurrentSelected: function () {
     return this.get('selectedVersion') === this.get('currentVersion');
@@ -169,6 +171,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
     this.get('uiConfigs').clear();
     this.get('customConfig').clear();
     this.set('loadedGroupToOverrideSiteToTagMap', {});
+    this.set('serviceConfigVersionNote', '');
     this.set('savedSiteNameToServerServiceConfigDataMap', {});
     if (this.get('serviceConfigTags')) {
       this.set('serviceConfigTags', null);
@@ -273,9 +276,11 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
    */
   loadServiceConfigVersionsSuccess: function (data, opt, params) {
     var currentVersion = Math.max.apply(this, data.items.mapProperty('serviceconfigversion'));
+    var currentVersionObject = data.items.findProperty('serviceconfigversion', currentVersion);
 
     this.set('currentVersion', currentVersion);
-    data.items.findProperty('serviceconfigversion', currentVersion).is_current = true;
+    App.cache['currentConfigVersions'] = {};
+    App.cache['currentConfigVersions'][currentVersionObject.service_name + '_' + currentVersionObject.serviceconfigversion] = true;
     App.serviceConfigVersionsMapper.map(data);
   },
 
@@ -1748,8 +1753,10 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({
         if (filename === 'mapred-queue-acls.xml' && !App.supports.capacitySchedulerUi) {
           return null;
         }
-        return this.createSiteObj(siteName, tagName, this.get('uiConfigs').filterProperty('filename', filename));
+        configObject = this.createSiteObj(siteName, tagName, this.get('uiConfigs').filterProperty('filename', filename));
+       break;
     }
+    configObject.service_config_version_note = this.get('serviceConfigVersionNote');
     return configObject;
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/389b2505/ambari-web/app/mappers/server_data_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/server_data_mapper.js b/ambari-web/app/mappers/server_data_mapper.js
index 58abb71..45ee5c9 100644
--- a/ambari-web/app/mappers/server_data_mapper.js
+++ b/ambari-web/app/mappers/server_data_mapper.js
@@ -23,13 +23,11 @@ var App = require('app');
  * App.cache contains shared data, used for syncronizing incoming server data among mappers
  */
 App.cache = {
-  'HostsList': [],
   'previousHostStatuses': {},
   'previousComponentStatuses': {},
   'previousComponentPassiveStates': {},
-  'hostComponentsOnService': {},
-  'restartRequiredServices': [],
-  'services': []
+  'services': [],
+  'currentConfigVersions': {}
 };
 
 App.ServerDataMapper = Em.Object.extend({

http://git-wip-us.apache.org/repos/asf/ambari/blob/389b2505/ambari-web/app/mappers/service_config_version_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/service_config_version_mapper.js b/ambari-web/app/mappers/service_config_version_mapper.js
index e8c67da..fcdb145 100644
--- a/ambari-web/app/mappers/service_config_version_mapper.js
+++ b/ambari-web/app/mappers/service_config_version_mapper.js
@@ -27,18 +27,19 @@ App.serviceConfigVersionsMapper = App.QuickDataMapper.create({
     create_time: 'createtime',
     applied_time: 'appliedtime',
     author: 'user',
-    notes: 'notes',
+    notes: 'service_config_version_note',
     is_current: 'is_current',
     index: 'index'
   },
   map: function (json) {
     var result = [];
     var itemIds = {};
-
+    var currentConfigVersions = App.cache['currentConfigVersions'];
     if (json && json.items) {
       json.items.forEach(function (item, index) {
         var parsedItem = this.parseIt(item, this.get('config'));
         parsedItem.id = parsedItem.service_name + '_' + parsedItem.version;
+        parsedItem.is_current = !!currentConfigVersions[parsedItem.id];
         parsedItem.is_requested = true;
         itemIds[parsedItem.id] = true;
         parsedItem.index = index;

http://git-wip-us.apache.org/repos/asf/ambari/blob/389b2505/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index fc1f81c..1cb7846 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1858,9 +1858,17 @@ var urls = {
     }
   },
   'service.serviceConfigVersions.get': {
-    real: '/clusters/{clusterName}/configurations/serviceconfigversions?service_name={serviceName}&fields=serviceconfigversion,user,appliedtime,createtime,service_name&minimal_response=true',
+    real: '/clusters/{clusterName}/configurations/serviceconfigversions?service_name={serviceName}&fields=serviceconfigversion,user,appliedtime,createtime,service_name,service_config_version_note&minimal_response=true',
     mock: '/data/configurations/service_versions.json'
   },
+  'service.serviceConfigVersions.get.current': {
+    real: '/clusters/{clusterName}?fields=Clusters/desired_serviceconfigversions&minimal_response=true',
+    mock: ''
+  },
+  'service.serviceConfigVersions.get.total': {
+    real: '/clusters/{clusterName}/configurations/serviceconfigversions?page_size=1&minimal_response=true',
+    mock: ''
+  },
   'service.serviceConfigVersion.get': {
     real: '/clusters/{clusterName}/configurations/serviceconfigversions?service_name={serviceName}&serviceconfigversion={serviceConfigVersion}',
     mock: '/data/configurations/service_version.json'

http://git-wip-us.apache.org/repos/asf/ambari/blob/389b2505/ambari-web/app/views/common/configs/config_history_flow.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/config_history_flow.js b/ambari-web/app/views/common/configs/config_history_flow.js
index 66b6175..9521eab 100644
--- a/ambari-web/app/views/common/configs/config_history_flow.js
+++ b/ambari-web/app/views/common/configs/config_history_flow.js
@@ -187,8 +187,12 @@ App.ConfigHistoryFlowView = Em.View.extend({
    */
   revert: function (event) {
     var self = this;
+    var serviceConfigVersion = event.context || Em.Object.create({
+      version: this.get('displayedServiceVersion.version'),
+      serviceName: this.get('displayedServiceVersion.serviceName')
+    });
     App.showConfirmationPopup(function () {
-      self.sendRevertCall(event.context);
+      self.sendRevertCall(serviceConfigVersion);
     });
   },
 
@@ -235,11 +239,15 @@ App.ConfigHistoryFlowView = Em.View.extend({
     var self = this;
     return App.ModalPopup.show({
       header: Em.I18n.t('dashboard.configHistory.info-bar.save.popup.title'),
+      serviceConfigNote: '',
       bodyClass: Em.View.extend({
         templateName: require('templates/common/configs/save_configuration'),
         notesArea: Em.TextArea.extend({
           classNames: ['full-width'],
-          placeholder: Em.I18n.t('dashboard.configHistory.info-bar.save.popup.placeholder')
+          placeholder: Em.I18n.t('dashboard.configHistory.info-bar.save.popup.placeholder'),
+          onChangeValue: function() {
+            this.get('parentView.parentView').set('serviceConfigNote', this.get('value'));
+          }.observes('value')
         })
       }),
       footerClass: Ember.View.extend({
@@ -248,6 +256,7 @@ App.ConfigHistoryFlowView = Em.View.extend({
       primary: Em.I18n.t('common.save'),
       secondary: Em.I18n.t('common.cancel'),
       onSave: function () {
+        self.get('controller').set('serviceConfigVersionNote', this.get('serviceConfigNote'));
         self.get('controller').restartServicePopup();
         this.hide();
       },

http://git-wip-us.apache.org/repos/asf/ambari/blob/389b2505/ambari-web/app/views/main/dashboard/config_history_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/dashboard/config_history_view.js b/ambari-web/app/views/main/dashboard/config_history_view.js
index 6a23ccf..1c6105b 100644
--- a/ambari-web/app/views/main/dashboard/config_history_view.js
+++ b/ambari-web/app/views/main/dashboard/config_history_view.js
@@ -46,9 +46,8 @@ App.MainConfigHistoryView = App.TableView.extend({
   }.property('controller.filteredCount'),
 
   totalCount: function () {
-    //TODO change to totalCount when property provided by API
-    return this.get('controller.filteredCount');
-  }.property('controller.filteredCount'),
+    return this.get('controller.totalCount');
+  }.property('controller.totalCount'),
   /**
    * return filtered number of all content number information displayed on the page footer bar
    * @returns {String}
@@ -77,7 +76,7 @@ App.MainConfigHistoryView = App.TableView.extend({
     this.addObserver('startIndex', this, 'updatePagination');
     this.addObserver('displayLength', this, 'updatePagination');
     this.set('controller.isPolling', true);
-    this.refresh();
+    this.get('controller').doPolling();
   },
 
   /**
@@ -174,7 +173,7 @@ App.MainConfigHistoryView = App.TableView.extend({
     var self = this;
 
     this.set('filteringComplete', false);
-    this.get('controller').loadHistoryToModel().done(function(){
+    this.get('controller').load().done(function () {
       self.set('filteringComplete', true);
       self.propertyDidChange('pageContent');
       self.set('controller.resetStartIndex', false);