66 lines
2.6 KiB
SQL
66 lines
2.6 KiB
SQL
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);
|