@fellas/adonisjs-resque
Version:
Resque Queue for AdonisJS v6
136 lines (135 loc) • 3.22 kB
JavaScript
// base_job.ts
import app from "@adonisjs/core/services/app";
import { LoggerManager } from "@adonisjs/core/logger";
var BaseJob = class {
interval;
cron;
plugins = [];
delayMs = 0;
runAtMs;
/**
* the default JobName is this class name
* it **MUST be a unique name**
*/
jobName;
/**
* set a queueName for this job
* default configured in `config/resque.ts`
*/
queueName;
args = [];
allArgs = [];
hasEnqueued = false;
hasEnqueuedAll = false;
app = app;
logger;
constructor(..._args) {
this.logger = this.createLogger();
}
createLogger() {
const loggerName = app.config.get("resque.logger");
const loggerConfig = app.config.get("logger");
const manager = new LoggerManager(loggerConfig);
if (loggerName) {
return manager.use(loggerName);
} else {
return manager.use();
}
}
static enqueue(...args) {
const job = new this();
return job.enqueue(...args);
}
enqueue(...args) {
this.args = args;
this.hasEnqueued = true;
return this;
}
static queue(queueName) {
const job = new this();
return job.queue(queueName);
}
queue(queueName) {
this.queueName = queueName;
return this;
}
static enqueueAll(args) {
const job = new this();
return job.enqueueAll(args);
}
enqueueAll(args) {
this.allArgs = args;
this.hasEnqueuedAll = true;
return this;
}
static in(ms) {
return new this().in(ms);
}
in(ms) {
this.delayMs = ms;
return this;
}
static at(ms) {
return new this().at(ms);
}
at(ms) {
this.runAtMs = ms;
return this;
}
perform(..._args) {
}
handleError(error) {
this.logger.error(error.message);
throw error;
}
onFailure(_failure) {
}
async execute() {
const resqueConfig = app.config.get("resque");
const jobName = this.jobName ?? this.constructor.name;
const queueName = this.queueName ?? resqueConfig.queueNameForJobs;
const queue = await app.container.make("queue");
if (this.hasEnqueued) {
const getTips = () => {
if (!resqueConfig.verbose) {
return void 0;
}
const tips = `enqueued to queue ${queueName}, job ${jobName}`;
if (this.delayMs) {
return `${tips}, delay ${this.delayMs}ms`;
} else if (this.runAtMs) {
return `${tips}, run at ${this.runAtMs}`;
} else {
return tips;
}
};
this.logger.info(getTips());
if (this.delayMs) {
return queue.enqueueIn(this.delayMs, queueName, jobName, this.args);
} else if (this.runAtMs) {
return queue.enqueueAt(this.runAtMs, queueName, jobName, this.args);
} else {
return queue.enqueue(queueName, jobName, this.args);
}
} else if (this.hasEnqueuedAll) {
return Promise.all(this.allArgs.map((arg) => queue.enqueue(queueName, jobName, arg)));
} else {
return false;
}
}
/**
* this method runs after an `await` statement
* e.g,
* ```typescript
* await job.enqueue().in(2000)
* ```
* @param fn
*/
then(fn) {
this.execute().then(fn);
}
};
export {
BaseJob
};
//# sourceMappingURL=chunk-ASV6JZ7C.js.map