CREATE TABLE validators ( validator_id TEXT PRIMARY KEY, hostname TEXT NOT NULL DEFAULT '', os_port_id TEXT NOT NULL DEFAULT '', state TEXT NOT NULL DEFAULT 'unregistered', current_ip_id INTEGER REFERENCES ip_queue(id), agent_version TEXT NOT NULL DEFAULT '', last_heartbeat_at TIMESTAMP, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE ip_queue ( id INTEGER PRIMARY KEY AUTOINCREMENT, ip_address TEXT NOT NULL UNIQUE, sequence INTEGER NOT NULL, state TEXT NOT NULL DEFAULT 'queued', owner_validator_id TEXT REFERENCES validators(validator_id), fip_id TEXT NOT NULL DEFAULT '', attempt_number INTEGER NOT NULL DEFAULT 1, retry_count INTEGER NOT NULL DEFAULT 0, lease_expires_at TIMESTAMP, egress_complete BOOLEAN NOT NULL DEFAULT 0, site1_complete BOOLEAN NOT NULL DEFAULT 0, site2_complete BOOLEAN NOT NULL DEFAULT 0, site3_complete BOOLEAN NOT NULL DEFAULT 0, overall_result TEXT NOT NULL DEFAULT '', assigned_at TIMESTAMP, aggregated_at TIMESTAMP, fip_released_at TIMESTAMP, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_ip_queue_state_seq ON ip_queue(state, sequence); CREATE TABLE checks ( id INTEGER PRIMARY KEY AUTOINCREMENT, ip_id INTEGER NOT NULL REFERENCES ip_queue(id), ip_address TEXT NOT NULL, attempt_number INTEGER NOT NULL, validator_id TEXT NOT NULL DEFAULT '', source TEXT NOT NULL, check_type TEXT NOT NULL, target TEXT NOT NULL DEFAULT '', success BOOLEAN NOT NULL, latency_ms INTEGER NOT NULL DEFAULT 0, detail TEXT NOT NULL DEFAULT '', checked_at TIMESTAMP NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE(ip_id, attempt_number, source, check_type, target) ); CREATE INDEX idx_checks_ip_attempt ON checks(ip_id, attempt_number); CREATE TABLE events ( id INTEGER PRIMARY KEY AUTOINCREMENT, source_type TEXT NOT NULL, source_id TEXT NOT NULL DEFAULT '', ip_id INTEGER REFERENCES ip_queue(id), event_type TEXT NOT NULL, payload TEXT NOT NULL DEFAULT '', occurred_at TIMESTAMP NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_events_ip ON events(ip_id); CREATE INDEX idx_events_source ON events(source_type, source_id);