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