diff --git a/migrate_qualys_vuln_dashboard.sql b/migrate_qualys_vuln_dashboard.sql new file mode 100644 index 0000000..1727286 --- /dev/null +++ b/migrate_qualys_vuln_dashboard.sql @@ -0,0 +1,35 @@ +-- Migration : tables dashboard vulnérabilités Qualys +-- Aligné sur le DDL prod (PG 15.16) — idempotent +-- Référencé par : app/services/qualys_service.py (compute_vuln_dashboard, load_vuln_dashboard) + +CREATE TABLE IF NOT EXISTS qualys_vuln_snapshot_run ( + id SERIAL PRIMARY KEY, + run_at TIMESTAMPTZ NOT NULL DEFAULT now(), + status VARCHAR(20) NOT NULL DEFAULT 'pending', + asset_count INTEGER NOT NULL DEFAULT 0, + duration_sec INTEGER NOT NULL DEFAULT 0, + msg TEXT, + triggered_by VARCHAR(50) +); + +CREATE INDEX IF NOT EXISTS idx_vuln_run_at + ON qualys_vuln_snapshot_run (run_at DESC); + +CREATE TABLE IF NOT EXISTS qualys_vuln_snapshot ( + id SERIAL PRIMARY KEY, + run_id INTEGER NOT NULL REFERENCES qualys_vuln_snapshot_run(id) ON DELETE CASCADE, + dimension VARCHAR(20) NOT NULL, + dimension_value VARCHAR(100), + dimension_value2 VARCHAR(100), + total INTEGER NOT NULL DEFAULT 0, + critical INTEGER NOT NULL DEFAULT 0, + high INTEGER NOT NULL DEFAULT 0, + medium INTEGER NOT NULL DEFAULT 0, + sain INTEGER NOT NULL DEFAULT 0, + non_scanne INTEGER NOT NULL DEFAULT 0 +); + +CREATE INDEX IF NOT EXISTS idx_vuln_snap_run_dim + ON qualys_vuln_snapshot (run_id, dimension); +CREATE INDEX IF NOT EXISTS idx_vuln_snap_dim_val + ON qualys_vuln_snapshot (dimension, dimension_value);