StatusPage — D1 Schema
De StatusPage Worker gebruikt een Cloudflare D1 SQLite-database (status-db, ID: 621faeef-715e-4d51-80cc-74f112560ce1). Het schema is gedefinieerd in Portals/StatusPage.Worker/migrations/0001_init.sql en bevat 11 tabellen.
Alle timestamp/datumkolommen zijn TEXT in ISO 8601 UTC-formaat (new Date().toISOString()). SQLite heeft geen native datetime-type; de applicatie schrijft en vergelijkt altijd in deze notatie.
Tabellen
Modules
Definieert de AutoMate-subsystemen die gemonitord worden.
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER PK | Auto-increment |
| TEXT | Nederlandse naam (bijv. "Identiteit") |
| TEXT | Engelse naam (bijv. "Identity") |
| TEXT | Optionele beschrijving |
| TEXT | Endpoint(s) die gepolld worden, kommagescheiden (bijv. |
| TEXT | Optioneel: eigen base URL voor modules buiten de AutoMate.API-tunnel |
| TEXT | Optionele API-key voor authenticatie bij het poll-endpoint |
| INTEGER | Weergavevolgorde op de publieke pagina |
| INTEGER |
|
| TEXT | ISO 8601 UTC aanmaakdatum |
Geschreven door: admin-interface (/admin/modules). De seed in de migratie vult vier standaardmodules.
HealthRecords
Bevat het resultaat van elke individuele poll-aanroep.
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER PK | Auto-increment |
| INTEGER FK → Modules | Welke module |
| TEXT |
|
| INTEGER | Responsetijd in milliseconden |
| TEXT | Foutmelding bij niet-Healthy status |
| TEXT | ISO 8601 UTC tijdstip van poll |
Indexen:
IX_HealthRecords_CheckedAt— snel snijden op tijdvenster voor pruningIX_HealthRecords_ModuleId_CheckedAt— snel ophalen meest recente record per module
Geschreven door: cron trigger (elke minuut via runHealthPoll()).
Retentie: 90 dagen. Records ouder dan 90 dagen worden door de uurlijkse cron verwijderd via pruneOldHealthRecords().
UptimeSummaries
Dagelijkse aggregaten per module voor de 90-dagen timeline op de publieke pagina.
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER PK | Auto-increment |
| INTEGER FK → Modules | Welke module |
| TEXT |
|
| INTEGER | Totaal aantal polls die dag |
| INTEGER | Aantal Healthy polls |
| INTEGER | Aantal Degraded polls |
| INTEGER | Aantal Unhealthy polls |
| TEXT | Slechtste status die dag |
Unieke index: UX_UptimeSummaries_ModuleId_Date — INSERT … ON CONFLICT DO UPDATE (upsert) bij elke rollup.
Geschreven door: rollUpDailySummaries() — elke minuut en elk uur via cron.
Incidents
Handmatig aangemaakte incidenten door admins.
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER PK | Auto-increment |
| TEXT | Tweetalige incidenttitel |
| TEXT | Optionele tweetalige omschrijving |
| TEXT |
|
| TEXT |
|
| TEXT | ISO 8601 UTC begin van het incident |
| TEXT | ISO 8601 UTC tijdstip van oplossing (NULL als nog actief) |
| TEXT | ISO 8601 UTC aanmaakdatum |
Indexen:
IX_Incidents_StartedAt— voor gesorteerde queries (history pagina, maandoverzicht)IX_Incidents_Status— voor deWHERE Status != 'Resolved'-query vangetActiveIncidents()
Geschreven door: admin-interface (/admin/incidents).
IncidentUpdates
Chronologische updates binnen een incident.
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER PK | Auto-increment |
| INTEGER FK → Incidents (CASCADE DELETE) | Welk incident |
| TEXT | Tweetalige update-tekst |
| TEXT | Incidentstatus op moment van update |
| TEXT | ISO 8601 UTC |
Geschreven door: addIncidentUpdate() — ook werkt de moeder-Incidents-rij bij naar de nieuwe status.
ModuleIncidents
Koppeltabel: meerdere modules per incident, meerdere incidenten per module.
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER FK → Modules | Betrokken module |
| INTEGER FK → Incidents (CASCADE DELETE) | Betrokken incident |
Composite primary key (ModuleId, IncidentId).
MaintenanceWindows
Gepland onderhoud dat de health-poller pauzeert.
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER PK | Auto-increment |
| TEXT | Tweetalig onderhoudsberichte |
| INTEGER |
|
| TEXT | ISO 8601 UTC begin |
| TEXT | ISO 8601 UTC einde (NULL als nog actief) |
Index: IX_MaintenanceWindows_IsActive — snel opvragen actief window.
Geschreven door: admin-interface (start/stop maintenance). Er kan maximaal één actief window tegelijk bestaan; startMaintenance() eindigt een eventueel bestaand actief window eerst.
Responders
On-call medewerkers voor notificaties.
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER PK | Auto-increment |
| TEXT | Naam van de medewerker |
| TEXT | WhatsApp-nummer |
| TEXT | Optioneel e-mailadres |
| TEXT | Vrij tekstnotities |
| INTEGER |
|
| TEXT | ISO 8601 UTC |
AlertEvents
Inkomende alertgebeurtenissen (bijv. gegenereerd door de health-poller of externe webhooks).
Kolom | Type | Beschrijving |
|---|---|---|
| INTEGER PK | Auto-increment |
| TEXT | Naam van de betrokken module |
| TEXT | Standaard |
| TEXT |
|
| TEXT | Optionele omschrijving |
| INTEGER FK → Responders (SET NULL) | Wie het event heeft geclaimd |
| TEXT | Naam ten tijde van claimering (denormalisatie) |
| TEXT | ISO 8601 UTC |
| TEXT | ISO 8601 UTC |
| INTEGER |
|
| TEXT | ISO 8601 UTC |
| TEXT | Deduplicatietoken; UNIQUE WHERE NOT NULL |
Indexen: op Status, (ModuleName, Status) en CreatedAt. UX_AlertEvents_ActiveLock (partial unique) voorkomt dubbele alerts voor dezelfde situatie.
Sessions
KV is de primaire sessie-opslag; deze tabel bestaat als optie maar wordt in productie niet gebruikt.
Kolom | Type | Beschrijving |
|---|---|---|
| TEXT PK | Willekeurige session UUID |
| TEXT |
|
| TEXT | Gebruikersgegevens |
| TEXT | ISO 8601 UTC |
Settings
Generieke key-value store voor runtime-instellingen.
Kolom | Type | Beschrijving |
|---|---|---|
| TEXT PK | Instellingsnaam |
| TEXT | Waarde |
| TEXT | ISO 8601 UTC |
Voorbeeldgebruik: maintenance-toggle, Twilio template-overrides.
Relatiediagram
Migratiebeheer
Migraties staan in Portals/StatusPage.Worker/migrations/. De migratie-directory is geconfigureerd in wrangler.jsonc onder d1_databases[].migrations_dir.
Migraties applyen:
De CI-workflow (Deployment-StatusPage-Worker.yml) past migraties automatisch toe voor de deploy-stap.