chore(logging): normalize wakeup flow observability with timings and summaries
Standardize console prefixes across scheduler, push, refresh, register, auth, and debug endpoints. Add pass-level scheduler summaries, elapsed-time logs, and masked-token-only push failure messages while reducing per-device noise in scheduler loops.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { db } from "./db/fcmTokens.js";
|
||||
import { sendPushToDevice } from "./services/pushService.js";
|
||||
import { maskToken } from "./util/maskToken.js";
|
||||
import { errorMessage, formatElapsedMs } from "./util/formatElapsed.js";
|
||||
|
||||
let intervalId: ReturnType<typeof setInterval> | undefined;
|
||||
|
||||
@@ -8,25 +8,52 @@ export function startScheduler(): void {
|
||||
if (intervalId !== undefined) return;
|
||||
|
||||
intervalId = setInterval(async () => {
|
||||
const passStarted = Date.now();
|
||||
console.log("[Scheduler] Pass started");
|
||||
|
||||
try {
|
||||
console.log("[Scheduler] Checking devices...");
|
||||
const devices = await db.getAllForScheduler();
|
||||
const seenTokens = new Set<string>();
|
||||
let checked = 0;
|
||||
let sent = 0;
|
||||
let skipped = 0;
|
||||
let failed = 0;
|
||||
let duplicates = 0;
|
||||
|
||||
for (const d of devices) {
|
||||
if (seenTokens.has(d.fcmToken)) {
|
||||
console.log(
|
||||
"[Scheduler] Duplicate device skipped:",
|
||||
d.deviceId,
|
||||
maskToken(d.fcmToken)
|
||||
);
|
||||
duplicates++;
|
||||
continue;
|
||||
}
|
||||
seenTokens.add(d.fcmToken);
|
||||
await sendPushToDevice(d.fcmToken);
|
||||
checked++;
|
||||
|
||||
const result = await sendPushToDevice(d.fcmToken);
|
||||
if (result === "sent") sent++;
|
||||
else if (result === "skipped") skipped++;
|
||||
else failed++;
|
||||
}
|
||||
|
||||
const summaryParts = [
|
||||
`Checked ${checked} devices`,
|
||||
`sent ${sent} pushes`,
|
||||
`skipped ${skipped}`,
|
||||
];
|
||||
if (failed > 0) summaryParts.push(`failed ${failed}`);
|
||||
if (duplicates > 0) {
|
||||
summaryParts.push(`${duplicates} duplicates ignored`);
|
||||
}
|
||||
console.log("[Scheduler]", summaryParts.join(", "));
|
||||
console.log(
|
||||
"[Scheduler] Pass completed in",
|
||||
formatElapsedMs(Date.now() - passStarted)
|
||||
);
|
||||
} catch (err) {
|
||||
console.error("[Scheduler] Tick failed", err);
|
||||
console.error(
|
||||
"[Scheduler] Pass failed in",
|
||||
formatElapsedMs(Date.now() - passStarted) + ":",
|
||||
errorMessage(err)
|
||||
);
|
||||
}
|
||||
}, 5 * 60 * 1000);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user