Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 89 additions & 62 deletions server/app/server/cron.js
Original file line number Diff line number Diff line change
@@ -1,63 +1,90 @@
var CRON = require('cron').CronJob;

// ------------------------------------------
// CONSTRUCTOR
// ------------------------------------------

var init = function(){
info('Starting CRONManager ...');
return CRONManager;
}

/**
* Starting all jobs from properties
*/
var start = function(){
var plugins = SARAH.PluginManager.getList();
for (var i = 0 ; i < plugins.length ; i++){
var plugin = plugins[i];
if (!plugin.cron) continue;
job(plugin);
}
}

var job = function(plugin) {
if (!plugin.cron.time){ return warn('Missing cron time table');}
info("Starting new job %s with cron %s", plugin.name, plugin.cron.time);

// Build callback
var next = function(data){
if (!data){ return; }
if (data.error){ SARAH.speak(tts); }

var tts = SARAH.ScriptManager.speak(data.tts);
if (tts){ SARAH.speak(tts); }

SARAH.RuleEngine.dispatch(plugin.name, data);
}

// Create job
var job = new CRON({
cronTime: plugin.cron.time,
onTick: function() {
info('Cron: %s', plugin.name);
plugin.getInstance().cron(next, plugin.cron, SARAH);
},
start: true
});

// Run once
plugin.getInstance().cron(next, plugin.cron, SARAH);
}

// ------------------------------------------
// PUBLIC
// ------------------------------------------

var CRONManager = {
'init' : init,
'start': start
}

// Exports Manager
'use strict';

var CRON = require('cron').CronJob;

// ------------------------------------------
// CONSTRUCTOR
// ------------------------------------------

var init = function(){
info('Starting CRONManager ...');

process.on('SIGINT', function() {
CRONManager.stop();
process.exit(0);
});

process.on('uncaughtException', function() {
CRONManager.stop();
});

return CRONManager;
};

/**
* Starting all jobs from properties
*/
var start = function(){
var plugins = SARAH.PluginManager.getList();
for (var i = 0 ; i < plugins.length ; i++){
var plugin = plugins[i];
if (!plugin.cron) {
continue;
}
job(plugin);
}
};

function stop() {
var plugins = SARAH.PluginManager.getList();
for (var i = 0; i < plugins.length; i++) {
var plugin = plugins[i];
if (!plugin.cronJob) {
continue;
}
info("Stoping cron job %s", plugin.name);
plugin.cronJob.stop();
}
}

var job = function(plugin) {
if (!plugin.cron.time){ return warn('Missing cron time table');}
info("Starting new job %s with cron %s", plugin.name, plugin.cron.time);

// Build callback
var next = function(data){
if (!data){ return; }
if (data.error){ SARAH.speak(tts); }

var tts = SARAH.ScriptManager.speak(data.tts);
if (tts){ SARAH.speak(tts); }

SARAH.RuleEngine.dispatch(plugin.name, data);
};

// Create job
var job = new CRON({
cronTime: plugin.cron.time,
onTick: function() {
info('Cron: %s', plugin.name);
plugin.getInstance().cron(next, plugin.cron, SARAH);
},
start: true
});

// Run once
plugin.getInstance().cron(next, plugin.cron, SARAH);
};

// ------------------------------------------
// PUBLIC
// ------------------------------------------

var CRONManager = {
'init' : init,
'start': start,
'stop' : stop
};

// Exports Manager
exports.init = CRONManager.init;