UNPKG

@xtcry/bull-arena

Version:

An interactive UI dashboard for Bee/Bull Queue

56 lines (55 loc) 2.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bulkJobsRetry = exports.bulkJobsRemove = exports.bulkJobsPromote = exports.ActionType = void 0; const _ = require("lodash"); var ActionType; (function (ActionType) { ActionType["Remove"] = "remove"; ActionType["Retry"] = "retry"; ActionType["Promote"] = "promote"; })(ActionType = exports.ActionType || (exports.ActionType = {})); const bulkAction = (action) => async function handler(req, res) { if (!_.includes(ActionType, action)) { res.status(401).send({ error: 'unauthorized action', details: `action ${action} not permitted`, }); } const { queueName, queueHost } = req.params; const { Queues } = req.app.locals; const queue = await Queues.get(queueName, queueHost); if (!queue) return res.status(404).send({ error: 'queue not found' }); const { jobs, queueState } = req.body; try { if (!_.isEmpty(jobs)) { const jobsPromises = jobs.map((id) => queue.getJob(decodeURIComponent(id))); const fetchedJobs = await Promise.all(jobsPromises); const actionPromises = action === ActionType.Retry ? fetchedJobs.map((job) => { if (queueState === 'failed' && typeof job.retry === 'function') { return job.retry(); } else { return Queues.set(queue, job.data, job.name); } }) : fetchedJobs.map((job) => job[action]()); await Promise.all(actionPromises); return res.sendStatus(200); } } catch (e) { const body = { error: 'queue error', details: e.stack, }; return res.status(500).send(body); } return res.sendStatus(200); }; exports.bulkJobsPromote = bulkAction(ActionType.Promote); exports.bulkJobsRemove = bulkAction(ActionType.Remove); exports.bulkJobsRetry = bulkAction(ActionType.Retry); exports.default = bulkAction;