Планировщик задач

Данная библиотека используется для того, чтобы у программистов была возможность планировать запуск определенных задач. Аналогом в системе 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-а мы запускаем задачу или нет.

В самом маршруте изменения настроек модуля мы либо добавляем задание в планировщик, либо удаляем его.

Last updated