Files
ITWorx-Pulse-Public/internal/database/migrations/0016_agent_snapshots.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

18 lines
1.2 KiB
SQL

-- pulse-agent writes the newest bounded telemetry snapshot per capability here and
-- pulse-api reads it. There is exactly one row per (agent, capability): history lives in
-- Prometheus, not in this table, so the transport cannot grow without bound.
CREATE TABLE agent_snapshots (
agent_id text NOT NULL CHECK (char_length(agent_id) BETWEEN 1 AND 128),
capability text NOT NULL CHECK (capability IN ('host', 'processes', 'containers', 'array', 'disks', 'pools', 'shares')),
observed_at timestamptz NOT NULL,
received_at timestamptz NOT NULL DEFAULT now(),
-- The authoritative size bound is enforced by the writer against the encoded payload
-- (agentstore.MaxPayloadBytes). This check is a storage backstop against a writer that
-- bypasses the store; pg_column_size reports the stored, possibly compressed size.
payload jsonb NOT NULL CHECK (jsonb_typeof(payload) = 'object' AND pg_column_size(payload) <= 2097152),
PRIMARY KEY (agent_id, capability)
);
-- The API reads the newest snapshot for one capability across agents on every request.
CREATE INDEX agent_snapshots_capability_freshness_idx ON agent_snapshots (capability, observed_at DESC);