@xtcry/bull-arena
Version:
An interactive UI dashboard for Bee/Bull Queue
56 lines (55 loc) • 2.19 kB
JavaScript
;
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;