Replace unused server metrics with a count (Refs #139)
CI / checks (push) Successful in 4m51s
CI / checks (push) Successful in 4m51s
This commit is contained in:
+19
-24
@@ -79,7 +79,7 @@ describe('historical metrics', () => {
|
||||
expect(result.maps[0].matches).toEqual(result.matches);
|
||||
expect(result.maps[0].running).toEqual({ average: null, peak: 0, capturedHours: 0 });
|
||||
expect(result.registeredServerCount).toBe(0);
|
||||
expect(result.servers).toEqual([]);
|
||||
expect(result.sampledServerCount).toBe(0);
|
||||
expect(result.scopeOptions.maps).not.toContainEqual({ game: 't5', map: 'Future Map' });
|
||||
}
|
||||
);
|
||||
@@ -304,7 +304,11 @@ describe('historical metrics', () => {
|
||||
const at = Date.UTC(2026, 0, 2);
|
||||
const sample = { server: 'removed', game: 't6', map: 'Town', players: 1, capacity: null };
|
||||
recordMetrics([sample], at);
|
||||
expect(readMetrics(1, at + 30_000).servers[0].server).toBe('removed');
|
||||
expect(readMetrics(1, at + 30_000)).toMatchObject({
|
||||
sampledServerCount: 1,
|
||||
registeredServerCount: 0,
|
||||
maps: [{ game: 't6', map: 'Town', active: 30 / 3600 }]
|
||||
});
|
||||
recordMetrics([sample], at + 32 * 86400_000);
|
||||
expect(db().prepare('SELECT COUNT(*) AS n FROM metric_samples').get()).toEqual({ n: 1 });
|
||||
});
|
||||
@@ -318,7 +322,7 @@ describe('historical metrics', () => {
|
||||
firstRetainedSampleAt: null,
|
||||
latestSampleAt: null,
|
||||
registeredServerCount: 0,
|
||||
servers: [],
|
||||
sampledServerCount: 0,
|
||||
maps: []
|
||||
});
|
||||
db().prepare('INSERT INTO servers (name, destroyed_at) VALUES (?, ?)').run('current', null);
|
||||
@@ -332,7 +336,7 @@ describe('historical metrics', () => {
|
||||
firstRetainedSampleAt: at,
|
||||
latestSampleAt: at,
|
||||
registeredServerCount: 1,
|
||||
servers: [],
|
||||
sampledServerCount: 0,
|
||||
maps: [],
|
||||
summary: { observed: 0, unknown: 0 }
|
||||
});
|
||||
@@ -351,7 +355,7 @@ describe('historical metrics', () => {
|
||||
);
|
||||
const initial = readMetrics(1, at);
|
||||
expect(initial.latestSampleAt).toBe(at);
|
||||
expect(initial.servers).toHaveLength(1);
|
||||
expect(initial.sampledServerCount).toBe(1);
|
||||
expect(initial.summary).toEqual({
|
||||
observed: 0,
|
||||
active: 0,
|
||||
@@ -404,9 +408,7 @@ describe('historical metrics', () => {
|
||||
expect(result.summary.active * 3600).toBeCloseTo(90);
|
||||
expect(result.summary.idle * 3600).toBeCloseTo(90);
|
||||
expect(result.summary.playerHours * 3600).toBeCloseTo(300);
|
||||
expect(
|
||||
result.servers.find((server) => server.server === 'two')!.observed * 3600
|
||||
).toBeCloseTo(30);
|
||||
expect(result.sampledServerCount).toBe(2);
|
||||
const town = result.maps.find((map) => map.game === 't6' && map.map === 'Town')!;
|
||||
expect(town.observed * 3600).toBeCloseTo(60);
|
||||
expect(town.availabilityObserved * 3600).toBeCloseTo(30);
|
||||
@@ -418,9 +420,6 @@ describe('historical metrics', () => {
|
||||
expect(result.points.reduce((sum, point) => sum + point[field], 0)).toBeCloseTo(
|
||||
result.summary[field]
|
||||
);
|
||||
expect(result.servers.reduce((sum, server) => sum + server[field], 0)).toBeCloseTo(
|
||||
result.summary[field]
|
||||
);
|
||||
expect(result.maps.reduce((sum, map) => sum + map[field], 0)).toBeCloseTo(
|
||||
result.summary[field]
|
||||
);
|
||||
@@ -436,6 +435,7 @@ describe('historical metrics', () => {
|
||||
recordMetrics([{ ...sample, players: 4 }], at + 60_000);
|
||||
const result = readMetrics(1, at + 30_000);
|
||||
expect(result.latestSampleAt).toBe(at);
|
||||
expect(result.sampledServerCount).toBe(1);
|
||||
expect(result.summary.playerHours * 3600).toBeCloseTo(30);
|
||||
});
|
||||
|
||||
@@ -520,7 +520,7 @@ describe('historical metrics', () => {
|
||||
expect(result.summary.playerHours * 3600).toBeCloseTo(60);
|
||||
expect(result.previous.summary.active * 3600).toBeCloseTo(30);
|
||||
expect(result.previous.summary.playerHours * 3600).toBeCloseTo(120);
|
||||
expect(result.servers.map((server) => server.server)).toEqual(['one']);
|
||||
expect(result.sampledServerCount).toBe(1);
|
||||
expect(result.maps.map((map) => [map.game, map.map])).toEqual([['t5', 'Moon']]);
|
||||
expect(result.scopeOptions).toEqual({
|
||||
games: ['t5', 't6'],
|
||||
@@ -557,7 +557,7 @@ describe('historical metrics', () => {
|
||||
scopeLatestSampleAt: null,
|
||||
summary: { observed: 0, unknown: 0 },
|
||||
maps: [],
|
||||
servers: [],
|
||||
sampledServerCount: 0,
|
||||
pooledAvailability: { value: null },
|
||||
running: { average: null, peak: 0, capturedHours: 0 },
|
||||
previous: { firstSampleAt: null, lastSampleAt: null, partialHistory: true }
|
||||
@@ -598,6 +598,7 @@ describe('historical metrics', () => {
|
||||
recordMetrics([one, two], now - 30_000);
|
||||
const result = readMetrics(1, now);
|
||||
expect(result.running.average).toBeCloseTo(1.6);
|
||||
expect(result.sampledServerCount).toBe(3);
|
||||
expect(result.running.peak).toBe(3);
|
||||
expect(result.running.capturedHours * 3600).toBeCloseTo(150);
|
||||
expect(result.maps[0].running).toEqual(result.running);
|
||||
@@ -939,7 +940,7 @@ describe('historical metrics', () => {
|
||||
expect(result.heatmap.cells.filter((cell) => cell.observed > 0)).toHaveLength(1);
|
||||
});
|
||||
|
||||
it('counts unknown heatmap evidence and distinguishes retained names from current registrations', async () => {
|
||||
it('counts unknown heatmap evidence and sampled names independently of current registrations', async () => {
|
||||
const { recordMetrics, readMetrics } =
|
||||
await import('../../src/lib/server/fleet/metrics.js');
|
||||
const { db } = await import('../../src/lib/server/db/index.js');
|
||||
@@ -949,8 +950,7 @@ describe('historical metrics', () => {
|
||||
[sample, { ...sample, server: 'removed' }, { ...sample, server: 'tombstone' }],
|
||||
at
|
||||
);
|
||||
// A newly registered name can link to the current server without asserting
|
||||
// that its earlier historical observations belong to this registration.
|
||||
// Current registration counts stay separate from sampled names, including reuse.
|
||||
db()
|
||||
.prepare('INSERT INTO servers (name, created_at) VALUES (?, ?)')
|
||||
.run('reused', new Date(at + 15_000).toISOString());
|
||||
@@ -958,14 +958,9 @@ describe('historical metrics', () => {
|
||||
.prepare('INSERT INTO servers (name, destroyed_at) VALUES (?, ?)')
|
||||
.run('tombstone', new Date(at).toISOString());
|
||||
const result = readMetrics(1, at + 30_000);
|
||||
expect(result.servers.find((server) => server.server === 'reused')!.currentRegistered).toBe(
|
||||
true
|
||||
);
|
||||
expect(
|
||||
result.servers
|
||||
.filter((server) => server.server !== 'reused')
|
||||
.every((server) => !server.currentRegistered)
|
||||
).toBe(true);
|
||||
expect(result.sampledServerCount).toBe(3);
|
||||
expect(result.registeredServerCount).toBe(1);
|
||||
expect(result).not.toHaveProperty('servers');
|
||||
expect(
|
||||
result.heatmap.cells.reduce((sum, cell) => sum + cell.unknown, 0) * 3600
|
||||
).toBeCloseTo(90);
|
||||
|
||||
Reference in New Issue
Block a user