app/assets/javascripts/components/worker-checker.js
$(function () {
let sinceId = null;
let previousJobs = null;
if ($(".job-indicator").length) {
var check = function () {
const query = sinceId != null ? "?since_id=" + sinceId : "";
return $.getJSON("/worker_status" + query, function (json) {
for (var method of ["pending", "awaiting_retry", "recent_failures"]) {
var count = json[method];
var elem = $(`.job-indicator[role=${method}]`);
if (count > 0) {
var tooltipOptions = {
title: `${count} jobs ${method.split("_").join(" ")}`,
delay: 0,
placement: "bottom",
trigger: "hover",
};
if (elem.is(":visible")) {
elem
.tooltip("destroy")
.tooltip(tooltipOptions)
.find(".number")
.text(count);
} else {
elem
.tooltip("destroy")
.tooltip(tooltipOptions)
.fadeIn()
.find(".number")
.text(count);
}
} else {
if (elem.is(":visible")) {
elem.tooltip("destroy").fadeOut();
}
}
}
if (sinceId != null && json.event_count > 0) {
$("#event-indicator")
.tooltip("destroy")
.tooltip({
title: "Click to see the events",
delay: 0,
placement: "bottom",
trigger: "hover",
})
.find("a")
.attr({ href: json.events_url })
.end()
.fadeIn()
.find(".number")
.text(json.event_count);
} else {
$("#event-indicator").tooltip("destroy").fadeOut();
}
if (sinceId == null) {
sinceId = json.max_id;
}
const currentJobs = [
json.pending,
json.awaiting_retry,
json.recent_failures,
];
if (
document.location.pathname === "/jobs" &&
$(".modal[aria-hidden=false]").length === 0 &&
previousJobs != null &&
previousJobs.join(",") !== currentJobs.join(",")
) {
if (
!document.location.search ||
document.location.search === "?page=1"
) {
$.get("/jobs", (data) => {
return $("#main-content").html(data);
});
}
}
previousJobs = currentJobs;
return (window.workerCheckTimeout = setTimeout(check, 2000));
});
};
return check();
}
});