AutoMate Technisch Help

StatusPage — Operations

Controleren of de cron draait

Via wrangler tail

cd Portals/StatusPage.Worker pnpm exec wrangler tail

wrangler tail streamt real-time logregels van de productie-Worker. Bij elke cron-uitvoering zie je regels zoals:

[cron * * * * *] Polling 4 modules [cron * * * * *] Completed in 312ms [cron 0 * * * *] pruned 142 old health records

Via D1-query

Controleer of er recent records zijn geschreven:

# Laatste 10 HealthRecords pnpm exec wrangler d1 execute status-db --remote \ --command "SELECT Id, ModuleId, Status, CheckedAt FROM HealthRecords ORDER BY CheckedAt DESC LIMIT 10" # Totaal records van vandaag pnpm exec wrangler d1 execute status-db --remote \ --command "SELECT COUNT(*) as Vandaag FROM HealthRecords WHERE CheckedAt >= date('now')"

Als de teller niet oploopt, is de cron niet actief. Controleer de Wrangler-deploymentstatus en of de cron-schedules aanwezig zijn in het Cloudflare-dashboard.

Status hangt op DegradedPerformance zonder duidelijke reden

De meest voorkomende oorzaken:

  1. Stale Degraded records — een module had tijdelijk een Degraded-status en de poller heeft sindsdien geen Healthy record kunnen schrijven. De getOverallStatus()-functie kijkt naar het meest recente HealthRecord per module.

  2. Actief incident — een incident met status niet-Resolved telt mee voor DegradedPerformance, ook al is de daadwerkelijke service weer operationeel.

Diagnose

# Meest recente record per module pnpm exec wrangler d1 execute status-db --remote \ --command "SELECT m.NameEn, hr.Status, hr.Details, hr.CheckedAt FROM HealthRecords hr JOIN Modules m ON m.Id = hr.ModuleId WHERE hr.CheckedAt = (SELECT MAX(h2.CheckedAt) FROM HealthRecords h2 WHERE h2.ModuleId = hr.ModuleId) ORDER BY hr.CheckedAt DESC" # Actieve incidenten pnpm exec wrangler d1 execute status-db --remote \ --command "SELECT Id, TitleNl, Severity, Status FROM Incidents WHERE Status != 'Resolved'"

Oplossing — Healthy refresh via admin

Log in op /admin en klik op Healthy refresh. Dit triggert handmatig een poll-ronde zodat actuele statussen worden geschreven zonder op de volgende cron-tick te wachten.

Oplossing — Reset Health Data (drastisch)

Het admin-dashboard biedt ook een Reset Health Data-actie die alle HealthRecords en UptimeSummaries voor een module verwijdert. Gebruik dit alleen als de data consistent corrupt is. De eerstvolgende cron-tick bouwt de data opnieuw op.

Maintenance window beheren

Starten

Log in op /admin en klik op Start Maintenance. Alternatief via D1:

pnpm exec wrangler d1 execute status-db --remote \ --command "INSERT INTO MaintenanceWindows (MessageNl, MessageEn, IsActive, StartedAt) VALUES ('Gepland onderhoud', 'Planned maintenance', 1, datetime('now'))"

Stoppen

Via het admin-dashboard: Stop Maintenance. Alternatief:

pnpm exec wrangler d1 execute status-db --remote \ --command "UPDATE MaintenanceWindows SET IsActive = 0, EndedAt = datetime('now') WHERE IsActive = 1"

Zodra het maintenance window gestopt is, hervat de poller bij de eerstvolgende cron-tick (maximaal 1 minuut).

D1-migraties applyen (remote)

cd Portals/StatusPage.Worker # Productie pnpm exec wrangler d1 migrations apply status-db --remote # Development-omgeving pnpm exec wrangler d1 migrations apply status-db --remote --env development

Migraties worden ook automatisch door de CI-workflow (Deployment-StatusPage-Worker.yml) uitgevoerd.

Secret rotatie

AZURE_AD_CLIENT_SECRET

De Entra ID client secret van app ac3eb2dc-8631-45a3-b702-e167511070f2 heeft een vervaldatum. Stappen bij rotatie:

  1. Genereer een nieuw secret in Azure Portal → App Registrations → Certificates & secrets

  2. Roteer het Worker-secret:

    cd Portals/StatusPage.Worker pnpm exec wrangler secret put AZURE_AD_CLIENT_SECRET # Plak het nieuwe secret wanneer gevraagd
  3. Verifieer via wrangler tail dat admin-login nog werkt (geen Token exchange failed-fouten)

Overige secrets

pnpm exec wrangler secret put TWILIO_ACCOUNT_SID pnpm exec wrangler secret put TWILIO_AUTH_TOKEN pnpm exec wrangler secret put API_AUDIENCE

Waarschuwing — adapter-cloudflare upgrade

Bij een upgrade van @sveltejs/adapter-cloudflare kan de builduitvoer veranderen. Het postbuild-script scripts/inject-scheduled.mjs overschrijft src/main.ts met een wrapper die de scheduled()-handler toevoegt. Als de adapter de locatie of structuur van _worker.js wijzigt, kan het script falen.

Na elke adapter-upgrade: voer een volledige build uit en controleer of:

  1. src/main.ts correct gegenereerd is (bevat scheduled())

  2. Cron-triggers nog werken via wrangler tail na deploy

Als de scheduled()-handler verdwijnt, stopt de health-poller zonder zichtbare fout.

Retentie en datavolume

  • HealthRecords worden 90 dagen bewaard (RETENTION_DAYS=90 in wrangler.jsonc)

  • Bij 4 actieve modules × 60 polls/uur × 24 uur × 90 dagen ≈ 518.400 records maximaal

  • Pruning door de uurlijkse cron; D1 Cloudflare Free tier: 5 GB opslag

Aanpassen van de retentietermijn:

# Via wrangler vars (niet secret) # Wijzig RETENTION_DAYS in wrangler.jsonc en deploy opnieuw
Last modified: 25 June 2026