Files
janssen/EmailsImport/Trash/jnj_tower_ingest_v1.1.md
2026-06-10 20:16:38 +02:00

4.0 KiB

jnj_tower_ingest v1.1.0

Soubor: jnj_tower_ingest_v1.1.py Datum: 2026-06-10 Autor: vladimir.buzalka Běží: Docker kontejner python-runner na Unraid Tower (192.168.1.76), u MongoDB.

Co to je

Sjednocený Tower-side ingest JNJ e-mailů — tři dříve oddělené části v jednom běhu:

Fáze Dříve samostatně Co dělá
1. PARSE parse_emails_tower_v1.3.py .msg z /mnt/JNJEMAILS → dokument v Mongo emaily."vbuzalka@its.jnj.com" (tělo, přílohy, hlavičky, MAPI). Inkrementálně přes mtime watermark (jnj_sync_state/_id="parse_state").
2. SYNC sync_jnj_state_v1.0.py nejnovější SQLite (read-only) → zrcadlo jnj_messages + doplnění jnj_folder/stavu do emaily. Watermark updated_at + zkratka last_db.
3. ENRICH jnj_emails_to_fulltext_v1.0.py doindexuje JNJ schránku do PG fulltextu zavoláním sdíleného 5_enrich_fulltext_emails_vX.Y.py --mailbox vbuzalka@its.jnj.com (stejný extractor jako Graph pipeline → konzistentní schéma).

Pořadí: parse → sync → enrich. Čerstvě naparsovaný mail dostane v jednom běhu tělo (parse) + cestu (sync) + fulltext (enrich). Klíč všude = Internet Message-ID = Mongo _id.

Inkrementálnost (cron každých 5 min)

  • PARSE — jen .msg s mtime > parse_state.last_parse_mtime. 1. běh = seed dle filename v Mongu, pak čistě mtime. --full reparsuje vše. Indexy jen při full/seed/--reindex.
  • SYNC — watermark updated_at + zkratka last_db (stejná SQLite → no-op).
  • ENRICH — spustí se jen když parse přidal nové dokumenty (jinak přeskočí — JNJ stejně enrichuje hlavní Graph pipeline v 6:00/18:00). Verze enrich se auto-detekuje (nejnovější /scripts/5_enrich_fulltext_emails_v*.py). --no-enrich vypne, --enrich-always vynutí.

Tři nezávislé události (nová .msg / nová .db / nové doc pro PG) → skript udělá jen to, co má práci; jinak levný no-op.

Vztah ke Graph pipeline

Hlavní 0_run_pipeline (Graph API) zpracovává schránky buzalka.cz a JNJ přeskakuje (SKIP_MAILBOXES, žádné API). JNJ řeší tenhle skript přes .msg. Obě cesty ústí do téhož Monga emaily a přes sdílený 5_enrich do téhož PG MongoEmaily.emails. Servisní kolekce jnj_messages + jnj_sync_state jsou v enrich NON_MAILBOX_COLLECTIONS (nejsou schránky → nejdou do PG).

Argumenty

Argument Význam
--dry-run nic nezapíše, jen plán všech fází
--full parse: reparsuj vše; sync: ignoruj watermark; enrich: vynuť
--limit N max N souborů (parse) / řádků (sync)
--reindex vynutí indexy po parse
--force sync: ignoruj last_db
--parse-only / --sync-only / --enrich-only jen daná fáze
--no-enrich přeskoč enrich
--enrich-always spusť enrich i bez nových dokumentů

Spouštění

docker exec -it python-runner python3 /scripts/jnj_tower_ingest_v1.1.py --dry-run
docker exec python-runner python3 /scripts/jnj_tower_ingest_v1.1.py          # cron
docker exec -it python-runner python3 /scripts/jnj_tower_ingest_v1.1.py --enrich-only

Plánování (HOTOVO)

Unraid User Scripts úloha jnj_state_sync (cron */5 * * * *) — wrapper s flock volá docker exec python-runner python3 /scripts/jnj_tower_ingest_v1.1.py. Loguje jen reálnou práci/chyby do /mnt/user/Scripts/logs/jnj_tower_ingest.log (grep Zapisuji|PARSE hotovo|SYNC hotovo|ENRICH hotovo|CHYBA|Traceback).

Revert

jnj_tower_ingest_v1.0.py (bez enrich) + parse_emails_tower_v1.3.py + sync_jnj_state_v1.0.py zůstávají v /scripts/ jako pojistka. Návrat = přepsat wrapper zpět. jnj_emails_to_fulltext přesunut do Trash (nahrazen fází 3).

Historie verzí

  • 1.0.0 2026-06-10 — sjednocení parse + sync (mtime watermark, pořadí parse→sync).
  • 1.1.0 2026-06-10 — + fáze ENRICH (sdílený 5_enrich --mailbox, auto-detekce verze, jen při nových dokumentech). Nahrazuje jnj_emails_to_fulltext_v1.0.