UNPKG

adonis5-queue

Version:

Adonis JS 5 queue package based backed by Kue and Kue-scheduler

102 lines (101 loc) 3.16 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const kue_scheduler_1 = __importDefault(require("kue-scheduler")); const JobMaker_1 = __importDefault(require("./JobMaker")); const JobRegister_1 = __importDefault(require("./JobRegister")); // import { Queue } from '@ioc:Adonis5/Queue' /** * Main queue driver * * @version 2.0.0 * @adonis-version 4.0+ */ class Queue { /** * Construct the queue * @param {Adonis/App} app Adonis app/Ioc instance */ constructor(config, appRootPath) { this.config = config; this.appRootPath = appRootPath; // initialize kue queue this.queue = kue_scheduler_1.default.createQueue(this.config.connection); // boost number of event listeners a queue instance can listen to this.queue.setMaxListeners(0); } /** * Register job event handlers * @return {Promise} */ processing() { const register = new JobRegister_1.default(this.config, this.appRootPath); return register.setQueue(this.queue).listenForAppJobs(); } /** * Dispatch a new job * @param {App/Jobs} job Job instances * @return {Void} */ dispatch(job, when = 'now') { // create a job maker factory const maker = new JobMaker_1.default(); // get the kue job converted from app job const result = maker.setAppJob(job).setQueue(this.queue).process(); // schedule the job in the queue if (when === 'now') { // immediate job this.queue.now(result.kueJob); } else if (when.includes('every') || when.includes('*')) { when = when.replace('every ', ''); // cron or repeating job this.queue.every(when, result.kueJob); } else { // schedule a job this.queue.schedule(when, result.kueJob); } return result; } /** * Remove a job from queue * @param {App/Job} job Job producer * @return {Promise<Response>} */ remove(job) { return new Promise((resolve, reject) => { this.queue.removeJob(job.kueJob.id, (error, response) => { if (error) { reject(error); } else { // send the onRemove event if (job['onRemove']) { job['onRemove'](job.job.type); } resolve(response); } }); }); } /** * Clear all jobs within a queue for a clean start * @return {Promise<Response>} */ clear() { return new Promise((resolve, reject) => { this.queue.clear((error, response) => { if (error) { reject(error); } else { resolve(response); } }); }); } } exports.default = Queue;