29 lines
1.3 KiB
TypeScript
29 lines
1.3 KiB
TypeScript
import { db } from '../db/index.js';
|
|
|
|
/** Reports from before the latest lifecycle submission describe the old process. */
|
|
export function latestGameSubmission(server: string): string | null {
|
|
return (
|
|
db()
|
|
.prepare(
|
|
`SELECT MAX(at) AS at FROM (
|
|
SELECT MAX(submitted_at) AS at FROM server_deployments WHERE server=? AND server_deleted_at IS NULL AND action IN ('create','start','restart','rebuild')
|
|
UNION ALL SELECT requested_at AS at FROM restart_rollout WHERE server=?)`
|
|
)
|
|
.get(server, server) as { at: string | null }
|
|
).at;
|
|
}
|
|
|
|
/** Look up each registered server through the covering submission index. */
|
|
export function latestGameSubmissions(): Map<string, string | null> {
|
|
const rows = db()
|
|
.prepare(
|
|
`SELECT server, MAX(at) AS at FROM (
|
|
SELECT s.name AS server, (SELECT MAX(submitted_at) FROM server_deployments
|
|
WHERE server=s.name AND server_deleted_at IS NULL AND action IN ('create','start','restart','rebuild')) AS at
|
|
FROM servers s
|
|
UNION ALL SELECT server, requested_at AS at FROM restart_rollout) GROUP BY server`
|
|
)
|
|
.all() as { server: string; at: string | null }[];
|
|
return new Map(rows.map((row) => [row.server, row.at]));
|
|
}
|