Files
electric-cherry/src/lib/server/fleet/player-capacity.ts
T

22 lines
1.0 KiB
TypeScript

import type { PlayerCapacityObservation } from '../../server-capacity.js';
import { monitoringStatus } from './health-observations.js';
import { MonitoringSnapshot } from './monitoring-snapshot.js';
/** Read only the accepted, current-instance sample; never dispatch a probe. */
export function observedPlayerCapacity(
server: string,
snapshot: MonitoringSnapshot
): PlayerCapacityObservation {
const game = monitoringStatus(server, snapshot)?.game;
const capacity = game?.result.ok ? game.result.status.capacity : null;
return typeof capacity === 'number' && Number.isSafeInteger(capacity) && capacity > 0
? { capacity, capacity_observed_at: game!.observedAt }
: { capacity: null, capacity_observed_at: null };
}
/** One joined identity read for a fleet, or a single server on a detail route. */
export function playerCapacityReader(serverName?: string) {
const snapshot = new MonitoringSnapshot(serverName);
return (server: string) => observedPlayerCapacity(server, snapshot);
}