# 0_run_pipeline_v1.0.py

**Wrapper kolem celé emailové pipeline.** Spustí postupně všechny 4 kroky daily syncu, vždy přes všechny dostupné schránky:

| # | Krok | Skript |
|---|---|---|
| 1b | Graph delta sync (inkrementální Mongo update) | `1b_parse_emails_graph_delta_v1.0.py` |
| 3  | Download attachments | `3_download_attachments_v1.4.py` |
| 4  | Unwrap S/MIME | `4_unwrap_smime_v1.0.py` |
| 5  | Enrich fulltext (PG) | `5_enrich_fulltext_emails_v1.3.py` |

## Politika chyb

Default je **continue-on-error** — když některý krok selže, pipeline pokračuje dalším (downstream se nezasekne kvůli minor problému). Po vyběhnutí dostaneš souhrnnou tabulku s `OK / FAIL(N)` per krok.

Použij `--stop-on-error` pokud chceš tvrdou abort při první chybě.

## Logování

Každý krok jde do vlastního logu v `/scripts/pipeline_<id>.log`:
- `pipeline_1b.log`
- `pipeline_3.log`
- `pipeline_4.log`
- `pipeline_5.log`

Live výstup se zároveň tee-uje na konzoli (vypneš přes `--quiet`).

## Argumenty

| Argument | Hodnoty | Popis |
|---|---|---|
| `--only` | `1b 3 4 5` | Spustit jen tyto kroky |
| `--skip` | `1b 3 4 5` | Přeskočit tyto kroky |
| `--stop-on-error` | flag | Zastavit při první chybě (default: pokračovat) |
| `--quiet` | flag | Necpat stdout na konzoli (zůstane v logu) |

## Varianty volání

```bash
# Daily run — vše, všechny schránky:
docker exec -it python-runner python /scripts/0_run_pipeline_v1.0.py

# Jen enrich (např. po manuálním zásahu do Mongo):
docker exec -it python-runner python /scripts/0_run_pipeline_v1.0.py --only 5

# Vše mimo S/MIME (krok 4 občas vyžaduje pip install asn1crypto):
docker exec -it python-runner python /scripts/0_run_pipeline_v1.0.py --skip 4

# Test daily sync bez fulltextu:
docker exec -it python-runner python /scripts/0_run_pipeline_v1.0.py --only 1b 3 4

# Na pozadí, master log:
docker exec -d python-runner bash -c "python /scripts/0_run_pipeline_v1.0.py --quiet > /scripts/pipeline_master.log 2>&1"
docker exec -it python-runner tail -f /scripts/pipeline_master.log
```

## Cron / nightly automation

Pro nightly se hodí jednoduchý cron na Unraidu (`/etc/cron.daily/` nebo User Scripts plugin):

```bash
#!/bin/bash
docker exec python-runner python /scripts/0_run_pipeline_v1.0.py --quiet \
    > /mnt/user/Scripts/pipeline_$(date +%Y%m%d).log 2>&1
```

Stačí denně, delta sync z minulého stavu trvá ~30s s prázdným backlogem.

## Exit kódy wrapperu

| Kód | Význam |
|---|---|
| 0 | Všechny kroky OK |
| 1 | Alespoň jeden krok selhal |
| 2 | Žádný krok k běhu (--only + --skip vyloučily vše) |
| 127 | Některý skript neexistuje v `/scripts/` |
| 130 | Přerušeno Ctrl+C |
