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

42 lines
2.1 KiB
SQL

CREATE TABLE alert_rules (
id uuid PRIMARY KEY,
schema_version integer NOT NULL CHECK (schema_version = 1),
name text NOT NULL CHECK (length(name) BETWEEN 1 AND 160),
enabled boolean NOT NULL DEFAULT false,
severity text NOT NULL CHECK (severity IN ('attention', 'degraded', 'critical')),
scope jsonb NOT NULL DEFAULT '{}'::jsonb,
condition jsonb NOT NULL,
evaluation_interval_seconds integer NOT NULL CHECK (evaluation_interval_seconds BETWEEN 5 AND 3600),
pending_seconds integer NOT NULL CHECK (pending_seconds BETWEEN 0 AND 2592000),
resolve_seconds integer NOT NULL CHECK (resolve_seconds BETWEEN 0 AND 2592000),
unknown_behavior text NOT NULL CHECK (unknown_behavior IN ('retain-firing-as-unknown', 'become-unknown', 'ignore-short-gap')),
group_by jsonb NOT NULL DEFAULT '[]'::jsonb,
suppress_when jsonb NOT NULL DEFAULT '[]'::jsonb,
message jsonb NOT NULL,
current_version_id uuid,
revision bigint NOT NULL DEFAULT 1 CHECK (revision > 0),
created_by uuid REFERENCES users(id) ON DELETE SET NULL,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now()
);
CREATE TABLE alert_rule_versions (
id uuid PRIMARY KEY,
rule_id uuid NOT NULL REFERENCES alert_rules(id) ON DELETE RESTRICT,
version_number integer NOT NULL CHECK (version_number > 0),
document jsonb NOT NULL,
change_summary text NOT NULL DEFAULT '' CHECK (length(change_summary) <= 500),
created_by uuid REFERENCES users(id) ON DELETE SET NULL,
created_at timestamptz NOT NULL DEFAULT now(),
UNIQUE (rule_id, version_number)
);
ALTER TABLE alert_rules
ADD CONSTRAINT alert_rules_current_version_fk
FOREIGN KEY (current_version_id) REFERENCES alert_rule_versions(id)
ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX alert_rules_enabled_idx ON alert_rules (enabled, evaluation_interval_seconds, updated_at DESC) WHERE enabled = true;
CREATE INDEX alert_rules_severity_idx ON alert_rules (severity, updated_at DESC);
CREATE INDEX alert_rule_versions_history_idx ON alert_rule_versions (rule_id, version_number DESC);