# python-runner — Docker kontejner na Tower ## Základní info | Parametr | Hodnota | |----------------|----------------------------------------------| | Název | python-runner | | Image | python-runner (vlastní) | | Status | running (unless-stopped) | | Python | 3.12.13 | | Spouštěcí cmd | `tail -f /dev/null` — container jen běží, skripty se spouštějí ručně | | Working dir | `/scripts` | | Vytvořen | 2026-06-02 | --- ## Tower — SSH přístup | Parametr | Hodnota | |----------|------------------| | Host | tower / 192.168.1.76 | | Port | 22 | | User | root | | Heslo | 7309208104 | **Připojení přes Python (paramiko)** — Docker CLI není lokálně dostupný: ```python import paramiko c = paramiko.SSHClient() c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) c.connect('192.168.1.76', username='root', password='7309208104') _, out, _ = c.exec_command('...') print(out.read().decode()) c.close() ``` --- ## Volume mounty | Host (Unraid) | Kontejner | Popis | |-----------------------|-------------------|------------------------------| | `/mnt/user/Scripts` | `/scripts` | Skripty, logy — working dir | | `/mnt/user/JNJEMAILS` | `/mnt/JNJEMAILS` | .msg soubory emailů (JNJ) | --- ## Spouštění skriptů ```bash # Interaktivně (vidíš výstup): docker exec -it python-runner python /scripts/parse_emails_tower_v1.1.py --limit 50 --no-indexes # Na pozadí (log do souboru): docker exec -d python-runner bash -c \ "python /scripts/parse_emails_tower_v1.1.py > /scripts/parse_emails.log 2>&1" # Pokračování po přerušení (skip hotových): docker exec -d python-runner bash -c \ "python /scripts/parse_emails_tower_v1.1.py --skip-existing > /scripts/parse_emails.log 2>&1" # Sledování průběhu: docker exec -it python-runner tail -f /scripts/parse_emails.log ``` --- ## Aktuální skripty v /scripts | Soubor | Popis | |-------------------------------|------------------------------------------------| | `parse_emails_tower_v1.1.py` | Import .msg → MongoDB (db: emaily, kolekce: vbuzalka@its.jnj.com) | | `parse_emails_tower_v1.1.md` | Dokumentace ke skriptu | | `parse_emails.log` | Log průběhu importu | | `parse_emails_errors.log` | Log chyb (soubory které selhaly) | Lokální protějšek: `EmailsImport/parse_emails_v1.0.py` — identický kód, liší se jen cestou (`\\tower\JNJEMAILS` SMB vs. `/mnt/JNJEMAILS` lokální mount) a verzí hlavičky. --- ## Nainstalované Python balíčky ``` extract-msg 0.55.0 pymongo 4.17.0 python-dateutil 2.9.0.post0 cryptography 48.0.0 beautifulsoup4 4.13.5 oletools 0.60.2 msoffcrypto-tool 6.0.0 olefile 0.47 RTFDE 0.1.2.2 compressed-rtf 1.0.7 lark 1.3.1 pcodedmp 1.2.6 tzlocal 5.3.1 six 1.17.0 pip 25.0.1 ``` --- ## Přidání nového balíčku ```bash docker exec python-runner pip install ``` > Pozor: instalace se ztratí při recreate kontejneru — je třeba přidat do Dockerfile nebo do setup skriptu. --- ## Logika parse_emails (oba skripty) - Čte všechny `.msg` soubory z MSGS_DIR - Extrahuje: předmět, odesílatel, příjemci (To/CC/BCC), tělo (text+HTML), přílohy, internet headers, všechny raw MAPI properties - Ukládá do MongoDB: `emaily` → `vbuzalka@its.jnj.com` - `_id` = Internet Message-ID (nebo `filename:` jako fallback) - Upsert → bezpečné opakování, `--skip-existing` pro pokračování - Indexy: received_at, sent_at, sender.email, filename (unique), full-text (subject+body+to+cc)