@bull-board/api
Version:
A Dashboard server API built on top of bull or bullmq.
77 lines • 3.19 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatJob = void 0;
exports.queuesHandler = queuesHandler;
const formatJob = (job, queue) => {
const jobProps = job.toJSON();
const stacktrace = jobProps.stacktrace ? jobProps.stacktrace.filter(Boolean) : [];
return {
id: jobProps.id,
timestamp: jobProps.timestamp,
processedOn: jobProps.processedOn,
processedBy: jobProps.processedBy,
finishedOn: jobProps.finishedOn,
progress: jobProps.progress,
attempts: jobProps.attemptsMade,
delay: jobProps.delay,
failedReason: jobProps.failedReason,
stacktrace,
opts: jobProps.opts,
data: queue.format('data', jobProps.data),
name: queue.format('name', jobProps, jobProps.name || ''),
returnValue: queue.format('returnValue', jobProps.returnvalue),
isFailed: !!jobProps.failedReason || (Array.isArray(stacktrace) && stacktrace.length > 0),
};
};
exports.formatJob = formatJob;
function getPagination(statuses, counts, currentPage, jobsPerPage) {
const isLatestStatus = statuses.length > 1;
const total = isLatestStatus
? statuses.reduce((total, status) => total + Math.min(counts[status], jobsPerPage), 0)
: counts[statuses[0]];
const start = isLatestStatus ? 0 : (currentPage - 1) * jobsPerPage;
const pageCount = isLatestStatus ? 1 : Math.ceil(total / jobsPerPage);
return {
pageCount,
range: { start, end: start + jobsPerPage - 1 },
};
}
async function getAppQueues(pairs, query) {
return Promise.all(pairs.map(async ([queueName, queue]) => {
const isActiveQueue = decodeURIComponent(query.activeQueue) === queueName;
const jobsPerPage = +query.jobsPerPage || 10;
const jobStatuses = queue.getJobStatuses();
const status = !isActiveQueue || query.status === 'latest' ? jobStatuses : [query.status];
const currentPage = +query.page || 1;
const counts = await queue.getJobCounts();
const isPaused = await queue.isPaused();
const pagination = getPagination(status, counts, currentPage, jobsPerPage);
const jobs = isActiveQueue
? await queue.getJobs(status, pagination.range.start, pagination.range.end)
: [];
return {
name: queueName,
description: queue.getDescription() || undefined,
statuses: queue.getStatuses(),
counts: counts,
jobs: jobs.filter(Boolean).map((job) => (0, exports.formatJob)(job, queue)),
pagination,
readOnlyMode: queue.readOnlyMode,
allowRetries: queue.allowRetries,
allowCompletedRetries: queue.allowCompletedRetries,
isPaused,
type: queue.type,
delimiter: queue.delimiter,
};
}));
}
async function queuesHandler({ queues: bullBoardQueues, query = {}, }) {
const pairs = [...bullBoardQueues.entries()];
const queues = pairs.length > 0 ? await getAppQueues(pairs, query) : [];
return {
body: {
queues,
},
};
}
//# sourceMappingURL=queues.js.map
;