PBS Reports
A dedicated reports tab on every PBS server (Issue #273). Designed around the audit reality that "we have backups, look at the dashboard" doesn't satisfy ISO 27001 / CMMC / SOC2 reviewers - they want a file with timestamps, sizes and locations.
Report Types
Executive Summary
High-level pie chart + counts of success / warning / failure jobs across last 24 h, 7 d, 30 d. PDF cover page material.
Workload Protection History
Per-VM rollup over a configurable window. Last backup date, status, size, duration, retention age, datastore. Names instead of just VMIDs.
Protected / Unprotected VMs
Cross-references PBS task logs with the cluster's VM list. Highlights VMs that have never been backed up - the "gap analysis" auditors love.
Backup Inventory
Master list of all backup files: VMID, name, location (Primary / Remote / Sync), retention age, size on disk after dedup. Useful for capacity planning and audit responses.
Immutable Workload Report
Lists snapshots flagged as "protected" (PBS protection flag). CMMC + ransomware-protection-aware audit field.
Verification Report
Per-chunk verification status - when each backup was last integrity-checked. Maps to SOC2 "data integrity" controls.
Export Formats
- PDF via jsPDF + jspdf-autotable - branded cover page, table of contents, framework banner if generated from the Compliance Dashboard.
- PNG via
html2canvasfor screenshots / Slack-friendly summaries. - CSV for the raw inventory table - drop into Excel / a GRC tool.
Time Ranges
Default windows: 24h, 7d, 30d, 90d. Custom range pickable. Reports always include the generated_at timestamp + the operator who ran them in the footer (audit trail).
API Endpoints
All require the pbs.view permission. PDF/PNG export is rendered client-side.
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/pbs/{id}/reports/summary |
Executive summary + per-VM rollup + per-day chart (days param, default 30, max 365) |
GET |
/api/pbs/{id}/reports/inventory |
Flat snapshot inventory across all datastores/namespaces (days, protected params) |
GET |
/api/pbs/{id}/reports/protected-vms |
Protected / stale / unprotected gap analysis (cluster_id required, days default 7) |