]> git.proxmox.com Git - pve-manager-legacy.git/commitdiff
copy UpdateQueue.js from manager to manager5
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 27 Apr 2015 09:54:50 +0000 (11:54 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 27 Apr 2015 09:54:50 +0000 (11:54 +0200)
www/manager5/data/UpdateQueue.js [new file with mode: 0644]

diff --git a/www/manager5/data/UpdateQueue.js b/www/manager5/data/UpdateQueue.js
new file mode 100644 (file)
index 0000000..121aba6
--- /dev/null
@@ -0,0 +1,57 @@
+// Serialize load (avoid too many parallel connections)
+Ext.define('PVE.data.UpdateQueue', {
+    singleton: true,
+
+    constructor : function(){
+        var me = this;
+
+       var queue = [];
+       var queue_idx = {};
+
+       var idle = true;
+
+       var start_update = function() {
+           if (!idle) {
+               return;
+           }
+
+           var storeid = queue.shift();
+           if (!storeid) {
+               return;
+           }
+           var info = queue_idx[storeid];
+           queue_idx[storeid] = null;
+
+           info.updatestart = new Date();
+
+           idle = false;
+           info.store.load({
+               callback: function(records, operation, success) {
+                   idle = true;
+                   if (info.callback) {
+                       var runtime = (new Date()).getTime() - info.updatestart.getTime();
+                       info.callback(runtime, success);
+                   }
+                   start_update();
+               }
+           });
+       };
+
+       Ext.apply(me, {
+           queue: function(store, cb) {
+               var storeid = store.storeid;
+               if (!storeid) {
+                   throw "unable to queue store without storeid";
+               }
+               if (!queue_idx[storeid]) {
+                   queue_idx[storeid] = {
+                       store: store,
+                       callback: cb
+                   };
+                   queue.push(storeid);
+               }
+               start_update();
+           }
+       });
+    }
+});