AMBARI-7358 Configs: compare between host config group versions shows other props. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0fb11d23 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0fb11d23 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0fb11d23 Branch: refs/heads/branch-alerts-dev Commit: 0fb11d23e7c312aa34140ab7ecf3db5826a5e7ab Parents: f63dd8a Author: atkach <atk...@hortonworks.com> Authored: Wed Sep 17 15:10:27 2014 +0300 Committer: atkach <atk...@hortonworks.com> Committed: Wed Sep 17 15:10:27 2014 +0300 ---------------------------------------------------------------------- .../controllers/main/service/info/configs.js | 237 +++++++++++++------ ambari-web/app/models/service_config.js | 1 + .../common/configs/compare_property.hbs | 30 +-- .../common/configs/service_config_category.hbs | 6 +- 4 files changed, 192 insertions(+), 82 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/0fb11d23/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 9fcdaaa..4411667 100644 --- a/ambari-web/app/controllers/main/service/info/configs.js +++ b/ambari-web/app/controllers/main/service/info/configs.js @@ -185,7 +185,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM * @return {Boolean} */ isVersionDefault: function(version) { - return version && version.get('groupId') == -1; + return (App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + version).get('groupId') == -1); }, /** @@ -324,12 +324,11 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM var self = this; this.set('versionLoaded', false); version = version || this.get('currentDefaultVersion'); - var versionRecord = App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + version); //version of non-default group require properties from current version of default group to correctly display page - var versions = (this.isVersionDefault(versionRecord)) ? [version] : [this.get('currentDefaultVersion'), version]; + var versions = (this.isVersionDefault(version)) ? [version] : [this.get('currentDefaultVersion'), version]; //if version from default group selected then switch to default group - if (self.get('dataIsLoaded') && this.isVersionDefault(versionRecord)) { + if (self.get('dataIsLoaded') && this.isVersionDefault(version)) { this.set('selectedConfigGroup', this.get('configGroups').findProperty('isDefault')); } @@ -569,10 +568,16 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM loadCompareVersionConfigs: function (allConfigs) { var dfd = $.Deferred(); var self = this; - var compareServiceVersion = this.get('compareServiceVersion'); + var compareServiceVersions = []; - if (compareServiceVersion) { - this.getCompareVersionConfigs(compareServiceVersion).done(function (json) { + if (this.get('compareServiceVersion')) { + if (!this.isVersionDefault(this.get('compareServiceVersion').get('version'))) { + compareServiceVersions = [this.get('compareServiceVersion').get('version'), this.get('selectedVersion')]; + } else { + compareServiceVersions = [this.get('compareServiceVersion').get('version')]; + } + + this.getCompareVersionConfigs(compareServiceVersions).done(function (json) { self.initCompareConfig(allConfigs, json); self.set('compareServiceVersion', null); self.set('isCompareMode', true); @@ -597,76 +602,173 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM initCompareConfig: function(allConfigs, json) { var serviceVersionMap = {}; var configNamesMap = {}; - var serviceName = json.items[0].service_name; - var compareServiceVersion = this.get('compareServiceVersion'); + var serviceName = this.get('content.serviceName'); + var compareVersionNumber = this.get('compareServiceVersion').get('version'); + //indicate whether compared versions are from non-default group + var compareNonDefaultVersions = (json.items.length > 1); + serviceVersionMap[compareVersionNumber] = {}; + if (compareNonDefaultVersions) { + serviceVersionMap[this.get('selectedVersion')] = {}; + } allConfigs.mapProperty('name').forEach(function(name) { configNamesMap[name] = true; }); - json.items[0].configurations.forEach(function (configuration) { - if (serviceName == 'YARN' && configuration.type == 'capacity-scheduler') { - // put all properties in a single textarea for capacity-scheduler - var value = ''; - for (var prop in configuration.properties) { - value += prop + '=' + configuration.properties[prop] + '\n'; - } - serviceVersionMap[configuration.type + '-' + configuration.type] = { - name: configuration.type, - value: value, - type: configuration.type, - tag: configuration.tag, - version: configuration.version - }; - } else { - for (var prop in configuration.properties) { - serviceVersionMap[prop + '-' + configuration.type] = { - name: prop, - value: configuration.properties[prop], + json.items.forEach(function (item) { + item.configurations.forEach(function (configuration) { + if (serviceName == 'YARN' && configuration.type == 'capacity-scheduler') { + // put all properties in a single textarea for capacity-scheduler + var value = ''; + for (var prop in configuration.properties) { + value += prop + '=' + configuration.properties[prop] + '\n'; + } + serviceVersionMap[item.service_config_version][configuration.type + '-' + configuration.type] = { + name: configuration.type, + value: value, type: configuration.type, tag: configuration.tag, - version: configuration.version + version: configuration.version, + service_config_version: item.service_config_version }; - if (Em.isNone(configNamesMap[prop])) { - allConfigs.push(this.getMockConfig(prop, serviceName, App.config.getOriginalFileName(configuration.type))); + } else { + for (var prop in configuration.properties) { + serviceVersionMap[item.service_config_version][prop + '-' + configuration.type] = { + name: prop, + value: configuration.properties[prop], + type: configuration.type, + tag: configuration.tag, + version: configuration.version, + service_config_version: item.service_config_version + }; + if (Em.isNone(configNamesMap[prop])) { + allConfigs.push(this.getMockConfig(prop, serviceName, App.config.getOriginalFileName(configuration.type))); + } } } - } - if (configuration.properties_attributes && configuration.properties_attributes.final) { - for (var final in configuration.properties_attributes.final) { - serviceVersionMap[final + '-' + configuration.type].isFinal = (configuration.properties_attributes.final[final] === 'true'); + if (configuration.properties_attributes && configuration.properties_attributes.final) { + for (var final in configuration.properties_attributes.final) { + serviceVersionMap[item.service_config_version][final + '-' + configuration.type].isFinal = (configuration.properties_attributes.final[final] === 'true'); + } } - } + }, this); }, this); - allConfigs.forEach(function (serviceConfig) { - // map the property in the compare version to compare with current serviceConfig - var compareConfig = serviceVersionMap[serviceConfig.name + '-' + App.config.getConfigTagFromFileName(serviceConfig.filename)]; - var compareObject = $.extend(true, {isComparison: true}, serviceConfig); - compareObject.serviceVersion = compareServiceVersion; - compareObject.isEditable = false; - - if (compareConfig) { - if (serviceConfig.isMock) { - compareObject.displayType = 'string'; - compareObject.isMock = false; - } - serviceConfig.compareConfig = App.ServiceConfigProperty.create(compareObject); - this.setSupportsFinal(serviceConfig.compareConfig); - serviceConfig.compareConfig.set('isFinal', compareConfig.isFinal); - serviceConfig.compareConfig.set('value', App.config.formatOverrideValue(serviceConfig, compareConfig.value)); - serviceConfig.isComparison = true; - serviceConfig.hasCompareDiffs = (serviceConfig.value !== serviceConfig.compareConfig.get('value'))|| - (serviceConfig.isFinal !== (serviceConfig.compareConfig.get('isFinal') == true)); - } else if (serviceConfig.isUserProperty) { - compareObject.isMock = true; - compareObject.displayType = 'label'; - serviceConfig.compareConfig = App.ServiceConfigProperty.create(compareObject); - serviceConfig.compareConfig.set('value', 'Undefined'); - serviceConfig.isComparison = true; - serviceConfig.hasCompareDiffs = true; + if (compareNonDefaultVersions) { + allConfigs.forEach(function (serviceConfig) { + this.setCompareConfigs(serviceConfig, serviceVersionMap, compareVersionNumber, this.get('selectedVersion')); + }, this); + } else { + allConfigs.forEach(function (serviceConfig) { + this.setCompareDefaultGroupConfig(serviceConfig, serviceVersionMap[this.get('compareServiceVersion').get('version')]); + }, this); + } + }, + + + /** + * set compare properties to service config of non-default group + * @param serviceConfig + * @param serviceVersionMap + * @param compareVersion + * @param selectedVersion + */ + setCompareConfigs: function (serviceConfig, serviceVersionMap, compareVersion, selectedVersion) { + var compareConfig = serviceVersionMap[compareVersion][serviceConfig.name + '-' + App.config.getConfigTagFromFileName(serviceConfig.filename)]; + var selectedConfig = serviceVersionMap[selectedVersion][serviceConfig.name + '-' + App.config.getConfigTagFromFileName(serviceConfig.filename)]; + + serviceConfig.compareConfigs = []; + serviceConfig.isComparison = true; + + if (compareConfig && selectedConfig) { + serviceConfig.compareConfigs.push(this.getComparisonConfig(serviceConfig, compareConfig)); + serviceConfig.compareConfigs.push(this.getComparisonConfig(serviceConfig, selectedConfig)); + serviceConfig.hasCompareDiffs = this.hasCompareDiffs(serviceConfig.compareConfigs[0], serviceConfig.compareConfigs[1]); + } else if (compareConfig && !selectedConfig) { + serviceConfig.compareConfigs.push(this.getComparisonConfig(serviceConfig, compareConfig)); + serviceConfig.compareConfigs.push(this.getMockComparisonConfig(selectedConfig, selectedVersion)); + serviceConfig.hasCompareDiffs = true; + } else if (!compareConfig && selectedConfig) { + serviceConfig.compareConfigs.push(this.getMockComparisonConfig(selectedConfig, compareVersion)); + serviceConfig.compareConfigs.push(this.getComparisonConfig(serviceConfig, selectedConfig)); + serviceConfig.hasCompareDiffs = true; + } + }, + + /** + * init attributes and wrap mock compare config into App.ServiceConfigProperty + * @param serviceConfig + * @param compareConfig + * @return {object} + */ + getMockComparisonConfig: function (serviceConfig, compareServiceVersion) { + var compareObject = $.extend(true, {isComparison: true}, serviceConfig); + compareObject.isEditable = false; + + compareObject.serviceVersion = App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + compareServiceVersion); + compareObject.isMock = true; + compareObject.displayType = 'label'; + compareObject = App.ServiceConfigProperty.create(compareObject); + compareObject.set('value', 'Undefined'); + return compareObject; + }, + + /** + * init attributes and wrap compare config into App.ServiceConfigProperty + * @param serviceConfig + * @param compareConfig + * @return {object} + */ + getComparisonConfig: function (serviceConfig, compareConfig) { + var compareObject = $.extend(true, {isComparison: true}, serviceConfig); + compareObject.isEditable = false; + + if (compareConfig) { + if (serviceConfig.isMock) { + compareObject.displayType = 'string'; + compareObject.isMock = false; } - }, this); + compareObject.serviceVersion = App.ServiceConfigVersion.find(this.get('content.serviceName') + "_" + compareConfig.service_config_version); + compareObject = App.ServiceConfigProperty.create(compareObject); + compareObject.set('isFinal', compareConfig.isFinal); + compareObject.set('value', App.config.formatOverrideValue(serviceConfig, compareConfig.value)); + this.setSupportsFinal(compareObject); + } + return compareObject; + }, + + /** + * set compare properties to service config of default group + * @param serviceConfig + * @param serviceVersionMap + */ + setCompareDefaultGroupConfig: function (serviceConfig, serviceVersionMap) { + // map the property in the compare version to compare with current serviceConfig + var compareConfig = serviceVersionMap[serviceConfig.name + '-' + App.config.getConfigTagFromFileName(serviceConfig.filename)]; + var compareObject = {}; + + serviceConfig.compareConfigs = []; + serviceConfig.isComparison = true; + + if (compareConfig) { + compareObject = this.getComparisonConfig(serviceConfig, compareConfig); + serviceConfig.hasCompareDiffs = serviceConfig.isMock || this.hasCompareDiffs(serviceConfig, compareObject); + serviceConfig.compareConfigs.push(compareObject); + } else if (serviceConfig.isUserProperty) { + serviceConfig.compareConfigs.push(this.getMockComparisonConfig(serviceConfig, this.get('compareServiceVersion').get('version'))); + serviceConfig.hasCompareDiffs = true; + } + }, + + /** + * check value and final attribute of original and compare config for differencies + * @param originalConfig + * @param compareConfig + * @return {Boolean} + */ + hasCompareDiffs: function (originalConfig, compareConfig) { + return (originalConfig.value !== compareConfig.value) || + (originalConfig.isFinal !== (compareConfig.isFinal == true)); }, /** @@ -701,18 +803,18 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM /** * get configs of chosen version from server to compare - * @param compareServiceVersion + * @param compareServiceVersions * @return {$.ajax} */ - getCompareVersionConfigs: function (compareServiceVersion) { + getCompareVersionConfigs: function (compareServiceVersions) { this.set('versionLoaded', false); return App.ajax.send({ - name: 'service.serviceConfigVersion.get', + name: 'service.serviceConfigVersions.get.multiple', sender: this, data: { serviceName: this.get('content.serviceName'), - serviceConfigVersion: compareServiceVersion.get('version') + serviceConfigVersions: compareServiceVersions } }); }, @@ -1041,6 +1143,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM */ setEditability: function (serviceConfigProperty, defaultGroupSelected) { serviceConfigProperty.set('isEditable', false); + if (serviceConfigProperty.get('isComparison')) return; if (App.get('isAdmin') && defaultGroupSelected && !this.get('isHostsConfigsPage') && !serviceConfigProperty.get('group')) { serviceConfigProperty.set('isEditable', serviceConfigProperty.get('isReconfigurable')); } else if (serviceConfigProperty.get('group') && this.get('selectedConfigGroup.name') === serviceConfigProperty.get('group.name')) { http://git-wip-us.apache.org/repos/asf/ambari/blob/0fb11d23/ambari-web/app/models/service_config.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/service_config.js b/ambari-web/app/models/service_config.js index 7d99660..963ff16 100644 --- a/ambari-web/app/models/service_config.js +++ b/ambari-web/app/models/service_config.js @@ -180,6 +180,7 @@ App.ServiceConfigProperty = Ember.Object.extend({ group: null, // Contain group related to this property. Set only when isOriginalSCP is false. isUserProperty: null, // This property was added by user. Hence they get removal actions etc. isOverridable: true, + compareConfigs: [], isComparison: false, hasCompareDiffs: false, showLabel: true, http://git-wip-us.apache.org/repos/asf/ambari/blob/0fb11d23/ambari-web/app/templates/common/configs/compare_property.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/compare_property.hbs b/ambari-web/app/templates/common/configs/compare_property.hbs index 9c8e73e..3e6ddbe 100644 --- a/ambari-web/app/templates/common/configs/compare_property.hbs +++ b/ambari-web/app/templates/common/configs/compare_property.hbs @@ -16,17 +16,19 @@ * limitations under the License. }} -<div {{bindAttr class=":control-group :overrideField"}}> - {{view view.serviceConfigProperty.compareConfig.viewClass serviceConfigBinding="view.serviceConfigProperty.compareConfig"}} - {{#unless view.serviceConfigProperty.compareConfig.isMock}} - <span class="label label-info">{{view.serviceConfigProperty.compareConfig.serviceVersion.versionText}}</span> - {{#if view.serviceConfigProperty.compareConfig.serviceVersion.isCurrent}} - <span class="label label-success">{{t common.current}}</span> - {{/if}} - {{#if view.serviceConfigProperty.compareConfig.supportsFinal}} - <a disabled="disabled" {{bindAttr class=":btn :btn-small :btn-final view.serviceConfigProperty.compareConfig.isFinal:active view.serviceConfigProperty.compareConfig.hideFinalIcon:hidden" }}> - <i class="icon-lock"></i> - </a> - {{/if}} - {{/unless}} -</div> +{{#each compareConfig in view.serviceConfigProperty.compareConfigs}} + <div {{bindAttr class=":control-group :overrideField"}}> + {{view compareConfig.viewClass serviceConfigBinding="compareConfig"}} + {{#unless compareConfig.isMock}} + <span class="label label-info">{{compareConfig.serviceVersion.versionText}}</span> + {{#if compareConfig.serviceVersion.isCurrent}} + <span class="label label-success">{{t common.current}}</span> + {{/if}} + {{#if compareConfig.supportsFinal}} + <a disabled="disabled" {{bindAttr class=":btn :btn-small :btn-final compareConfig.isFinal:active compareConfig.hideFinalIcon:hidden" }}> + <i class="icon-lock"></i> + </a> + {{/if}} + {{/unless}} + </div> +{{/each}} http://git-wip-us.apache.org/repos/asf/ambari/blob/0fb11d23/ambari-web/app/templates/common/configs/service_config_category.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/service_config_category.hbs b/ambari-web/app/templates/common/configs/service_config_category.hbs index 23553e2..0aaf35f 100644 --- a/ambari-web/app/templates/common/configs/service_config_category.hbs +++ b/ambari-web/app/templates/common/configs/service_config_category.hbs @@ -49,9 +49,13 @@ <div {{bindAttr class="errorMessage:error: warnMessage:warning: :control-group"}}> {{view viewClass serviceConfigBinding="this" categoryConfigsAllBinding="view.categoryConfigsAll" }} {{#if this.isComparison}} + {{#if controller.selectedConfigGroup.isDefault}} <span class="label label-info">{{t dashboard.configHistory.table.version.prefix}}{{controller.selectedVersion}}</span> - {{#if controller.isCurrentSelected}} + {{#if controller.isCurrentSelected}} <span class="label label-success">{{t common.current}}</span> + {{/if}} + {{else}} + <span class="label label-info">{{t common.default}} {{t services.service.config.configHistory.configGroup}}</span> {{/if}} {{/if}} {{#if supportsFinal}}