Add queued image jobs to server selection logic
This commit is contained in:
parent
2421c310e3
commit
fec3d7303c
2 changed files with 12 additions and 3 deletions
|
@ -119,7 +119,11 @@ httpServer.on("request", async (req, res) => {
|
|||
const reqUrl = new URL(req.url, `http://${req.headers.host}`);
|
||||
if (reqUrl.pathname === "/status" && req.method === "GET") {
|
||||
log(`Sending server status to ${req.socket.remoteAddress}:${req.socket.remotePort} via HTTP`);
|
||||
return res.end(Buffer.from((MAX_JOBS - jobAmount).toString()));
|
||||
const statusObject = {
|
||||
load: MAX_JOBS - jobAmount,
|
||||
queued: queue.length
|
||||
};
|
||||
return res.end(JSON.stringify(statusObject));
|
||||
} else if (reqUrl.pathname === "/running" && req.method === "GET") {
|
||||
log(`Sending currently running jobs to ${req.socket.remoteAddress}:${req.socket.remotePort} via HTTP`);
|
||||
const keys = jobs.keys();
|
||||
|
|
|
@ -87,6 +87,10 @@ class ImageWorker extends BaseServiceWorker {
|
|||
if (ideal.length === 0) throw "No available servers";
|
||||
const sorted = ideal.sort((a, b) => {
|
||||
return b.load - a.load;
|
||||
}).filter((e, i, array) => {
|
||||
return !(e.load < array[0].load);
|
||||
}).sort((a, b) => {
|
||||
return a.queued - b.queued;
|
||||
});
|
||||
return sorted[0];
|
||||
}
|
||||
|
@ -123,11 +127,12 @@ class ImageWorker extends BaseServiceWorker {
|
|||
}
|
||||
});
|
||||
clearTimeout(timeout);
|
||||
const status = await statusRequest.text();
|
||||
const status = await statusRequest.json();
|
||||
serversLeft--;
|
||||
idealServers.push({
|
||||
addr: address,
|
||||
load: parseInt(status)
|
||||
load: status.load,
|
||||
queued: status.queued
|
||||
});
|
||||
} catch (e) {
|
||||
if (e.name === "AbortError") {
|
||||
|
|
Loading…
Reference in a new issue