From a3f1aaea63686aab0a139120fb4d61ebc455a256 Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Mon, 27 Apr 2026 09:19:12 +0000 Subject: [PATCH] migrate: ajout DDL tables qualys_vuln_dashboard (alignement sync SANEF) --- migrate_qualys_vuln_dashboard.sql | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 migrate_qualys_vuln_dashboard.sql 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);