Задачи
Задачи (tasks) - это загруженные в TDG пользовательские функции, которые исполняются автоматически (в том числе по расписанию) или вызываются вручную изнутри TDG.
Задачи используются для реализации внутренней бизнес-логики решения. Примеры: построение регулярных отчётов или инвалидация кэшей. Для реализации логики, доступной для вызова извне, используется механизм сервис-функций.
Технически, задачи реализуются в виде функций на языке Lua. Возвращаемое значение функции является результатом выполнения соответствующей задачи.
Существует три вида задач:
- единоразовые (single-shot) - выполняются один раз после каждого вызова вручную из интерфейса TDG.
- непрерывно выполняемые (continuous) - выполняются циклически с заданным интервалом времени. Например, если TDG используется как кэш горячих данных, такая задача может автоматически обновлять этот кэш на основе изменений в данных раз в несколько минут.
- по расписанию (periodical) - выполняются по расписанию,
заданному в расширенном формате
cronс добавлением секунд; подробнее в справочнике по конфигурации бизнес-логики. Например, в конце каждого дня можно строить отчёты по хранимым в кластере данным.
В этом руководстве рассмотрим пример создания задач в TDG и инструменты управления задачами.
Для выполнения примера требуется настроенный кластер TDG.
Руководство включает в себя следующие шаги:
Чтобы добавить в TDG задачу, необходимо добавить
соответствующую секцию в конфигурацию TDG.
Задачи можно описывать либо в общем конфигурационном файле (секция
tasks в файле config.yml), либо в отдельном файле tasks.yml.
Конфигурация задачи включает такие параметры, как её уникальное имя, вызываемая функция, вид задачи и другие. Полная информация о параметрах конфигурации задач приведена в справочнике по конфигурации бизнес-логики.
Пример конфигурации трёх задач разных видов:
# config.ymltasks:report_now:kind: single_shotfunction: tasks.build_reportupdate_caches:kind: continuousfunction: tasks.update_cachespause_sec: 3600weekly_report:kind: periodicalfunction: tasks.build_reportschedule: "0 0 19 * * 5"
Здесь:
report_now- единоразовая задача. Вызывается вручную.update_caches- задача, которая выполняется автоматически с периодом в 1 час (3600 секунд).weekly_report- задача, которая исполняется по расписанию каждую пятницу в 19:00:00. Использует ту же функцию, что и задачаreport_now.
Если вызываемая функция имеет аргументы, их значения можно передать в
параметре args:
# config.ymltasks:task_with_args:kind: single_shotfunction: tasks.function_with_argsargs: [1, "hello"]
Если в TDG включен
режим обязательной аутентификации, необходимо добавить параметр run_as для указания логина
пользователя, от имени которого будут выполняться задачи по расписанию и
периодические задачи. В веб-интерфейсе логин пользователя можно найти на
вкладке Users, он приведен в таблице в поле Login.
# config.ymlupdate_caches:kind: continuousfunction: tasks.update_cachespause_sec: 3600run_as:user: zd2851weekly_report:kind: periodicalfunction: tasks.build_reportschedule: "0 0 19 * * 5"run_as:user: username
Как указано в конфигурации задач, соответствующие им функции должны
храниться в файле tasks.lua.
Для упрощения демонстрации реализуем функции-заглушки:
– tasks.lualocal function build_report()return 'Report is ready'endlocal function update_caches()return 'Caches updated'endreturn {build_report = build_reportupdate_caches = update_caches}
Чтобы выполнить пример, нужно загрузить архив с файлом конфигурации и функциями задач в TDG. Для этого:
- Поместите Lua-файл с кодом задач в папку
src. - Упакуйте в zip-архив:
- папку
src, внутри которой лежит файл с кодом задач; - файл конфигурации
config.yml.
- папку
- Загрузите архив в TDG согласно инструкции.
Инструменты для управления задачами и отслеживания их выполнения
расположены на вкладке Tasks
веб-интерфейса TDG. Полная информация об управлении задачами
через веб-интерфейс приведена в разделе
Задачи
руководства администратора.