rockspec_format = '3.0' package = 'tnt-scheduler' version = 'scm-1' source = { url = 'git+https://github.com/tnt-skein/tnt-scheduler.git', branch = 'main', } description = { summary = 'Работы по расписанию cron поверх tnt-loop и замка кластера', detailed = [[ Снимок, вычистка устаревшего, выгрузка журнала — работы «в 3:00 по будням», а не «раз в пять секунд», и период цикла такого не скажет. Здесь расписание — выражение cron, которое разбирает рок cron-parser, а цикл tnt-loop остаётся фибером и тактом: расписание отвечает только на вопрос, когда следующий такт. У каждой работы свой цикл, срок по стенным часам в названном поясе с переводом часов по обе стороны, итог обработчика парой nil, err либо исключением, запуск только на узле для записи и замок кластера: функция occupy приходит аргументом, и взятый замок держится не меньше hold секунд от захвата — узел, чьи часы отстают, не исполнит тот же срок второй раз. Фасад закрывает то, где рок молча ошибается: восьмеричные числа, склейку полей табуляцией, срок только от os.time() и падение процесса на неразобранном выражении. Запуски по итогу, пропуски по причине и длительность запуска видны рядами метрик. Покрытие строк и убитых мутантов — 100 %. ]], homepage = 'https://github.com/tnt-skein/tnt-scheduler', issues_url = 'https://github.com/tnt-skein/tnt-scheduler/issues', maintainer = 'tnt-skein', license = 'MIT', labels = { 'tarantool', 'scheduler', 'cron', 'jobs', 'timezone', 'cluster' }, } dependencies = { 'lua >= 5.1', -- Разбор cron и поиск срока. Выпуск закреплён: обвязка опирается -- на устройство рока — модуль cron.ccronexpr и объявления ffi, -- которые рок делает при загрузке (docs/scheduler.md, «Чем пришлось -- поступиться»). Подъём — отдельная правка со сверкой заново. 'cron-parser == 1.0.0-1', -- Проверки аргументов с местом вызывающего и разбор расписания парой. 'tnt-must', -- Стенные часы срока, монотонные — длительность запуска, время -- планировщика — сон цикла. 'tnt-clock', -- Пояс по имени либо смещению и смещение в названный миг. 'tnt-date', -- Записи о пропуске, отказе и упавшем запуске. 'tnt-log', -- Цикл работы: фибер, такт, пробуждение и остановка. 'tnt-loop', -- Часы и признак узла для чтения внешней зависимостью: проверки -- подменяют их своими. 'tnt-external', -- Ряды расписания: запуски по итогу, пропуски по причине, длительность. 'tnt-metrics', } build = { type = 'builtin', modules = { ['tnt.scheduler'] = 'tnt/scheduler.lua', ['tnt.scheduler.cron'] = 'tnt/scheduler/cron.lua', ['tnt.scheduler.job'] = 'tnt/scheduler/job.lua', ['tnt.scheduler.schedule'] = 'tnt/scheduler/schedule.lua', ['tnt.scheduler.series'] = 'tnt/scheduler/series.lua', }, }