# Portabilität: UNIVERSAL
# Version: 1.0.0
# Zuletzt validiert: 2026-03-04

PIPELINE-HANDLER
================

Der Pipeline-Handler verwaltet automatisierte Datenverarbeitungs-Pipelines in BACH.
Pipelines werden als JSON-Definitionen unter pipelines/ gespeichert, konfiguriert
und können manuell oder zeitgesteuert ausgeführt werden.


OPERATIONEN
===========

list-available
  Zeigt alle verfügbaren Pipeline-Definitionen (JSON-Dateien in pipelines/).
  Gibt ID, Name, Typ, Beschreibung und Schedule an.
  Verwendung: bach pipeline list-available

list
  Zeigt alle installierten Pipelines aus der Datenbank.
  Gibt Installationsdatum und letzten Run-Zeitpunkt an.
  Verwendung: bach pipeline list

status <pipeline-id>
  Zeigt detaillierten Status einer Pipeline.
  Enthält Config-Details und die letzten 5 Runs mit Statistiken.
  Verwendung: bach pipeline status <pipeline-id>

install <pipeline-id>
  Installiert eine Pipeline interaktiv.
  Fragt Configuration-Parameter ab (config_questions aus JSON),
  speichert die Konfiguration in pipeline_configs-Tabelle.
  Bietet Wiederinstallation an, wenn Pipeline bereits existiert.
  Verwendung: bach pipeline install <pipeline-id>

run <pipeline-id>
  Führt eine installierte Pipeline aus.
  Lädt entry_point-Klasse dynamisch, instantiiert und ruft method() auf.
  Erstellt Eintrag in pipeline_runs mit Statistiken (items_processed, errors_count).
  Erwartet Result-Dict mit Metadaten (tasks_found/items_processed, errors/errors_count).
  Verwendung: bach pipeline run <pipeline-id>

schedule <pipeline-id>
  Aktiviert Scheduler-Job für die Pipeline.
  Konvertiert schedule-Feld (daily/hourly/weekly/monthly) zu Cron-Expression,
  erstellt scheduler_jobs-Eintrag mit is_active=1.
  Standard-Zeiten: täglich 6:00, stündlich, montags 6:00, 1. des Monats 6:00.
  Verwendung: bach pipeline schedule <pipeline-id>

unschedule <pipeline-id>
  Deaktiviert Scheduler-Job (setzt is_active=0).
  Verwendung: bach pipeline unschedule <pipeline-id>


DATEIEN
=======

hub/pipeline.py
  Handler-Implementierung mit PipelineHandler-Klasse.

pipelines/*.json
  Pipeline-Definitionen. Erforderliche Felder:
  - id: eindeutige ID (z.B. "ati")
  - name: Anzeigename
  - version: Versionsnummer
  - type: Pipeline-Typ (z.B. "sync", "import")
  - description: Beschreibung
  - schedule: "daily", "hourly", "weekly", "monthly" oder Cron-String
  - entry_point: Pfad zu Python-Modul (relativ zu system/)
  - class: Klasse im Modul
  - method: Methode (default: "run")
  - config_questions: Array mit Fragen {key, prompt, type, default}

data/bach.db
  Tabellen:
  - pipeline_configs: Installierte Pipelines + user-spezifische Konfiguration
  - pipeline_runs: Ausführungs-Historie mit Statistiken
  - scheduler_jobs: Cron-Jobs (erstellt von schedule-Operation)


BEISPIELE
=========

Pipeline-Definition (pipelines/ati.json):
{
  "id": "ati",
  "name": "Article Title Importer",
  "version": "1.0.0",
  "type": "import",
  "description": "Importiert Artikel-Titel aus Quellen",
  "schedule": "daily",
  "entry_point": "agents/ati/importer.py",
  "class": "ATIImporter",
  "method": "run",
  "config_questions": [
    {
      "key": "source_url",
      "prompt": "Quell-URL für Titel-Import",
      "type": "text",
      "default": "https://example.com/feed"
    }
  ]
}

Installation (interaktiv):
$ bach pipeline install ati
=== Installation: Article Title Importer ===
Beschreibung: Importiert Artikel-Titel aus Quellen
Typ: import
Schedule: daily

Konfiguration:
Quell-URL für Titel-Import [https://example.com/feed]
> https://custom.com/feed
  -> Geändert: https://custom.com/feed

✓ Konfiguration abgeschlossen
Installiere Pipeline 'ati'...
✓ Pipeline 'ati' installiert


Pipeline-Klasse (agents/ati/importer.py):
class ATIImporter:
    def __init__(self, db_path, config):
        self.db_path = db_path
        self.config = config
        self.items_processed = 0
        self.errors = []

    def run(self):
        # Implementierung...
        return {
            "items_processed": self.items_processed,
            "errors": self.errors
        }


Ausführung:
$ bach pipeline run ati
=== Pipeline Run: Article Title Importer ===
Run ID: 42
✓ Pipeline-Run erfolgreich
  Items: 15, Fehler: 0


SIEHE AUCH
==========

scheduler - Scheduler für automatisierte Jobs (zeitgesteuerte Ausführung)
daemon - Daemon-Management für Hintergrund-Prozesse
agents/ - Agent-Implementierungen für Pipeline-entry_points
