Ladeanzeige statt Zwischenständen, Echtzeit sofort nach Start, keine Autobahn-Schilder
- /api/status liefert ready, sobald Positionen mit Echtzeit berechnet sind - Server holt Echtzeit direkt nach dem Laden des Fahrplans (statt nach ~35 s) - Browser zeigt bis dahin nur 'Züge werden geladen …' - Statuszeile ohne Technik: 'N Züge unterwegs', ggf. 'Verspätungen zurzeit nicht verfügbar' - Autobahn-/Strassenschilder (roads_shields) ausgeblendet Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X48pE4bzjHej8w9HyZXCjb
This commit is contained in:
@@ -29,6 +29,7 @@ class State:
|
||||
rt_version: str | None = None
|
||||
rt_at: float | None = None
|
||||
rt_error: str | None = None
|
||||
rt_tried_at: float | None = None
|
||||
vehicles: bytes = b'{"type":"FeatureCollection","features":[]}'
|
||||
vehicles_gz: bytes = gzip.compress(vehicles)
|
||||
count = 0
|
||||
@@ -64,6 +65,11 @@ def watch_feeds():
|
||||
t = time.time()
|
||||
S.feed = Feed(C.FEEDS_DIR / want)
|
||||
log.info("Fahrplan %s geladen in %.0f s (%d Fahrten)", want, time.time() - t, len(S.feed.trip_ids))
|
||||
try: # Echtzeit sofort holen statt auf den nächsten Abruf zu warten
|
||||
poll_realtime()
|
||||
except Exception:
|
||||
log.exception("Erster Echtzeit-Abruf fehlgeschlagen")
|
||||
compute_positions()
|
||||
|
||||
|
||||
def poll_realtime():
|
||||
@@ -77,6 +83,8 @@ def poll_realtime():
|
||||
if S.rt_at and time.time() - S.rt_at > 600:
|
||||
S.rt = {}
|
||||
raise
|
||||
finally:
|
||||
S.rt_tried_at = time.time()
|
||||
|
||||
|
||||
def compute_positions():
|
||||
@@ -142,6 +150,8 @@ def status():
|
||||
"rt_error": S.rt_error,
|
||||
"rt_trips": len(S.rt),
|
||||
"vehicles": S.count,
|
||||
# erst "bereit", wenn Positionen mit (dem ersten Versuch) Echtzeit berechnet sind
|
||||
"ready": bool(f and S.computed_at and (not C.RT_KEY or (S.rt_tried_at and S.computed_at >= S.rt_tried_at))),
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user