'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}`;
|
}
|
};
|