From f8c0330e2d15e907dda385ec257b82002e09cdfb Mon Sep 17 00:00:00 2001 From: Yonas Habteab Date: Thu, 19 May 2022 16:27:31 +0200 Subject: [PATCH] schema: Add pgsql support for the new dashboards --- schema/pgsql-upgrades/2.12.0.sql | 85 ++++++++++++++++++++++++++++++ schema/pgsql.schema.sql | 90 ++++++++++++++++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 schema/pgsql-upgrades/2.12.0.sql diff --git a/schema/pgsql-upgrades/2.12.0.sql b/schema/pgsql-upgrades/2.12.0.sql new file mode 100644 index 000000000..527944127 --- /dev/null +++ b/schema/pgsql-upgrades/2.12.0.sql @@ -0,0 +1,85 @@ +CREATE EXTENSION IF NOT EXISTS citext; + +CREATE DOMAIN binary20 AS bytea CONSTRAINT exactly_20_bytes_long CHECK (VALUE IS NULL OR octet_length(VALUE) = 20); +CREATE DOMAIN tinyuint AS smallint CONSTRAINT between_0_and_255 CHECK (VALUE IS NULL OR VALUE BETWEEN 0 AND 255); + +CREATE TYPE boolenum AS ENUM ('n', 'y'); +CREATE TYPE dashboard_type AS ENUM ('public', 'private', 'shared'); + +CREATE TABLE icingaweb_dashboard_owner ( + id serial, + username citext NOT NULL, + PRIMARY KEY (id) +); + +CREATE INDEX idx_dashboard_user_username ON icingaweb_dashboard_owner (username); + +CREATE TABLE icingaweb_dashboard_home ( + id serial, + user_id int NOT NULL REFERENCES icingaweb_dashboard_owner (id), + name character varying(64) NOT NULL, + label character varying(64) NOT NULL, + priority tinyuint NOT NULL, + type dashboard_type DEFAULT 'private', + disabled boolenum DEFAULT 'n', + + PRIMARY KEY (id) +); + +CREATE INDEX idx_dashboard_home ON icingaweb_dashboard_home (user_id); + +CREATE TABLE icingaweb_dashboard ( + id binary20 NOT NULL, + home_id int NOT NULL REFERENCES icingaweb_dashboard_home (id), + name character varying(64) NOT NULL, + label character varying(64) NOT NULL, + priority tinyuint NOT NULL, + + PRIMARY KEY (id) +); + +ALTER TABLE icingaweb_dashboard ALTER COLUMN id SET STORAGE PLAIN; + +CREATE TABLE icingaweb_dashlet ( + id binary20 NOT NULL, + dashboard_id binary20 NOT NULL REFERENCES icingaweb_dashboard (id), + name character varying(64) NOT NULL, + label character varying(254) NOT NULL, + url character varying(2048) NOT NULL, + priority tinyuint NOT NULL, + disabled boolenum DEFAULT 'n', + description text DEFAULT NULL, + + PRIMARY KEY (id) +); + +ALTER TABLE icingaweb_dashlet ALTER COLUMN id SET STORAGE PLAIN; +ALTER TABLE icingaweb_dashlet ALTER COLUMN dashboard_id SET STORAGE PLAIN; + +CREATE TABLE icingaweb_module_dashlet ( + id binary20 NOT NULL, + name citext NOT NULL, + label character varying(64) NOT NULL, + module citext NOT NULL, + pane citext DEFAULT NULL, + url character varying(2048) NOT NULL, + description text DEFAULT NULL, + priority tinyuint DEFAULT 0, + + PRIMARY KEY (id) +); + +ALTER TABLE icingaweb_module_dashlet ALTER COLUMN id SET STORAGE PLAIN; +CREATE INDEX idx_module_dashlet_name ON icingaweb_module_dashlet (name); +CREATE INDEX idx_module_dashlet_pane ON icingaweb_module_dashlet (pane); +CREATE INDEX idx_module_dashlet_module ON icingaweb_module_dashlet (module); + +CREATE TABLE icingaweb_system_dashlet ( + dashlet_id binary20 NOT NULL REFERENCES icingaweb_dashlet (id), + module_dashlet_id binary20 DEFAULT NULL REFERENCES icingaweb_module_dashlet (id), + + PRIMARY KEY (dashlet_id) +); + +ALTER TABLE icingaweb_system_dashlet ALTER COLUMN dashlet_id SET STORAGE PLAIN; +ALTER TABLE icingaweb_system_dashlet ALTER COLUMN module_dashlet_id SET STORAGE PLAIN; diff --git a/schema/pgsql.schema.sql b/schema/pgsql.schema.sql index 8bf4ca07f..20eb69006 100644 --- a/schema/pgsql.schema.sql +++ b/schema/pgsql.schema.sql @@ -4,6 +4,15 @@ CREATE OR REPLACE FUNCTION unix_timestamp(timestamp with time zone) RETURNS bigi SELECT EXTRACT(EPOCH FROM $1)::bigint AS result ' LANGUAGE sql; +CREATE EXTENSION IF NOT EXISTS citext; + +CREATE DOMAIN binary20 AS bytea CONSTRAINT exactly_20_bytes_long CHECK (VALUE IS NULL OR octet_length(VALUE) = 20); + +CREATE DOMAIN tinyuint AS smallint CONSTRAINT between_0_and_255 CHECK (VALUE IS NULL OR VALUE BETWEEN 0 AND 255); + +CREATE TYPE boolenum AS ENUM ('n', 'y'); +CREATE TYPE dashboard_type AS ENUM ('public', 'private', 'shared'); + CREATE TABLE "icingaweb_group" ( "id" serial, "name" character varying(64) NOT NULL, @@ -128,3 +137,84 @@ CREATE TABLE "icingaweb_schema" ( INSERT INTO icingaweb_schema (version, timestamp) VALUES (6, extract(epoch from now())); + +-- Icinga Web 2 enhanced Dashboards + +CREATE TABLE icingaweb_dashboard_owner ( + id serial, + username citext NOT NULL, + PRIMARY KEY (id) +); + +CREATE INDEX idx_dashboard_user_username ON icingaweb_dashboard_owner (username); + +CREATE TABLE icingaweb_dashboard_home ( + id serial, + user_id int NOT NULL REFERENCES icingaweb_dashboard_owner (id), + name character varying(64) NOT NULL, + label character varying(64) NOT NULL, + priority tinyuint NOT NULL, + type dashboard_type DEFAULT 'private', + disabled boolenum DEFAULT 'n', + + PRIMARY KEY (id) +); + +CREATE INDEX idx_dashboard_home ON icingaweb_dashboard_home (user_id); + +CREATE TABLE icingaweb_dashboard ( + id binary20 NOT NULL, + home_id int NOT NULL REFERENCES icingaweb_dashboard_home (id), + name character varying(64) NOT NULL, + label character varying(64) NOT NULL, + priority tinyuint NOT NULL, + + PRIMARY KEY (id) +); + +ALTER TABLE icingaweb_dashboard ALTER COLUMN id SET STORAGE PLAIN; + +CREATE TABLE icingaweb_dashlet ( + id binary20 NOT NULL, + dashboard_id binary20 NOT NULL REFERENCES icingaweb_dashboard (id), + name character varying(64) NOT NULL, + label character varying(254) NOT NULL, + url character varying(2048) NOT NULL, + priority tinyuint NOT NULL, + disabled boolenum DEFAULT 'n', + description text DEFAULT NULL, + + PRIMARY KEY (id) +); + +ALTER TABLE icingaweb_dashlet ALTER COLUMN id SET STORAGE PLAIN; +ALTER TABLE icingaweb_dashlet ALTER COLUMN dashboard_id SET STORAGE PLAIN; + +CREATE TABLE icingaweb_module_dashlet ( + id binary20 NOT NULL, + name citext NOT NULL, + label character varying(64) NOT NULL, + module citext NOT NULL, + pane citext DEFAULT NULL, + url character varying(2048) NOT NULL, + description text DEFAULT NULL, + priority tinyuint DEFAULT 0, + + PRIMARY KEY (id) +); + +ALTER TABLE icingaweb_module_dashlet ALTER COLUMN id SET STORAGE PLAIN; +CREATE INDEX idx_module_dashlet_name ON icingaweb_module_dashlet (name); +CREATE INDEX idx_module_dashlet_pane ON icingaweb_module_dashlet (pane); +CREATE INDEX idx_module_dashlet_module ON icingaweb_module_dashlet (module); + +CREATE TABLE icingaweb_system_dashlet ( + dashlet_id binary20 NOT NULL REFERENCES icingaweb_dashlet (id), + module_dashlet_id binary20 DEFAULT NULL REFERENCES icingaweb_module_dashlet (id), + + PRIMARY KEY (dashlet_id) +); + +ALTER TABLE icingaweb_system_dashlet ALTER COLUMN dashlet_id SET STORAGE PLAIN; +ALTER TABLE icingaweb_system_dashlet ALTER COLUMN module_dashlet_id SET STORAGE PLAIN; +