UNPKG

@bull-board/api

Version:

A Dashboard server API built on top of bull or bullmq.

87 lines 3.62 kB
"use strict"; 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) : []; stacktrace.reverse(); return { id: jobProps.id, timestamp: jobProps.timestamp, processedOn: jobProps.processedOn, processedBy: jobProps.processedBy, finishedOn: jobProps.finishedOn, progress: queue.format('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), externalUrl: typeof queue.externalJobUrl === 'function' ? queue.externalJobUrl(jobProps) : undefined, }; }; 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 globalConcurrency = await queue.getGlobalConcurrency(); const pagination = getPagination(status, counts, currentPage, jobsPerPage); const jobs = isActiveQueue ? await queue.getJobs(status, pagination.range.start, pagination.range.end) : []; return { name: queueName, displayName: queue.getDisplayName() || undefined, 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, globalConcurrency, }; })); } async function queuesHandler(req) { const pairs = []; for (const [queueName, queue] of req.queues.entries()) { if (await queue.isVisible(req)) { pairs.push([queueName, queue]); } } const queues = pairs.length > 0 ? await getAppQueues(pairs, req.query) : []; return { body: { queues, }, }; } //# sourceMappingURL=queues.js.map