Show match demand in metrics (Refs #138)
CI / checks (push) Successful in 4m44s

This commit is contained in:
2026-10-10 16:26:32 -04:00
parent ea932ec563
commit 616b1937ed
15 changed files with 775 additions and 42 deletions
+38
View File
@@ -167,3 +167,41 @@ it('adds policy report invalidation when upgrading a database at version 12', as
upgraded.prepare("DELETE FROM settings WHERE key='autoscaling_paused'").run();
expect(revision()).toBeGreaterThan(paused);
});
it('adds match report invalidation on upgrade without invalidating for score heartbeats', async () => {
const { db, closeDb } = await import('../../src/lib/server/db/index.js');
const handle = db();
for (const table of ['leaderboard_matches', 'leaderboard_match_players'])
for (const action of ['INSERT', 'UPDATE', 'DELETE'])
handle.exec(`DROP TRIGGER report_metrics_${table}_${action}`);
handle.pragma('user_version = 13');
closeDb();
const upgraded = db();
const revision = () =>
(
upgraded
.prepare("SELECT revision FROM report_revisions WHERE topic='metrics'")
.get() as { revision: number }
).revision;
const before = revision();
upgraded.exec(`INSERT INTO leaderboard_matches
(id,server,game,map,map_key,map_name,started_at,last_received_at,last_event,last_fingerprint)
VALUES(1,'removed','t5','zombie_moon','t5:zombie_moon','Moon',
'2026-10-10T12:00:00.000Z','2026-10-10T12:00:00.000Z','game_start','start');`);
expect(revision()).toBeGreaterThan(before);
const started = revision();
upgraded.exec(`INSERT INTO leaderboard_match_players (match_id,guid,first_seen_at,last_seen_at)
VALUES(1,'player','2026-10-10T12:00:00.000Z','2026-10-10T12:00:00.000Z');`);
expect(revision()).toBeGreaterThan(started);
const joined = revision();
upgraded.exec(`UPDATE leaderboard_matches SET highest_round=2,last_event='heartbeat',
last_received_at='2026-10-10T12:00:30.000Z' WHERE id=1;
UPDATE leaderboard_match_players SET kills=10,present=0 WHERE match_id=1;`);
expect(revision()).toBe(joined);
upgraded.exec("UPDATE leaderboard_matches SET map_name='Custom Moon' WHERE id=1");
expect(revision()).toBeGreaterThan(joined);
const renamed = revision();
upgraded.exec('DELETE FROM leaderboard_matches WHERE id=1');
expect(revision()).toBeGreaterThan(renamed);
expect(upgraded.prepare('SELECT * FROM leaderboard_match_players').all()).toEqual([]);
});