Compliance & Reports
Compliance & Reports gives you a one-screen view of your system’s compliance posture: camera health KPIs, a local §889 / security self-check, per-camera recording coverage, and the camera-access audit log — with a CSV export for your records. You’ll find it under Governance → Compliance & Reports in the sidebar.
[!NOTE] Viewing this tab requires the
compliance.viewpermission. Exporting the CSV is superuser-only — the export endpoint is restricted to admins.

What you can do here
- Read the KPI cards — camera and storage health at a glance.
- Run the Security & §889 Compliance self-check against your camera inventory (local, nothing leaves the box).
- Review Recording Coverage per camera per day.
- Review the Access Audit Log of recent camera-access actions.
- Refresh the data or Export CSV of the coverage report.
Use the two buttons top-right: Refresh (re-pulls all data) and Export CSV.
KPI cards
The card row summarises your estate. Each card is one metric:
| Card | What it shows |
|---|---|
| Total Cameras | Active cameras in the system |
| Online Cameras | Cameras currently streaming data |
| Degraded | Cameras in a degraded state |
| Offline | Cameras not streaming |
| Recording Enabled | Cameras with recording turned on |
| Retention Days | Configured retention policy |
| Storage (GB) | Total recording storage used |
| Total Recordings | Recording sessions counted |
Security & §889 Compliance self-check
Below the header is the Security & §889 Compliance panel — an “Instant self-check · not an official §889 attestation.” It’s computed locally from the cameras OpenNVR already manages (no scanning, nothing leaves the box) and surfaces obvious covered-vendor and configuration risks.
A status badge summarises the posture:
- No issues found — nothing flagged.
- Needs attention — configuration risks present.
- Covered vendor found — NDAA §889 covered-vendor cameras (e.g. Hikvision/Dahua and affiliate brands) detected.
Four stat tiles count the risk categories: Covered-vendor, Internet-exposed, Plaintext stream, and Default username.
Below the tiles, each flagged camera is listed with its name, IP, and manufacturer/model, plus one or more severity badges:
| Severity | Badge style | Meaning |
|---|---|---|
| high | red | Covered-vendor / high-risk |
| medium | yellow | Needs attention |
| low | neutral | Minor / informational |
When nothing is flagged you’ll see “No covered-vendor or high-risk cameras found in your inventory.”
[!NOTE] This self-check is explicitly not an official §889 attestation. The panel points to the full OpenNVR §889 Security Assessment (a hands-on engagement with a signed, audit-ready report) for that.
Recording Coverage
The Recording Coverage card shows a table of per-camera, per-day recording activity for the selected window. Columns: Camera, Date, Recordings, and Duration (hrs) (badged green/yellow/red by hours covered).
- Use the Days dropdown to choose the window: 7, 14, 30, 60, or 90.
- Only the first 50 rows are shown; a note reports the total when there are more.
Access Audit Log
The Access Audit Log card lists recent camera-access actions (view, stream, playback, provision, create/update/delete). Columns: Timestamp, User, Action, Entity, and IP Address. The action badge is colour-coded (create → green, update → yellow, delete → red).
- Use the Days dropdown to choose the look-back window: 1, 7, 14, or 30.
[!TIP] This is a camera-access view. For the full governance record of every user action, see Audit Logs.
Export a report
Click Export CSV (top-right, superuser-only). OpenNVR generates a coverage report for the currently selected Days window and downloads it as compliance_report_<date>.csv.
The CSV contains one row per camera per day with these columns: Camera ID, Camera Name, Location, Date, Recording Count, Total Duration (hours).
[!NOTE] There is a single report format — the recording-coverage CSV. There’s no report-type picker; the Days dropdown is what scopes the export.
📸 Screenshots to capture
Capture these from the running app and save them to opennvr-site/public/screenshots/ with the exact filenames below:
compliance-overview.png— the top of the page: the KPI card row plus the Security & §889 self-check panel with at least one flagged camera and its severity badges.compliance-coverage-table.png— the Recording Coverage card with data and the Days dropdown visible.compliance-access-audit.png— the Access Audit Log card with a few colour-coded action rows.