From 7df92fed0f9fd895113a5b93bac90cf41509033b Mon Sep 17 00:00:00 2001 From: ex7r3me Date: Sun, 17 Nov 2019 16:57:55 +0300 Subject: [PATCH 1/2] add: clean all for failed jobs - add route for clean all for failed jobs - add button for clean all in the UI - rename clean to 'cleanDelayed' for delayed job related functions --- index.js | 3 ++- routes/{cleanAll.js => cleanAllDelayed.js} | 0 routes/cleanAllFailed.js | 23 ++++++++++++++++++++++ ui/components/App.js | 6 ++++-- ui/components/Queue.js | 17 ++++++++++------ ui/components/hooks/useStore.js | 12 ++++++++--- 6 files changed, 49 insertions(+), 12 deletions(-) rename routes/{cleanAll.js => cleanAllDelayed.js} (100%) create mode 100644 routes/cleanAllFailed.js diff --git a/index.js b/index.js index 15ba07777..e7ccb089b 100644 --- a/index.js +++ b/index.js @@ -18,7 +18,8 @@ function UI() { router.get('/queues', require('./routes/queues')) router.put('/queues/:queueName/retry', require('./routes/retryAll')) router.put('/queues/:queueName/:id/retry', require('./routes/retryJob')) - router.put('/queues/:queueName/clean', require('./routes/cleanAll')) + router.put('/queues/:queueName/cleanDelayed', require('./routes/cleanAllDelayed')) + router.put('/queues/:queueName/cleanFailed', require('./routes/cleanAllFailed')) router.get('/', require('./routes/index')) app.use(bodyParser.json()) diff --git a/routes/cleanAll.js b/routes/cleanAllDelayed.js similarity index 100% rename from routes/cleanAll.js rename to routes/cleanAllDelayed.js diff --git a/routes/cleanAllFailed.js b/routes/cleanAllFailed.js new file mode 100644 index 000000000..230a59a3a --- /dev/null +++ b/routes/cleanAllFailed.js @@ -0,0 +1,23 @@ +module.exports = async function handler(req, res) { + try { + const { queueName } = req.params + const { queues } = req.app.locals + + const GRACE_TIME_MS = 5000 + + const queue = queues[queueName] + if (!queue) { + return res.status(404).send({ error: 'queue not found' }) + } + + await queue.clean(GRACE_TIME_MS, 'failed') + + return res.sendStatus(200) + } catch (e) { + const body = { + error: 'queue error', + details: e.stack, + } + return res.status(500).send(body) + } +} diff --git a/ui/components/App.js b/ui/components/App.js index 564abe69c..e7a5eea88 100644 --- a/ui/components/App.js +++ b/ui/components/App.js @@ -11,7 +11,8 @@ export default function App({ basePath }) { setSelectedStatuses, retryJob, retryAll, - cleanAll, + cleanAllDelayed, + cleanAllFailed } = useStore(basePath) return ( @@ -31,7 +32,8 @@ export default function App({ basePath }) { selectStatus={setSelectedStatuses} retryJob={retryJob(queue.name)} retryAll={retryAll(queue.name)} - cleanAll={cleanAll(queue.name)} + cleanAllDelayed={cleanAllDelayed(queue.name)} + cleanAllFailed={cleanAllFailed(queue.name)} /> ))} diff --git a/ui/components/Queue.js b/ui/components/Queue.js index ff4bf9aa0..7deda41f8 100644 --- a/ui/components/Queue.js +++ b/ui/components/Queue.js @@ -255,11 +255,14 @@ function Jobs({ retryJob, queue: { jobs, name }, status }) { } const actions = { - failed: ({ retryAll }) => { - return + failed: ({ retryAll, cleanAllFailed }) => { + return
+ + +
}, - delayed: ({ cleanAll }) => { - return + delayed: ({ cleanAllDelayed }) => { + return }, } @@ -279,7 +282,8 @@ function QueueActions(props) { export default function Queue({ retryAll, retryJob, - cleanAll, + cleanAllDelayed, + cleanAllFailed, queue, selectStatus, selectedStatus, @@ -302,7 +306,8 @@ export default function Queue({ <> diff --git a/ui/components/hooks/useStore.js b/ui/components/hooks/useStore.js index 15f6a356d..c749b9244 100644 --- a/ui/components/hooks/useStore.js +++ b/ui/components/hooks/useStore.js @@ -54,8 +54,13 @@ export default function useStore(basePath) { update, ) - const cleanAll = queueName => () => - fetch(`${basePath}/queues/${queueName}/clean`, { method: 'put' }).then( + const cleanAllDelayed = queueName => () => + fetch(`${basePath}/queues/${queueName}/cleanDelayed`, { method: 'put' }).then( + update, + ) + + const cleanAllFailed = queueName => () => + fetch(`${basePath}/queues/${queueName}/cleanFailed`, { method: 'put' }).then( update, ) @@ -63,7 +68,8 @@ export default function useStore(basePath) { state, retryJob, retryAll, - cleanAll, + cleanAllDelayed, + cleanAllFailed, selectedStatuses, setSelectedStatuses, } From 2b1a9a3ade4c1135b16f74a31ed00547d1a2e90c Mon Sep 17 00:00:00 2001 From: ex7r3me Date: Thu, 21 Nov 2019 20:25:56 +0300 Subject: [PATCH 2/2] refactor: clean all endpoint - change implementation of clean all to use URL param to choose which queue to clean - change routes in UI and router --- index.js | 3 +-- routes/{cleanAllDelayed.js => cleanAll.js} | 4 ++-- routes/cleanAllFailed.js | 23 ---------------------- ui/components/hooks/useStore.js | 4 ++-- 4 files changed, 5 insertions(+), 29 deletions(-) rename routes/{cleanAllDelayed.js => cleanAll.js} (80%) delete mode 100644 routes/cleanAllFailed.js diff --git a/index.js b/index.js index e7ccb089b..a1964bbd9 100644 --- a/index.js +++ b/index.js @@ -18,8 +18,7 @@ function UI() { router.get('/queues', require('./routes/queues')) router.put('/queues/:queueName/retry', require('./routes/retryAll')) router.put('/queues/:queueName/:id/retry', require('./routes/retryJob')) - router.put('/queues/:queueName/cleanDelayed', require('./routes/cleanAllDelayed')) - router.put('/queues/:queueName/cleanFailed', require('./routes/cleanAllFailed')) + router.put('/queues/:queueName/clean/:queueStatus', require('./routes/cleanAll')) router.get('/', require('./routes/index')) app.use(bodyParser.json()) diff --git a/routes/cleanAllDelayed.js b/routes/cleanAll.js similarity index 80% rename from routes/cleanAllDelayed.js rename to routes/cleanAll.js index d8be4482e..a17b132d8 100644 --- a/routes/cleanAllDelayed.js +++ b/routes/cleanAll.js @@ -1,6 +1,6 @@ module.exports = async function handler(req, res) { try { - const { queueName } = req.params + const { queueName, queueStatus } = req.params const { queues } = req.app.locals const GRACE_TIME_MS = 5000 @@ -10,7 +10,7 @@ module.exports = async function handler(req, res) { return res.status(404).send({ error: 'queue not found' }) } - await queue.clean(GRACE_TIME_MS, 'delayed') + await queue.clean(GRACE_TIME_MS, queueStatus) return res.sendStatus(200) } catch (e) { diff --git a/routes/cleanAllFailed.js b/routes/cleanAllFailed.js deleted file mode 100644 index 230a59a3a..000000000 --- a/routes/cleanAllFailed.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = async function handler(req, res) { - try { - const { queueName } = req.params - const { queues } = req.app.locals - - const GRACE_TIME_MS = 5000 - - const queue = queues[queueName] - if (!queue) { - return res.status(404).send({ error: 'queue not found' }) - } - - await queue.clean(GRACE_TIME_MS, 'failed') - - return res.sendStatus(200) - } catch (e) { - const body = { - error: 'queue error', - details: e.stack, - } - return res.status(500).send(body) - } -} diff --git a/ui/components/hooks/useStore.js b/ui/components/hooks/useStore.js index c749b9244..95b41d53e 100644 --- a/ui/components/hooks/useStore.js +++ b/ui/components/hooks/useStore.js @@ -55,12 +55,12 @@ export default function useStore(basePath) { ) const cleanAllDelayed = queueName => () => - fetch(`${basePath}/queues/${queueName}/cleanDelayed`, { method: 'put' }).then( + fetch(`${basePath}/queues/${queueName}/clean/delayed`, { method: 'put' }).then( update, ) const cleanAllFailed = queueName => () => - fetch(`${basePath}/queues/${queueName}/cleanFailed`, { method: 'put' }).then( + fetch(`${basePath}/queues/${queueName}/clean/failed`, { method: 'put' }).then( update, )