Перейти к содержанию

Конвейеры и инструменты

Сила Ordinaut заключается в его декларативном движке конвейеров, который выполняет последовательность шагов предсказуемым и надежным способом.

Структура конвейера

Конвейер — это JSON-массив шагов, определенных в payload Задачи. Движок обрабатывает эти шаги по порядку, передавая контекст между ними.

{
  "payload": {
    "params": { "city": "Chisinau" },
    "pipeline": [
      {
        "id": "get_weather",
        "uses": "weather-api.get_forecast",
        "with": {"location": "${params.city}"},
        "save_as": "weather"
      },
      {
        "id": "send_alert",
        "uses": "telegram.send_message",
        "if": "steps.weather.temperature > 25",
        "with": {
          "message": "Сегодня жарко: ${steps.weather.temperature}°C"
        }
      }
    ]
  }
}

Ключевые свойства шага

  • id: Уникальный идентификатор шага.
  • uses: Адрес Инструмента для выполнения.
  • with: Аргументы для инструмента (поддерживает переменные-шаблоны).
  • save_as: Ключ, под которым будет сохранен вывод шага.
  • if: Условное выражение JMESPath для пропуска шага.
  • timeout_seconds: Необязательный тайм-аут для вызова инструмента.
  • max_retries: Необязательное количество повторных попыток для шага.

Переменные-шаблоны

Вы можете динамически вставлять данные в блок with, используя переменные-шаблоны:

  • ${params.variable_name}: Доступ к параметрам из payload.params.
  • ${steps.step_id.output_field}: Доступ к выводу предыдущего шага.
  • ${now}: Предоставляет текущую временную метку UTC.

Выполнение инструментов (симулированное)

Инструменты — это строительные блоки конвейеров. Однако критически важно понимать, что ядро движка Ordinaut симулирует выполнение инструментов.

Инструменты не выполняются ядром движка

Когда исполнитель конвейера встречает шаг с полем uses, он выполняет следующие действия: 1. Обрабатывает шаблоны во входных данных в блоке with. 2. Записывает в журнал, что вызов инструмента симулируется. 3. Генерирует макет выходных данных. 4. Если указано save_as, сохраняет этот макет в контекст.

Движок не имеет каталога инструментов и не выполняет никакого внешнего кода. Фактическая реализация инструментов должна быть создана как отдельные сервисы-расширения.

Обработка ошибок

Если шаг завершается неудачно (например, из-за ошибки обработки шаблона), движок будет соблюдать политику max_retries. Если все повторные попытки завершаются неудачно, весь запуск конвейера помечается как неудачный, и детали ошибки записываются в объект Запуска.