From 5f8000d3a9930f290a24fc945177677cc2df8ce8 Mon Sep 17 00:00:00 2001 From: sneyders <38222012+sneyders@users.noreply.github.com> Date: Sat, 29 Aug 2020 10:29:06 +0200 Subject: [PATCH] Added queue cleaning --- client.js | 17 +++++++++++------ server.js | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/client.js b/client.js index f272d75..d873016 100644 --- a/client.js +++ b/client.js @@ -1,4 +1,4 @@ - + // Store for all of the jobs in progress let jobs = {}; @@ -12,14 +12,19 @@ async function addJob() { // Fetch updates for each job async function updateJobs() { + let newJobs = {}; for (let id of Object.keys(jobs)) { let res = await fetch(`/job/${id}`); - let result = await res.json(); - if (!!jobs[id]) { - jobs[id] = result; + try { + let result = await res.json(); + if (!!jobs[id]) { + newJobs[id] = result; + } + } catch (e) { } - render(); } + jobs = newJobs; + render(); } // Delete all stored jobs @@ -53,7 +58,7 @@ function renderJob(job) { color = "bg-dark-red"; progress = 100; } - + return document.querySelector('#job-template') .innerHTML .replace('{{id}}', job.id) diff --git a/server.js b/server.js index 46c1a1c..72a7e75 100644 --- a/server.js +++ b/server.js @@ -41,7 +41,20 @@ app.get('/job/:id', async (req, res) => { // You can listen to global events to get notified when jobs are processed workQueue.on('global:completed', (jobId, result) => { - console.log(`Job completed with result ${result}`); + console.log(`Job ${jobId} completed`); }); +// Message cleaning +workQueue.on('cleaned', function(jobs, type) { + console.log('Cleaned %s %s jobs', jobs.length, type); +}); + +// Clear queue every minute of processed and failed jobs. +setInterval(function() { + // Cleans all jobs that completed over 10 seconds ago, + // and cleans all jobs that failed over 2 minutes ago. + workQueue.clean(10000); + workQueue.clean(120000, 'failed'); +}, 60000); + app.listen(PORT, () => console.log("Server started!"));