From 06a733a89fe67ea700505c5efccbe16c1ed6d7a0 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Tue, 12 Feb 2013 15:50:58 -0800 Subject: [PATCH] CLOUDSTACK-618: cloudstack UI - API request throttling - for async job action, make frequency of calling queryAsyncJobResult API based on listCapabilities response. --- ui/scripts/cloudStack.js | 16 +++++++++++++++- ui/scripts/sharedFunctions.js | 1 + ui/scripts/ui/widgets/notifications.js | 4 ++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ui/scripts/cloudStack.js b/ui/scripts/cloudStack.js index fab6f7d839d..69813667c5c 100644 --- a/ui/scripts/cloudStack.js +++ b/ui/scripts/cloudStack.js @@ -157,6 +157,13 @@ g_cloudstackversion = json.listcapabilitiesresponse.capability.cloudstackversion; + if(json.listcapabilitiesresponse.capability.apilimitinterval != null && json.listcapabilitiesresponse.capability.apilimitmax != null) { + var intervalLimit = ((json.listcapabilitiesresponse.capability.apilimitinterval * 1000) / json.listcapabilitiesresponse.capability.apilimitmax ) * 3; //multiply 3 to be on safe side + //intervalLimit = 9999; //this line is for testing only, comment it before check in + if(intervalLimit > g_queryAsyncJobResultInterval) + g_queryAsyncJobResultInterval = intervalLimit; + } + userValid = true; }, error: function(xmlHTTP) { @@ -283,7 +290,14 @@ $.cookie('userProjectsEnabled', g_userProjectsEnabled, { expires: 1 }); g_cloudstackversion = json.listcapabilitiesresponse.capability.cloudstackversion; - + + if(json.listcapabilitiesresponse.capability.apilimitinterval != null && json.listcapabilitiesresponse.capability.apilimitmax != null) { + var intervalLimit = ((json.listcapabilitiesresponse.capability.apilimitinterval * 1000) / json.listcapabilitiesresponse.capability.apilimitmax ) * 3; //multiply 3 to be on safe side + //intervalLimit = 8888; //this line is for testing only, comment it before check in + if(intervalLimit > g_queryAsyncJobResultInterval) + g_queryAsyncJobResultInterval = intervalLimit; + } + args.response.success({ data: { user: $.extend(true, {}, loginresponse, { diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js index 51c4fdb5902..026089f6ea4 100644 --- a/ui/scripts/sharedFunctions.js +++ b/ui/scripts/sharedFunctions.js @@ -26,6 +26,7 @@ var g_timezone = null; var g_supportELB = null; var g_userPublicTemplateEnabled = "true"; var g_cloudstackversion = null; +var g_queryAsyncJobResultInterval = 6000; //keyboard keycode var keycode_Enter = 13; diff --git a/ui/scripts/ui/widgets/notifications.js b/ui/scripts/ui/widgets/notifications.js index e98d4d80fc1..02996031b82 100644 --- a/ui/scripts/ui/widgets/notifications.js +++ b/ui/scripts/ui/widgets/notifications.js @@ -93,7 +93,7 @@ $total.parent().addClass('pending'); $item.addClass('pending'); - // Setup timer + // Setup timer var pollTimer = setInterval(function() { args.poll({ _custom: _custom, @@ -281,7 +281,7 @@ cloudStack.ui.event.call('addNotification', { section: notification.section, desc: notification.desc, - interval: notification.interval ? notification.interval : 5000, + interval: notification.interval ? notification.interval : g_queryAsyncJobResultInterval, _custom: notification._custom, poll: function(args) { var complete = args.complete;