Some checks failed
CD Pipeline / tests (push) Successful in 1m59s
Code Review / ai-code-review (push) Successful in 28s
run-migration / migrate (push) Failing after 24s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
78 lines
2.7 KiB
SQL
78 lines
2.7 KiB
SQL
-- ADR-105 MCP audit and snapshot foundation
|
|
-- 2026-05-01
|
|
-- Notes:
|
|
-- AWOOOI incident ids are string values such as INC-20260429-xxxx, not UUIDs.
|
|
-- Keep incident_id as VARCHAR(64) so MCP audit can join existing incident records.
|
|
|
|
CREATE TABLE IF NOT EXISTS mcp_audit_log (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
session_id VARCHAR(36) NOT NULL,
|
|
flywheel_node VARCHAR(20),
|
|
mcp_server VARCHAR(80) NOT NULL,
|
|
tool_name VARCHAR(120) NOT NULL,
|
|
input_params JSONB,
|
|
output_result JSONB,
|
|
duration_ms INTEGER,
|
|
success BOOLEAN,
|
|
error_message TEXT,
|
|
incident_id VARCHAR(64),
|
|
agent_role VARCHAR(40),
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
ALTER TABLE mcp_audit_log
|
|
ADD COLUMN IF NOT EXISTS agent_role VARCHAR(40);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_mcp_audit_session
|
|
ON mcp_audit_log(session_id);
|
|
CREATE INDEX IF NOT EXISTS idx_mcp_audit_incident
|
|
ON mcp_audit_log(incident_id);
|
|
CREATE INDEX IF NOT EXISTS idx_mcp_audit_node
|
|
ON mcp_audit_log(flywheel_node, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_mcp_audit_server_tool
|
|
ON mcp_audit_log(mcp_server, tool_name, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_mcp_audit_agent_role
|
|
ON mcp_audit_log(agent_role, created_at DESC);
|
|
|
|
CREATE TABLE IF NOT EXISTS mcp_daily_stats (
|
|
date DATE NOT NULL,
|
|
mcp_server VARCHAR(80) NOT NULL,
|
|
tool_name VARCHAR(120) NOT NULL,
|
|
call_count INTEGER DEFAULT 0 NOT NULL,
|
|
success_count INTEGER DEFAULT 0 NOT NULL,
|
|
avg_duration_ms FLOAT,
|
|
PRIMARY KEY (date, mcp_server, tool_name)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS k8s_state_snapshots (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
incident_id VARCHAR(64),
|
|
snapshot_type VARCHAR(40) NOT NULL,
|
|
namespace VARCHAR(63),
|
|
resource_type VARCHAR(80),
|
|
resource_name VARCHAR(253),
|
|
state_json JSONB,
|
|
captured_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_k8s_snapshot_incident
|
|
ON k8s_state_snapshots(incident_id);
|
|
CREATE INDEX IF NOT EXISTS idx_k8s_snapshot_resource
|
|
ON k8s_state_snapshots(namespace, resource_type, resource_name);
|
|
CREATE INDEX IF NOT EXISTS idx_k8s_snapshot_captured
|
|
ON k8s_state_snapshots(captured_at DESC);
|
|
|
|
CREATE TABLE IF NOT EXISTS prometheus_snapshots (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
incident_id VARCHAR(64),
|
|
query TEXT NOT NULL,
|
|
result_json JSONB,
|
|
snapshot_type VARCHAR(40),
|
|
captured_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_prom_snapshot_incident
|
|
ON prometheus_snapshots(incident_id);
|
|
CREATE INDEX IF NOT EXISTS idx_prom_snapshot_type
|
|
ON prometheus_snapshots(snapshot_type, captured_at DESC);
|