# Portability: UNIVERSAL
# Last validated: 2026-05-17
# Next review: 2027-05-17

ОБРАБОТЧИК КОНВЕЙЕРА
----------------

Обработчик конвейера управляет конвейерами автоматической обработки данных в BACH.
Конвейеры настраиваются как определения JSON, хранящиеся в папке Pipelines/
и может выполняться вручную или по времени.


ОПЕРАЦИИ
-----------

доступен по списку
  Показывает все доступные определения конвейера (файлы JSON в конвейерах/).
  Указывает идентификатор, имя, тип, описание и расписание.
  Использование: список конвейеров Баха

список
  Показывает все установленные конвейеры из базы данных.
  Указывает дату установки и время последнего запуска.
  Использование: список конвейеров Баха

status <id-конвейера>
  Показывает подробное состояние конвейера.
  Включает сведения о конфигурации и последние 5 запусков со статистикой.
  Использование: статус конвейера Баха <pipeline-id>

install <pipeline-id>
  Интерактивно устанавливает конвейер.
  Запрашивает параметры конфигурации (config_questions из JSON),
  сохраняет конфигурацию в таблице Pipeline_configs.
  Предлагает переустановку, если конвейер уже существует.
  Использование: установка конвейера bach <id-pipeline>

run <id-pipeline>
  Запускает установленный конвейер.
  Динамически загружает класс enter_point, создает экземпляр и вызывает метод().
  Создает запись в конвейере_runs со статистикой (items_processed, error_count).
  Ожидает Result-Dict с метаданными (tasks_found/items_processed, error/errors_count).
  Использование: запуск конвейера bach <pipeline-id>

schedule <pipeline-id>
  Включает задание планировщика для конвейера.
  Преобразует поле расписания (ежедневно/часово/еженедельно/ежемесячно) в выражение cron,
  создает запись Scheduler_jobs с is_active=1.
  Стандартное время: ежедневно 6:00, ежечасно, понедельник 6:00, 1-е число месяца 6:00.
  Использование: расписание конвейера Баха <pipeline-id>

unschedule <pipeline-id>
  Отключает задание планировщика (устанавливает is_active=0).
  Использование: конвейер bach unschedule <pipeline-id>


FILES
-------

hub/pipeline.py
  Реализация обработчика с помощью класса PipelineHandler.

pipelines/*.json
  Определения конвейера. Обязательные поля:
  - id: уникальный идентификатор (например, «ati»)
  - имя: отображаемое имя
  - версия: номер версии
  - type: тип конвейера (например, «синхронизация», «импорт»)
  - описание: Описание
  - расписание: «ежедневно», «ежечасно», «еженедельно», «ежемесячно» или строка cron
  - точка входа: путь к модулю Python (относительно system/)
  - class: Класс в модуле.
  - метод: метод (по умолчанию: «запустить»)
  - config_questions: Массив с вопросами {ключ, приглашение, тип, по умолчанию}

data/bach.db
  Таблицы:
  - Pipeline_configs: установленные конвейеры + пользовательская конфигурация.
  - Pipeline_runs: история выполнения со статистикой.
  - Scheduler_jobs: задания Cron (созданные по расписанию)


 ПРИМЕРЫ
---------

 Определение конвейера (pipelines/ati.json):
{
  "идентификатор": "ати",
  "name": "Импортер названия статьи",
  "версия": "1.0.0",
  "тип": "импорт",
  "description": "Импортирует заголовки статей из источников",
  "расписание": "ежедневно",
  "entry_point": "агенты/ati/importer.py",
  "класс": "ATIIImporter",
  «метод»: «запустить»,
  "config_questions": [
    {
      "ключ": "source_url",
      "prompt": "Исходный URL-адрес для импорта заголовков",
      "тип": "текст",
      "по умолчанию": "https://example.com/feed"
    }
  ]
}

Установка (интерактивная):
Установка конвейера $bach
=== Установка: Импортер названия статьи ===
Описание: Импортирует заголовки статей из источников.
Тип: импорт
Расписание: ежедневно

Конфигурация:
Исходный URL-адрес для импорта заголовков [https://example.com/feed]
> https://custom.com/feed
  -> Изменено: https://custom.com/feed

✓ Настройка завершена.
Установить конвейер «ati»...
✓ Установлен конвейер 'ati'


Класс конвейера (агенты/ati/importer.py):
класс ATIImporter:
    def __init__(self, db_path, config):
        self.db_path = путь_к базе данных
        self.config = конфигурация
        self.items_processed = 0
        self.errors = []

    защита запуска (сам):
        # Реализация...
        вернуть {
            "items_processed": self.items_processed,
            "ошибки": self.errors
        }


Версия:
Запуск конвейера $bach
=== Запуск конвейера: импортер заголовков статей ===
Идентификатор запуска: 42
✓ Запуск трубопровода прошел успешно
  Элементов: 15, Ошибок: 0


СМОТРИТЕ ТАКЖЕ
----------

scheduler - Планировщик автоматических заданий (выполнение с контролем времени)
daemon - Управление демонами для фоновых процессов
агенты/ - Реализации агентов для точек входа в конвейер
