wulf-pulse/migrations/066_create_veeam_rpo_offline_log.sql
lorentz ea3471d38d feat: Veeam RPO analysis, comparison, ticket analysis + company teams table
- Add Veeam RPO analysis page (/veeam-analysis) and comparison page (/veeam-comparison)
- Add API routes: /api/veeam/rpo-analyze, rpo-comparison, rpo-offline-log, ticket-analysis
- Add veeam-rpo-service.ts enhancements (RPO logic, offline detection, comparison)
- Add veeam-analysis-state.ts and rmm-device-resolver.ts services
- Add migrations 065-068: company_teams, veeam_rpo_offline_log, rpo_comparison_tables, veeam_ticket_analysis
- Add backup-status page updates and nav links for new Veeam pages
- Add scripts: deactivate-cis-for-inactive-companies, workstation category updates
- Add docs: mimecast-api-guide, veeam-backup-alerting-recommendation, workstation-backup-overview, ticket-analyzer-prompt
- Minor: webhook-service, entity-sync, entity-mapper, sync-helpers, sync.ts, middleware.ts updates
2026-04-29 09:16:46 -04:00

21 lines
1 KiB
SQL

-- Tracks every RPO check cycle where a workstation job was suppressed
-- because the device was offline (last_seen older than its backup interval).
-- Used for auditing, reporting, and the Claude Code skill.
CREATE TABLE IF NOT EXISTS veeam_rpo_offline_log (
id SERIAL PRIMARY KEY,
job_instance_uid VARCHAR(255) NOT NULL,
job_name TEXT NOT NULL,
org_name TEXT NOT NULL,
rmm_hostname TEXT NOT NULL,
rmm_site_name TEXT NOT NULL,
device_type_category TEXT NOT NULL,
rmm_last_seen TIMESTAMPTZ,
hours_offline NUMERIC(10,2) NOT NULL,
backup_interval_hours INTEGER NOT NULL,
checked_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_veeam_rpo_offline_log_job ON veeam_rpo_offline_log(job_instance_uid);
CREATE INDEX IF NOT EXISTS idx_veeam_rpo_offline_log_checked_at ON veeam_rpo_offline_log(checked_at);
CREATE INDEX IF NOT EXISTS idx_veeam_rpo_offline_log_hostname ON veeam_rpo_offline_log(rmm_hostname);