fix: honor Komodo health and prefer fresh telemetry across fleet status

This commit is contained in:
2026-09-27 15:34:30 -04:00
parent 46a89ea4b0
commit 8ea696417f
27 changed files with 488 additions and 315 deletions
+10 -2
View File
@@ -1,4 +1,5 @@
import { parseServerName, zombieMapBySlug } from './map-aliases.js';
import { freshTelemetry, type GameObservation } from './server-observation.js';
import { freshStatusTimestamp } from './server-freshness.js';
import type { ZombieGame } from './map-aliases.js';
import type { GameTelemetry } from './telemetry.js';
@@ -6,6 +7,13 @@ import type { Health, RosterPlayer } from './ui/stores/servers.js';
import { mapTitle, serverTitle } from './ui/server-labels.js';
export interface FleetServer {
container_state?: string | null;
container_checked_at?: string | null;
last_checked_at?: string | null;
telemetry_after?: string | null;
rcon_status?: GameObservation;
telemetry?: GameTelemetry;
status_source?: 'telemetry' | 'rcon' | null;
name: string;
game: string | null;
map: string | null;
@@ -64,11 +72,11 @@ export function fleetIdentity(server: FleetServer) {
}
export function currentRound(server: FleetServer, report: GameTelemetry | undefined, now: number): number | null {
if (server.telemetry && (!report || Date.parse(server.telemetry.receivedAt) > Date.parse(report.receivedAt))) report = server.telemetry;
if (!report || (report.event !== 'round_change' && report.event !== 'heartbeat') || !freshServer(server, now) || !server.active_since || !server.game_started_at
|| server.game_ended_at || (server.last_players ?? 0) === 0) return null;
const received = Date.parse(report.receivedAt);
const age = now - received;
return age >= 0 && age <= 120_000 && received >= Date.parse(server.game_started_at)
return freshTelemetry(report, now, server.telemetry_after) && received >= Date.parse(server.game_started_at)
&& received >= Date.parse(server.active_since) ? report.round : null;
}