core/observability-core/migrations/000001_init_schema.up.sql
Tiago Yamamoto a52bd4519d refactor: optimize Dockerfiles and documentation for core services
- Use Google Distroless images for all services (Go & Node.js).
- Standardize documentation with [PROJECT-NAME].md.
- Add .dockerignore and .gitignore to all projects.
- Remove docker-compose.yml in favor of docker run instructions.
- Fix Go version and dependency issues in observability, repo-integrations, and security-governance.
- Add Podman support (fully qualified image names).
- Update Dashboard to use Node.js static server for Distroless compatibility.
2025-12-30 13:22:34 -03:00

80 lines
2.6 KiB
SQL

-- +migrate Up
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS timescaledb;
CREATE TYPE target_type AS ENUM ('service', 'infra');
CREATE TYPE check_type AS ENUM ('http', 'ping', 'tcp');
CREATE TYPE incident_status AS ENUM ('open', 'acknowledged', 'resolved');
CREATE TYPE alert_severity AS ENUM ('info', 'warning', 'critical');
CREATE TABLE targets (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
name VARCHAR(255) NOT NULL,
type target_type NOT NULL,
config JSONB NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE checks (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
target_id UUID NOT NULL REFERENCES targets(id) ON DELETE CASCADE,
type check_type NOT NULL,
interval_seconds INTEGER NOT NULL,
timeout_seconds INTEGER NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE metrics (
time TIMESTAMPTZ NOT NULL,
check_id UUID NOT NULL REFERENCES checks(id) ON DELETE CASCADE,
value DOUBLE PRECISION NOT NULL,
tags JSONB
);
-- Create a hypertable for metrics
SELECT create_hypertable('metrics', 'time');
CREATE TABLE alert_rules (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
check_id UUID NOT NULL REFERENCES checks(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
threshold DOUBLE PRECISION NOT NULL,
-- e.g., '>', '<', '='
operator VARCHAR(10) NOT NULL,
-- in seconds
for_duration BIGINT NOT NULL,
severity alert_severity NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE incidents (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
alert_rule_id UUID NOT NULL REFERENCES alert_rules(id) ON DELETE CASCADE,
status incident_status NOT NULL,
start_time TIMESTAMPTZ NOT NULL,
end_time TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Indexes
CREATE INDEX ON checks (target_id);
CREATE INDEX ON metrics (check_id, time DESC);
CREATE INDEX ON alert_rules (check_id);
CREATE INDEX ON incidents (alert_rule_id, status);
-- +migrate Down
DROP TABLE IF EXISTS incidents;
DROP TABLE IF EXISTS alert_rules;
DROP TABLE IF EXISTS metrics;
DROP TABLE IF EXISTS checks;
DROP TABLE IF EXISTS targets;
DROP TYPE IF EXISTS incident_status;
DROP TYPE IF EXISTS alert_severity;
DROP TYPE IF EXISTS check_type;
DROP TYPE IF EXISTS target_type;