healthchecks_healthchecks/static/js/adaptive-setinterval.js

46 lines
1.2 KiB
JavaScript

function adaptiveSetInterval(fn, runNow) {
// unconditionally run every minute
setInterval(fn, 60000);
// scheduleRun() keeps calling fn and decreasing quota
// every 3 seconds, until quota runs out.
var quota = 0;
var scheduledId = null;
function scheduleRun() {
if (quota > 0) {
quota -= 1;
clearTimeout(scheduledId);
scheduledId = setTimeout(scheduleRun, 3000);
fn();
}
}
document.addEventListener("visibilitychange", function() {
if (document.visibilityState == "visible") {
// tab becomes visible: reset quota
if (quota == 0) {
quota = 20;
scheduleRun();
} else {
quota = 20;
}
} else {
// lost visibility, clear quota
quota = 0;
}
});
// user moves mouse: reset quota
document.addEventListener("mousemove", function() {
if (quota == 0) {
quota = 20;
scheduleRun();
} else {
quota = 20;
}
});
quota = 20;
scheduledId = setTimeout(scheduleRun, runNow ? 1 : 3000);
}