Bronlaag-abstractie: meerdere bronnen naast Melvin #17
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Nu gaat
server.pyoveral uit van de vorm van Melvin (NDW). Om ook Belgischegewesten te kunnen ontsluiten moet daar eerst een bronlaag onder.
Doel: een intern meldingsmodel waar elke bron naartoe vertaalt, met per melding
minimaal: id, titel, geometrie, periode (start/eind), beperkingen, omleidingen,
fietsimpact, bron en (optioneel) deeplink.
Werk:
bron_melvinafsplitsen uitserver.pyzonder gedragsverandering; deBiesbosch-route blijft de regressietest.
voegen samen.
Gemeten op corridor Gent-Brugge: 8000+ zones voor de rechthoek tegen circa
1100 voor tegels langs de route.
Let op de cgroup-limiet: hier ging het eerder mis met een SIGKILL.
bronnen die het zelf classificeren leveren het rechtstreeks aan.
Bewust buiten scope: de UI-kant en de gewesten zelf, die volgen als aparte taken.
Definition of Done
Hoe het is opgelost
Afgerond (2026-07-20).
Indeling nu:
server.py HTTP, check-pijplijn, route-import, LLM, feedback, health
bron_melvin.py ophalen, vector-tiles, trimmen, fietsrelevantie
geo.py bronneutrale geometrie
net.py gedeelde HTTP-helpers
Een bron is een module met DEKKING (bbox) en fetch_situations(datum, route).
bronnen_voor() kiest op de bounding box van de hele route, niet op het
vertrekpunt, zodat een rit over de grens beide bronnen bevraagt. Het interne
model blijft de bestaande meldingsvorm, dus de frontend bleef ongemoeid en een
tweede bron wordt vooral een vertaalklus (TASK-15).
geo.py en net.py bestaan om een kringverwijzing te vermijden: een bronmodule
heeft geometrie en HTTP nodig maar mag server.py niet importeren.
Vangrail vooraf gebouwd. tests/regressie.py legt de volledige respons van
drie routes vast en speelt al het netwerkverkeer terug (hermetisch, want
Melvin-data verandert dagelijks). Onderschepping op urllib.request.urlopen,
niet op onze eigen functies — die verhuizen juist. Gevalideerd dat hij verschillen
betrapt vóór hij als bewijs werd gebruikt. Na de refactor: identiek op alle drie.
De test ving tijdens het werk ook vier gemiste verwijzingen (_http_json,
is_snelweg, UA, ThreadPoolExecutor).
Incident: 5 minuten 502 op productie. Beide deploypaden rsyncten alleen
server.py en static/, dus de nieuwe modules kwamen niet mee en de app startte
niet. Hersteld met deploy/handmatig.sh; daarna beide paden aangepast en er een
waarschuwing bij gezet. Uptime Kuma zag het correct (09:59 down, 10:00 weer up).
Les: de regressietest dekte de code, niet de levering. Een groene test zegt
niets over of het bestand ook op de server staat. Bij het toevoegen van een
module hoort de deploy-lijst in dezelfde commit.
Niet gedekt door de test: de buiten-bereik-waarschuwing komt nu uit
bronnen_voor() in plaats van een hardcoded NL-bbox; alle drie de testroutes
liggen in Nederland, dus dat pad is alleen met de hand nagelopen.