feat: add household emergency duty alarms and deadline worker

This commit is contained in:
t.indorf
2026-10-09 11:02:24 +02:00
parent a96ba0fd84
commit 8b32e4a832
34 changed files with 3947 additions and 646 deletions
+42
View File
@@ -0,0 +1,42 @@
// Runs inside the application container. No external cron service or browser is required.
const secret = process.env.NOTDIENST_JOB_SECRET;
if (!secret || secret.length < 32) {
console.error(
"Notdienst-Fristprüfung deaktiviert: NOTDIENST_JOB_SECRET muss mindestens 32 Zeichen haben.",
);
process.exit(1);
}
const port = Number(process.env.PORT || 3000);
if (!Number.isInteger(port) || port < 1 || port > 65535) process.exit(1);
let stopped = false;
let timer;
async function tick() {
const started = Date.now();
try {
const response = await fetch(
`http://127.0.0.1:${port}/api/jobs/notdienstalarme`,
{
method: "POST",
headers: { authorization: `Bearer ${secret}` },
signal: AbortSignal.timeout(50000),
},
);
if (!response.ok)
console.error(
`Notdienst-Fristprüfung: HTTP ${response.status}; erneuter Versuch in einer Minute.`,
);
} catch {
console.error(
"Notdienst-Fristprüfung momentan nicht erreichbar; erneuter Versuch in einer Minute.",
);
}
if (!stopped)
timer = setTimeout(tick, Math.max(1000, 60000 - (Date.now() - started)));
}
for (const signal of ["SIGINT", "SIGTERM"])
process.on(signal, () => {
stopped = true;
clearTimeout(timer);
process.exit(0);
});
timer = setTimeout(tick, 5000);