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 <[email protected]> Authored: Tue Aug 12 11:28:52 2014 -0700 Committer: Yusaku Sako <[email protected]> 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('[email protected]'), 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);
