diff --git a/docker/initsql_for_postgres/a-n9e-for-Postgres.sql b/docker/initsql_for_postgres/a-n9e-for-Postgres.sql new file mode 100644 index 00000000..bda54179 --- /dev/null +++ b/docker/initsql_for_postgres/a-n9e-for-Postgres.sql @@ -0,0 +1,546 @@ +-- n9e version 5.8 for postgres +CREATE TABLE users ( + id bigserial, + username varchar(64) not null , + nickname varchar(64) not null , + password varchar(128) not null default '', + phone varchar(16) not null default '', + email varchar(64) not null default '', + portrait varchar(255) not null default '' , + roles varchar(255) not null , + contacts varchar(1024) , + create_at bigint not null default 0, + create_by varchar(64) not null default '', + update_at bigint not null default 0, + update_by varchar(64) not null default '' +) ; +ALTER TABLE users ADD CONSTRAINT users_pk PRIMARY KEY (id); +ALTER TABLE users ADD CONSTRAINT users_un UNIQUE (username); + +COMMENT ON COLUMN users.username IS 'login name, cannot rename'; +COMMENT ON COLUMN users.nickname IS 'display name, chinese name'; +COMMENT ON COLUMN users.portrait IS 'portrait image url'; +COMMENT ON COLUMN users.roles IS 'Admin | Standard | Guest, split by space'; +COMMENT ON COLUMN users.contacts IS 'json e.g. {wecom:xx, dingtalk_robot_token:yy}'; + +insert into users(id, username, nickname, password, roles, create_at, create_by, update_at, update_by) values(1, 'root', '超管', 'root.2020', 'Admin', date_part('epoch',current_timestamp)::int, 'system', date_part('epoch',current_timestamp)::int, 'system'); + + +CREATE TABLE user_group ( + id bigserial, + name varchar(128) not null default '', + note varchar(255) not null default '', + create_at bigint not null default 0, + create_by varchar(64) not null default '', + update_at bigint not null default 0, + update_by varchar(64) not null default '' +) ; +ALTER TABLE user_group ADD CONSTRAINT user_group_pk PRIMARY KEY (id); +CREATE INDEX user_group_create_by_idx ON user_group (create_by); +CREATE INDEX user_group_update_at_idx ON user_group (update_at); + +insert into user_group(id, name, create_at, create_by, update_at, update_by) values(1, 'demo-root-group', date_part('epoch',current_timestamp)::int, 'root', date_part('epoch',current_timestamp)::int, 'root'); + +CREATE TABLE user_group_member ( + group_id bigint not null, + user_id bigint not null +) ; +CREATE INDEX user_group_member_group_id_idx ON user_group_member (group_id); +CREATE INDEX user_group_member_user_id_idx ON user_group_member (user_id); + +insert into user_group_member(group_id, user_id) values(1, 1); + +CREATE TABLE configs ( + id bigserial, + ckey varchar(191) not null, + cval varchar(1024) not null default '' +) ; +ALTER TABLE configs ADD CONSTRAINT configs_pk PRIMARY KEY (id); +ALTER TABLE configs ADD CONSTRAINT configs_un UNIQUE (ckey); + +CREATE TABLE role ( + id bigserial, + name varchar(191) not null default '', + note varchar(255) not null default '' +) ; +ALTER TABLE role ADD CONSTRAINT role_pk PRIMARY KEY (id); +ALTER TABLE role ADD CONSTRAINT role_un UNIQUE ("name"); + +insert into role(name, note) values('Admin', 'Administrator role'); +insert into role(name, note) values('Standard', 'Ordinary user role'); +insert into role(name, note) values('Guest', 'Readonly user role'); + +CREATE TABLE role_operation( + role_name varchar(128) not null, + operation varchar(191) not null +) ; +CREATE INDEX role_operation_role_name_idx ON role_operation (role_name); +CREATE INDEX role_operation_operation_idx ON role_operation (operation); + + +-- Admin is special, who has no concrete operation but can do anything. +insert into role_operation(role_name, operation) values('Guest', '/metric/explorer'); +insert into role_operation(role_name, operation) values('Guest', '/object/explorer'); +insert into role_operation(role_name, operation) values('Guest', '/help/version'); +insert into role_operation(role_name, operation) values('Guest', '/help/contact'); +insert into role_operation(role_name, operation) values('Standard', '/metric/explorer'); +insert into role_operation(role_name, operation) values('Standard', '/object/explorer'); +insert into role_operation(role_name, operation) values('Standard', '/help/version'); +insert into role_operation(role_name, operation) values('Standard', '/help/contact'); +insert into role_operation(role_name, operation) values('Standard', '/users'); +insert into role_operation(role_name, operation) values('Standard', '/user-groups'); +insert into role_operation(role_name, operation) values('Standard', '/user-groups/add'); +insert into role_operation(role_name, operation) values('Standard', '/user-groups/put'); +insert into role_operation(role_name, operation) values('Standard', '/user-groups/del'); +insert into role_operation(role_name, operation) values('Standard', '/busi-groups'); +insert into role_operation(role_name, operation) values('Standard', '/busi-groups/add'); +insert into role_operation(role_name, operation) values('Standard', '/busi-groups/put'); +insert into role_operation(role_name, operation) values('Standard', '/busi-groups/del'); +insert into role_operation(role_name, operation) values('Standard', '/targets'); +insert into role_operation(role_name, operation) values('Standard', '/targets/add'); +insert into role_operation(role_name, operation) values('Standard', '/targets/put'); +insert into role_operation(role_name, operation) values('Standard', '/targets/del'); +insert into role_operation(role_name, operation) values('Standard', '/dashboards'); +insert into role_operation(role_name, operation) values('Standard', '/dashboards/add'); +insert into role_operation(role_name, operation) values('Standard', '/dashboards/put'); +insert into role_operation(role_name, operation) values('Standard', '/dashboards/del'); +insert into role_operation(role_name, operation) values('Standard', '/alert-rules'); +insert into role_operation(role_name, operation) values('Standard', '/alert-rules/add'); +insert into role_operation(role_name, operation) values('Standard', '/alert-rules/put'); +insert into role_operation(role_name, operation) values('Standard', '/alert-rules/del'); +insert into role_operation(role_name, operation) values('Standard', '/alert-mutes'); +insert into role_operation(role_name, operation) values('Standard', '/alert-mutes/add'); +insert into role_operation(role_name, operation) values('Standard', '/alert-mutes/del'); +insert into role_operation(role_name, operation) values('Standard', '/alert-subscribes'); +insert into role_operation(role_name, operation) values('Standard', '/alert-subscribes/add'); +insert into role_operation(role_name, operation) values('Standard', '/alert-subscribes/put'); +insert into role_operation(role_name, operation) values('Standard', '/alert-subscribes/del'); +insert into role_operation(role_name, operation) values('Standard', '/alert-cur-events'); +insert into role_operation(role_name, operation) values('Standard', '/alert-cur-events/del'); +insert into role_operation(role_name, operation) values('Standard', '/alert-his-events'); +insert into role_operation(role_name, operation) values('Standard', '/job-tpls'); +insert into role_operation(role_name, operation) values('Standard', '/job-tpls/add'); +insert into role_operation(role_name, operation) values('Standard', '/job-tpls/put'); +insert into role_operation(role_name, operation) values('Standard', '/job-tpls/del'); +insert into role_operation(role_name, operation) values('Standard', '/job-tasks'); +insert into role_operation(role_name, operation) values('Standard', '/job-tasks/add'); +insert into role_operation(role_name, operation) values('Standard', '/job-tasks/put'); + + +-- for alert_rule | collect_rule | mute | dashboard grouping +CREATE TABLE busi_group ( + id bigserial, + name varchar(191) not null, + label_enable smallint not null default 0, + label_value varchar(191) not null default '' , + create_at bigint not null default 0, + create_by varchar(64) not null default '', + update_at bigint not null default 0, + update_by varchar(64) not null default '' +) ; +ALTER TABLE busi_group ADD CONSTRAINT busi_group_pk PRIMARY KEY (id); +ALTER TABLE busi_group ADD CONSTRAINT busi_group_un UNIQUE ("name"); +COMMENT ON COLUMN busi_group.label_value IS 'if label_enable: label_value can not be blank'; + +insert into busi_group(id, name, create_at, create_by, update_at, update_by) values(1, 'Default Busi Group', date_part('epoch',current_timestamp)::int, 'root', date_part('epoch',current_timestamp)::int, 'root'); + +CREATE TABLE busi_group_member ( + id bigserial, + busi_group_id bigint not null , + user_group_id bigint not null , + perm_flag char(2) not null +) ; +ALTER TABLE busi_group_member ADD CONSTRAINT busi_group_member_pk PRIMARY KEY (id); +CREATE INDEX busi_group_member_busi_group_id_idx ON busi_group_member (busi_group_id); +CREATE INDEX busi_group_member_user_group_id_idx ON busi_group_member (user_group_id); +COMMENT ON COLUMN busi_group_member.busi_group_id IS 'busi group id'; +COMMENT ON COLUMN busi_group_member.user_group_id IS 'user group id'; +COMMENT ON COLUMN busi_group_member.perm_flag IS 'ro | rw'; + +insert into busi_group_member(busi_group_id, user_group_id, perm_flag) values(1, 1, 'rw'); + +-- for dashboard new version +CREATE TABLE board ( + id bigserial not null , + group_id bigint not null default 0 , + name varchar(191) not null, + tags varchar(255) not null , + create_at bigint not null default 0, + create_by varchar(64) not null default '', + update_at bigint not null default 0, + update_by varchar(64) not null default '' +) ; +ALTER TABLE board ADD CONSTRAINT board_pk PRIMARY KEY (id); +ALTER TABLE board ADD CONSTRAINT board_un UNIQUE (group_id,"name"); +COMMENT ON COLUMN board.group_id IS 'busi group id'; +COMMENT ON COLUMN board.tags IS 'split by space'; + +-- for dashboard new version +CREATE TABLE board_payload ( + id bigint not null , + payload text not null +); +ALTER TABLE board_payload ADD CONSTRAINT board_payload_un UNIQUE (id); +COMMENT ON COLUMN board_payload.id IS 'dashboard id'; + +-- deprecated +CREATE TABLE dashboard ( + id bigserial, + group_id bigint not null default 0 , + name varchar(191) not null, + tags varchar(255) not null , + configs varchar(8192) , + create_at bigint not null default 0, + create_by varchar(64) not null default '', + update_at bigint not null default 0, + update_by varchar(64) not null default '' +) ; +ALTER TABLE dashboard ADD CONSTRAINT dashboard_pk PRIMARY KEY (id); + +-- deprecated +-- auto create the first subclass 'Default chart group' of dashboard +CREATE TABLE chart_group ( + id bigserial, + dashboard_id bigint not null, + name varchar(255) not null, + weight int not null default 0 +) ; +ALTER TABLE chart_group ADD CONSTRAINT chart_group_pk PRIMARY KEY (id); + +-- deprecated +CREATE TABLE chart ( + id bigserial, + group_id bigint not null , + configs text, + weight int not null default 0 +) ; +ALTER TABLE chart ADD CONSTRAINT chart_pk PRIMARY KEY (id); + +CREATE TABLE chart_share ( + id bigserial, + cluster varchar(128) not null, + configs text, + create_at bigint not null default 0, + create_by varchar(64) not null default '' +) ; +ALTER TABLE chart_share ADD CONSTRAINT chart_share_pk PRIMARY KEY (id); +CREATE INDEX chart_share_create_at_idx ON chart_share (create_at); + +CREATE TABLE alert_rule ( + id bigserial NOT NULL, + group_id int8 NOT NULL DEFAULT 0, + "cluster" varchar(128) NOT NULL, + "name" varchar(255) NOT NULL, + note varchar(1024) NOT NULL, + severity int2 NOT NULL, + disabled int2 NOT NULL, + prom_for_duration int4 NOT NULL, + prom_ql varchar(8192) NOT NULL, + prom_eval_interval int4 NOT NULL, + enable_stime bpchar(5) NOT NULL DEFAULT '00:00'::bpchar, + enable_etime bpchar(5) NOT NULL DEFAULT '23:59'::bpchar, + enable_days_of_week varchar(32) NOT NULL DEFAULT ''::character varying, + enable_in_bg int2 NOT NULL DEFAULT 0, + notify_recovered int2 NOT NULL, + notify_channels varchar(255) NOT NULL DEFAULT ''::character varying, + notify_groups varchar(255) NOT NULL DEFAULT ''::character varying, + notify_repeat_step int4 NOT NULL DEFAULT 0, + recover_duration int4 NOT NULL DEFAULT 0, + callbacks varchar(255) NOT NULL DEFAULT ''::character varying, + runbook_url varchar(255) NULL, + append_tags varchar(255) NOT NULL DEFAULT ''::character varying, + create_at int8 NOT NULL DEFAULT 0, + create_by varchar(64) NOT NULL DEFAULT ''::character varying, + update_at int8 NOT NULL DEFAULT 0, + update_by varchar(64) NOT NULL DEFAULT ''::character varying, + prod varchar(255) NOT NULL DEFAULT ''::character varying, + algorithm varchar(255) NOT NULL DEFAULT ''::character varying, + algo_params varchar(255) NULL, + delay int4 NOT NULL DEFAULT 0, + CONSTRAINT alert_rule_pk PRIMARY KEY (id) +); +CREATE INDEX alert_rule_group_id_idx ON alert_rule USING btree (group_id); +CREATE INDEX alert_rule_update_at_idx ON alert_rule USING btree (update_at); + +COMMENT ON COLUMN alert_rule.group_id IS 'busi group id'; +COMMENT ON COLUMN alert_rule.severity IS '0:Emergency 1:Warning 2:Notice'; +COMMENT ON COLUMN alert_rule.disabled IS '0:enabled 1:disabled'; +COMMENT ON COLUMN alert_rule.prom_for_duration IS 'prometheus for, unit:s'; +COMMENT ON COLUMN alert_rule.prom_ql IS 'promql'; +COMMENT ON COLUMN alert_rule.prom_eval_interval IS 'evaluate interval'; +COMMENT ON COLUMN alert_rule.enable_stime IS '00:00'; +COMMENT ON COLUMN alert_rule.enable_etime IS '23:59'; +COMMENT ON COLUMN alert_rule.enable_days_of_week IS 'split by space: 0 1 2 3 4 5 6'; +COMMENT ON COLUMN alert_rule.enable_in_bg IS '1: only this bg 0: global'; +COMMENT ON COLUMN alert_rule.notify_recovered IS 'whether notify when recovery'; +COMMENT ON COLUMN alert_rule.notify_channels IS 'split by space: sms voice email dingtalk wecom'; +COMMENT ON COLUMN alert_rule.notify_groups IS 'split by space: 233 43'; +COMMENT ON COLUMN alert_rule.notify_repeat_step IS 'unit: min'; +COMMENT ON COLUMN alert_rule.recover_duration IS 'unit: s'; +COMMENT ON COLUMN alert_rule.callbacks IS 'split by space: http://a.com/api/x http://a.com/api/y'; +COMMENT ON COLUMN alert_rule.append_tags IS 'split by space: service=n9e mod=api'; + +CREATE TABLE alert_mute ( + id bigserial, + group_id bigint not null default 0 , + cluster varchar(128) not null, + tags varchar(4096) not null default '' , + cause varchar(255) not null default '', + btime bigint not null default 0 , + etime bigint not null default 0 , + create_at bigint not null default 0, + create_by varchar(64) not null default '' +) ; +ALTER TABLE alert_mute ADD CONSTRAINT alert_mute_pk PRIMARY KEY (id); +CREATE INDEX alert_mute_create_at_idx ON alert_mute (create_at); +CREATE INDEX alert_mute_group_id_idx ON alert_mute (group_id); +COMMENT ON COLUMN alert_mute.group_id IS 'busi group id'; +COMMENT ON COLUMN alert_mute.tags IS 'json,map,tagkey->regexp|value'; +COMMENT ON COLUMN alert_mute.btime IS 'begin time'; +COMMENT ON COLUMN alert_mute.etime IS 'end time'; + +CREATE TABLE alert_subscribe ( + id bigserial, + group_id bigint not null default 0 , + cluster varchar(128) not null, + rule_id bigint not null default 0, + tags jsonb not null , + redefine_severity smallint default 0 , + new_severity smallint not null , + redefine_channels smallint default 0 , + new_channels varchar(255) not null default '' , + user_group_ids varchar(250) not null , + create_at bigint not null default 0, + create_by varchar(64) not null default '', + update_at bigint not null default 0, + update_by varchar(64) not null default '' +) ; +ALTER TABLE alert_subscribe ADD CONSTRAINT alert_subscribe_pk PRIMARY KEY (id); +CREATE INDEX alert_subscribe_group_id_idx ON alert_subscribe (group_id); +CREATE INDEX alert_subscribe_update_at_idx ON alert_subscribe (update_at); +COMMENT ON COLUMN alert_subscribe.group_id IS 'busi group id'; +COMMENT ON COLUMN alert_subscribe.tags IS 'json,map,tagkey->regexp|value'; +COMMENT ON COLUMN alert_subscribe.redefine_severity IS 'is redefine severity?'; +COMMENT ON COLUMN alert_subscribe.new_severity IS '0:Emergency 1:Warning 2:Notice'; +COMMENT ON COLUMN alert_subscribe.redefine_channels IS 'is redefine channels?'; +COMMENT ON COLUMN alert_subscribe.new_channels IS 'split by space: sms voice email dingtalk wecom'; +COMMENT ON COLUMN alert_subscribe.user_group_ids IS 'split by space 1 34 5, notify cc to user_group_ids'; + + +CREATE TABLE target ( + id bigserial, + group_id bigint not null default 0 , + cluster varchar(128) not null , + ident varchar(191) not null , + note varchar(255) not null default '' , + tags varchar(512) not null default '' , + update_at bigint not null default 0 +) ; +ALTER TABLE target ADD CONSTRAINT target_pk PRIMARY KEY (id); +ALTER TABLE target ADD CONSTRAINT target_un UNIQUE (ident); +CREATE INDEX target_group_id_idx ON target (group_id); + +COMMENT ON COLUMN target.group_id IS 'busi group id'; +COMMENT ON COLUMN target."cluster" IS 'append to alert event as field'; +COMMENT ON COLUMN target.ident IS 'target id'; +COMMENT ON COLUMN target.note IS 'append to alert event as field'; +COMMENT ON COLUMN target.tags IS 'append to series data as tags, split by space, append external space at suffix'; + + +CREATE TABLE metric_view ( + id bigserial, + name varchar(191) not null default '', + cate smallint not null , + configs varchar(8192) not null default '', + create_at bigint not null default 0, + create_by bigint not null default 0 , + update_at bigint not null default 0 +) ; +ALTER TABLE metric_view ADD CONSTRAINT metric_view_pk PRIMARY KEY (id); +CREATE INDEX metric_view_create_by_idx ON metric_view (create_by); + +COMMENT ON COLUMN metric_view.cate IS '0: preset 1: custom'; +COMMENT ON COLUMN metric_view.create_by IS 'user id'; + +insert into metric_view(name, cate, configs) values('Host View', 0, '{"filters":[{"oper":"=","label":"__name__","value":"cpu_usage_idle"}],"dynamicLabels":[],"dimensionLabels":[{"label":"ident","value":""}]}'); + +CREATE TABLE alert_aggr_view ( + id bigserial, + name varchar(191) not null default '', + rule varchar(2048) not null default '', + cate smallint not null , + create_at bigint not null default 0, + create_by bigint not null default 0 , + update_at bigint not null default 0 +) ; +ALTER TABLE alert_aggr_view ADD CONSTRAINT alert_aggr_view_pk PRIMARY KEY (id); +CREATE INDEX alert_aggr_view_create_by_idx ON alert_aggr_view (create_by); + +COMMENT ON COLUMN alert_aggr_view.cate IS '0: preset 1: custom'; +COMMENT ON COLUMN alert_aggr_view.create_by IS 'user id'; + +insert into alert_aggr_view(name, rule, cate) values('By BusiGroup, Severity', 'field:group_name::field:severity', 0); +insert into alert_aggr_view(name, rule, cate) values('By RuleName', 'field:rule_name', 0); + +CREATE TABLE alert_cur_event ( + id bigserial NOT NULL, + "cluster" varchar(128) NOT NULL, + group_id int8 NOT NULL, + group_name varchar(255) NOT NULL DEFAULT ''::character varying, + hash varchar(64) NOT NULL, + rule_id int8 NOT NULL, + rule_name varchar(255) NOT NULL, + rule_note varchar(2048) NOT NULL DEFAULT 'alert rule note'::character varying, + severity int2 NOT NULL, + prom_for_duration int4 NOT NULL, + prom_ql varchar(8192) NOT NULL, + prom_eval_interval int4 NOT NULL, + callbacks varchar(255) NOT NULL DEFAULT ''::character varying, + runbook_url varchar(255) NULL, + notify_recovered int2 NOT NULL, + notify_channels varchar(255) NOT NULL DEFAULT ''::character varying, + notify_groups varchar(255) NOT NULL DEFAULT ''::character varying, + notify_repeat_next int8 NOT NULL DEFAULT 0, + target_ident varchar(191) NOT NULL DEFAULT ''::character varying, + target_note varchar(191) NOT NULL DEFAULT ''::character varying, + trigger_time int8 NOT NULL, + trigger_value varchar(255) NOT NULL, + tags varchar(1024) NOT NULL DEFAULT ''::character varying, + rule_prod varchar(255) NOT NULL DEFAULT ''::character varying, + rule_algo varchar(255) NOT NULL DEFAULT ''::character varying, + CONSTRAINT alert_cur_event_pk PRIMARY KEY (id) +); +CREATE INDEX alert_cur_event_hash_idx ON alert_cur_event USING btree (hash); +CREATE INDEX alert_cur_event_notify_repeat_next_idx ON alert_cur_event USING btree (notify_repeat_next); +CREATE INDEX alert_cur_event_rule_id_idx ON alert_cur_event USING btree (rule_id); +CREATE INDEX alert_cur_event_trigger_time_idx ON alert_cur_event USING btree (trigger_time, group_id); +COMMENT ON COLUMN alert_cur_event.id IS 'use alert_his_event.id'; +COMMENT ON COLUMN alert_cur_event.group_id IS 'busi group id of rule'; +COMMENT ON COLUMN alert_cur_event.group_name IS 'busi group name'; +COMMENT ON COLUMN alert_cur_event.hash IS 'rule_id + vector_pk'; +COMMENT ON COLUMN alert_cur_event.rule_note IS 'alert rule note'; +COMMENT ON COLUMN alert_cur_event.severity IS '1:Emergency 2:Warning 3:Notice'; +COMMENT ON COLUMN alert_cur_event.prom_for_duration IS 'prometheus for, unit:s'; +COMMENT ON COLUMN alert_cur_event.prom_ql IS 'promql'; +COMMENT ON COLUMN alert_cur_event.prom_eval_interval IS 'evaluate interval'; +COMMENT ON COLUMN alert_cur_event.callbacks IS 'split by space: http://a.com/api/x http://a.com/api/y'; +COMMENT ON COLUMN alert_cur_event.notify_recovered IS 'whether notify when recovery'; +COMMENT ON COLUMN alert_cur_event.notify_channels IS 'split by space: sms voice email dingtalk wecom'; +COMMENT ON COLUMN alert_cur_event.notify_groups IS 'split by space: 233 43'; +COMMENT ON COLUMN alert_cur_event.notify_repeat_next IS 'next timestamp to notify, get repeat settings from rule'; +COMMENT ON COLUMN alert_cur_event.target_ident IS 'target ident, also in tags'; +COMMENT ON COLUMN alert_cur_event.target_note IS 'target note'; +COMMENT ON COLUMN alert_cur_event.tags IS 'merge data_tags rule_tags, split by ,,'; + +CREATE TABLE alert_his_event ( + id bigserial NOT NULL, + is_recovered int2 NOT NULL, + "cluster" varchar(128) NOT NULL, + group_id int8 NOT NULL, + group_name varchar(255) NOT NULL DEFAULT ''::character varying, + hash varchar(64) NOT NULL, + rule_id int8 NOT NULL, + rule_name varchar(255) NOT NULL, + rule_note varchar(2048) NOT NULL DEFAULT 'alert rule note'::character varying, + severity int2 NOT NULL, + prom_for_duration int4 NOT NULL, + prom_ql varchar(8192) NOT NULL, + prom_eval_interval int4 NOT NULL, + callbacks varchar(255) NOT NULL DEFAULT ''::character varying, + runbook_url varchar(255) NULL, + notify_recovered int2 NOT NULL, + notify_channels varchar(255) NOT NULL DEFAULT ''::character varying, + notify_groups varchar(255) NOT NULL DEFAULT ''::character varying, + target_ident varchar(191) NOT NULL DEFAULT ''::character varying, + target_note varchar(191) NOT NULL DEFAULT ''::character varying, + trigger_time int8 NOT NULL, + trigger_value varchar(255) NOT NULL, + recover_time int8 NOT NULL DEFAULT 0, + last_eval_time int8 NOT NULL DEFAULT 0, + tags varchar(1024) NOT NULL DEFAULT ''::character varying, + rule_prod varchar(255) NOT NULL DEFAULT ''::character varying, + rule_algo varchar(255) NOT NULL DEFAULT ''::character varying, + CONSTRAINT alert_his_event_pk PRIMARY KEY (id) +); +CREATE INDEX alert_his_event_hash_idx ON alert_his_event USING btree (hash); +CREATE INDEX alert_his_event_rule_id_idx ON alert_his_event USING btree (rule_id); +CREATE INDEX alert_his_event_trigger_time_idx ON alert_his_event USING btree (trigger_time, group_id); + +COMMENT ON COLUMN alert_his_event.group_id IS 'busi group id of rule'; +COMMENT ON COLUMN alert_his_event.group_name IS 'busi group name'; +COMMENT ON COLUMN alert_his_event.hash IS 'rule_id + vector_pk'; +COMMENT ON COLUMN alert_his_event.rule_note IS 'alert rule note'; +COMMENT ON COLUMN alert_his_event.severity IS '0:Emergency 1:Warning 2:Notice'; +COMMENT ON COLUMN alert_his_event.prom_for_duration IS 'prometheus for, unit:s'; +COMMENT ON COLUMN alert_his_event.prom_ql IS 'promql'; +COMMENT ON COLUMN alert_his_event.prom_eval_interval IS 'evaluate interval'; +COMMENT ON COLUMN alert_his_event.callbacks IS 'split by space: http://a.com/api/x http://a.com/api/y'; +COMMENT ON COLUMN alert_his_event.notify_recovered IS 'whether notify when recovery'; +COMMENT ON COLUMN alert_his_event.notify_channels IS 'split by space: sms voice email dingtalk wecom'; +COMMENT ON COLUMN alert_his_event.notify_groups IS 'split by space: 233 43'; +COMMENT ON COLUMN alert_his_event.target_ident IS 'target ident, also in tags'; +COMMENT ON COLUMN alert_his_event.target_note IS 'target note'; +COMMENT ON COLUMN alert_his_event.last_eval_time IS 'for time filter'; +COMMENT ON COLUMN alert_his_event.tags IS 'merge data_tags rule_tags, split by ,,'; + +CREATE TABLE task_tpl +( + id serial, + group_id int not null , + title varchar(255) not null default '', + account varchar(64) not null, + batch int not null default 0, + tolerance int not null default 0, + timeout int not null default 0, + pause varchar(255) not null default '', + script text not null, + args varchar(512) not null default '', + tags varchar(255) not null default '' , + create_at bigint not null default 0, + create_by varchar(64) not null default '', + update_at bigint not null default 0, + update_by varchar(64) not null default '' +) ; +ALTER TABLE task_tpl ADD CONSTRAINT task_tpl_pk PRIMARY KEY (id); +CREATE INDEX task_tpl_group_id_idx ON task_tpl (group_id); + +COMMENT ON COLUMN task_tpl.group_id IS 'busi group id'; +COMMENT ON COLUMN task_tpl.tags IS 'split by space'; + + +CREATE TABLE task_tpl_host +( + ii serial, + id int not null , + host varchar(128) not null +) ; +ALTER TABLE task_tpl_host ADD CONSTRAINT task_tpl_host_pk PRIMARY KEY (id); +CREATE INDEX task_tpl_host_id_idx ON task_tpl_host (id,host); + +COMMENT ON COLUMN task_tpl_host.id IS 'task tpl id'; +COMMENT ON COLUMN task_tpl_host.host IS 'ip or hostname'; + +CREATE TABLE task_record +( + id bigserial, + group_id bigint not null , + ibex_address varchar(128) not null, + ibex_auth_user varchar(128) not null default '', + ibex_auth_pass varchar(128) not null default '', + title varchar(255) not null default '', + account varchar(64) not null, + batch int not null default 0, + tolerance int not null default 0, + timeout int not null default 0, + pause varchar(255) not null default '', + script text not null, + args varchar(512) not null default '', + create_at bigint not null default 0, + create_by varchar(64) not null default '' +) ; +ALTER TABLE task_record ADD CONSTRAINT task_record_pk PRIMARY KEY (id); +CREATE INDEX task_record_create_at_idx ON task_record (create_at,group_id); +CREATE INDEX task_record_create_by_idx ON task_record (create_by); + +COMMENT ON COLUMN task_record.id IS 'ibex task id'; +COMMENT ON COLUMN task_record.group_id IS 'busi group id';