Repository: ambari Updated Branches: refs/heads/trunk f2e3b132f -> 424949b95
AMBARI-19907 - On certain actions, there's no feedback from the UI when API takes a long time to respond (rzang) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/424949b9 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/424949b9 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/424949b9 Branch: refs/heads/trunk Commit: 424949b95cafead9754cd87ea1a379f21995b5af Parents: f2e3b13 Author: Richard Zang <[email protected]> Authored: Fri Feb 24 15:22:27 2017 -0800 Committer: Richard Zang <[email protected]> Committed: Fri Feb 24 15:22:27 2017 -0800 ---------------------------------------------------------------------- .../main/host/bulk_operations_controller.js | 33 ++++++++------------ ambari-web/app/controllers/main/host/details.js | 24 +++++++++----- ambari-web/app/controllers/main/service.js | 12 ++++--- ambari-web/app/controllers/main/service/item.js | 30 ++++++++++++------ ambari-web/app/utils/ajax/ajax.js | 24 +++++++++++++- .../app/utils/batch_scheduled_requests.js | 6 ++-- ambari-web/app/views/common/modal_popup.js | 9 ++++++ .../test/controllers/main/service_test.js | 6 ++-- 8 files changed, 97 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/424949b9/ambari-web/app/controllers/main/host/bulk_operations_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/host/bulk_operations_controller.js b/ambari-web/app/controllers/main/host/bulk_operations_controller.js index aca50bf..92ae12e 100644 --- a/ambari-web/app/controllers/main/host/bulk_operations_controller.js +++ b/ambari-web/app/controllers/main/host/bulk_operations_controller.js @@ -255,7 +255,8 @@ App.BulkOperationsController = Em.Controller.extend({ context: operationData.message, noOpsMessage: Em.I18n.t('hosts.host.maintainance.reinstallFailedComponents.context') }, - success: 'bulkOperationForHostComponentsSuccessCallback' + success: 'bulkOperationForHostComponentsSuccessCallback', + showLoadingPopup: true }); }); }, @@ -277,7 +278,8 @@ App.BulkOperationsController = Em.Controller.extend({ hosts: hosts.mapProperty('hostName') }, success: 'bulkOperationForHostsDeleteDryRunCallback', - error: 'bulkOperationForHostsDeleteDryRunCallback' + error: 'bulkOperationForHostsDeleteDryRunCallback', + showLoadingPopup: true }); }); }, @@ -374,7 +376,8 @@ App.BulkOperationsController = Em.Controller.extend({ hosts: hosts.mapProperty('deleted.key') }, success: 'bulkOperationForHostsDeleteCallback', - error: 'bulkOperationForHostsDeleteCallback' + error: 'bulkOperationForHostsDeleteCallback', + showLoadingPopup: true }); }, bodyClass: Em.View.extend({ @@ -626,7 +629,8 @@ App.BulkOperationsController = Em.Controller.extend({ }), context: operationData.message + ' ' + operationData.componentNameFormatted, }, - success: 'bulkOperationForHostComponentsAddSuccessCallback' + success: 'bulkOperationForHostComponentsAddSuccessCallback', + showLoadingPopup: true }); }); }, @@ -1126,28 +1130,19 @@ App.BulkOperationsController = Em.Controller.extend({ return; } - var loadingPopup = App.ModalPopup.show({ - header: Em.I18n.t('jobs.loadingTasks'), - primary: false, - secondary: false, - bodyClass: Em.View.extend({ - template: Em.Handlebars.compile('{{view App.SpinnerView}}') - }) - }); - - this.getHostsForBulkOperations(queryParams, operationData, loadingPopup); + this.getHostsForBulkOperations(queryParams, operationData); }, - getHostsForBulkOperations: function (queryParams, operationData, loadingPopup) { + getHostsForBulkOperations: function (queryParams, operationData) { return App.ajax.send({ name: 'hosts.bulk.operations', sender: this, data: { parameters: App.router.get('updateController').computeParameters(queryParams), - operationData: operationData, - loadingPopup: loadingPopup + operationData: operationData }, - success: 'getHostsForBulkOperationSuccessCallback' + success: 'getHostsForBulkOperationSuccessCallback', + showLoadingPopup: true }); }, @@ -1173,8 +1168,6 @@ App.BulkOperationsController = Em.Controller.extend({ return; } - Em.tryInvoke(param.loadingPopup, 'hide'); - if ('SET_RACK_INFO' === operationData.action) { return self.bulkOperation(operationData, hosts); } http://git-wip-us.apache.org/repos/asf/ambari/blob/424949b9/ambari-web/app/controllers/main/host/details.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/host/details.js b/ambari-web/app/controllers/main/host/details.js index 2f18fcb..6e85190 100644 --- a/ambari-web/app/controllers/main/host/details.js +++ b/ambari-web/app/controllers/main/host/details.js @@ -335,7 +335,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow sender: this, data: data, success: 'sendComponentCommandSuccessCallback', - error: 'ajaxErrorCallback' + error: 'ajaxErrorCallback', + showLoadingPopup: true }); }, @@ -612,7 +613,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow hostName: this.get('content.hostName') }, success: '_doDeleteHostComponentSuccessCallback', - error: '_doDeleteHostComponentErrorCallback' + error: '_doDeleteHostComponentErrorCallback', + showLoadingPopup: true }).then(callback, callback); }, @@ -1560,7 +1562,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow resource_filters: resource_filters, context: context }, - success: 'refreshComponentConfigsSuccessCallback' + success: 'refreshComponentConfigsSuccessCallback', + showLoadingPopup: true }); }, @@ -1734,7 +1737,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow } }, success: 'installComponentSuccessCallback', - error: 'ajaxErrorCallback' + error: 'ajaxErrorCallback', + showLoadingPopup: true }); }) }); @@ -1840,7 +1844,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow slaveType: slaveType }, success: 'decommissionSuccessCallback', - error: 'decommissionErrorCallback' + error: 'decommissionErrorCallback', + showLoadingPopup: true }); }, @@ -2023,7 +2028,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow batches: batches }, success: 'decommissionSuccessCallback', - error: 'decommissionErrorCallback' + error: 'decommissionErrorCallback', + showLoadingPopup: true }); }, @@ -2130,7 +2136,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow batches: batches }, success: 'decommissionSuccessCallback', - error: 'decommissionErrorCallback' + error: 'decommissionErrorCallback', + showLoadingPopup: true }); }, @@ -2645,7 +2652,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow }, callback: completeCallback, success: 'deleteHostSuccessCallback', - error: 'deleteHostErrorCallback' + error: 'deleteHostErrorCallback', + showLoadingPopup: true }); } else { http://git-wip-us.apache.org/repos/asf/ambari/blob/424949b9/ambari-web/app/controllers/main/service.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service.js b/ambari-web/app/controllers/main/service.js index e434d41..5dfc176 100644 --- a/ambari-web/app/controllers/main/service.js +++ b/ambari-web/app/controllers/main/service.js @@ -171,7 +171,8 @@ App.MainServiceController = Em.ArrayController.extend(App.SupportClientConfigsDo query: query }, success: 'allServicesCallSuccessCallback', - error: 'allServicesCallErrorCallback' + error: 'allServicesCallErrorCallback', + showLoadingPopup: true }); }, @@ -196,7 +197,8 @@ App.MainServiceController = Em.ArrayController.extend(App.SupportClientConfigsDo state: 'INSTALLED' } }, - success: 'silentStopSuccess' + success: 'silentStopSuccess', + showLoadingPopup: true }); }, @@ -246,7 +248,8 @@ App.MainServiceController = Em.ArrayController.extend(App.SupportClientConfigsDo state: 'STARTED' } }, - success: 'silentCallSuccessCallback' + success: 'silentCallSuccessCallback', + showLoadingPopup: true }); } }.observes('shouldStart', 'controllers.backgroundOperationsController.allOperationsCount'), @@ -333,7 +336,8 @@ App.MainServiceController = Em.ArrayController.extend(App.SupportClientConfigsDo App.ajax.send({ name: 'restart.staleConfigs', sender: this, - success: 'restartAllRequiredSuccessCallback' + success: 'restartAllRequiredSuccessCallback', + showLoadingPopup: true }); }, http://git-wip-us.apache.org/repos/asf/ambari/blob/424949b9/ambari-web/app/controllers/main/service/item.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/item.js b/ambari-web/app/controllers/main/service/item.js index a7ed493..621c3b6 100644 --- a/ambari-web/app/controllers/main/service/item.js +++ b/ambari-web/app/controllers/main/service/item.js @@ -488,7 +488,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow 'sender': this, 'success': 'startStopPopupSuccessCallback', 'error': 'startStopPopupErrorCallback', - 'data': data + 'data': data, + 'showLoadingPopup': true }); }, @@ -544,7 +545,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow forceRefreshConfigTags : "capacity-scheduler" }, success : 'refreshYarnQueuesSuccessCallback', - error : 'refreshYarnQueuesErrorCallback' + error : 'refreshYarnQueuesErrorCallback', + showLoadingPopup: true }); }); }, @@ -589,7 +591,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow componentName: "KNOX_GATEWAY" }, success: 'startStopLdapKnoxSuccessCallback', - error: 'startStopLdapKnoxErrorCallback' + error: 'startStopLdapKnoxErrorCallback', + showLoadingPopup: true }); }); }, @@ -636,7 +639,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow componentName: "HIVE_SERVER_INTERACTIVE" }, success: 'requestSuccessCallback', - error: 'requestErrorCallback' + error: 'requestErrorCallback', + showLoadingPopup: true }); }, @@ -681,7 +685,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow batches: batches }, success: 'requestSuccessCallback', - error: 'requestErrorCallback' + error: 'requestErrorCallback', + showLoadingPopup: true }); }, @@ -733,7 +738,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow threshold: this.get('inputValue') }, success : 'rebalanceHdfsNodesSuccessCallback', - error : 'rebalanceHdfsNodesErrorCallback' + error : 'rebalanceHdfsNodesErrorCallback', + showLoadingPopup: true }); this.hide(); }, @@ -858,7 +864,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow 'sender': this, 'success':'runSmokeTestSuccessCallBack', 'error':'runSmokeTestErrorCallBack', - 'data': requestData + 'data': requestData, + showLoadingPopup: true }); }, @@ -1087,7 +1094,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow componentName : context.component }, success : 'executeCustomCommandSuccessCallback', - error : 'executeCustomCommandErrorCallback' + error : 'executeCustomCommandErrorCallback', + showLoadingPopup: true }); }); }, @@ -1111,7 +1119,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow forceRefreshConfigTags : "capacity-scheduler" }, success : 'executeCustomCommandSuccessCallback', - error : 'executeCustomCommandErrorCallback' + error : 'executeCustomCommandErrorCallback', + showLoadingPopup: true }); }); }, @@ -1574,7 +1583,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow servicesToDeleteNext: servicesToDeleteNext }, success : 'deleteServiceCallSuccessCallback', - error: 'deleteServiceCallErrorCallback' + error: 'deleteServiceCallErrorCallback', + showLoadingPopup: true }); }, http://git-wip-us.apache.org/repos/asf/ambari/blob/424949b9/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 ae3947f..caf7a62 100644 --- a/ambari-web/app/utils/ajax/ajax.js +++ b/ambari-web/app/utils/ajax/ajax.js @@ -3114,13 +3114,29 @@ var ajax = Em.Object.extend({ return null; } + var loadingPopup = null; + var loadingPopupTimeout = null; + if(config.hasOwnProperty("showLoadingPopup") && config.showLoadingPopup === true) { + loadingPopupTimeout = setTimeout(function() { + loadingPopup = App.ModalPopup.show({ + header: Em.I18n.t('jobs.loadingTasks'), + backdrop: false, + primary: false, + secondary: false, + bodyClass: Em.View.extend({ + template: Em.Handlebars.compile('{{view App.SpinnerView}}') + }) + }); + }, 500); + } + // default parameters var params = { clusterName: (App.get('clusterName') || App.clusterStatus.get('clusterName')) }; // extend default parameters with provided - if (config.data) { + if (config.hasOwnProperty("data") && config.data) { jQuery.extend(params, config.data); } @@ -3163,6 +3179,12 @@ var ajax = Em.Object.extend({ } }; opt.complete = function () { + if (loadingPopupTimeout) { + clearTimeout(loadingPopupTimeout); + } + if(loadingPopup) { + Em.tryInvoke(loadingPopup, 'hide'); + } App.logger.logTimerIfMoreThan(consoleMsg, 1000); if (config.callback) { config.callback(); http://git-wip-us.apache.org/repos/asf/ambari/blob/424949b9/ambari-web/app/utils/batch_scheduled_requests.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/batch_scheduled_requests.js b/ambari-web/app/utils/batch_scheduled_requests.js index b8ae955..6d1e721 100644 --- a/ambari-web/app/utils/batch_scheduled_requests.js +++ b/ambari-web/app/utils/batch_scheduled_requests.js @@ -244,7 +244,8 @@ module.exports = { operation_level: operation_level }, success: 'successCallback', - error: 'errorCallback' + error: 'errorCallback', + showLoadingPopup: true }); } }, @@ -318,7 +319,8 @@ module.exports = { batches: this.getBatchesForRollingRestartRequest(restartHostComponents, batchSize) }, success: 'successCallback', - error: 'errorCallback' + error: 'errorCallback', + showLoadingPopup: true }); }, http://git-wip-us.apache.org/repos/asf/ambari/blob/424949b9/ambari-web/app/views/common/modal_popup.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/modal_popup.js b/ambari-web/app/views/common/modal_popup.js index 2f2dc1c..f09ae62 100644 --- a/ambari-web/app/views/common/modal_popup.js +++ b/ambari-web/app/views/common/modal_popup.js @@ -83,6 +83,7 @@ App.ModalPopup = Ember.View.extend({ .on('enter-key-pressed', this.enterKeyPressed.bind(this)) .on('escape-key-pressed', this.escapeKeyPressed.bind(this)); this.fitZIndex(); + this.handleBackDrop(); var firstInputElement = this.$('#modal').find(':input').not(':disabled, .no-autofocus').first(); if (!$.mocho) { this.$('#modal').modal({ @@ -94,6 +95,14 @@ App.ModalPopup = Ember.View.extend({ this.subscribeResize(); }, + handleBackDrop: function () { + if (this.get('backdrop') === false) { + $('.modal-backdrop').css('visibility', 'hidden'); + } else { + $('.modal-backdrop').css('visibility', 'visible'); + } + }, + subscribeResize: function() { if (this.get('autoHeight') && !$.mocho) { this.fitHeight(); http://git-wip-us.apache.org/repos/asf/ambari/blob/424949b9/ambari-web/test/controllers/main/service_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/service_test.js b/ambari-web/test/controllers/main/service_test.js index d8c3365..7ed7641 100644 --- a/ambari-web/test/controllers/main/service_test.js +++ b/ambari-web/test/controllers/main/service_test.js @@ -462,7 +462,8 @@ describe('App.MainServiceController', function () { state: 'INSTALLED' } }, - success: 'silentStopSuccess' + success: 'silentStopSuccess', + showLoadingPopup: true }); }); }); @@ -598,7 +599,8 @@ describe('App.MainServiceController', function () { state: 'STARTED' } }, - success: 'silentCallSuccessCallback' + success: 'silentCallSuccessCallback', + showLoadingPopup: true }); expect(mainServiceController.get('shouldStart')).to.be.false; });
