From 1061c73fde3005100ead8764eacb444f240440d6 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 4 Dec 2019 14:49:59 +0100 Subject: Add ability to filter per job type --- server/lib/job-queue/job-queue.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'server/lib') diff --git a/server/lib/job-queue/job-queue.ts b/server/lib/job-queue/job-queue.ts index 3c810da98..ec601e9ea 100644 --- a/server/lib/job-queue/job-queue.ts +++ b/server/lib/job-queue/job-queue.ts @@ -121,11 +121,20 @@ class JobQueue { return queue.add(obj.payload, jobArgs) } - async listForApi (state: JobState, start: number, count: number, asc?: boolean): Promise { + async listForApi (options: { + state: JobState, + start: number, + count: number, + asc?: boolean, + jobType: JobType + }): Promise { + const { state, start, count, asc, jobType } = options let results: Bull.Job[] = [] + const filteredJobTypes = this.filterJobTypes(jobType) + // TODO: optimize - for (const jobType of jobTypes) { + for (const jobType of filteredJobTypes) { const queue = this.queues[ jobType ] if (queue === undefined) { logger.error('Unknown queue %s to list jobs.', jobType) @@ -149,10 +158,12 @@ class JobQueue { return results.slice(start, start + count) } - async count (state: JobState): Promise { + async count (state: JobState, jobType?: JobType): Promise { let total = 0 - for (const type of jobTypes) { + const filteredJobTypes = this.filterJobTypes(jobType) + + for (const type of filteredJobTypes) { const queue = this.queues[ type ] if (queue === undefined) { logger.error('Unknown queue %s to count jobs.', type) @@ -180,6 +191,12 @@ class JobQueue { }) } + private filterJobTypes (jobType?: JobType) { + if (!jobType) return jobTypes + + return jobTypes.filter(t => t === jobType) + } + static get Instance () { return this.instance || (this.instance = new this()) } @@ -188,5 +205,6 @@ class JobQueue { // --------------------------------------------------------------------------- export { + jobTypes, JobQueue } -- cgit v1.2.3