Report Builder
De Report Builder maakt custom evidence packs bovenop dezelfde infrastructuur als de maandelijkse Audit Pack: JSONL.gz + PDF + .sig, Ed25519-signed met dezelfde hash-chain. Verschil: jij kiest template, scope en datumvenster.
In het dashboard
- Sidebar → Reports (onder MANAGE)
- Stap 1: kies één van 5 templates (cards):
- Executive samenvatting (1-2p) — CISO/board view met Trust Score chart
- Technische audit (12-20p) — voor NIS2/CRA auditor
- Per applicatie (4-6p) — deep-dive één app: SLA + CVEs + EATs
- Per groep (6-10p) — alle hosts in één groep met aggregate
- MSP handover (4-8p) — wat heeft jouw MSP-team gedaan in een tenant
- Stap 2: vul scope + datums:
- Titel (optioneel, free text)
- Datumvenster (default laatste 30 dagen, max 365)
- Scope-velden verschijnen automatisch op basis van template:
- tags (comma-separated)
- group_id (UUID uit /groups)
- app_id (UUID uit /apps)
- msp_actor (email-domein, voor msp_handover)
- agent_ids (comma-separated, voor specifieke hosts)
- Klik Genereer rapport → async job start
- Wacht 10-60 s (afhankelijk van venster). Verschijnt onder Mijn rapporten met status “klaar”
- Download: PDF / JSONL.gz / .sig knoppen per rij
Wat erin zit per template
| Template | Inhoud |
|---|---|
| executive | Trust Score 30d trend chart, 3 KPI tiles (score / open critical / kernel CVEs), top 5 recente critical incidents, 1-2p totaal |
| technical_audit | Cover + Trust Score chart + Hosts in scope tabel + EATs + alerts + CVEs + kernel currency + verify-appendix (8 secties) |
| per_application | Cover + app-metadata + SLA uptime sectie + restart-EATs voor deze app + dependencies + recent state changes |
| per_group | Cover + alle hosts in groep + per-host alert/EAT samenvatting + aggregate Trust Score breakdown |
| msp_handover | Cover + alle acties uitgevoerd door MSP-team (filtered op actor email-domein) — “wat hebben wij deze maand gedaan” |
Alle templates hebben een verify-appendix met manifest_hash + Ed25519
signature + verify-CLI commando. Offline-verifieerbaar door externe
auditor met monsys-verify-eat-linux-x64 verify-pack.
Wie kan wat
| Rol | Mag genereren | Templates beschikbaar |
|---|---|---|
| Viewer | enkel executive | downloads van eigen reports |
| Editor | executive, technical_audit, per_application, per_group | alle scopes (tag/group/app/agents) |
| Admin | alle 5 templates incl. msp_handover | alle scopes |
Charts in PDF
Geen externe lib, geen headless browser. We tekenen direct met gofpdf-primitives:
- Line chart: Trust Score 30d trend, met y-as ticks (0/50/100) en datum-labels op x-as
- Bar chart: alert volume per dag (toekomstig — komt in v1.1)
Pixel-grid styling: 1px lines, monospace ticks, geen gridlines behalve midden. Past in de bestaande branding.
Cryptografische pijplijn
Identiek aan de maandelijkse Audit Pack:
- Worker streamt evidence-rows naar
<base>.jsonl.gz, met hash-chain over elke regel via sha256 - Manifest JSON met hash_chain_root + counts + range + scope
manifest_hash = sha256(manifest_json)- Ed25519 sign met
MONSYS_HUB_SIGNING_KEY_HEX→<base>.sig - PDF rendered met dezelfde data + verify-appendix dat de hash-chain uitlegt
Filename pattern: <template_kind>-<8-char-id>.jsonl.gz/.pdf/.sig. On-demand
rapporten en de maandelijkse 2026-04.* set leven naast elkaar in
/var/lib/monsys/audit-packs/<tenant_id>/.
Storage retention
Rapporten worden niet automatisch verwijderd. De maandelijkse Audit Pack houdt minstens 12 maanden (per NIS2 Art21 §2(c) interpretatie). On-demand rapporten blijven tot manueel verwijderd. Voor disk-management:
-- Vind ongebruikte on-demand rapporten ouder dan 90 dagenSELECT id, template_kind, title, created_at FROM audit_packs WHERE tenant_id = $1::UUID AND template_kind <> 'monthly_full' AND created_at < NOW() - INTERVAL '90 days' ORDER BY created_at;Of via API (geavanceerd — voor automatisering)
# 1. Lijst beschikbare templatescurl https://app.monsys.ai/api/v1/reports/templates \ -H "Authorization: Bearer $TOKEN"
# 2. Genereer een per-app rapport (async)curl -X POST https://app.monsys.ai/api/v1/reports/generate \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "template_kind": "per_application", "title": "Q1 2026 review — checkout-api", "range_start": "2026-01-01", "range_end": "2026-03-31", "scope_filter": {"app_id": "<uuid>"} }'# returnt: {"id":"<report-id>","status":"generating"}
# 3. Poll statuscurl https://app.monsys.ai/api/v1/reports/<id> \ -H "Authorization: Bearer $TOKEN"
# 4. Download wanneer status=readycurl -L https://app.monsys.ai/api/v1/reports/<id>/download?format=pdf \ -H "Authorization: Bearer $TOKEN" -o report.pdfcurl -L https://app.monsys.ai/api/v1/reports/<id>/download?format=sig \ -H "Authorization: Bearer $TOKEN" -o report.sigMaandelijkse Audit Pack vs Report Builder
| Aspect | Monthly Audit Pack | Report Builder |
|---|---|---|
| Trigger | Auto, 1e van maand 02:00 UTC | Operator klikt “Genereer” |
| Scope | Volledige tenant | Tenant / group / app / tag / agents / actor |
| Periode | Vorige kalendermaand | Custom (max 365 dagen) |
| Templates | 1 (full audit) | 5 |
| Charts | Nee | Ja (Trust Score trend) |
| Doelgroep | NIS2-auditor jaarlijks/kwartaalrapport | Ad-hoc CISO briefing / per-app review / MSP cliënt-handover |
Geen vervanging — aanvulling. De maandelijkse pack blijft de “compliance-baseline”; de Report Builder is voor de momenten dat je géén kalendermaand-rapport wil maar een specifieke vraag wil beantwoorden met audit-grade evidence.
Wat NIET op deze pagina hoort
- Monthly Audit Pack (auto-gegenereerd) → zie Monthly Audit Pack
- Transparency log (signed log van élke EAT) → zie Transparency log
- Auditor workbench (read-only login voor externe auditor) → zie Auditor