feat(coordinator): worker registry, API contract, logging & DB retry
Align the coordinator with the master PLAN.md (CTX-00, CTX-04) and harden process startup. - CTX-00: freeze docs/api-contract.md as the v1 source of truth for the Go coordinator and Python worker. - CTX-04: worker registry — workers table (migration 0002), domain.Worker, RegisterWorker use case, WorkerRepository, and POST /workers/register. - Contract alignment: claim uses `capabilities` (was `workloads`), COORDINATOR_TOKEN env (WORKER_AUTH_TOKEN kept as fallback), and GET /health now reports database readiness (503 when the DB is down). - Logging: logs are teed to stdout and an optional rotated file (LOG_FILE) via lumberjack, so they survive a container rebuild. - Startup resilience: the initial DB connection is retried with backoff, so the coordinator waits for Postgres to boot instead of crash-looping.
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
BEGIN;
|
||||
|
||||
DROP TABLE IF EXISTS workers;
|
||||
DROP TYPE IF EXISTS worker_status;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,20 @@
|
||||
BEGIN;
|
||||
|
||||
CREATE TYPE worker_status AS ENUM ('online','busy','offline');
|
||||
|
||||
-- A registered process/machine that can claim tasks. Registration returns the
|
||||
-- id; liveness is tracked by last_heartbeat_at.
|
||||
CREATE TABLE workers (
|
||||
id uuid PRIMARY KEY,
|
||||
name text NOT NULL DEFAULT '',
|
||||
capabilities jsonb NOT NULL DEFAULT '[]'::jsonb,
|
||||
status worker_status NOT NULL DEFAULT 'online',
|
||||
last_heartbeat_at timestamptz NOT NULL DEFAULT now(),
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Liveness sweep: find workers that have gone quiet.
|
||||
CREATE INDEX ix_workers_liveness ON workers (status, last_heartbeat_at);
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user