Skip to content

Commit b10464e

Browse files
authored
fix(health): widen gpsjam maxStaleMin 12h → 24h (koala73#3494)
* fix(health): tighten gpsjam maxStaleMin 12h → 8h for faster outage signal Wingbits API hit a HTTP 402 quota exhaustion 2026-04-29; the seeder (scripts/fetch-gpsjam.mjs) gracefully catches the error and extends TTL on stale data without refreshing fetchedAt — the only signal that the upstream is down is STALE_SEED on the seed-meta age. The previous 720 (12h) threshold meant 12h of silent staleness before the dashboard flagged it. 480 (8h) keeps the alarm honest while still tolerating routine cron jitter on whatever the actual cadence is. Also added the inline comment that was missing — every other entry in SEED_META documents the cadence/rationale, this one didn't. * fix(health): set gpsjam maxStaleMin to 24h (was 8h on PR, 12h before) Operator decision: rather than tightening to 8h to alarm faster, give 24h headroom so the monthly Wingbits quota issue doesn't keep flipping the dashboard to STALE_SEED while the upstream plan is being sorted.
1 parent c7d0603 commit b10464e

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

api/health.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ const SEED_META = {
286286
// minerals + giving: on-demand cachedFetchJson only, no seed-meta writer — freshness checked via TTL
287287
// bisExchange + bisCredit: extras written by same BIS script via writeExtraKey, no dedicated seed-meta
288288
fxYoy: { key: 'seed-meta:economic:fx-yoy', maxStaleMin: 1500 }, // daily cron; 25h tolerance + 1h drift
289-
gpsjam: { key: 'seed-meta:intelligence:gpsjam', maxStaleMin: 720 },
289+
gpsjam: { key: 'seed-meta:intelligence:gpsjam', maxStaleMin: 1440 }, // Wingbits API (scripts/fetch-gpsjam.mjs); 1440min = 24h tolerance gives operator headroom to handle upstream outages and monthly quota exhaustion (HTTP 402 observed 2026-04-29) without dashboard noise. Seeder catch-block extends TTL on fail without refreshing fetchedAt, so STALE_SEED via age is the only alarm path.
290290
positiveGeoEvents:{ key: 'seed-meta:positive-events:geo', maxStaleMin: 60 },
291291
riskScores: { key: 'seed-meta:intelligence:risk-scores', maxStaleMin: 30 }, // CII warm-ping every 8min; 30min = ~3.5x interval,
292292
iranEvents: { key: 'seed-meta:conflict:iran-events', maxStaleMin: 20160 }, // manual seed from LiveUAMap; 20160 = 14d = 2× weekly cadence

0 commit comments

Comments
 (0)