1
0
Fork 0
mirror of https://github.com/Chocobozzz/PeerTube.git synced 2025-10-05 19:42:24 +02:00

Add ability to filter per job type

This commit is contained in:
Chocobozzz 2019-12-04 14:49:59 +01:00
parent 44df5c755c
commit 1061c73fde
No known key found for this signature in database
GPG key ID: 583A612D890159BE
15 changed files with 220 additions and 58 deletions

View file

@ -121,11 +121,20 @@ class JobQueue {
return queue.add(obj.payload, jobArgs)
}
async listForApi (state: JobState, start: number, count: number, asc?: boolean): Promise<Bull.Job[]> {
async listForApi (options: {
state: JobState,
start: number,
count: number,
asc?: boolean,
jobType: JobType
}): Promise<Bull.Job[]> {
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<number> {
async count (state: JobState, jobType?: JobType): Promise<number> {
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
}