-- Migration 035: Agent DAGI Audit Fields -- Поля для відстеження активності агентів в DAGI Router -- ============================================================================ -- Додати поля для аудиту -- ============================================================================ -- last_seen_at — останній раз коли агента бачив DAGI Router ALTER TABLE agents ADD COLUMN IF NOT EXISTS last_seen_at timestamptz; -- dagi_status — статус в контексті DAGI Router -- active: агент активний в Router і БД -- stale: агент є в БД, але не відповідає в Router -- phantom: агент є в Router, але немає в БД (не зберігається в БД) -- error: помилка при перевірці ALTER TABLE agents ADD COLUMN IF NOT EXISTS dagi_status text CHECK (dagi_status IS NULL OR dagi_status IN ('active', 'stale', 'error')); -- Індекс для швидкого пошуку по dagi_status CREATE INDEX IF NOT EXISTS idx_agents_dagi_status ON agents(dagi_status) WHERE dagi_status IS NOT NULL; -- Індекс для пошуку агентів що давно не відповідали CREATE INDEX IF NOT EXISTS idx_agents_last_seen ON agents(last_seen_at) WHERE last_seen_at IS NOT NULL; -- ============================================================================ -- Таблиця для зберігання історії аудитів -- ============================================================================ CREATE TABLE IF NOT EXISTS dagi_audit_reports ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), node_id text NOT NULL, timestamp timestamptz NOT NULL DEFAULT now(), -- Summary router_total integer NOT NULL DEFAULT 0, db_total integer NOT NULL DEFAULT 0, active_count integer NOT NULL DEFAULT 0, phantom_count integer NOT NULL DEFAULT 0, stale_count integer NOT NULL DEFAULT 0, -- Детальний звіт (JSON) report_data jsonb, -- Метадані triggered_by text, -- 'cron', 'manual', 'api' created_at timestamptz NOT NULL DEFAULT now() ); -- Індекс по ноді та часу CREATE INDEX IF NOT EXISTS idx_dagi_audit_node_time ON dagi_audit_reports(node_id, timestamp DESC); -- ============================================================================ -- Коментарі -- ============================================================================ COMMENT ON COLUMN agents.last_seen_at IS 'Last time this agent was seen active in DAGI Router'; COMMENT ON COLUMN agents.dagi_status IS 'Current status in DAGI ecosystem: active, stale, error'; COMMENT ON TABLE dagi_audit_reports IS 'History of DAGI agent audit reports per node'; -- ============================================================================ -- Результат -- ============================================================================ SELECT 'Migration 035 completed: DAGI audit fields added' AS result;