From c4b407336780c02f8508d4499be95d83f5be61a4 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Mon, 6 Apr 2015 12:58:21 -0400 Subject: [PATCH] use optimized url for zuul status This returns the optimized url for zuul, which should dramatically drop the amount of data transfered out of zuul. It also uses the ajax method which lets us ensure that we don't schedule another pass through the loop until we completed the current request. Add support for jquery visibility optimization Change-Id: I0e50f07fd9165e7a45c2712f6b1c4b3601759cba --- .../openstack_project/files/gerrit/hideci.js | 74 +++++++++++++++---- 1 file changed, 60 insertions(+), 14 deletions(-) diff --git a/modules/openstack_project/files/gerrit/hideci.js b/modules/openstack_project/files/gerrit/hideci.js index 4634ca9d5e..233896f009 100644 --- a/modules/openstack_project/files/gerrit/hideci.js +++ b/modules/openstack_project/files/gerrit/hideci.js @@ -28,7 +28,7 @@ var pipelineNameRegex = /Build \w+ \((\w+) pipeline\)/; // The url to full status information on running jobs var zuulStatusURL = 'http://status.openstack.org/zuul'; // The json URL to check for running jobs -var zuulStatusJSON = 'https://zuul.openstack.org/status.json'; +var zuulStatusJSON = 'https://zuul.openstack.org/status/change/'; // This is a variable to determine if we're in debugging mode, which // lets you globally set it to see what's going on in the flow. @@ -449,18 +449,6 @@ var ci_zuul_process_changes = function(data, change_psnum) { } }; -var ci_zuul_inner_loop = function(change_psnum) { - var current = ci_current_change(); - if (current && change_psnum.indexOf(current) != 0) { - // window url is dead - return; - } - $.getJSON(zuulStatusJSON, function(data) { - ci_zuul_process_changes(data, change_psnum); - }); - setTimeout(function() {ci_zuul_inner_loop(change_psnum);}, 10000); -}; - var ci_zuul_for_change = function(comments) { if (!comments) { comments = ci_parse_comments(); @@ -468,9 +456,57 @@ var ci_zuul_for_change = function(comments) { var change = ci_current_change(); var psnum = ci_latest_patchset(comments); var change_psnum = change + "," + psnum; - ci_zuul_inner_loop(change_psnum); + + // do the loop recursively in ajax + (function poll() { + $.ajax({ + url: zuulStatusJSON + change_psnum, + type: "GET", + success: function(data) { + dbg("Found zuul data for " + change_psnum, data); + ci_zuul_process_changes(data, change_psnum); + }, + dataType: "json", + complete: setTimeout(function() { + // once we are done with this cycle in the loop we + // schedule ourselves again in the future with + // setTimeout. However, by the time the function + // actually gets called, other things might have + // happened, and we may want to just dump the data + // instead. + // + // the UI might have gone hidden (user was bored, + // switched to another tab / window). + // + // the user may have navigated to another review url, + // so the data returned is not relevant. + // + // both cases are recoverable when the user navigates + // around, because a new "thread" gets started on + // ci_page_load. + // + // BUG(sdague): there is the possibility that the user + // navigates away from a page and back fast enough + // that the first "thread" is not dead, and a second + // one is started. greghaynes totally said he'd come + // up with a way to fix that. + if (window.zuul_enable_status_updates == false) { + return; + } + var current = ci_current_change(); + if (current && change_psnum.indexOf(current) != 0) { + // window url is dead, so don't schedule any more future + // updates for this url. + return; + } + poll(); + }, 15000), + timeout: 5000 + }); + })(); }; + window.onload = function() { var input = document.createElement("input"); input.id = "toggleci"; @@ -501,4 +537,14 @@ window.onload = function() { subtree: true, attributes: true }); + + $(document).on({ + 'show.visibility': function() { + window.zuul_enable_status_updates = true; + ci_page_loaded(); + }, + 'hide.visibility': function() { + window.zuul_enable_status_updates = false; + } + }); };