Skip to content

Commit 86af870

Browse files
committed
feat(db): add initial raw check execution schema migrations
1 parent 62f33a5 commit 86af870

File tree

5 files changed

+96
-0
lines changed

5 files changed

+96
-0
lines changed

migrations/.gitkeep

Whitespace-only changes.

migrations/0001_schema.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- +goose Up
2+
CREATE SCHEMA IF NOT EXISTS pulse;
3+
4+
-- +goose Down
5+
DROP SCHEMA IF EXISTS pulse;

migrations/0002_types.sql

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
-- +goose Up
2+
CREATE TYPE pulse.check_status AS ENUM ('success', 'failure');
3+
4+
CREATE TYPE pulse.check_type AS ENUM (
5+
'http',
6+
'tcp',
7+
'grpc',
8+
'tls',
9+
'dns'
10+
);
11+
12+
CREATE TYPE pulse.check_error_kind AS ENUM (
13+
'timeout',
14+
'network',
15+
'protocol',
16+
'constraint',
17+
'internal',
18+
'unknown'
19+
);
20+
21+
-- +goose Down
22+
DROP TYPE IF EXISTS pulse.check_error_kind;
23+
DROP TYPE IF EXISTS pulse.check_type;
24+
DROP TYPE IF EXISTS pulse.check_status;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-- +goose Up
2+
-- +goose StatementBegin
3+
CREATE OR REPLACE FUNCTION pulse.update_prohibited() RETURNS trigger AS
4+
$$
5+
BEGIN
6+
RAISE EXCEPTION 'Update on table %.% is prohibited', TG_TABLE_SCHEMA, TG_TABLE_NAME
7+
USING ERRCODE = 'P1001';
8+
END;
9+
$$ LANGUAGE plpgsql;
10+
11+
CREATE OR REPLACE FUNCTION pulse.delete_prohibited() RETURNS trigger AS
12+
$$
13+
BEGIN
14+
RAISE EXCEPTION 'Delete on table %.% is prohibited', TG_TABLE_SCHEMA, TG_TABLE_NAME
15+
USING ERRCODE = 'P1002';
16+
END;
17+
$$ LANGUAGE plpgsql;
18+
-- +goose StatementEnd
19+
20+
-- +goose Down
21+
DROP FUNCTION pulse.delete_prohibited();
22+
DROP FUNCTION pulse.update_prohibited();
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
-- +goose Up
2+
CREATE TABLE IF NOT EXISTS pulse.check_executions
3+
(
4+
id BIGSERIAL PRIMARY KEY,
5+
execution_id uuid NOT NULL,
6+
check_id TEXT NOT NULL,
7+
service_id TEXT NOT NULL,
8+
status pulse.check_status DEFAULT 'success' NOT NULL,
9+
check_type pulse.check_type NOT NULL,
10+
started_at TIMESTAMPTZ NOT NULL,
11+
finished_at TIMESTAMPTZ NOT NULL,
12+
duration INTERVAL NOT NULL,
13+
attempts_total INTEGER DEFAULT 1 NOT NULL,
14+
error_kind pulse.check_error_kind DEFAULT NULL,
15+
error_message TEXT DEFAULT NULL,
16+
details JSONB DEFAULT NULL,
17+
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL,
18+
19+
CONSTRAINT finished_check CHECK (finished_at >= started_at),
20+
CONSTRAINT attempts_check CHECK (attempts_total >= 1)
21+
);
22+
23+
CREATE UNIQUE INDEX IF NOT EXISTS check_executions_execution_id_uidx ON pulse.check_executions (execution_id);
24+
CREATE INDEX IF NOT EXISTS check_executions_check_id_idx ON pulse.check_executions (check_id);
25+
CREATE INDEX IF NOT EXISTS check_executions_service_id_idx ON pulse.check_executions (service_id);
26+
27+
CREATE TRIGGER check_executions_prohibit_update
28+
BEFORE UPDATE
29+
ON pulse.check_executions
30+
FOR EACH ROW
31+
EXECUTE FUNCTION pulse.update_prohibited();
32+
33+
CREATE TRIGGER check_executions_prohibit_delete
34+
BEFORE DELETE
35+
ON pulse.check_executions
36+
FOR EACH ROW
37+
EXECUTE FUNCTION pulse.delete_prohibited();
38+
39+
-- +goose Down
40+
DROP TRIGGER IF EXISTS check_executions_prohibit_delete ON pulse.check_executions;
41+
DROP TRIGGER IF EXISTS check_executions_prohibit_update ON pulse.check_executions;
42+
DROP INDEX IF EXISTS check_executions_service_id_idx;
43+
DROP INDEX IF EXISTS check_executions_check_id_idx;
44+
DROP INDEX IF EXISTS check_executions_execution_id_uidx;
45+
DROP TABLE IF EXISTS pulse.check_executions;

0 commit comments

Comments
 (0)