Skip to content

refactor(validatie): simplificatie beheerpagina + ingest run-logging#63

Merged
EdF2021 merged 1 commit into
mainfrom
refactor/beheer-simplificatie
May 9, 2026
Merged

refactor(validatie): simplificatie beheerpagina + ingest run-logging#63
EdF2021 merged 1 commit into
mainfrom
refactor/beheer-simplificatie

Conversation

@EdF2021
Copy link
Copy Markdown
Contributor

@EdF2021 EdF2021 commented May 9, 2026

Summary

Code-simplification pass over de bootstrap-feature (PR #59-#62), gericht op één convention-violation, één silent-failure-bug en twee efficiency-issues op de beheerpagina.

  • 9_beheer.py miste render_nav() — gebruikers op /beheer zagen geen vaste header/nav. Toegevoegd direct na CSS-injectie.
  • Silent failure bij subprocess-exit_run_in_placeholder toonde alleen [exit=N] in de output-tail; nu wordt expliciet st.success of st.error getoond op basis van de exit-code.
  • Onbegrensde geheugengroei — output-buffer was een ongebonden list[str]; vervangen door deque(maxlen=300). Voorkomt MB-aan-string-buffer bij een 30-min bootstrap met rclone-progress.
  • Streamlit-paint throttling — voorheen één WebSocket-update per stdout-regel (kan honderden/sec zijn bij rclone of seed_bulk). Nu max ~5 paints/sec.
  • Dubbele tree-walk — Status-tab telde PDFs en MDs via twee aparte rglob() calls; één rglob("*") met suffix-switch is voldoende.
  • assert proc.stdout vervangen door RuntimeError (assertions verdwijnen onder python -O).
  • import time mid-function in ingest.py:main() verplaatst naar module-top (PEP-8; geen startup-cost-rationale zoals bij de dotenv/db deferred imports).

Buiten scope (bewust niet aangepakt — zou abstracties of feature-werk introduceren i.p.v. simplificeren): DB-pad helper extraheren, _INSTELLINGEN publiek maken, raw SQL uit app/ weghalen, ingest-runs ook bij failure loggen.

Test plan

  • uv run python -m pytest → 63 passed
  • uv run ruff format + uv run ruff check → clean
  • AST-parse beheerpagina (geen import-time errors)
  • UI-smoke (lokaal): BEHEER_ENABLED=true uv run streamlit run app/main.py, navigeer naar /beheer, verifieer:
    • Header (render_nav) is zichtbaar
    • Status-tab toont OERs/instellingen + PDFs/MDs
    • Sync-tab knop produceert live output, eindigt met groene st.success (of rode st.error bij rclone-fout)
    • Geen browser-tab-CPU-spike tijdens snel-producerende output

🤖 Generated with Claude Code

- 9_beheer.py mist render_nav() (conventie-violatie); toegevoegd na CSS-injectie.
- _run_in_placeholder surface nu st.success/st.error op basis van de
  subprocess-exit-code; voorheen werd een non-zero exit alleen in de
  output-tail getoond en eindigde de UI groen.
- Output-buffer is een deque(maxlen=300) i.p.v. onbegrensde list, en
  Streamlit-paint is throttled naar ~5 Hz om de WebSocket niet te
  overbelasten bij rclone-progress (tienduizenden regels per run).
- Status-tab doet één rglob i.p.v. twee aparte tree-walks voor PDF/MD.
- assert proc.stdout vervangen door RuntimeError (assertions verdwijnen
  onder python -O).
- ingest.py: import time naar module-top (was mid-function zonder
  startup-cost-rationale).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@EdF2021
Copy link
Copy Markdown
Contributor Author

EdF2021 commented May 9, 2026

UI smoke-test ✅

Lokaal gedraaid op feature-branch met BEHEER_ENABLED=true uv run streamlit run app/main.py --server.port 8504.

Status-tab — laadt correct, alle 5 instellingen tonen de baseline-counts uit check_bootstrap.sh:

Instelling Totaal Geïndexeerd
Aeres MBO 29 29
Da Vinci College 81 68
ROC Utrecht 111 111
Rijn IJssel 50 50
Talland 238 238

Laatste ingest: instelling:aeres op 2026-05-09 11:29:39 (496 OERs, 2483 kerntaken, 0.0s)ingest_runs-tabel werkt.

Bestanden op schijf: /home/eddef/projects/samenwijzer/oeren — 765 PDFs, 776 markdown-bestanden — single-walk telt correct.

Sync-tabStart sync triggert sync_oeren.sh, rclone-progress-output streamt live (4 frames in ~2s, paint-throttling werkt — geen per-regel WebSocket-bombardement). Subprocess eindigt met exit=0 en de nieuwe st.success-alert verschijnt: ✅ Klaar (exit=0): bash scripts/sync_oeren.sh. Het oude gedrag (alleen [exit=N] in de output-tail) is vervangen door een expliciete success/error-banner.

Console — geen errors gerelateerd aan de wijzigingen (alleen een Streamlit-static 404, niet nieuw).

render_nav() — call is conventie-correct toegevoegd; functioneel een no-op op /beheer zelf omdat de pagina zonder login bereikbaar is en render_nav early-returnt zonder rol. Verschil wordt zichtbaar zodra een ingelogde student/mentor de pagina bezoekt.

@EdF2021 EdF2021 merged commit c0d0f18 into main May 9, 2026
1 check passed
@EdF2021 EdF2021 deleted the refactor/beheer-simplificatie branch May 9, 2026 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant