2.6 KiB
name, description, metadata
| name | description | metadata | ||||||
|---|---|---|---|---|---|---|---|---|
| python-runner | Docker kontejner na Unraidu s email pipeline — architektura, závislosti, scheduling, hlášení |
|
Email pipeline běží v Docker kontejneru python-runner na Unraidu (192.168.1.76).
Skripty jsou v /mnt/user/Scripts/ (volume → /scripts/).
Pipeline spouštěna 2× denně cronem (0 6,18 * * *) přes run_pipeline.sh:
1b— Graph delta sync (nové/změněné emaily → MongoDB)3— Download attachments (3_download_attachments_v1.5.py)4— Unwrap S/MIME5— Enrich fulltext → PostgreSQL
Přílohy → SeaweedFS (2026-06-13): krok 3 (v1.5) krom uložení na disk /mnt/Emails/<mbox>/Attachments/ zároveň pushne každou novou přílohu do SeaweedFS přes sdílený /scripts/seaweed_store.py; do emaily.attachments_index (dedup SHA-256=_id) zapíše seaweed_path/seaweed_url/seaweed_synced_at. Výpadek SeaweedFS pipeline neshodí (jen warning, doplní backfill). Jednorázový backfill již stažených: seaweed_attachments_backfill_graph.py (batch+resume). Globální dedup s mailstore větví. Viz project-seaweedfs.
Wrapper: 0_run_pipeline_v1.0.py
- Na začátku auto-install:
pip install -q -r /scripts/requirements.txt— odolné vůči recreate kontejneru - Na konci email report: HTML tabulka výsledků z
reports@buzalka.cz→vladimir.buzalka@buzalka.cz; při chybě přiloží log selhavšího kroku
Závislosti: requirements.txt v /scripts/ + v repo Python-runner/requirements.txt
Klíčové: msal, asn1crypto, pymongo, psycopg, extract-msg, beautifulsoup4
Incident 2026-06-05: kontejner byl recreated → ztraceny balíčky → pipeline padala 24h (kroky 1b/3/4 FAIL s ModuleNotFoundError). Opraveno auto-installem.
Knihovna pro odesílání emailů: Knihovny/EmailMessagingGraph.py (kopie na serveru /scripts/EmailMessagingGraph.py)
- SENDER:
reports@buzalka.cz, tenant TrialHelp s.r.o.
Logy: /mnt/user/Scripts/logs/pipeline_YYYYMMDD_HHMM.log, symlink pipeline_latest.log, retence 30 dní.
Centrální logging (2026-06-09): wrapper 0_run_pipeline posílá do Grafana Loki (přes central-logging gateway) každý řádek konzole každého kroku — app="email_pipeline", pole logger=step.<id>. Klient central_logging*.py zkopírován do /scripts/. Token+gateway NEjsou v kontejneru — dány přes os.environ.setdefault přímo ve wrapperu (kroky je dědí jako subprocesy). Grafana dotaz: {app="email_pipeline"}.
Souvisí s graph-email-import, project-mcp-emaily.