Планировщик задач
Данная библиотека используется для того, чтобы у программистов была возможность планировать запуск определенных задач. Аналогом в системе Linux, является Cron. В системе функционал разработан на основе nodejs модуля Agenda. Для данной библиотеки нет клиентской реализации, поэтому все последующие примеры относятся к серверному коду.
Настройки для планировщика прописываются в основном конфигурационном файле:
agendaConnect : 'mongodb://localhost/ugmk_agenda'
Реализация расположена в файле: src/agenda.js
AddTask = function(jobname,job,interval){} // добавление задания
RemoveTask = function(jobname){} // удаление задания
EnsureTaskRunning = function(jobname,job){} // проверка на то, что задача есть в списке
Примеры использования из кода модуля modules:
var Cron = require(__base+'src/agenda.js');
Cron.Events.on('ready', function() {
ModulesHelper.MSSettings(function(err,Set){
if (Set.usecron){
Cron.EnsureTaskRunning('git_sync',function(job, done){
GitHub.Sync(false,done);
});
}
})
})
router.put('/settings', HP.TaskAccess("IsModulesAdmin"), function (req, res, next) {
ModulesHelper.MSSettings(function(err,Settings){
var Update = req.body;
for (var K in Update) Settings[K] = Update[K];
Settings.save(function(err){
if (Settings.usecron){
Cron.AddTask('git_sync',function(job, done){
GitHub.SyncModules(false,done);
},"1 day");
} else {
Cron.RemoveTask('git_sync');
}
ModulesHelper.ReCompile(Settings.DoBundle,function(err){
return res.json({});
});
})
})
})
В данном примере мы подписались на событие инициализации планировщика (запуск сервера) и в зависимости от того, установлена у нас галочка автоматической синхронизации списка модулей и ошибок из github-а мы запускаем задачу или нет.
В самом маршруте изменения настроек модуля мы либо добавляем задание в планировщик, либо удаляем его.