fix(telemetry): review findings

- wau/mau trailing scans run hourly and on day finalization, not every tick
- exclusion lookup failures cached 30s so an st outage cannot amplify
- unverified relation filter dropped; player emptiness checked in js
- anonymous unauthenticated read failures no longer logged
- alerts and exclusions ensure supertokens init on cold pods
This commit is contained in:
2026-08-25 23:26:34 -07:00
parent 31f6237446
commit 1ddcffc511
8 changed files with 93 additions and 15 deletions
+21 -10
View File
@@ -30,7 +30,7 @@ const dayFilter = (dateStr: string): string =>
const distinctPlayersInWindow = async (fromDate: string, toDateExclusive: string): Promise<number> => {
const players = new Set<string>();
const filter = `created >= '${bound(fromDate)}' && created < '${bound(toDateExclusive)}' && player != ''`;
const filter = `created >= '${bound(fromDate)}' && created < '${bound(toDateExclusive)}'`;
await pbAdmin.pageCollection<{ player?: string }>("activities", { filter, fields: "player,created" }, (rows) => {
for (const row of rows) if (row.player) players.add(row.player);
@@ -42,7 +42,10 @@ const distinctPlayersInWindow = async (fromDate: string, toDateExclusive: string
return players.size;
};
export const runRollups = async (dateStr: string): Promise<number> => {
export const runRollups = async (
dateStr: string,
opts: { trailing?: boolean } = {}
): Promise<number> => {
await pbAdmin.authPromise;
const activities = newActivityAccumulator();
@@ -65,11 +68,16 @@ export const runRollups = async (dateStr: string): Promise<number> => {
(rows) => accumulateClientErrors(clientErrors, rows)
);
const nextDay = addDays(dateStr, 1);
const [wau, mau] = await Promise.all([
distinctPlayersInWindow(addDays(dateStr, -6), nextDay),
distinctPlayersInWindow(addDays(dateStr, -29), nextDay),
]);
// Trailing scans re-read the full 7/30-day windows; hourly at most.
let wau: number | undefined;
let mau: number | undefined;
if (opts.trailing !== false) {
const nextDay = addDays(dateStr, 1);
[wau, mau] = await Promise.all([
distinctPlayersInWindow(addDays(dateStr, -6), nextDay),
distinctPlayersInWindow(addDays(dateStr, -29), nextDay),
]);
}
const partial = dateStr >= utcDay(new Date());
const rollups = buildDayRollups(dateStr, {
@@ -89,11 +97,14 @@ export const runRollups = async (dateStr: string): Promise<number> => {
return rollups.length;
};
export const runScheduledRollups = async (lastRunDay?: string): Promise<string> => {
export const runScheduledRollups = async (
lastRunDay: string | undefined,
opts: { trailing?: boolean } = {}
): Promise<string> => {
const today = utcDay(new Date());
if (lastRunDay && lastRunDay !== today) {
await runRollups(lastRunDay);
await runRollups(lastRunDay, { trailing: true });
}
await runRollups(today);
await runRollups(today, opts);
return today;
};