Files
janssen/VTMFDownloadFiles/TRASH/vtmf_pipeline_v1.5.md
T
2026-06-15 16:10:47 +02:00

4.6 KiB

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í

& "U:\PythonProject\Janssen\.venv\Scripts\python.exe" "U:\PythonProject\Janssen\VTMFDownloadFiles\vtmf_pipeline_v1.5.py"

Předchůdce: vtmf_pipeline_v1.4 (TRASH/).