fix: jitter = actual check start minus ideal scheduled time, not wall clock at dispatch
This commit is contained in:
parent
27be1fa8bf
commit
bd3c33dda4
|
|
@ -22,11 +22,15 @@ export const internal = new Elysia({ prefix: "/internal", detail: { hide: true }
|
|||
return {};
|
||||
})
|
||||
|
||||
// Returns monitors that are due for a check, with scheduled_at = now()
|
||||
// Returns monitors that are due for a check.
|
||||
// scheduled_at = last_checked_at + interval_s (ideal fire time), so jitter = actual_start - scheduled_at
|
||||
.get("/due", async () => {
|
||||
const scheduled_at = new Date().toISOString();
|
||||
const monitors = await sql`
|
||||
SELECT m.id, m.url, m.method, m.request_headers, m.request_body, m.timeout_ms, m.interval_s, m.query
|
||||
SELECT m.id, m.url, m.method, m.request_headers, m.request_body, m.timeout_ms, m.interval_s, m.query,
|
||||
CASE
|
||||
WHEN last.checked_at IS NULL THEN now()
|
||||
ELSE last.checked_at + (m.interval_s || ' seconds')::interval
|
||||
END AS scheduled_at
|
||||
FROM monitors m
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT checked_at FROM pings
|
||||
|
|
@ -37,8 +41,7 @@ export const internal = new Elysia({ prefix: "/internal", detail: { hide: true }
|
|||
AND (last.checked_at IS NULL
|
||||
OR last.checked_at < now() - (m.interval_s || ' seconds')::interval)
|
||||
`;
|
||||
// Attach scheduled_at to each monitor so the runner can report jitter
|
||||
return monitors.map((m: any) => ({ ...m, scheduled_at }));
|
||||
return monitors;
|
||||
})
|
||||
|
||||
// Manual retention cleanup trigger
|
||||
|
|
|
|||
Loading…
Reference in New Issue