63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const fork = require('child_process').fork;
|
|
const log = require('./log');
|
|
const path = require('path');
|
|
const knex = require('../lib/knex');
|
|
const {CampaignStatus} = require('../shared/campaigns');
|
|
|
|
let messageTid = 0;
|
|
let senderProcess;
|
|
|
|
function spawn(callback) {
|
|
log.verbose('Senders', 'Spawning master sender process');
|
|
|
|
knex('campaigns').where('status', CampaignStatus.SENDING).update({status: CampaignStatus.SCHEDULED})
|
|
.then(() => {
|
|
senderProcess = fork(path.join(__dirname, '..', 'services', 'sender-master.js'), [], {
|
|
cwd: path.join(__dirname, '..'),
|
|
env: {NODE_ENV: process.env.NODE_ENV}
|
|
});
|
|
|
|
senderProcess.on('message', msg => {
|
|
if (msg) {
|
|
if (msg.type === 'master-sender-started') {
|
|
log.info('Senders', 'Master sender process started');
|
|
return callback();
|
|
}
|
|
}
|
|
});
|
|
|
|
senderProcess.on('close', (code, signal) => {
|
|
log.error('Senders', 'Master sender process exited with code %s signal %s', code, signal);
|
|
});
|
|
});
|
|
}
|
|
|
|
function scheduleCheck() {
|
|
senderProcess.send({
|
|
type: 'schedule-check',
|
|
tid: messageTid
|
|
});
|
|
|
|
messageTid++;
|
|
}
|
|
|
|
function reloadConfig(sendConfigurationId) {
|
|
senderProcess.send({
|
|
type: 'reload-config',
|
|
data: {
|
|
sendConfigurationId
|
|
},
|
|
tid: messageTid
|
|
});
|
|
|
|
messageTid++;
|
|
}
|
|
|
|
module.exports = {
|
|
spawn,
|
|
scheduleCheck,
|
|
reloadConfig
|
|
};
|
|
|