aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/moncheck/main.go18
-rw-r--r--schema/20181210.sql16
2 files changed, 20 insertions, 14 deletions
diff --git a/cmd/moncheck/main.go b/cmd/moncheck/main.go
index bea8e77..e292637 100644
--- a/cmd/moncheck/main.go
+++ b/cmd/moncheck/main.go
@@ -81,7 +81,7 @@ func check(thread int, db *sql.DB, waitDuration, timeout time.Duration) {
log.Printf("[%d] could not start transaction: %s", thread, err)
continue
}
- rows, err := tx.Query(`select check_id, cmdLine, states, notify, mapping_id
+ rows, err := tx.Query(`select check_id, cmdLine, states, mapping_id
from active_checks
where next_time < now()
and enabled
@@ -97,7 +97,6 @@ func check(thread int, db *sql.DB, waitDuration, timeout time.Duration) {
id int64
cmdLine []string
states States
- notify bool
mapId int
state int
)
@@ -108,7 +107,7 @@ func check(thread int, db *sql.DB, waitDuration, timeout time.Duration) {
tx.Rollback()
break
}
- err := rows.Scan(&id, pq.Array(&cmdLine), &states, &notify, &mapId)
+ err := rows.Scan(&id, pq.Array(&cmdLine), &states, &mapId)
if err != nil {
log.Printf("could not scan values: %s", err)
tx.Rollback()
@@ -166,12 +165,13 @@ where check_id = $1`, id, &states, &msg, states.ToOK()); err != nil {
tx.Rollback()
continue
}
- if notify {
- if _, err := tx.Exec("insert into notifications(check_id, states, output, mapping_id) values ($1, $2, $3, $4);", &id, &states, &msg, &mapId); err != nil {
- log.Printf("[%d] could not create notification for '%d': %s", thread, id, err)
- tx.Rollback()
- continue
- }
+ if _, err := tx.Exec(`insert into notifications(check_id, states, output, mapping_id, notifier_id)
+ select $1, $2, $3, $4, cn.notifier_id
+ from checks_notify cn
+ where cn.check_id = $1`, &id, &states, &msg, &mapId); err != nil {
+ log.Printf("[%d] could not create notification for '%d': %s", thread, id, err)
+ tx.Rollback()
+ continue
}
tx.Commit()
}
diff --git a/schema/20181210.sql b/schema/20181210.sql
index e6be91d..c807863 100644
--- a/schema/20181210.sql
+++ b/schema/20181210.sql
@@ -15,7 +15,8 @@ create table public.mapping_level(
CREATE TABLE public.notifier (
id serial NOT NULL primary key,
- name text NOT NULL
+ name text NOT NULL,
+ settings jsonb not null '{}'::jsonb,
);
CREATE TABLE public.groups (
@@ -57,8 +58,6 @@ CREATE TABLE public.checks (
updated timestamp with time zone DEFAULT now() NOT NULL,
last_refresh timestamp with time zone,
enabled boolean DEFAULT true NOT NULL,
- notifier_id integer NOT NULL,
- notify boolean DEFAULT true NOT NULL,
message text NOT NULL,
unique(node_id, command_id, options)
);
@@ -71,20 +70,27 @@ CREATE TABLE public.active_checks (
states integer[] DEFAULT ARRAY[0] NOT NULL,
intval interval NOT NULL,
enabled boolean NOT NULL,
- notify boolean NOT NULL,
notice text,
msg text NOT NULL,
acknowledged boolean DEFAULT false NOT NULL
);
+create table checks_notify(
+ check_id bigint not null references checks(id),
+ notifier_id bigint not null references notifier(id),
+ enabled bool not null default true,
+ unique(check_id, notifier_id)
+);
+
CREATE TABLE public.notifications (
id bigserial NOT NULL primary key,
check_id bigint NOT NULL references checks(id) on delete cascade,
+ mapping_id integer not null references mappings(id),
+ notifier_id integer not null references notifier(id),
states integer[] NOT NULL,
output text,
inserted timestamp with time zone DEFAULT now() NOT NULL,
sent timestamp with time zone,
- mapping_id integer not null references mappings(id),
);