notebook
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# 3_download_attachments_v1.4.py
|
||||
|
||||
**Krok 3 pipeline** — stahuje skutečné přílohy (`is_inline=False`) z Mongo emailů přes Graph API do `/mnt/Emails/<schránka>/Attachments/`. Deduplikace podle **SHA256** obsahu.
|
||||
|
||||
## Nové ve verzi 1.4
|
||||
|
||||
| Typ přílohy | `@odata.type` | Co skript dělá |
|
||||
|---|---|---|
|
||||
| **File** | `#microsoft.graph.fileAttachment` | Stáhne přes `/$value`, uloží binárku |
|
||||
| **Item** (vnořený email) | `#microsoft.graph.itemAttachment` | `$expand=...itemAttachment/item`, sestaví **`.eml`** z hlaviček a body vnitřní zprávy |
|
||||
| **Reference** (OneDrive/SharePoint link) | `#microsoft.graph.referenceAttachment` | Žádný file — uloží jen `reference_url` do Mongo |
|
||||
|
||||
Plus:
|
||||
- **Retry** s exponenciálním backoffem na 429/500/502/503/504 (1s, 2s, 4s; respektuje `Retry-After`).
|
||||
- **Permanentní označení chyb v Mongo** per-attachment:
|
||||
- `attachment_missing: True` + `attachment_missing_at: <UTC>` při 404 (email/příloha už neexistuje v mailboxu)
|
||||
- `attachment_reference: True` + `reference_url: <URL>` u referenceAttachment
|
||||
- Tagované přílohy se při dalším běhu **automaticky přeskočí** (bez `--force-recheck`).
|
||||
|
||||
## Argumenty
|
||||
|
||||
| Argument | Povinný | Hodnoty | Default | Popis |
|
||||
|---|---|---|---|---|
|
||||
| `--mailbox` | ne | e-mail | (všechny) | Schránka = kolekce v Mongo. Bez argumentu projede všechny kolekce mimo `NON_MAILBOX_COLLECTIONS` a `SKIP_MAILBOXES` |
|
||||
| `--limit N` | ne | int | 0 | Per schránka, jen prvních N emailů (test) |
|
||||
| `--force-recheck` | ne | flag | false | Znovu ověří i emaily kde přílohy mají `file_hash` **nebo** `attachment_missing` **nebo** `attachment_reference` |
|
||||
| `--no-indexes` | ne | flag | false | Nevytváří indexy na `attachments_index` |
|
||||
|
||||
## SKIP_MAILBOXES (hardcoded)
|
||||
|
||||
| Schránka | Důvod |
|
||||
|---|---|
|
||||
| `vbuzalka@its.jnj.com` | JNJ tenant, nemáme Graph API přístup. Bez `--mailbox` se tiše přeskočí. S explicitním `--mailbox vbuzalka@its.jnj.com` skript skončí exit kódem 2. |
|
||||
|
||||
## Statistiky per schránka
|
||||
|
||||
```
|
||||
ok=N nove=N dup=N skip=N miss=N ref=N err=N
|
||||
```
|
||||
|
||||
| Kategorie | Význam |
|
||||
|---|---|
|
||||
| `ok` | emaily zpracované bez chyby (všechny přílohy hotové) |
|
||||
| `nove` | nové soubory uložené (NEW + NEW(eml)) |
|
||||
| `dup` | hash už existuje (jen ref_count++) |
|
||||
| `skip` | S/MIME (.p7m/.p7s/...) nebo inline obrázek |
|
||||
| `miss` | 404 — označeno `attachment_missing` (nepokračuje se) |
|
||||
| `ref` | referenceAttachment — uložen jen URL |
|
||||
| `err` | tranzientní chyba (5xx, timeout) — bude retry při dalším běhu |
|
||||
|
||||
## Varianty volání
|
||||
|
||||
```bash
|
||||
# Všechny schránky (mimo SKIP_MAILBOXES):
|
||||
docker exec -it python-runner python /scripts/3_download_attachments_v1.4.py
|
||||
|
||||
# Jedna schránka:
|
||||
docker exec -it python-runner python /scripts/3_download_attachments_v1.4.py --mailbox ordinace@buzalkova.cz
|
||||
|
||||
# Test 50 emailů:
|
||||
docker exec -it python-runner python /scripts/3_download_attachments_v1.4.py --mailbox ordinace@buzalkova.cz --limit 50 --no-indexes
|
||||
|
||||
# Force-recheck (i missing/reference přepíše):
|
||||
docker exec -it python-runner python /scripts/3_download_attachments_v1.4.py --mailbox ordinace@buzalkova.cz --force-recheck
|
||||
|
||||
# Na pozadí:
|
||||
docker exec -d python-runner bash -c "python /scripts/3_download_attachments_v1.4.py > /scripts/download_attachments.log 2>&1"
|
||||
```
|
||||
|
||||
## Sledování průběhu
|
||||
|
||||
```bash
|
||||
docker exec -it python-runner tail -f /scripts/download_attachments.log
|
||||
```
|
||||
Reference in New Issue
Block a user