Files
gods-eye-view/changelog.d/945-cctv-vegvesen-kartverket-heights.md
T
Said TurkseverandClaude Opus 5.5 c808bfe609 fix(cctv): harden the Kartverket height lookup for Vegvesen cameras
- Default backoff is 30 min, longer than the 15-minute catalog refresh,
  so a failing Kartverket costs one attempt per backoff, not per refresh.
- A point a 200 answer leaves out is cached as no height (6 h TTL)
  instead of being asked again, and waited on, every refresh.
- Only 408, 429 and 5xx stop the lookup; any other 4xx marks that
  request's points as no height and the lookup carries on.
- Each request has its own 10 s timeout inside the shared 30 s deadline;
  a lookup cut short only by the deadline resumes without a backoff.
- The lane waits only on a cold cache (>10% of cameras missing); a few
  new cameras or expired misses are looked up in the background.
- applyVegvesenGroundHeights skips cameras without finite coordinates,
  so it really never throws.
- clearKartverketHeightCache bumps a generation, so a lookup started
  before a clear cannot write to the cache, backoff or pending slot.
- Credit and DATA_SOURCES note the modification (water set to 0 m,
  rounded to 0.1 m) as CC BY 4.0 asks; docs match the stop rules.
- Tests for the deadline being shared, per-request timeouts, 503,
  oversized and non-JSON bodies, 4xx, left-out points, Retry-After end
  to end, overlapping refreshes, the warm-cache wait, bad coordinates,
  the cache-clear generation and the loader's wait budget.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 17:03:50 +01:00

1.2 KiB
Raw Blame History

  • Give each Statens vegvesen camera its own ground height from Kartverket's keyless point-height API (CC BY 4.0) instead of one flat 150 m prior, so mountain-pass cameras no longer sit hundreds of metres below the terrain where neither the point-height prior nor the ground snap resolves. About 850 of ~855 cameras get a height; the rest keep the old prior. Requests carry 20 points, the most the API answers from its 1 m terrain model, eight at a time; a cold lookup takes about 6–13 s. Cameras over water use the water surface rather than the sea-floor depth the API returns there; for bridge cameras that is still below the deck. Heights are cached for good and misses for 6 h, so a refresh only asks about new or moved cameras. After a failing request (a 408, 429 or 5xx, a network error, a request over 10 s or an unreadable body) the lookup stops and backs off (Retry-After, else 30 min, longer than the refresh). The lane waits at most 12 s from its start, and only on a cold cache; a slower first lookup leaves the cameras it had not reached on the flat prior until the next 15-minute refresh, and keeps filling the cache meanwhile. CCTV_VEGVESEN_HEIGHTS=0 turns it off. Follow-up to #929 (trygvehhh, #945).