57 lines
2.5 KiB
SQL
57 lines
2.5 KiB
SQL
-- Migration: Worker Table
|
|
-- Description: Creates worker table for tracking worker registration and heartbeat
|
|
-- Version: 20250101000014
|
|
|
|
-- ============================================================================
|
|
-- WORKER TABLE
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE worker (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL UNIQUE,
|
|
worker_type worker_type_enum NOT NULL,
|
|
worker_role worker_role_enum NOT NULL,
|
|
runtime BIGINT REFERENCES runtime(id) ON DELETE SET NULL,
|
|
host TEXT,
|
|
port INTEGER,
|
|
status worker_status_enum NOT NULL DEFAULT 'active',
|
|
capabilities JSONB,
|
|
meta JSONB,
|
|
last_heartbeat TIMESTAMPTZ,
|
|
created TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX idx_worker_name ON worker(name);
|
|
CREATE INDEX idx_worker_type ON worker(worker_type);
|
|
CREATE INDEX idx_worker_role ON worker(worker_role);
|
|
CREATE INDEX idx_worker_runtime ON worker(runtime);
|
|
CREATE INDEX idx_worker_status ON worker(status);
|
|
CREATE INDEX idx_worker_last_heartbeat ON worker(last_heartbeat DESC) WHERE last_heartbeat IS NOT NULL;
|
|
CREATE INDEX idx_worker_created ON worker(created DESC);
|
|
CREATE INDEX idx_worker_status_role ON worker(status, worker_role);
|
|
CREATE INDEX idx_worker_capabilities_gin ON worker USING GIN (capabilities);
|
|
CREATE INDEX idx_worker_meta_gin ON worker USING GIN (meta);
|
|
|
|
-- Trigger
|
|
CREATE TRIGGER update_worker_updated
|
|
BEFORE UPDATE ON worker
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_column();
|
|
|
|
-- Comments
|
|
COMMENT ON TABLE worker IS 'Worker registration and tracking table for action and sensor workers';
|
|
COMMENT ON COLUMN worker.name IS 'Unique worker identifier (typically hostname-based)';
|
|
COMMENT ON COLUMN worker.worker_type IS 'Worker deployment type (local or remote)';
|
|
COMMENT ON COLUMN worker.worker_role IS 'Worker role (action or sensor)';
|
|
COMMENT ON COLUMN worker.runtime IS 'Runtime environment this worker supports (optional)';
|
|
COMMENT ON COLUMN worker.host IS 'Worker host address';
|
|
COMMENT ON COLUMN worker.port IS 'Worker port number';
|
|
COMMENT ON COLUMN worker.status IS 'Worker operational status';
|
|
COMMENT ON COLUMN worker.capabilities IS 'Worker capabilities (e.g., max_concurrent_executions, supported runtimes)';
|
|
COMMENT ON COLUMN worker.meta IS 'Additional worker metadata';
|
|
COMMENT ON COLUMN worker.last_heartbeat IS 'Timestamp of last heartbeat from worker';
|
|
|
|
-- ============================================================================
|