Задачи | Tdg

Версия:

2.x

Задачи

Задачи (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. Для этого:

  1. Поместите Lua-файл с кодом задач в папку src.

  2. Упакуйте в zip-архив:

    • папку src, внутри которой лежит файл с кодом задач;

    • файл конфигурации config.yml.

  3. Загрузите архив в TDG согласно инструкции.

Управление задачами

Инструменты для управления задачами и отслеживания их выполнения расположены на вкладке Tasks веб-интерфейса TDG. Полная информация об управлении задачами через веб-интерфейс приведена в разделе Задачи руководства администратора.

Нашли ответ на свой вопрос?
Обратная связь