Relax freshness limits and tolerate transient RCON failures
This commit is contained in:
+12
-12
@@ -17,7 +17,7 @@ describe('historical metrics', () => {
|
||||
const result = readMetrics(1, at + 3600_000);
|
||||
expect(result.summary.active * 3600).toBeCloseTo(30);
|
||||
expect(result.summary.idle * 3600).toBeCloseTo(30);
|
||||
expect(result.summary.unknown * 3600).toBeCloseTo(45);
|
||||
expect(result.summary.unknown * 3600).toBeCloseTo(90);
|
||||
expect(result.summary.playerHours * 3600).toBeCloseTo(60);
|
||||
expect(result.points.reduce((sum, p) => sum + p.observed, 0)).toBeCloseTo(result.summary.observed);
|
||||
});
|
||||
@@ -43,7 +43,7 @@ describe('historical metrics', () => {
|
||||
let result = readMetrics(1, midnight + 15_000);
|
||||
expect(result.points.filter(p => p.active > 0).map(p => p.active * 3600)).toEqual([15, 15]);
|
||||
result = readMetrics(1, midnight + 86400_000);
|
||||
expect(result.summary.active * 3600).toBeCloseTo(30);
|
||||
expect(result.summary.active * 3600).toBeCloseTo(75);
|
||||
expect(result.points.reduce((sum, p) => sum + p.active, 0)).toBeCloseTo(result.summary.active);
|
||||
});
|
||||
|
||||
@@ -84,7 +84,7 @@ describe('historical metrics', () => {
|
||||
expect(initial.summary).toEqual({ observed: 0, active: 0, idle: 0, unknown: 0, playerHours: 0 });
|
||||
const later = readMetrics(1, at + 120_000);
|
||||
expect(later.summary.observed).toBe(0);
|
||||
expect(later.summary.unknown * 3600).toBeCloseTo(45);
|
||||
expect(later.summary.unknown * 3600).toBeCloseTo(90);
|
||||
expect(later.maps[0].capacityObserved).toBe(0);
|
||||
});
|
||||
|
||||
@@ -112,10 +112,10 @@ describe('historical metrics', () => {
|
||||
// Removing a lobby ends its previous observation at the next complete collection.
|
||||
recordMetrics([{ ...one, map: 'Farm', players: 0 }], at + 30_000);
|
||||
// A collection outage is excluded; an identically named map in another game remains separate.
|
||||
recordMetrics([{ ...one, game: 't5', players: 2, capacity: null }], at + 120_000);
|
||||
const result = readMetrics(1, at + 150_000);
|
||||
recordMetrics([{ ...one, game: 't5', players: 2, capacity: null }], at + 150_000);
|
||||
const result = readMetrics(1, at + 180_000);
|
||||
expect(result.summary.active * 3600).toBeCloseTo(90);
|
||||
expect(result.summary.idle * 3600).toBeCloseTo(45);
|
||||
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);
|
||||
const town = result.maps.find(map => map.game === 't6' && map.map === 'Town')!;
|
||||
@@ -244,7 +244,7 @@ describe('historical metrics', () => {
|
||||
expect(result.previous.until).toBe(result.since);
|
||||
expect(result.previous.summary.active * 3600).toBeCloseTo(15);
|
||||
expect(result.summary.active * 3600).toBeCloseTo(15);
|
||||
expect(result.summary.idle * 3600).toBeCloseTo(45);
|
||||
expect(result.summary.idle * 3600).toBeCloseTo(90);
|
||||
expect(result.previous).toMatchObject({ firstSampleAt: since - 15_000, lastSampleAt: since - 15_000, partialHistory: true });
|
||||
});
|
||||
|
||||
@@ -258,10 +258,10 @@ describe('historical metrics', () => {
|
||||
recordMetrics([sample], now - 30_000);
|
||||
const result = readMetrics(30, now);
|
||||
expect(result.previous).toMatchObject({ since: now - 60 * day, until: now - 30 * day, partialHistory: true });
|
||||
expect(result.previous.summary.active * 3600).toBeCloseTo(45);
|
||||
expect(result.previous.summary.active * 3600).toBeCloseTo(90);
|
||||
expect(result.previous.firstSampleAt).toBe(now - 31 * day + 30_000);
|
||||
expect(result.summary.active * 3600).toBeCloseTo(30);
|
||||
expect(result.summary.idle * 3600).toBeCloseTo(45);
|
||||
expect(result.summary.idle * 3600).toBeCloseTo(90);
|
||||
});
|
||||
|
||||
it('marks the retained start bound separately from gaps inside the previous window', async () => {
|
||||
@@ -273,7 +273,7 @@ describe('historical metrics', () => {
|
||||
recordMetrics([sample], now - 30_000);
|
||||
const result = readMetrics(1, now);
|
||||
expect(result.previous.partialHistory).toBe(false);
|
||||
expect(result.previous.summary.unknown * 3600).toBeCloseTo(30);
|
||||
expect(result.previous.summary.unknown * 3600).toBeCloseTo(75);
|
||||
expect(result.previous.summary.observed).toBe(0);
|
||||
expect(result.previous.firstSampleAt).toBe(priorStart - 15_000);
|
||||
// Having the left edge says nothing about the uncaptured time after it.
|
||||
@@ -326,8 +326,8 @@ describe('historical metrics', () => {
|
||||
recordMetrics([{ ...sample, players: 0 }], at + 3600_000);
|
||||
const result = readMetrics(parseMetricsQuery(new URLSearchParams({ days: '1', timeZone: 'America/New_York' })), at + 3630_000);
|
||||
const cell = result.heatmap.cells.find(cell => cell.weekday === 6 && cell.hour === 1)!;
|
||||
expect(cell.observed * 3600).toBeCloseTo(75);
|
||||
expect(cell.active * 3600).toBeCloseTo(45);
|
||||
expect(cell.observed * 3600).toBeCloseTo(120);
|
||||
expect(cell.active * 3600).toBeCloseTo(90);
|
||||
expect(cell.idle * 3600).toBeCloseTo(30);
|
||||
expect(cell.distinctDates).toBe(1);
|
||||
expect(result.heatmap.cells.filter(cell => cell.observed > 0)).toHaveLength(1);
|
||||
|
||||
Reference in New Issue
Block a user