egg-schedule
Version:
schedule plugin for egg, support corn job.
71 lines (58 loc) • 1.48 kB
JavaScript
'use strict';
module.exports = class BaseStrategy {
constructor(schedule, agent, key) {
this.agent = agent;
this.key = key;
this.schedule = schedule;
this.logger = this.agent.getLogger('scheduleLogger');
this.count = 0;
}
start() {}
onJobStart() {}
onJobFinish() {}
/**
* trigger one worker
*
* @param {...any} args - pass to job task
*/
sendOne(...args) {
/* istanbul ignore next */
if (this.agent.schedule.closed) {
this.logger.warn(`${this.key} skip due to schedule closed`);
return;
}
this.count++;
const info = {
key: this.key,
id: this.getSeqId(),
args,
};
this.logger.debug(`[Job#${info.id}] ${info.key} triggered, send random by agent`);
this.agent.messenger.sendRandom('egg-schedule', info);
this.onJobStart(info);
}
/**
* trigger all worker
*
* @param {...any} args - pass to job task
*/
sendAll(...args) {
/* istanbul ignore next */
if (this.agent.schedule.closed) {
this.logger.warn(`${this.key} skip due to schedule closed`);
return;
}
this.count++;
const info = {
key: this.key,
id: this.getSeqId(),
args,
};
this.logger.debug(`[Job#${info.id}] ${info.key} triggered, send all by agent`);
this.agent.messenger.send('egg-schedule', info);
this.onJobStart(info);
}
getSeqId() {
return `${Date.now()}${process.hrtime().join('')}${this.count}`;
}
};