mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 10:53:59 +00:00
fix(status): stop false LOAD FAILED from a relayed adsb.lol 429 and the installations zoom prompt
Two independent triggers turned the global status chip red while every layer was still populated (reproduced at JFK in Cockpit; timeline in the issue). adsb.lol proxy: a non-OK upstream status was relayed verbatim even with a 12 s-old cache in hand, and the browser layer answers a 429 with a 45 s cooldown in which every refresh reports "adsb.lol rate limited" without a network call. The proxy now serves its cached body as STALE on a 429/5xx and backs off from upstream for Retry-After (bounded), mirroring the OpenSky proxy. A failure with nothing cached is still relayed. Mapped installations: the "zoom in" guidance was stored in `error`, so the manager reported a refresh failure and the chip a LOAD FAILED whenever the view could not be bounded (Cockpit looks at the horizon). The status is now set without an error string; the row reads the prompt from `statusMessage`, and the chip ignores `error` for guidance statuses, matching the carve-out layerFeedState already has.
This commit is contained in:
1 parent
db49edf363
commit
1a9cfb1809
8 files changed
+200
-21
No files matched your search
@@ -1,4 +1,5 @@
|
||||
import { governorRequestRender } from '../renderGovernor.js';
|
||||
import { GUIDANCE_STATUSES } from '../loadingFeedback.js';
|
||||
import { markDetectionSourcesChanged } from './detection.js';
|
||||
function cloneLayerParams(value) {
|
||||
if (Array.isArray(value)) return value.map(cloneLayerParams);
|
||||
@@ -2233,6 +2234,12 @@ export class DataLayerManager {
|
||||
}
|
||||
return `${stateLabel} · ${source} · ${presentedError}`;
|
||||
}
|
||||
// A guidance status carries its prompt in `statusMessage`, not `error`, so
|
||||
// the row still tells the operator what to do without reporting a fault.
|
||||
if (GUIDANCE_STATUSES.includes(String(stats.status || '').toLowerCase())
|
||||
&& typeof stats.statusMessage === 'string' && stats.statusMessage.trim()) {
|
||||
return `${source} · ${stats.statusMessage.trim()}`;
|
||||
}
|
||||
const ago = stats.lastUpdate ? this._timeAgo(stats.lastUpdate) : 'never';
|
||||
if (stats.loading) {
|
||||
const loadingLabel = typeof stats.loadingLabel === 'string' && stats.loadingLabel.trim()
|
||||
|
||||
Reference in new issue
Block a user