Skip to content

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 html2canvas for 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)