Preserve shortage signals during global pause (Refs #137)
CI / checks (push) Successful in 4m47s

This commit is contained in:
2026-10-10 16:11:24 -04:00
parent 33da4482a6
commit ea932ec563
14 changed files with 154 additions and 26 deletions
+16
View File
@@ -38,6 +38,22 @@ export function metricAverageLobbies(lobbyHours: number, capturedHours: number):
return lobbyHours / capturedHours;
}
/** Use up to four whole-lobby intervals while retaining fractional averages in the data. */
export function metricLobbyAxis(maximumLobbies: number) {
const maximum = Number.isFinite(maximumLobbies) ? Math.max(1, maximumLobbies) : 1;
const targetStep = Math.max(1, maximum / 4);
const magnitude = 10 ** Math.floor(Math.log10(targetStep));
const step =
[1, 2, 5, 10]
.map((multiple) => multiple * magnitude)
.find((value) => value >= targetStep) ?? 10 * magnitude;
const intervals = Math.ceil(maximum / step);
return {
ceiling: intervals * step,
ticks: Array.from({ length: intervals + 1 }, (_, index) => (intervals - index) * step)
};
}
export function metricPercent(value: number, total: number): string {
if (!Number.isFinite(value) || !Number.isFinite(total) || total <= 0) return '—';
const percent = (100 * value) / total;