Worker- und PDF-Dienst
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.
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
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() },
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user