Der Worker hängt am Discord-Gateway und schreibt alle 30 Sekunden sein Lebenszeichen in die Datenbank, damit /api/health im Web-Container den Gateway-Zustand kennt, ohne selbst mit Discord zu sprechen. healthcheck.js prüft genau dieses Lebenszeichen. Der eigentliche Rollen-Abgleich kommt in Phase 1. Der PDF-Dienst rendert die Druckansicht über Playwright. Kein PDF-Layout von Hand, die Gestaltung kommt aus @media print der Seite selbst. Er kennt keine Rechte: wer darf, entscheidet die Web-App, bevor sie hier anfragt, und schickt das Sitzungs-Cookie des Abrufers mit, damit die gerenderte Seite dessen Freigabestufe sieht.
21 lines
635 B
TypeScript
21 lines
635 B
TypeScript
import type { PrismaClient } from '@afis/db'
|
|
|
|
export type HeartbeatStatus = 'up' | 'degraded' | 'down'
|
|
|
|
/**
|
|
* Der Worker schreibt sein Lebenszeichen in die Datenbank, damit /api/health im
|
|
* Web-Container den Gateway-Zustand kennt, ohne selbst mit Discord zu sprechen.
|
|
* Siehe docs/11-betrieb.md.
|
|
*/
|
|
export async function writeHeartbeat(
|
|
db: PrismaClient,
|
|
status: HeartbeatStatus,
|
|
detail?: string,
|
|
): Promise<void> {
|
|
await db.serviceHeartbeat.upsert({
|
|
where: { service: 'worker' },
|
|
create: { service: 'worker', status, detail: detail ?? null },
|
|
update: { status, detail: detail ?? null, at: new Date() },
|
|
})
|
|
}
|