z230
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# vtmf_pipeline_v1.5 — Kompletní V-TMF workflow (report → Mongo → download → SeaweedFS)
|
||||
|
||||
**Verze:** 1.5 · **Datum:** 2026-06-15
|
||||
|
||||
**Změny v1.5:** upload každého staženého dokumentu do SeaweedFS Filer
|
||||
(`192.168.1.50:8888`, cesta `/vtmf-documents/ab/cd/<sha256>`).
|
||||
SHA-256 content-addressed dedup — identický soubor se uloží jen jednou
|
||||
(HEAD check → 404 → PUT; při 200 dedup hit). Chyba uploadu neblokuje
|
||||
download ani zápis do Mongo — soubor zůstane na disku a pole
|
||||
`sha256/seaweed_path/seaweed_url/seaweed_synced_at` zůstanou `null`
|
||||
(lze doplnit backfillem). Souhrn na konci uvádí počet nově nahraných,
|
||||
dedup hitů a případných chyb uploadu zvlášť.
|
||||
|
||||
_(Předchozí změny viz TRASH/vtmf_pipeline_v1.4.md)_
|
||||
|
||||
Jeden běh skriptu udělá celé workflow pro studii 77242113UCO3001:
|
||||
|
||||
1. **Login** do vtmf.veevavault.com (persistentní profil
|
||||
`vault_profile/`, J&J SSO, případné 2FA potvrdíte na telefonu
|
||||
+ ENTER; údaje z `.env` v rootu projektu).
|
||||
2. **Export reportu** „Document Inventory Report - Study Level"
|
||||
(přímá URL s ID reportu `0RP000000000182` a filtrem studie
|
||||
`0ST000000137008`) → menu ⋯ → Export to Excel → Data Only →
|
||||
uloží se s timestampem do `WhatToDownload/`, po zpracování se
|
||||
přesune do `WhatToDownload/Zpracovano/`.
|
||||
3. **Parse + sync do MongoDB** — Tower `mongodb://192.168.1.76:27017`,
|
||||
db **VTMF**, kolekce **documents**, klíč `_id = "VTMF-xxx|vY.Z"`:
|
||||
- nové dokumenty se založí,
|
||||
- změny sledovaných polí se promítnou (+ `history[]`),
|
||||
- dokumenty chybějící v reportu se označí `deleted=True`
|
||||
a stažený soubor dostane ` [D]` před příponou,
|
||||
- znovuobjevené se vzkřísí a ` [D]` se odebere.
|
||||
4. **Stažení + SeaweedFS upload** — všechny `deleted=False, downloaded≠True`:
|
||||
- Source File se uloží do
|
||||
`U:\Dropbox\!!!Days\Downloads Z230\VTMF-77242113UCO3001\<Type>\<Subtype>\`
|
||||
jako `YYYY-MM-DD Description [VTMF-xxx] [vY.Z].<přípona>`,
|
||||
- soubor se přečte z disku, vypočítá se SHA-256, obsah se nahraje
|
||||
do SeaweedFS na `/vtmf-documents/{sha256[:2]}/{sha256[2:4]}/{sha256}`,
|
||||
- do Mongo se zapíše `downloaded=True, file, sha256, seaweed_path,
|
||||
seaweed_url, seaweed_synced_at`; chyba SeaweedFS tyto fieldy
|
||||
nechá `null` ale `downloaded=True` se zapíše (soubor je na disku).
|
||||
- Placeholder dokumenty (`div.vv_placeholder_text` viditelný) se
|
||||
přeskočí s `placeholder=True, downloaded=True`.
|
||||
|
||||
## Mongo schéma (kolekce documents)
|
||||
|
||||
```
|
||||
_id: "VTMF-19077748|v1.0"
|
||||
vtmf, version, url, name, status, type, subtype, desc, date, studies
|
||||
first_seen, last_seen # kdy poprvé/naposledy v reportu
|
||||
deleted, deleted_at # není ve výsledné sadě reportu
|
||||
downloaded, file, downloaded_at
|
||||
placeholder # True = Vault placeholder bez obsahu
|
||||
sha256 # hex SHA-256 staženého souboru
|
||||
seaweed_path # /vtmf-documents/ab/cd/<sha256>
|
||||
seaweed_url # http://192.168.1.50:8888/vtmf-documents/...
|
||||
seaweed_synced_at # kdy nahráno / null při chybě
|
||||
last_error, error_at # poslední chyba stahování
|
||||
history: [{ts, changes: {pole: {old, new}}}]
|
||||
```
|
||||
|
||||
## SeaweedFS detaily
|
||||
|
||||
- **Filer**: `http://192.168.1.50:8888` (přímý PUT, žádný master assign)
|
||||
- **Dedup**: HEAD → 404 → PUT; HEAD → 200 → dedup hit (vrátí `uploaded=False`)
|
||||
- **Timeout**: HEAD 10 s, PUT 120 s (velké soubory)
|
||||
- **MIME**: `mimetypes.guess_type()`, fallback `application/octet-stream`
|
||||
- **Backfill**: dokumenty s `downloaded=True, seaweed_path=null` lze
|
||||
dohnat samostatným skriptem (čte `file` z Mongo, nahraje, zapíše pola)
|
||||
|
||||
## Konfigurace (konstanty nahoře)
|
||||
|
||||
- `SEAWEED_FILER` — URL Filer serveru
|
||||
- `SEAWEED_PREFIX` — prefix cesty (`/vtmf-documents`)
|
||||
- `REPORT_URL` — ID reportu + filtr studie
|
||||
- `LIMIT` — None = vše; číslo = dávka
|
||||
- `MONGO_URI/DB/COLL`, `DOWNLOAD_ROOT`, `EXCEL_DIR`
|
||||
- `TRACKED_FIELDS`, `MAX_ATTEMPTS`, `RETRY_PAUSE_MS`, `BETWEEN_DOCS_MS`
|
||||
|
||||
## Ověřené technické detaily (nesahat bez ověření)
|
||||
|
||||
- Maintenance dialog: zavírat POUZE přes `.ui-dialog a.ok.vv_button`
|
||||
(křížek `.ui-dialog-titlebar-close` je display:none).
|
||||
- Report Excel má rozbité deklarované rozměry → přímá iterace řádků.
|
||||
- Document Name/Number/Status jsou =HYPERLINK vzorce → regex.
|
||||
- Export kliknout právě jednou; rozhoduje `expect_download`.
|
||||
- Placeholder detekce: `div.vv_placeholder_text` (uvnitř
|
||||
`div.vv_placeholder_pane > div.vv_placeholder_container`).
|
||||
|
||||
## Spuštění
|
||||
|
||||
```powershell
|
||||
& "U:\PythonProject\Janssen\.venv\Scripts\python.exe" "U:\PythonProject\Janssen\VTMFDownloadFiles\vtmf_pipeline_v1.5.py"
|
||||
```
|
||||
|
||||
Předchůdce: vtmf_pipeline_v1.4 (TRASH/).
|
||||
Reference in New Issue
Block a user