0.2.8 • Published 2 years ago

cron-extend v0.2.8

Weekly downloads
-
License
GNU GPLv3
Repository
github
Last release
2 years ago

Cron-extend

Информация

Сервис для запуска задаяч в формате cron

Оглавление:

Запуск и установка

установка как утилиту: npm i cron-extend -g

пример #1 строки запуска: node /cron-extend/app.js -c config.toml

пример #2 строки запуска: cron-extend --config config.toml

Таблица ключей запуска

КлючОписание
--version, -vвывести номер версии приложения
--help, -hвызвать справку по ключам запуска
--config, -cпуть к файлу конфигурации в формате toml или json, (переменная среды: CRON_EXTEND_CONFIG_PATH)

Конфигурация

Программа настраивается через файл конфигурации форматов TOML, JSON, YML и YAML. Так же можно настраивать через переменные среды, которые будут считаться первичными.

Секции файла конфигурации

  • logger - настрока логгера (переменная среды: CRON_EXTEND_LOGGER)
  • logger.output - (переменная среды: CRON_EXTEND_LOGGER_OUTPUT)
  • api - активация API сервера (переменная среды: CRON_EXTEND_API)
  • manager - настройки cron-manager (переменная среды: CRON_EXTEND_MANAGER)

Пример файла конфигурации config.toml

[logger]
    levels = ["fatal","info","error","warn","debug","trace"]            # уровни логирования
    [logger.bindings]                                                   # дополнительные ключи
        key1 = "key1-val"
        key2 = "key2-val"
    [logger.output]                                                     # настройка отображения
        timestamp = "full"                                              # вывод времени full, short, unix и none
        levels = ["fatal","info","error","warn","debug","trace"]        # вывод типов
        bindings = "no-wrapper"                                         # отображение ключей square, bracket, none, no-wrapper

[api]
    enable = false              # активация API сервера
    hostname = "0.0.0.0"        # хост          
    port = 3001                 # порт
    backlog = 511               # очередь баклога
    prefix = "/api"             # префикс
    connection_timeout = 0      # таймаут сервера в милисекундах
    keep_alive_timeout = 5000   # таймаут keep-alive сервера в милисекундах
    body_limit = 1048576        # максимальный размер тела запроса в байтах
    trust_proxy = false         # доверие proxy закголовку

[manager]                       # настройки cron-manager
    jobs_path = "jobs"          # путь до папки задач
    tags = []                   # теги сервера
    [manager.env]               # дополнительные переменые среды
        CONFIG_ENV_KEY1 = "CONFIG_ENV_KEY1_VALUE"
        CONFIG_ENV_KEY2 = "CONFIG_ENV_KEY2_VALUE"
        CONFIG_ENV_KEY3 = "${CONFIG_ENV_KEY3}"

Таблица параметров конфигурации

ПараметрТипЗначениеОписание
logger.levelsстрока[]"fatal","info","error","warn","debug","trace"уровни логирования
logger.bindingsобъект{}дополнительные ключи
logger.output.timestampстрокаfullвывод времени full, short, unix и none
logger.output.levelsстрока[]"fatal","info","error","warn","debug","trace"вывод типов
logger.output.bindingsстрокаno-wrapperотображение ключей square, bracket, none, no-wrapper
api.enableлогическийfalseактивация API сервера
api.hostnameстрока0.0.0.0хост
api.portчисло3001порт
api.backlogчисло511очередь баклога
api.prefixстрока/apiпрефикс
api.connection_timeoutчисло0таймаут сервера в милисекундах
api.keep_alive_timeoutчисло5000таймаут keep-alive сервера в милисекундах
api.body_limitчисло1048576максимальный размер тела запроса в байтах
api.trust_proxyлогическийfalseдоверие proxy закголовку
manager.jobs_pathстрокаjobsпуть до папки задач
manager.tagsстрока[][]теги сервера
manager.envобъект{}дополнительные переменые среды

Настройка через переменные среды

Ключи конфигурации можно задать через переменные среды ОС. Имя переменной среды формируется из двух частей, префикса CRON_EXTEND_ и имени переменной в верхнем реестре. Если переменная вложена, то это обозначается символом _. Переменные среды имеют высший приоритет.

пример для переменной api.enable: CRON_EXTEND_API_ENABLE

Настройка задач

Задачи настраиваются через файл конфигурации форматов TOML, JSON, YML и YAML. Папка с задачами настраивается в секции файла настройки manager

Пример файла конфигурации job.toml

enable = true                       # активация задачи
description = "job description"     # описание задачи
timeout = "60s"                     # таймаут выполнения, единицы s,m,h,d (пример: 1m20s)
tags = []                           # теги для запуска
cwd = "cwd_folder"                  # рабочая папка
command = "executer"                # команда запуска
args = [                            # аргументы
    "arg1",
    "arg2",
    "arg3"
]
[env]                               # дополнительные переменые среды
    JOB_KEY1 = "JOB_KEY1_VALUE"
    JOB_KEY2 = "JOB_KEY2_VALUE"
    JOB_KEY3 = "${JOB_ENV_KEY3}"
[cron]                              # настройка крона
    interval = "1 * * * * *"        # интервал
    time_zone = "Europe/Moscow"     # временая зона

API

Сервис предоставляет API, который настраивается в секции файла настройки api. API доступно по протоколу HTTP.

Примеры применения

проверить доступность сервера: curl -i http://localhost:3001/api/healthcheck или curl -i http://localhost:3001/api/

API информации сервиса

URLМетодКодОписаниеПример ответа/запроса
/GET200проверить здоровье сервисаOK
/healthcheckGET200проверить здоровье сервисаOK
/v1/infoGET200получить информацию по задачампример
/v1/statusGET200получить только статус по задачампример

Примеры ответов/запросов

Базовый ответ провала

Этот ответ возвращается при отказе выполнения запроса. Пример:

{
    "status": "fail",
    "message": "Причина отказа"
}

Базовый ответ ошибки

Этот ответ возвращается при ошибке на сервере. Пример:

{
    "status": "error",
    "message": "Причина ошибки"
}

Получить информацию по задачам: /v1/info

[
    {
        "enable": false,
        "description": "description job1.yml",
        "command": "empty",
        "timeout": "60s",
        "tags": [],
        "cwd": "C:\\progs\\cron-extend",
        "args": [],
        "env": {
            "CONFIG_ENV_KEY1": "CONFIG_ENV_KEY1_VALUE",
            "CONFIG_ENV_KEY2": "CONFIG_ENV_KEY2_VALUE",
            "CONFIG_ENV_KEY3": "CONFIG_ENV_KEY3_VALUE"
        },
        "cron": {
            "interval": "1 * * * * *",
            "time_zone": "Europe/Moscow"
        },
        "executing": false,
        "id": "job1.json",
        "error": false,
        "error_message": ""
    },
    {
        "enable": true,
        "description": "json job 2",
        "timeout": "60s",
        "tags": [],
        "cwd": "C:\\progs\\cron-extend",
        "command": "1",
        "args": [],
        "env": {
            "JOB_KEY1": "JOB_KEY1_VALUE",
            "JOB_KEY2": "JOB_KEY2_VALUE",
            "JOB_KEY3": "JOB_ENV_KEY3_VALUE",
            "CONFIG_ENV_KEY1": "CONFIG_ENV_KEY1_VALUE",
            "CONFIG_ENV_KEY2": "CONFIG_ENV_KEY2_VALUE",
            "CONFIG_ENV_KEY3": "CONFIG_ENV_KEY3_VALUE"
        },
        "cron": {
            "interval": "1 * * * * *",
            "time_zone": "Europe/Moscow"
        },
        "executing": false,
        "id": "job2.toml",
        "error": true,
        "error_message": "Error: spawn 1 ENOENT"
    }
]

Получить только статус по задачам: /v1/status

[
    {
        "id": "job1.json",
        "enable": false,
        "description": "description job1.yml",
        "executing": false,
        "error": false,
        "error_message": ""
    },
    {
        "id": "job2.toml",
        "enable": true,
        "description": "json job 2",
        "executing": false,
        "error": true,
        "error_message": "Error: spawn 1 ENOENT"
    }
]