Updated Branches: refs/heads/trunk 8d72c0b9e -> 124e06d72
AMBARI-3494 UI optimization: control configurations loading. (atkach) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/124e06d7 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/124e06d7 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/124e06d7 Branch: refs/heads/trunk Commit: 124e06d72d793ce31e5d5f7805b0c54522ac4806 Parents: 8d72c0b Author: atkach <[email protected]> Authored: Thu Oct 10 16:57:44 2013 +0300 Committer: atkach <[email protected]> Committed: Thu Oct 10 16:57:44 2013 +0300 ---------------------------------------------------------------------- ambari-web/app/controllers.js | 1 + .../global/configuration_controller.js | 85 ++++++++++++++++++++ .../main/admin/highAvailability_controller.js | 26 +++--- .../controllers/main/admin/misc_controller.js | 2 +- .../app/controllers/main/admin/security.js | 30 +++---- .../controllers/main/service/info/configs.js | 2 +- ambari-web/app/utils/ajax.js | 10 --- ambari-web/app/utils/db.js | 12 +++ .../app/views/common/quick_view_link_view.js | 48 ++++------- 9 files changed, 137 insertions(+), 79 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/ambari-web/app/controllers.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js index 18312e0..cd1ffb5 100644 --- a/ambari-web/app/controllers.js +++ b/ambari-web/app/controllers.js @@ -125,3 +125,4 @@ require('controllers/wizard/stack_upgrade/step2_controller'); require('controllers/wizard/stack_upgrade/step3_controller'); require('controllers/global/cluster_controller'); require('controllers/global/update_controller'); +require('controllers/global/configuration_controller'); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/ambari-web/app/controllers/global/configuration_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/global/configuration_controller.js b/ambari-web/app/controllers/global/configuration_controller.js new file mode 100644 index 0000000..401224d --- /dev/null +++ b/ambari-web/app/controllers/global/configuration_controller.js @@ -0,0 +1,85 @@ +/** + * 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.ConfigurationController = Em.Controller.extend({ + name: 'configurationController', + + getConfigsByTags: function (tags) { + var storedTags = []; + App.db.getConfigs().forEach(function(site){ + storedTags.push({ + siteName: site.type, + tagName: site.tag + }) + }); + if (this.checkTagsChanges(tags, storedTags)) { + return this.loadFromServer(tags); + } else { + return this.loadFromDB(tags.mapProperty('siteName')); + } + }, + /** + * check whether tag versions have been changed + * if they are different then return true + * otherwise false + * @param tags + * @param storedTags + * @return {Boolean} + */ + checkTagsChanges: function (tags, storedTags) { + var isDifferent = false; + var i = 0; + while (i < tags.length && !isDifferent) { + var storedTag = storedTags.findProperty('siteName', tags[i].siteName); + isDifferent = (!storedTag || storedTag.tagName !== tags[i].tagName); + i++; + } + return isDifferent; + }, + loadFromDB: function (siteNames) { + var configs = App.db.getConfigs(); + return configs.filter(function (site) { + return (siteNames.contains(site.type)); + }) + }, + /** + * load configs from server + * and update them in local DB + * @param tags + * @return {Array} + */ + loadFromServer: function (tags) { + var loadedConfigs = App.config.loadConfigsByTags(tags); + var storedConfigs = App.db.getConfigs(); + loadedConfigs.forEach(function (loadedSite) { + var storedSite = storedConfigs.findProperty('type', loadedSite.type); + if (storedSite) { + storedConfigs.tag = loadedSite.tag; + storedConfigs.properties = loadedSite.properties; + } else { + storedConfigs.push(loadedSite); + } + }); + App.db.setConfigs(storedConfigs); + return loadedConfigs; + } + + +}); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/ambari-web/app/controllers/main/admin/highAvailability_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/highAvailability_controller.js b/ambari-web/app/controllers/main/admin/highAvailability_controller.js index 73c1ce5..b0e8b26 100644 --- a/ambari-web/app/controllers/main/admin/highAvailability_controller.js +++ b/ambari-web/app/controllers/main/admin/highAvailability_controller.js @@ -82,28 +82,20 @@ App.MainAdminHighAvailabilityController = Em.Controller.extend({ }, getServiceConfigsFromServer: function () { - App.ajax.send({ - name: 'admin.service_config', - sender: this, - data: { - siteName: 'global', + var tags = [ + { + siteName: "global", tagName: this.get('tag') - }, - success: 'getServiceConfigsFromServerSuccessCallback', - error: 'errorCallback' - }); - }, - - getServiceConfigsFromServerSuccessCallback: function (data) { - var configs = data.items.findProperty('tag', this.get('tag')).properties; + } + ]; + var data = App.router.get('configurationController').getConfigsByTags(tags); + var configs = data.findProperty('tag', this.get('tag')).properties; if (configs && (configs['security_enabled'] === 'true' || configs['security_enabled'] === true)) { this.set('securityEnabled', true); - this.set('dataIsLoaded', true); - } - else { + } else { this.set('securityEnabled', false); - this.set('dataIsLoaded', true); } + this.set('dataIsLoaded', true); }, showErrorPopup: function (message) { http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/ambari-web/app/controllers/main/admin/misc_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/misc_controller.js b/ambari-web/app/controllers/main/admin/misc_controller.js index db594f6..4b64370 100644 --- a/ambari-web/app/controllers/main/admin/misc_controller.js +++ b/ambari-web/app/controllers/main/admin/misc_controller.js @@ -53,7 +53,7 @@ App.MainAdminMiscController = App.MainServiceInfoConfigsController.extend({ } } this.setServiceConfigTags(loadedClusterSiteToTagMap); - var configGroups = App.config.loadConfigsByTags(this.get('serviceConfigTags')); + var configGroups = App.router.get('configurationController').getConfigsByTags(this.get('serviceConfigTags')); var configSet = App.config.mergePreDefinedWithLoaded(configGroups, [], this.get('serviceConfigTags'), serviceName); var misc_configs = configSet.globalConfigs.filterProperty('serviceName', this.get('selectedService')).filterProperty('category', 'Users and Groups').filterProperty('isVisible', true); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/ambari-web/app/controllers/main/admin/security.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/security.js b/ambari-web/app/controllers/main/admin/security.js index e5f2e6d..092a8db 100644 --- a/ambari-web/app/controllers/main/admin/security.js +++ b/ambari-web/app/controllers/main/admin/security.js @@ -85,7 +85,7 @@ App.MainAdminSecurityController = Em.Controller.extend({ services.forEach(function (_secureService) { this.setServiceTagNames(_secureService, this.get('desiredConfigs')); }, this); - var serverConfigs = App.config.loadConfigsByTags(this.get('serviceConfigTags')); + var serverConfigs = App.router.get('configurationController').getConfigsByTags(this.get('serviceConfigTags')); this.setConfigValuesFromServer(this.get('stepConfigs'), serverConfigs); this.set('installedServices', App.Service.find().mapProperty('serviceName')); @@ -280,29 +280,25 @@ App.MainAdminSecurityController = Em.Controller.extend({ }, getServiceConfigsFromServer: function () { - var urlParams = []; - urlParams.push('(type=global&tag=' + this.get('tag.global') + ')'); - urlParams.push('(type=hdfs-site&tag=' + this.get('tag.hdfs-site') + ')'); - App.ajax.send({ - name: 'admin.security.all_configurations', - sender: this, - data: { - urlParams: urlParams.join('|') + var tags = [ + { + siteName: "global", + tagName: this.get('tag.global') }, - success: 'getServiceConfigsFromServerSuccessCallback', - error: 'errorCallback' - }); - }, + { + siteName: "hdfs-site", + tagName: this.get('tag.hdfs-site') + } + ]; - getServiceConfigsFromServerSuccessCallback: function (data) { - console.log("TRACE: In success function for the GET getServiceConfigsFromServer call"); - var configs = data.items.findProperty('tag', this.get('tag.global')).properties; + var data = App.router.get('configurationController').getConfigsByTags(tags); + var configs = data.findProperty('tag', this.get('tag.global')).properties; if (configs && (configs['security_enabled'] === 'true' || configs['security_enabled'] === true)) { this.set('securityEnabled', true); } else { this.set('securityEnabled', false); - var hdfsConfigs = data.items.findProperty('tag', this.get('tag.hdfs-site')).properties; + var hdfsConfigs = data.findProperty('tag', this.get('tag.hdfs-site')).properties; this.setNnHaStatus(hdfsConfigs); } this.loadUsers(configs); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/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 adf3c98..e96635d 100644 --- a/ambari-web/app/controllers/main/service/info/configs.js +++ b/ambari-web/app/controllers/main/service/info/configs.js @@ -453,7 +453,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({ //STEP 3: Load advanced configs from server var advancedConfigs = App.config.loadAdvancedConfig(serviceName) || []; //STEP 4: Load on-site config by service from server - var configGroups = App.config.loadConfigsByTags(this.get('serviceConfigTags')); + var configGroups = App.router.get('configurationController').getConfigsByTags(this.get('serviceConfigTags')); //STEP 5: Merge global and on-site configs with pre-defined var configSet = App.config.mergePreDefinedWithLoaded(configGroups, advancedConfigs, this.get('serviceConfigTags'), serviceName); configSet = App.config.syncOrderWithPredefined(configSet); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/ambari-web/app/utils/ajax.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/ajax.js b/ambari-web/app/utils/ajax.js index 8adbf7a..d8b8952 100644 --- a/ambari-web/app/utils/ajax.js +++ b/ambari-web/app/utils/ajax.js @@ -500,16 +500,6 @@ var urls = { }; } }, - 'admin.service_config': { - 'real': '/clusters/{clusterName}/configurations/?type={siteName}&tag={tagName}', - 'mock': '', - 'format': function (data, opt) { - return { - timeout: 10000, - async: false - }; - } - }, 'admin.security_status': { 'real': '/clusters/{clusterName}?fields=Clusters/desired_configs', 'mock': '', http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/ambari-web/app/utils/db.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/db.js b/ambari-web/app/utils/db.js index ebad01f..b915cb7 100644 --- a/ambari-web/app/utils/db.js +++ b/ambari-web/app/utils/db.js @@ -50,6 +50,7 @@ App.db.cleanUp = function () { 'app': { 'loginName': '', 'authenticated': false, + 'configs': [], 'tables': { 'filterConditions': {}, 'displayLength': {}, @@ -292,6 +293,12 @@ App.db.setStacks = function (stacks) { localStorage.setObject('ambari', App.db.data); }; +App.db.setConfigs = function (configs) { + App.db.data = localStorage.getObject('ambari'); + App.db.data.app.configs = configs; + localStorage.setObject('ambari', App.db.data); +}; + /** * Set current step value for specified Wizard Type * @param wizardType @@ -692,6 +699,11 @@ App.db.getReassignMasterWizardComponentDir = function () { return App.db.data.ReassignMaster.componentDir; }; +App.db.getConfigs = function () { + App.db.data = localStorage.getObject('ambari'); + return App.db.data.app.configs; +}; + App.db.getReassignMasterWizardReassignHosts = function () { App.db.data = localStorage.getObject('ambari'); return App.db.data.ReassignMaster.reassignHosts; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/124e06d7/ambari-web/app/views/common/quick_view_link_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/quick_view_link_view.js b/ambari-web/app/views/common/quick_view_link_view.js index 8ccc77e..42738cd 100644 --- a/ambari-web/app/views/common/quick_view_link_view.js +++ b/ambari-web/app/views/common/quick_view_link_view.js @@ -32,18 +32,15 @@ App.QuickViewLinks = Em.View.extend({ }, loadTagsSuccess: function(data) { - var tags = [] + var tags = []; for( var prop in data.Clusters.desired_configs){ tags.push(Em.Object.create({ siteName: prop, tagName: data.Clusters.desired_configs[prop]['tag'] })); } - var actual = this.get('actualTags'); - if (JSON.stringify(actual) != JSON.stringify(tags)) { - this.set('actualTags',tags); - this.getSecurityPropertie(); - } + this.set('actualTags', tags); + this.getSecurityProperties(); }, actualTags: [], @@ -53,38 +50,23 @@ App.QuickViewLinks = Em.View.extend({ /** * list of files that contains properties for enabling/disabling ssl */ - siteNames: ['core-site'], - - getSecurityPropertie: function() { - this.set('securityProperties',[]); - this.get('siteNames').forEach(function(name){ - var tag = this.get('actualTags'); - if (tag && tag.findProperty('siteName',name)) { - var tagName = tag.findProperty('siteName',name).tagName; - App.ajax.send({ - name: 'admin.service_config', - sender: this, - data: { - tagName: tagName, - siteName: name - }, - success: 'getSecurityPropertiesSuccess', - error: 'getSecurityPropertiesError' - }); - } - }, this) - }, + requiredSiteNames: ['core-site'], - getSecurityPropertiesSuccess: function(data) { + getSecurityProperties: function () { + this.set('securityProperties', []); + var requiredSiteNames = this.get('requiredSiteNames'); + var tags = this.get('actualTags').filter(function(tag){ + return requiredSiteNames.contains(tag.siteName); + }); + var data = App.router.get('configurationController').getConfigsByTags(tags); var properties = this.get('securityProperties'); - if(data.items[0]) { - properties.pushObject(data.items[0].properties); + var coreSiteProperties = data.findProperty('type', 'core-site'); + if(coreSiteProperties) { + properties.pushObject(coreSiteProperties); this.set('securityProperties', properties); } }, - getSecurityPropertiesError: function() { - console.warn('can\'t get properties') - }, + ambariProperties: function() { return App.router.get('clusterController.ambariProperties'); },
