Files
ITWorx-Pulse-Public/internal/database/migrations/0017_worker_runtime.sql
T
ITWorx Pulse release export bd774932d5
Public source validation / validate (push) Failing after 3m8s
Publish ITWorx Pulse source
2026-09-03 02:09:19 +02:00

39 lines
2.2 KiB
SQL

-- Worker runtime support.
--
-- container_aliases is the durable memory the background discovery job needs to
-- be idempotent across restarts: reconciliation.ReconcileContainers must be able
-- to compare the current runtime snapshot against the previous one to keep a
-- stable entity identity across container recreation, and lifecycle event
-- derivation must compare the previous observed state/health/restart count to
-- decide whether anything actually changed. Both inputs are per runtime alias,
-- not per entity, so they cannot be expressed with entity_aliases (which has no
-- runtime identity or observation columns).
--
-- A runtime alias that stops being observed is tombstoned, never deleted, which
-- is what keeps a temporarily unhealthy source from erasing inventory.
CREATE TABLE container_aliases (
source_id uuid NOT NULL REFERENCES data_sources(id) ON DELETE CASCADE,
runtime_id text NOT NULL CHECK (length(runtime_id) BETWEEN 1 AND 255),
entity_id uuid NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
name text NOT NULL CHECK (length(name) BETWEEN 1 AND 255),
project text NOT NULL DEFAULT '' CHECK (length(project) <= 255),
service text NOT NULL DEFAULT '' CHECK (length(service) <= 255),
image_digest text NOT NULL DEFAULT '' CHECK (length(image_digest) <= 255),
observed_state text NOT NULL DEFAULT '' CHECK (length(observed_state) <= 64),
observed_health text NOT NULL DEFAULT '' CHECK (length(observed_health) <= 64),
restart_count integer NOT NULL DEFAULT 0 CHECK (restart_count >= 0),
intentional_stop boolean NOT NULL DEFAULT false,
first_seen_at timestamptz NOT NULL,
last_seen_at timestamptz NOT NULL,
tombstoned_at timestamptz,
PRIMARY KEY (source_id, runtime_id)
);
CREATE INDEX container_aliases_entity_idx ON container_aliases (entity_id, last_seen_at DESC);
CREATE INDEX container_aliases_active_idx ON container_aliases (source_id, last_seen_at DESC) WHERE tombstoned_at IS NULL;
-- The system status endpoint reports each background job's last outcome by
-- reading the newest job_runs row per job_type. job_runs_status_idx leads with
-- status, so it cannot serve that lookup; this index can.
CREATE INDEX job_runs_recent_idx ON job_runs (job_type, scheduled_at DESC, id ASC);