Improve typing on Queue and Jobs (#3892)

also, move all things related to `bull` into a single place.
This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2022-09-09 15:14:49 +02:00
committed by GitHub
parent 12507d39d6
commit f5c6c21bf4
4 changed files with 47 additions and 56 deletions

View File

@@ -1,17 +1,32 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import Bull from 'bull';
import { IExecuteResponsePromiseData } from 'n8n-workflow';
import config from '../config';
// eslint-disable-next-line import/no-cycle
import { IBullJobData, IBullWebhookResponse } from './Interfaces';
// eslint-disable-next-line import/no-cycle
import * as ActiveExecutions from './ActiveExecutions';
// eslint-disable-next-line import/no-cycle
import * as WebhookHelpers from './WebhookHelpers';
export type Job = Bull.Job<JobData>;
export type JobQueue = Bull.Queue<JobData>;
export interface JobData {
executionId: string;
loadStaticData: boolean;
}
export interface JobResponse {
success: boolean;
}
export interface WebhookResponse {
executionId: string;
response: IExecuteResponsePromiseData;
}
export class Queue {
private activeExecutions: ActiveExecutions.ActiveExecutions;
private jobQueue: Bull.Queue;
private jobQueue: JobQueue;
constructor() {
this.activeExecutions = ActiveExecutions.getInstance();
@@ -26,7 +41,7 @@ export class Queue {
// @ts-ignore
this.jobQueue = new Bull('jobs', { prefix, redis: redisOptions, enableReadyCheck: false });
this.jobQueue.on('global:progress', (jobId, progress: IBullWebhookResponse) => {
this.jobQueue.on('global:progress', (jobId, progress: WebhookResponse) => {
this.activeExecutions.resolveResponsePromise(
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
progress.executionId,
@@ -35,28 +50,28 @@ export class Queue {
});
}
async add(jobData: IBullJobData, jobOptions: object): Promise<Bull.Job> {
async add(jobData: JobData, jobOptions: object): Promise<Job> {
return this.jobQueue.add(jobData, jobOptions);
}
async getJob(jobId: Bull.JobId): Promise<Bull.Job | null> {
async getJob(jobId: Bull.JobId): Promise<Job | null> {
return this.jobQueue.getJob(jobId);
}
async getJobs(jobTypes: Bull.JobStatus[]): Promise<Bull.Job[]> {
async getJobs(jobTypes: Bull.JobStatus[]): Promise<Job[]> {
return this.jobQueue.getJobs(jobTypes);
}
getBullObjectInstance(): Bull.Queue {
getBullObjectInstance(): JobQueue {
return this.jobQueue;
}
/**
*
* @param job A Bull.Job instance
* @param job A Job instance
* @returns boolean true if we were able to securely stop the job
*/
async stopJob(job: Bull.Job): Promise<boolean> {
async stopJob(job: Job): Promise<boolean> {
if (await job.isActive()) {
// Job is already running so tell it to stop
await job.progress(-1);