diff options
Diffstat (limited to 'schema/pgsql.sql')
-rw-r--r-- | schema/pgsql.sql | 2781 |
1 files changed, 2781 insertions, 0 deletions
diff --git a/schema/pgsql.sql b/schema/pgsql.sql new file mode 100644 index 0000000..b9b2cf8 --- /dev/null +++ b/schema/pgsql.sql @@ -0,0 +1,2781 @@ +-- +-- PostgreSQL schema +-- ================= +-- +-- You should normally not be required to care about schema handling. +-- Director does all the migrations for you and guides you either in +-- the frontend or provides everything you need for automated migration +-- handling. Please find more related information in our documentation. + +CREATE TYPE enum_activity_action AS ENUM('create', 'delete', 'modify'); +CREATE TYPE enum_boolean AS ENUM('y', 'n'); +CREATE TYPE enum_property_format AS ENUM('string', 'expression', 'json'); +CREATE TYPE enum_object_type_all AS ENUM('object', 'template', 'apply', 'external_object'); -- TODO: can we check for an invalid +CREATE TYPE enum_object_type AS ENUM('object', 'template', 'external_object'); +CREATE TYPE enum_timeperiod_range_type AS ENUM('include', 'exclude'); +CREATE TYPE enum_merge_behaviour AS ENUM('set', 'add', 'substract', 'override'); +CREATE TYPE enum_set_merge_behaviour AS ENUM('override', 'extend', 'blacklist'); +CREATE TYPE enum_command_object_type AS ENUM('object', 'template', 'external_object'); +CREATE TYPE enum_apply_object_type AS ENUM('object', 'template', 'apply', 'external_object'); +CREATE TYPE enum_state_name AS ENUM('OK', 'Warning', 'Critical', 'Unknown', 'Up', 'Down'); +CREATE TYPE enum_type_name AS ENUM('DowntimeStart', 'DowntimeEnd', 'DowntimeRemoved', 'Custom', 'Acknowledgement', 'Problem', 'Recovery', 'FlappingStart', 'FlappingEnd'); +CREATE TYPE enum_sync_rule_object_type AS ENUM( + 'host', + 'service', + 'command', + 'user', + 'hostgroup', + 'servicegroup', + 'usergroup', + 'datalistEntry', + 'endpoint', + 'zone', + 'timePeriod', + 'serviceSet', + 'scheduledDowntime', + 'notification', + 'dependency' +); +CREATE TYPE enum_sync_rule_update_policy AS ENUM('merge', 'override', 'ignore', 'update-only'); +CREATE TYPE enum_sync_rule_purge_action AS ENUM('delete', 'disable'); +CREATE TYPE enum_sync_property_merge_policy AS ENUM('override', 'merge'); +CREATE TYPE enum_sync_state AS ENUM( + 'unknown', + 'in-sync', + 'pending-changes', + 'failing' +); +CREATE TYPE enum_host_service AS ENUM('host', 'service'); +CREATE TYPE enum_owner_type AS ENUM('user', 'usergroup', 'role'); +CREATE DOMAIN d_smallint AS integer CHECK (VALUE >= 0) CHECK (VALUE < 65536); + +CREATE OR REPLACE FUNCTION unix_timestamp(timestamp with time zone) RETURNS bigint AS ' + SELECT EXTRACT(EPOCH FROM $1)::bigint AS result +' LANGUAGE sql; + + +CREATE TABLE director_daemon_info ( + instance_uuid_hex character varying(32) NOT NULL, -- random by daemon + schema_version SMALLINT NOT NULL, + fqdn character varying(255) NOT NULL, + username character varying(64) NOT NULL, + pid integer NOT NULL, + binary_path character varying(128) NOT NULL, + binary_realpath character varying(128) NOT NULL, + php_binary_path character varying(128) NOT NULL, + php_binary_realpath character varying(128) NOT NULL, + php_version character varying(64) NOT NULL, + php_integer_size SMALLINT NOT NULL, + running_with_systemd enum_boolean DEFAULT NULL, + ts_started bigint NOT NULL, + ts_stopped bigint DEFAULT NULL, + ts_last_modification bigint DEFAULT NULL, + ts_last_update bigint NOT NULL, + process_info text NOT NULL, + PRIMARY KEY (instance_uuid_hex) +); + + +CREATE TABLE director_activity_log ( + id bigserial, + object_type character varying(64) NOT NULL, + object_name character varying(255) NOT NULL, + action_name enum_activity_action NOT NULL, + old_properties text DEFAULT NULL, + new_properties text DEFAULT NULL, + author character varying(64) NOT NULL, + change_time timestamp with time zone NOT NULL, + checksum bytea NOT NULL UNIQUE CHECK(LENGTH(checksum) = 20), + parent_checksum bytea DEFAULT NULL CHECK(parent_checksum IS NULL OR LENGTH(checksum) = 20), + PRIMARY KEY (id) +); + +CREATE INDEX activity_log_sort_idx ON director_activity_log (change_time); +CREATE INDEX activity_log_search_idx ON director_activity_log (object_name); +CREATE INDEX activity_log_search_idx2 ON director_activity_log (object_type, object_name, change_time); +CREATE INDEX activity_log_author ON director_activity_log (author); +COMMENT ON COLUMN director_activity_log.old_properties IS 'Property hash, JSON'; +COMMENT ON COLUMN director_activity_log.new_properties IS 'Property hash, JSON'; + +CREATE TABLE director_activity_log_remark ( + first_related_activity bigint NOT NULL, + last_related_activity bigint NOT NULL, + remark TEXT NOT NULL, + PRIMARY KEY (first_related_activity, last_related_activity), + CONSTRAINT activity_log_remark_begin + FOREIGN KEY (first_related_activity) + REFERENCES director_activity_log (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT activity_log_remark_end + FOREIGN KEY (last_related_activity) + REFERENCES director_activity_log (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX first_related_activity ON director_activity_log_remark (first_related_activity); +CREATE INDEX last_related_activity ON director_activity_log_remark (last_related_activity); + + +CREATE TABLE director_basket ( + uuid bytea CHECK(LENGTH(uuid) = 16) NOT NULL, + basket_name VARCHAR(64) NOT NULL, + owner_type enum_owner_type NOT NULL, + owner_value VARCHAR(255) NOT NULL, + objects text NOT NULL, -- json-encoded + PRIMARY KEY (uuid) +); + +CREATE UNIQUE INDEX basket_basket_name ON director_basket (basket_name); + + +CREATE TABLE director_basket_content ( + checksum bytea CHECK(LENGTH(checksum) = 20) NOT NULL, + summary VARCHAR(500) NOT NULL, -- json + content text NOT NULL, -- json + PRIMARY KEY (checksum) +); + + +CREATE TABLE director_basket_snapshot ( + basket_uuid bytea CHECK(LENGTH(basket_uuid) = 16) NOT NULL, + ts_create bigint NOT NULL, + content_checksum bytea CHECK(LENGTH(content_checksum) = 20) NOT NULL, + PRIMARY KEY (basket_uuid, ts_create), + CONSTRAINT basked_snapshot_basket + FOREIGN KEY (basket_uuid) + REFERENCES director_basket (uuid) + ON DELETE CASCADE + ON UPDATE RESTRICT, + CONSTRAINT basked_snapshot_content + FOREIGN KEY (content_checksum) + REFERENCES director_basket_content (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX basket_snapshot_sort_idx ON director_basket_snapshot (ts_create); + + +CREATE TABLE director_generated_config ( + checksum bytea CHECK(LENGTH(checksum) = 20), + director_version character varying(64) DEFAULT NULL, + director_db_version integer DEFAULT NULL, + duration integer DEFAULT NULL, + first_activity_checksum bytea NOT NULL CHECK(LENGTH(first_activity_checksum) = 20), + last_activity_checksum bytea NOT NULL CHECK(LENGTH(last_activity_checksum) = 20), + PRIMARY KEY (checksum), + CONSTRAINT director_generated_config_activity + FOREIGN KEY (last_activity_checksum) + REFERENCES director_activity_log (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX activity_checksum ON director_generated_config (last_activity_checksum); +COMMENT ON COLUMN director_generated_config.checksum IS 'SHA1(last_activity_checksum;file_path=checksum;file_path=checksum;...)'; +COMMENT ON COLUMN director_generated_config.duration IS 'Config generation duration (ms)'; + + +CREATE TABLE director_generated_file ( + checksum bytea CHECK(LENGTH(checksum) = 20), + content text DEFAULT NULL, + cnt_object SMALLINT NOT NULL DEFAULT 0, + cnt_template SMALLINT NOT NULL DEFAULT 0, + cnt_apply SMALLINT NOT NULL DEFAULT 0, + PRIMARY KEY (checksum) +); + +COMMENT ON COLUMN director_generated_file.checksum IS 'SHA1(content)'; + + +CREATE TABLE director_generated_config_file ( + config_checksum bytea CHECK(LENGTH(config_checksum) = 20), + file_checksum bytea CHECK(LENGTH(file_checksum) = 20), + file_path character varying(128) NOT NULL, + PRIMARY KEY (config_checksum, file_path), + CONSTRAINT director_generated_config_file_config + FOREIGN KEY (config_checksum) + REFERENCES director_generated_config (checksum) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT director_generated_config_file_file + FOREIGN KEY (file_checksum) + REFERENCES director_generated_file (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX config ON director_generated_config_file (config_checksum); +CREATE INDEX checksum ON director_generated_config_file (file_checksum); +COMMENT ON COLUMN director_generated_config_file.file_path IS 'e.g. zones/nafta/hosts.conf'; + + +CREATE TABLE director_deployment_log ( + id bigserial, + config_checksum bytea CHECK(LENGTH(config_checksum) = 20), + last_activity_checksum bytea CHECK(LENGTH(config_checksum) = 20), + peer_identity character varying(64) NOT NULL, + start_time timestamp with time zone NOT NULL, + end_time timestamp with time zone DEFAULT NULL, + abort_time timestamp with time zone DEFAULT NULL, + duration_connection integer DEFAULT NULL, + duration_dump integer DEFAULT NULL, + stage_name CHARACTER VARYING(96), + stage_collected enum_boolean DEFAULT NULL, + connection_succeeded enum_boolean DEFAULT NULL, + dump_succeeded enum_boolean DEFAULT NULL, + startup_succeeded enum_boolean DEFAULT NULL, + username character varying(64) DEFAULT NULL, + startup_log text DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT config_checksum + FOREIGN KEY (config_checksum) + REFERENCES director_generated_config (checksum) + ON DELETE SET NULL + ON UPDATE RESTRICT +); + +COMMENT ON COLUMN director_deployment_log.duration_connection IS 'The time it took to connect to an Icinga node (ms)'; +COMMENT ON COLUMN director_deployment_log.duration_dump IS 'Time spent dumping the config (ms)'; +COMMENT ON COLUMN director_deployment_log.username IS 'The user that triggered this deployment'; + +CREATE INDEX start_time_idx ON director_deployment_log (start_time); + + +CREATE TABLE director_datalist ( + id serial, + list_name character varying(255) NOT NULL, + owner character varying(255) NOT NULL, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX datalist_list_name ON director_datalist (list_name); + + +CREATE TABLE director_datalist_entry ( + list_id integer NOT NULL, + entry_name character varying(255) NOT NULL, + entry_value text DEFAULT NULL, + format enum_property_format, + allowed_roles character varying(255) DEFAULT NULL, + PRIMARY KEY (list_id, entry_name), + CONSTRAINT director_datalist_entry_datalist + FOREIGN KEY (list_id) + REFERENCES director_datalist (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX datalist_entry_datalist ON director_datalist_entry (list_id); + + +CREATE TABLE director_datafield_category ( + id serial, + category_name character varying(255) NOT NULL, + description text DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX datafield_category_name ON director_datafield_category (category_name); + + +CREATE TABLE director_datafield ( + id serial, + category_id integer DEFAULT NULL, + varname character varying(64) NOT NULL, + caption character varying(255) NOT NULL, + description text DEFAULT NULL, + datatype character varying(255) NOT NULL, +-- datatype_param? multiple ones? + format enum_property_format, + PRIMARY KEY (id), + CONSTRAINT director_datafield_category + FOREIGN KEY (category_id) + REFERENCES director_datafield_category (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX search_idx ON director_datafield (varname); +CREATE INDEX datafield_category ON director_datafield (category_id); + + +CREATE TABLE director_datafield_setting ( + datafield_id integer NOT NULL, + setting_name character varying(64) NOT NULL, + setting_value text NOT NULL, + PRIMARY KEY (datafield_id, setting_name), + CONSTRAINT datafield_id_settings + FOREIGN KEY (datafield_id) + REFERENCES director_datafield (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX director_datafield_datafield ON director_datafield_setting (datafield_id); + + +CREATE TABLE director_schema_migration ( + schema_version SMALLINT NOT NULL, + migration_time TIMESTAMP WITH TIME ZONE NOT NULL, + PRIMARY KEY(schema_version) +); + + +CREATE TABLE director_setting ( + setting_name character varying(64) NOT NULL, + setting_value character varying(255) NOT NULL, + PRIMARY KEY(setting_name) +); + + +CREATE TABLE icinga_zone ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + parent_id integer DEFAULT NULL, + object_name character varying(255) NOT NULL UNIQUE, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + is_global enum_boolean NOT NULL DEFAULT 'n', + PRIMARY KEY (id), + CONSTRAINT icinga_zone_parent_zone + FOREIGN KEY (parent_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX zone_parent ON icinga_zone (parent_id); + + +CREATE TABLE icinga_zone_inheritance ( + zone_id integer NOT NULL, + parent_zone_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (zone_id, parent_zone_id), + CONSTRAINT icinga_zone_inheritance_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_zone_inheritance_parent_zone + FOREIGN KEY (parent_zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX zone_inheritance_unique_order ON icinga_zone_inheritance (zone_id, weight); +CREATE INDEX zone_inheritance_zone ON icinga_zone_inheritance (zone_id); +CREATE INDEX zone_inheritance_zone_parent ON icinga_zone_inheritance (parent_zone_id); + + +CREATE TABLE icinga_timeperiod ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) NOT NULL, + display_name character varying(255) DEFAULT NULL, + update_method character varying(64) DEFAULT NULL, + zone_id integer DEFAULT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + prefer_includes enum_boolean DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_timeperiod_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX timeperiod_object_name ON icinga_timeperiod (object_name, zone_id); +CREATE INDEX timeperiod_zone ON icinga_timeperiod (zone_id); +COMMENT ON COLUMN icinga_timeperiod.update_method IS 'Usually LegacyTimePeriod'; + + +CREATE TABLE icinga_timeperiod_inheritance ( + timeperiod_id integer NOT NULL, + parent_timeperiod_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (timeperiod_id, parent_timeperiod_id), + CONSTRAINT icinga_timeperiod_inheritance_timeperiod + FOREIGN KEY (timeperiod_id) + REFERENCES icinga_timeperiod (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_timeperiod_inheritance_parent_timeperiod + FOREIGN KEY (parent_timeperiod_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX timeperiod_inheritance_unique_order ON icinga_timeperiod_inheritance (timeperiod_id, weight); +CREATE INDEX timeperiod_inheritance_timeperiod ON icinga_timeperiod_inheritance (timeperiod_id); +CREATE INDEX timeperiod_inheritance_timeperiod_parent ON icinga_timeperiod_inheritance (parent_timeperiod_id); + + +CREATE TABLE icinga_timeperiod_range ( + timeperiod_id serial, + range_key character varying(255) NOT NULL, + range_value character varying(255) NOT NULL, + range_type enum_timeperiod_range_type NOT NULL DEFAULT 'include', + merge_behaviour enum_merge_behaviour NOT NULL DEFAULT 'set', + PRIMARY KEY (timeperiod_id, range_type, range_key), + CONSTRAINT icinga_timeperiod_range_timeperiod + FOREIGN KEY (timeperiod_id) + REFERENCES icinga_timeperiod (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX timeperiod_range_timeperiod ON icinga_timeperiod_range (timeperiod_id); +COMMENT ON COLUMN icinga_timeperiod_range.range_key IS 'monday, ...'; +COMMENT ON COLUMN icinga_timeperiod_range.range_value IS '00:00-24:00, ...'; +COMMENT ON COLUMN icinga_timeperiod_range.range_type IS 'include -> ranges {}, exclude ranges_ignore {} - not yet'; +COMMENT ON COLUMN icinga_timeperiod_range.merge_behaviour IS 'set -> = {}, add -> += {}, substract -> -= {}'; + + +CREATE TABLE director_job ( + id serial, + job_name character varying(64) NOT NULL, + job_class character varying(72) NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + run_interval integer NOT NULL, -- seconds + timeperiod_id integer DEFAULT NULL, + last_attempt_succeeded enum_boolean DEFAULT NULL, + ts_last_attempt timestamp with time zone DEFAULT NULL, + ts_last_error timestamp with time zone DEFAULT NULL, + last_error_message text NULL DEFAULT NULL, + CONSTRAINT director_job_period + FOREIGN KEY (timeperiod_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX director_job_unique_job_name ON director_job (job_name); + + +CREATE TABLE director_job_setting ( + job_id integer NOT NULL, + setting_name character varying(64) NOT NULL, + setting_value text DEFAULT NULL, + PRIMARY KEY (job_id, setting_name), + CONSTRAINT director_job_setting_job + FOREIGN KEY (job_id) + REFERENCES director_job (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX director_job_setting_job ON director_job_setting (job_id); + + +CREATE TABLE icinga_command ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + methods_execute character varying(64) DEFAULT NULL, + command text DEFAULT NULL, + is_string enum_boolean NULL, +-- env text DEFAULT NULL, + timeout smallint DEFAULT NULL, + zone_id integer DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_command_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX command_object_name ON icinga_command (object_name); +CREATE INDEX command_zone ON icinga_command (zone_id); +COMMENT ON COLUMN icinga_command.object_type IS 'external_object is an attempt to work with existing commands'; + + +CREATE TABLE icinga_command_inheritance ( + command_id integer NOT NULL, + parent_command_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (command_id, parent_command_id), + CONSTRAINT icinga_command_inheritance_command + FOREIGN KEY (command_id) + REFERENCES icinga_command (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_command_inheritance_parent_command + FOREIGN KEY (parent_command_id) + REFERENCES icinga_command (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX command_inheritance_unique_order ON icinga_command_inheritance (command_id, weight); +CREATE INDEX command_inheritance_command ON icinga_command_inheritance (command_id); +CREATE INDEX command_inheritance_command_parent ON icinga_command_inheritance (parent_command_id); + + +CREATE TABLE icinga_command_argument ( + id serial, + command_id integer NOT NULL, + argument_name character varying(64) NOT NULL, + argument_value text DEFAULT NULL, + argument_format enum_property_format DEFAULT NULL, + key_string character varying(64) DEFAULT NULL, + description text DEFAULT NULL, + skip_key enum_boolean DEFAULT NULL, + set_if character varying(255) DEFAULT NULL, -- (string expression, must resolve to a numeric value) + set_if_format enum_property_format DEFAULT NULL, + sort_order smallint DEFAULT NULL, -- -> order + repeat_key enum_boolean DEFAULT NULL, + required enum_boolean DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_command_argument_command + FOREIGN KEY (command_id) + REFERENCES icinga_command (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX command_argument_unique_idx ON icinga_command_argument (command_id, argument_name); +CREATE INDEX command_argument_sort_idx ON icinga_command_argument (command_id, sort_order); +CREATE INDEX command_argument_command ON icinga_command_argument (command_id); +COMMENT ON COLUMN icinga_command_argument.argument_name IS '-x, --host'; +COMMENT ON COLUMN icinga_command_argument.key_string IS 'Overrides name'; +COMMENT ON COLUMN icinga_command_argument.repeat_key IS 'Useful with array values'; + + +CREATE TABLE icinga_command_field ( + command_id integer NOT NULL, + datafield_id integer NOT NULL, + is_required enum_boolean NOT NULL, + var_filter TEXT DEFAULT NULL, + PRIMARY KEY (command_id, datafield_id), + CONSTRAINT icinga_command_field_command + FOREIGN KEY (command_id) + REFERENCES icinga_command (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_command_field_datafield + FOREIGN KEY (datafield_id) + REFERENCES director_datafield (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE icinga_command_var ( + command_id integer NOT NULL, + checksum bytea DEFAULT NULL UNIQUE CHECK(LENGTH(checksum) = 20), + varname character varying(255) NOT NULL, + varvalue text DEFAULT NULL, + format enum_property_format NOT NULL DEFAULT 'string', + PRIMARY KEY (command_id, varname), + CONSTRAINT icinga_command_var_command + FOREIGN KEY (command_id) + REFERENCES icinga_command (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX command_var_command ON icinga_command_var (command_id); +CREATE INDEX command_var_search_idx ON icinga_command_var (varname); +CREATE INDEX command_var_checksum ON icinga_command_var (checksum); + + +CREATE TABLE icinga_apiuser ( + id BIGSERIAL, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name CHARACTER VARYING(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + password CHARACTER VARYING(255) DEFAULT NULL, + client_dn CHARACTER VARYING(64) DEFAULT NULL, + permissions TEXT DEFAULT NULL, + PRIMARY KEY (id) +); + +COMMENT ON COLUMN icinga_apiuser.permissions IS 'JSON-encoded permissions'; + + +CREATE TABLE icinga_endpoint ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + zone_id integer DEFAULT NULL, + object_name character varying(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + host character varying(255) DEFAULT NULL, + port d_smallint DEFAULT NULL, + log_duration character varying(32) DEFAULT NULL, + apiuser_id INTEGER DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_endpoint_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_apiuser + FOREIGN KEY (apiuser_id) + REFERENCES icinga_apiuser (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX endpoint_object_name ON icinga_endpoint (object_name); +CREATE INDEX endpoint_zone ON icinga_endpoint (zone_id); +COMMENT ON COLUMN icinga_endpoint.host IS 'IP address / hostname of remote node'; +COMMENT ON COLUMN icinga_endpoint.port IS '5665 if not set'; +COMMENT ON COLUMN icinga_endpoint.log_duration IS '1d if not set'; + + +CREATE TABLE icinga_endpoint_inheritance ( + endpoint_id integer NOT NULL, + parent_endpoint_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (endpoint_id, parent_endpoint_id), + CONSTRAINT icinga_endpoint_inheritance_endpoint + FOREIGN KEY (endpoint_id) + REFERENCES icinga_endpoint (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_endpoint_inheritance_parent_endpoint + FOREIGN KEY (parent_endpoint_id) + REFERENCES icinga_endpoint (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX endpoint_inheritance_unique_order ON icinga_endpoint_inheritance (endpoint_id, weight); +CREATE INDEX endpoint_inheritance_endpoint ON icinga_endpoint_inheritance (endpoint_id); +CREATE INDEX endpoint_inheritance_endpoint_parent ON icinga_endpoint_inheritance (parent_endpoint_id); + + +CREATE TABLE icinga_host_template_choice ( + id serial, + object_name character varying(64) NOT NULL, + description text DEFAULT NULL, + min_required smallint NOT NULL DEFAULT 0, + max_allowed smallint NOT NULL DEFAULT 1, + required_template_id integer DEFAULT NULL, + allowed_roles character varying(255) DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX host_template_choice_object_name ON icinga_host_template_choice (object_name); +CREATE INDEX host_template_choice_required_template ON icinga_host_template_choice (required_template_id); + +CREATE TABLE icinga_host ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + display_name CHARACTER VARYING(255) DEFAULT NULL, + address character varying(255) DEFAULT NULL, + address6 character varying(45) DEFAULT NULL, + check_command_id integer DEFAULT NULL, + max_check_attempts integer DEFAULT NULL, + check_period_id integer DEFAULT NULL, + check_interval character varying(8) DEFAULT NULL, + retry_interval character varying(8) DEFAULT NULL, + check_timeout smallint DEFAULT NULL, + enable_notifications enum_boolean DEFAULT NULL, + enable_active_checks enum_boolean DEFAULT NULL, + enable_passive_checks enum_boolean DEFAULT NULL, + enable_event_handler enum_boolean DEFAULT NULL, + enable_flapping enum_boolean DEFAULT NULL, + enable_perfdata enum_boolean DEFAULT NULL, + event_command_id integer DEFAULT NULL, + flapping_threshold_high smallint default null, + flapping_threshold_low smallint default null, + volatile enum_boolean DEFAULT NULL, + zone_id integer DEFAULT NULL, + command_endpoint_id integer DEFAULT NULL, + notes text DEFAULT NULL, + notes_url character varying(255) DEFAULT NULL, + action_url character varying(255) DEFAULT NULL, + icon_image character varying(255) DEFAULT NULL, + icon_image_alt character varying(255) DEFAULT NULL, + has_agent enum_boolean DEFAULT NULL, + master_should_connect enum_boolean DEFAULT NULL, + accept_config enum_boolean DEFAULT NULL, + custom_endpoint_name character varying(255) DEFAULT NULL, + api_key character varying(40) DEFAULT NULL, + template_choice_id int DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_host_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_host_check_period + FOREIGN KEY (check_period_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_host_check_command + FOREIGN KEY (check_command_id) + REFERENCES icinga_command (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_host_event_command + FOREIGN KEY (event_command_id) + REFERENCES icinga_command (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_host_command_endpoint + FOREIGN KEY (command_endpoint_id) + REFERENCES icinga_endpoint (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_host_template_choice + FOREIGN KEY (template_choice_id) + REFERENCES icinga_host_template_choice (id) + ON DELETE SET NULL + ON UPDATE CASCADE +); + + +CREATE UNIQUE INDEX object_name_host ON icinga_host (object_name, zone_id); +CREATE UNIQUE INDEX host_api_key ON icinga_host (api_key); +CREATE INDEX host_zone ON icinga_host (zone_id); +CREATE INDEX host_timeperiod ON icinga_host (check_period_id); +CREATE INDEX host_check_command ON icinga_host (check_command_id); +CREATE INDEX host_event_command ON icinga_host (event_command_id); +CREATE INDEX host_command_endpoint ON icinga_host (command_endpoint_id); +CREATE INDEX host_template_choice ON icinga_host (template_choice_id); + + +CREATE TABLE icinga_host_inheritance ( + host_id integer NOT NULL, + parent_host_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (host_id, parent_host_id), + CONSTRAINT icinga_host_inheritance_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_host_inheritance_parent_host + FOREIGN KEY (parent_host_id) + REFERENCES icinga_host (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX host_inheritance_unique_order ON icinga_host_inheritance (host_id, weight); +CREATE INDEX host_inheritance_host ON icinga_host_inheritance (host_id); +CREATE INDEX host_inheritance_host_parent ON icinga_host_inheritance (parent_host_id); + + +CREATE TABLE icinga_host_field ( + host_id integer NOT NULL, + datafield_id integer NOT NULL, + is_required enum_boolean NOT NULL, + var_filter TEXT DEFAULT NULL, + PRIMARY KEY (host_id, datafield_id), + CONSTRAINT icinga_host_field_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_host_field_datafield + FOREIGN KEY (datafield_id) + REFERENCES director_datafield (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX host_field_key ON icinga_host_field (host_id, datafield_id); +CREATE INDEX host_field_host ON icinga_host_field (host_id); +CREATE INDEX host_field_datafield ON icinga_host_field (datafield_id); +COMMENT ON COLUMN icinga_host_field.host_id IS 'Makes only sense for templates'; + + +CREATE TABLE icinga_host_var ( + host_id integer NOT NULL, + checksum bytea DEFAULT NULL UNIQUE CHECK(LENGTH(checksum) = 20), + varname character varying(255) NOT NULL, + varvalue text DEFAULT NULL, + format enum_property_format, -- immer string vorerst + PRIMARY KEY (host_id, varname), + CONSTRAINT icinga_host_var_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX host_var_search_idx ON icinga_host_var (varname); +CREATE INDEX host_var_host ON icinga_host_var (host_id); +CREATE INDEX host_var_checksum ON icinga_host_var (checksum); + + +ALTER TABLE icinga_host_template_choice + ADD CONSTRAINT host_template_choice_required_template + FOREIGN KEY (required_template_id) + REFERENCES icinga_host (id) + ON DELETE RESTRICT + ON UPDATE CASCADE; + + +CREATE TABLE icinga_service_set ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + host_id integer DEFAULT NULL, + object_name character varying(128) NOT NULL, + object_type enum_object_type_all NOT NULL, + description text DEFAULT NULL, + assign_filter text DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_service_set_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX service_set_name ON icinga_service_set (object_name, host_id); +CREATE INDEX service_set_host ON icinga_service_set (host_id); + + +CREATE TABLE icinga_service_template_choice ( + id serial, + object_name character varying(64) NOT NULL, + description text DEFAULT NULL, + min_required smallint NOT NULL DEFAULT 0, + max_allowed smallint NOT NULL DEFAULT 1, + required_template_id integer DEFAULT NULL, + allowed_roles character varying(255) DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX service_template_choice_object_name ON icinga_service_template_choice (object_name); +CREATE INDEX service_template_choice_required_template ON icinga_service_template_choice (required_template_id); + + +CREATE TABLE icinga_service ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean DEFAULT 'n', + display_name character varying(255) DEFAULT NULL, + host_id INTEGER DEFAULT NULL, + service_set_id integer DEFAULT NULL, + check_command_id integer DEFAULT NULL, + max_check_attempts integer DEFAULT NULL, + check_period_id integer DEFAULT NULL, + check_interval character varying(8) DEFAULT NULL, + retry_interval character varying(8) DEFAULT NULL, + check_timeout smallint DEFAULT NULL, + enable_notifications enum_boolean DEFAULT NULL, + enable_active_checks enum_boolean DEFAULT NULL, + enable_passive_checks enum_boolean DEFAULT NULL, + enable_event_handler enum_boolean DEFAULT NULL, + enable_flapping enum_boolean DEFAULT NULL, + enable_perfdata enum_boolean DEFAULT NULL, + event_command_id integer DEFAULT NULL, + flapping_threshold_high smallint DEFAULT NULL, + flapping_threshold_low smallint DEFAULT NULL, + volatile enum_boolean DEFAULT NULL, + zone_id integer DEFAULT NULL, + command_endpoint_id integer DEFAULT NULL, + notes text DEFAULT NULL, + notes_url character varying(255) DEFAULT NULL, + action_url character varying(255) DEFAULT NULL, + icon_image character varying(255) DEFAULT NULL, + icon_image_alt character varying(255) DEFAULT NULL, + use_agent enum_boolean DEFAULT NULL, + apply_for character varying(255) DEFAULT NULL, + use_var_overrides enum_boolean DEFAULT NULL, + assign_filter text DEFAULT NULL, + template_choice_id int DEFAULT NULL, + PRIMARY KEY (id), +-- UNIQUE INDEX object_name (object_name, zone_id), + CONSTRAINT icinga_service_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_service_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_service_check_period + FOREIGN KEY (check_period_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_service_check_command + FOREIGN KEY (check_command_id) + REFERENCES icinga_command (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_service_event_command + FOREIGN KEY (event_command_id) + REFERENCES icinga_command (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_service_command_endpoint + FOREIGN KEY (command_endpoint_id) + REFERENCES icinga_endpoint (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_service_service_set + FOREIGN KEY (service_set_id) + REFERENCES icinga_service_set (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_service_template_choice + FOREIGN KEY (template_choice_id) + REFERENCES icinga_service_template_choice (id) + ON DELETE SET NULL + ON UPDATE CASCADE +); + +CREATE INDEX service_zone ON icinga_service (zone_id); +CREATE INDEX service_timeperiod ON icinga_service (check_period_id); +CREATE INDEX service_check_command ON icinga_service (check_command_id); +CREATE INDEX service_event_command ON icinga_service (event_command_id); +CREATE INDEX service_command_endpoint ON icinga_service (command_endpoint_id); +CREATE INDEX service_template_choice ON icinga_service (template_choice_id); + + +CREATE TABLE icinga_service_inheritance ( + service_id integer NOT NULL, + parent_service_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (service_id, parent_service_id), + CONSTRAINT icinga_service_inheritance_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_service_inheritance_parent_service + FOREIGN KEY (parent_service_id) + REFERENCES icinga_service (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX service_inheritance_unique_order ON icinga_service_inheritance (service_id, weight); +CREATE INDEX service_inheritance_service ON icinga_service_inheritance (service_id); +CREATE INDEX service_inheritance_service_parent ON icinga_service_inheritance (parent_service_id); + + +CREATE TABLE icinga_service_var ( + service_id integer NOT NULL, + checksum bytea DEFAULT NULL UNIQUE CHECK(LENGTH(checksum) = 20), + varname character varying(255) NOT NULL, + varvalue text DEFAULT NULL, + format enum_property_format, + PRIMARY KEY (service_id, varname), + CONSTRAINT icinga_service_var_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX service_var_search_idx ON icinga_service_var (varname); +CREATE INDEX service_var_service ON icinga_service_var (service_id); +CREATE INDEX service_var_checksum ON icinga_service_var (checksum); + + +CREATE TABLE icinga_service_field ( + service_id integer NOT NULL, + datafield_id integer NOT NULL, + is_required enum_boolean NOT NULL, + var_filter TEXT DEFAULT NULL, + PRIMARY KEY (service_id, datafield_id), + CONSTRAINT icinga_service_field_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_service_field_datafield + FOREIGN KEY (datafield_id) + REFERENCES director_datafield (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX service_field_key ON icinga_service_field (service_id, datafield_id); +CREATE INDEX service_field_service ON icinga_service_field (service_id); +CREATE INDEX service_field_datafield ON icinga_service_field (datafield_id); +COMMENT ON COLUMN icinga_service_field.service_id IS 'Makes only sense for templates'; + + +ALTER TABLE icinga_service_template_choice + ADD CONSTRAINT service_template_choice_required_template + FOREIGN KEY (required_template_id) + REFERENCES icinga_service (id) + ON DELETE RESTRICT + ON UPDATE CASCADE; + + +CREATE TABLE icinga_host_service ( + host_id integer NOT NULL, + service_id integer NOT NULL, + PRIMARY KEY (host_id, service_id), + CONSTRAINT icinga_host_service_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_host_service_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX host_service_host ON icinga_host_service (host_id); +CREATE INDEX host_service_service ON icinga_host_service (service_id); + + +CREATE TABLE icinga_host_service_blacklist( + host_id integer NOT NULL, + service_id integer NOT NULL, + PRIMARY KEY (host_id, service_id), + CONSTRAINT icinga_host_service__bl_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_host_service_bl_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX host_service_bl_host ON icinga_host_service_blacklist (host_id); +CREATE INDEX host_service_bl_service ON icinga_host_service_blacklist (service_id); + + +CREATE TABLE icinga_service_set_inheritance ( + service_set_id integer NOT NULL, + parent_service_set_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (service_set_id, parent_service_set_id), + CONSTRAINT icinga_service_set_inheritance_set + FOREIGN KEY (service_set_id) + REFERENCES icinga_service_set (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_service_set_inheritance_parent + FOREIGN KEY (parent_service_set_id) + REFERENCES icinga_service_set (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX service_set_inheritance_unique_order ON icinga_service_set_inheritance (service_set_id, weight); +CREATE INDEX service_set_inheritance_set ON icinga_service_set_inheritance (service_set_id); +CREATE INDEX service_set_inheritance_parent ON icinga_service_set_inheritance (parent_service_set_id); + + +CREATE TABLE icinga_service_set_var ( + service_set_id integer NOT NULL, + checksum bytea DEFAULT NULL UNIQUE CHECK(LENGTH(checksum) = 20), + varname character varying(255) NOT NULL, + varvalue text DEFAULT NULL, + format enum_property_format NOT NULL DEFAULT 'string', + PRIMARY KEY (service_set_id, varname), + CONSTRAINT icinga_service_set_var_service_set + FOREIGN KEY (service_set_id) + REFERENCES icinga_service_set (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX service_set_var_service_set ON icinga_service_set_var (service_set_id); +CREATE INDEX service_set_var_search_idx ON icinga_service_set_var (varname); +CREATE INDEX service_set_var_checksum ON icinga_service_set_var (checksum); + + +CREATE TABLE icinga_hostgroup ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + display_name character varying(255) DEFAULT NULL, + assign_filter text DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX hostgroup_object_name ON icinga_hostgroup (object_name); +CREATE INDEX hostgroup_search_idx ON icinga_hostgroup (display_name); + + +-- -- TODO: probably useless +CREATE TABLE icinga_hostgroup_inheritance ( + hostgroup_id integer NOT NULL, + parent_hostgroup_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (hostgroup_id, parent_hostgroup_id), + CONSTRAINT icinga_hostgroup_inheritance_hostgroup + FOREIGN KEY (hostgroup_id) + REFERENCES icinga_hostgroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_hostgroup_inheritance_parent_hostgroup + FOREIGN KEY (parent_hostgroup_id) + REFERENCES icinga_hostgroup (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX hostgroup_inheritance_unique_order ON icinga_hostgroup_inheritance (hostgroup_id, weight); +CREATE INDEX hostgroup_inheritance_hostgroup ON icinga_hostgroup_inheritance (hostgroup_id); +CREATE INDEX hostgroup_inheritance_hostgroup_parent ON icinga_hostgroup_inheritance (parent_hostgroup_id); + + +CREATE TABLE icinga_servicegroup ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + display_name character varying(255) DEFAULT NULL, + assign_filter text DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX servicegroup_object_name ON icinga_servicegroup (object_name); +CREATE INDEX servicegroup_search_idx ON icinga_servicegroup (display_name); + +CREATE TABLE icinga_servicegroup_service_resolved ( + servicegroup_id integer NOT NULL, + service_id integer NOT NULL, + PRIMARY KEY (servicegroup_id, service_id), + CONSTRAINT icinga_servicegroup_service_resolved_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_servicegroup_service_resolved_servicegroup + FOREIGN KEY (servicegroup_id) + REFERENCES icinga_servicegroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX servicegroup_service_resolved_service ON icinga_servicegroup_service_resolved (service_id); +CREATE INDEX servicegroup_service_resolved_servicegroup ON icinga_servicegroup_service_resolved (servicegroup_id); + + +CREATE TABLE icinga_servicegroup_inheritance ( + servicegroup_id integer NOT NULL, + parent_servicegroup_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (servicegroup_id, parent_servicegroup_id), + CONSTRAINT icinga_servicegroup_inheritance_servicegroup + FOREIGN KEY (servicegroup_id) + REFERENCES icinga_servicegroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_servicegroup_inheritance_parent_servicegroup + FOREIGN KEY (parent_servicegroup_id) + REFERENCES icinga_servicegroup (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX servicegroup_inheritance_unique_order ON icinga_servicegroup_inheritance (servicegroup_id, weight); +CREATE INDEX servicegroup_inheritance_servicegroup ON icinga_servicegroup_inheritance (servicegroup_id); +CREATE INDEX servicegroup_inheritance_servicegroup_parent ON icinga_servicegroup_inheritance (parent_servicegroup_id); + + +CREATE TABLE icinga_servicegroup_service ( + servicegroup_id integer NOT NULL, + service_id integer NOT NULL, + PRIMARY KEY (servicegroup_id, service_id), + CONSTRAINT icinga_servicegroup_service_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_servicegroup_service_servicegroup + FOREIGN KEY (servicegroup_id) + REFERENCES icinga_servicegroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX servicegroup_service_service ON icinga_servicegroup_service (service_id); +CREATE INDEX servicegroup_service_servicegroup ON icinga_servicegroup_service (servicegroup_id); + + +CREATE TABLE icinga_hostgroup_host ( + hostgroup_id integer NOT NULL, + host_id integer NOT NULL, + PRIMARY KEY (hostgroup_id, host_id), + CONSTRAINT icinga_hostgroup_host_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_hostgroup_host_hostgroup + FOREIGN KEY (hostgroup_id) + REFERENCES icinga_hostgroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX hostgroup_host_host ON icinga_hostgroup_host (host_id); +CREATE INDEX hostgroup_host_hostgroup ON icinga_hostgroup_host (hostgroup_id); + + +CREATE TABLE icinga_hostgroup_host_resolved ( + hostgroup_id integer NOT NULL, + host_id integer NOT NULL, + PRIMARY KEY (hostgroup_id, host_id), + CONSTRAINT icinga_hostgroup_host_resolved_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_hostgroup_host_resolved_hostgroup + FOREIGN KEY (hostgroup_id) + REFERENCES icinga_hostgroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX hostgroup_host_resolved_host ON icinga_hostgroup_host_resolved (host_id); +CREATE INDEX hostgroup_host_resolved_hostgroup ON icinga_hostgroup_host_resolved (hostgroup_id); + + +CREATE TABLE icinga_hostgroup_parent ( + hostgroup_id integer NOT NULL, + parent_hostgroup_id integer NOT NULL, + PRIMARY KEY (hostgroup_id, parent_hostgroup_id), + CONSTRAINT icinga_hostgroup_parent_hostgroup + FOREIGN KEY (hostgroup_id) + REFERENCES icinga_hostgroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_hostgroup_parent_parent + FOREIGN KEY (parent_hostgroup_id) + REFERENCES icinga_hostgroup (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX hostgroup_parent_hostgroup ON icinga_hostgroup_parent (hostgroup_id); +CREATE INDEX hostgroup_parent_parent ON icinga_hostgroup_parent (parent_hostgroup_id); + + +CREATE TABLE icinga_user ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + display_name character varying(255) DEFAULT NULL, + email character varying(255) DEFAULT NULL, + pager character varying(255) DEFAULT NULL, + enable_notifications enum_boolean DEFAULT NULL, + period_id integer DEFAULT NULL, + zone_id integer DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_user_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_user_period + FOREIGN KEY (period_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX user_object_name ON icinga_user (object_name, zone_id); +CREATE INDEX user_zone ON icinga_user (zone_id); + + +CREATE TABLE icinga_user_inheritance ( + user_id integer NOT NULL, + parent_user_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (user_id, parent_user_id), + CONSTRAINT icinga_user_inheritance_user + FOREIGN KEY (user_id) + REFERENCES icinga_user (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_user_inheritance_parent_user + FOREIGN KEY (parent_user_id) + REFERENCES icinga_user (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX user_inheritance_unique_order ON icinga_user_inheritance (user_id, weight); +CREATE INDEX user_inheritance_user ON icinga_user_inheritance (user_id); +CREATE INDEX user_inheritance_user_parent ON icinga_user_inheritance (parent_user_id); + + +CREATE TABLE icinga_user_states_set ( + user_id integer NOT NULL, + property enum_state_name NOT NULL, + merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', + PRIMARY KEY (user_id, property, merge_behaviour), + CONSTRAINT icinga_user_filter_state_user + FOREIGN KEY (user_id) + REFERENCES icinga_user (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX user_states_set_user ON icinga_user_states_set (user_id); +COMMENT ON COLUMN icinga_user_states_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; + + +CREATE TABLE icinga_user_types_set ( + user_id integer NOT NULL, + property enum_type_name NOT NULL, + merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', + PRIMARY KEY (user_id, property, merge_behaviour), + CONSTRAINT icinga_user_filter_type_user + FOREIGN KEY (user_id) + REFERENCES icinga_user (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX user_types_set_user ON icinga_user_types_set (user_id); +COMMENT ON COLUMN icinga_user_types_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; + + +CREATE TABLE icinga_user_var ( + user_id integer NOT NULL, + checksum bytea DEFAULT NULL UNIQUE CHECK(LENGTH(checksum) = 20), + varname character varying(255) NOT NULL, + varvalue text DEFAULT NULL, + format enum_property_format NOT NULL DEFAULT 'string', + PRIMARY KEY (user_id, varname), + CONSTRAINT icinga_user_var_user + FOREIGN KEY (user_id) + REFERENCES icinga_user (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX user_var_search_idx ON icinga_user_var (varname); +CREATE INDEX user_var_user ON icinga_user_var (user_id); +CREATE INDEX user_var_checksum ON icinga_user_var (checksum); + + +CREATE TABLE icinga_user_field ( + user_id integer NOT NULL, + datafield_id integer NOT NULL, + is_required enum_boolean NOT NULL, + var_filter TEXT DEFAULT NULL, + PRIMARY KEY (user_id, datafield_id), + CONSTRAINT icinga_user_field_user + FOREIGN KEY (user_id) + REFERENCES icinga_user (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_user_field_datafield + FOREIGN KEY (datafield_id) + REFERENCES director_datafield (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX user_field_key ON icinga_user_field (user_id, datafield_id); +CREATE INDEX user_field_user ON icinga_user_field (user_id); +CREATE INDEX user_field_datafield ON icinga_user_field (datafield_id); +COMMENT ON COLUMN icinga_user_field.user_id IS 'Makes only sense for templates'; + + +CREATE TABLE icinga_usergroup ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + display_name character varying(255) DEFAULT NULL, + zone_id integer DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_usergroup_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX usergroup_search_idx ON icinga_usergroup (display_name); +CREATE INDEX usergroup_object_name ON icinga_usergroup (object_name); +CREATE INDEX usergroup_zone ON icinga_usergroup (zone_id); + + +CREATE TABLE icinga_usergroup_inheritance ( + usergroup_id integer NOT NULL, + parent_usergroup_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (usergroup_id, parent_usergroup_id), + CONSTRAINT icinga_usergroup_inheritance_usergroup + FOREIGN KEY (usergroup_id) + REFERENCES icinga_usergroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_usergroup_inheritance_parent_usergroup + FOREIGN KEY (parent_usergroup_id) + REFERENCES icinga_usergroup (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX usergroup_inheritance_unique_order ON icinga_usergroup_inheritance (usergroup_id, weight); +CREATE INDEX usergroup_inheritance_usergroup ON icinga_usergroup_inheritance (usergroup_id); +CREATE INDEX usergroup_inheritance_usergroup_parent ON icinga_usergroup_inheritance (parent_usergroup_id); + + +CREATE TABLE icinga_usergroup_user ( + usergroup_id integer NOT NULL, + user_id integer NOT NULL, + PRIMARY KEY (usergroup_id, user_id), + CONSTRAINT icinga_usergroup_user_user + FOREIGN KEY (user_id) + REFERENCES icinga_user (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_usergroup_user_usergroup + FOREIGN KEY (usergroup_id) + REFERENCES icinga_usergroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX usergroup_user_user ON icinga_usergroup_user (user_id); +CREATE INDEX usergroup_user_usergroup ON icinga_usergroup_user (usergroup_id); + + +CREATE TABLE icinga_usergroup_parent ( + usergroup_id integer NOT NULL, + parent_usergroup_id integer NOT NULL, + PRIMARY KEY (usergroup_id, parent_usergroup_id), + CONSTRAINT icinga_usergroup_parent_usergroup + FOREIGN KEY (usergroup_id) + REFERENCES icinga_usergroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_usergroup_parent_parent + FOREIGN KEY (parent_usergroup_id) + REFERENCES icinga_usergroup (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX usergroup_parent_usergroup ON icinga_usergroup_parent (usergroup_id); +CREATE INDEX usergroup_parent_parent ON icinga_usergroup_parent (parent_usergroup_id); + + +CREATE TABLE icinga_notification ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name CHARACTER VARYING(255) DEFAULT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + apply_to enum_host_service NULL DEFAULT NULL, + host_id integer DEFAULT NULL, + service_id integer DEFAULT NULL, + times_begin integer DEFAULT NULL, + times_end integer DEFAULT NULL, + notification_interval integer DEFAULT NULL, + command_id integer DEFAULT NULL, + period_id integer DEFAULT NULL, + zone_id integer DEFAULT NULL, + assign_filter text DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_notification_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_notification_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_notification_command + FOREIGN KEY (command_id) + REFERENCES icinga_command (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_notification_period + FOREIGN KEY (period_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_notification_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + + +CREATE TABLE icinga_notification_user ( + notification_id integer NOT NULL, + user_id integer NOT NULL, + PRIMARY KEY (notification_id, user_id), + CONSTRAINT icinga_notification_user_user + FOREIGN KEY (user_id) + REFERENCES icinga_user (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_notification_user_notification + FOREIGN KEY (notification_id) + REFERENCES icinga_notification (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE TABLE icinga_notification_usergroup ( + notification_id integer NOT NULL, + usergroup_id integer NOT NULL, + PRIMARY KEY (notification_id, usergroup_id), + CONSTRAINT icinga_notification_usergroup_usergroup + FOREIGN KEY (usergroup_id) + REFERENCES icinga_usergroup (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_notification_usergroup_notification + FOREIGN KEY (notification_id) + REFERENCES icinga_notification (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE import_source ( + id serial, + source_name character varying(64) NOT NULL, + key_column character varying(64) NOT NULL, + provider_class character varying(128) NOT NULL, + import_state enum_sync_state NOT NULL DEFAULT 'unknown', + last_error_message text NULL DEFAULT NULL, + last_attempt timestamp with time zone NULL DEFAULT NULL, + description text DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE INDEX import_source_search_idx ON import_source (key_column); +CREATE UNIQUE INDEX import_source_name ON import_source (source_name); + + +CREATE TABLE import_source_setting ( + source_id integer NOT NULL, + setting_name character varying(64) NOT NULL, + setting_value text NOT NULL, + PRIMARY KEY (source_id, setting_name), + CONSTRAINT import_source_settings_source + FOREIGN KEY (source_id) + REFERENCES import_source (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX import_source_setting_source ON import_source_setting (source_id); + + +CREATE TABLE import_row_modifier ( + id bigserial, + source_id integer NOT NULL, + property_name character varying(255) NOT NULL, + target_property character varying(255) DEFAULT NULL, + provider_class character varying(128) NOT NULL, + priority integer NOT NULL, + description text DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT row_modifier_import_source + FOREIGN KEY (source_id) + REFERENCES import_source (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX import_row_modifier_search_idx ON import_row_modifier (property_name); +CREATE UNIQUE INDEX import_row_modifier_prio + ON import_row_modifier (source_id, priority); + + +CREATE TABLE import_row_modifier_setting ( + row_modifier_id serial, + setting_name character varying(64) NOT NULL, + setting_value TEXT DEFAULT NULL, + PRIMARY KEY (row_modifier_id, setting_name), + CONSTRAINT row_modifier_settings + FOREIGN KEY (row_modifier_id) + REFERENCES import_row_modifier (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE imported_rowset ( + checksum bytea CHECK(LENGTH(checksum) = 20), + PRIMARY KEY (checksum) +); + + +CREATE TABLE import_run ( + id serial, + source_id integer NOT NULL, + rowset_checksum bytea CHECK(LENGTH(rowset_checksum) = 20), + start_time timestamp with time zone NOT NULL, + end_time timestamp with time zone DEFAULT NULL, + succeeded enum_boolean DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT import_run_source + FOREIGN KEY (source_id) + REFERENCES import_source (id) + ON DELETE CASCADE + ON UPDATE RESTRICT, + CONSTRAINT import_run_rowset + FOREIGN KEY (rowset_checksum) + REFERENCES imported_rowset (checksum) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX import_run_import_source ON import_run (source_id); +CREATE INDEX import_run_rowset ON import_run (rowset_checksum); + + +CREATE TABLE imported_row ( + checksum bytea CHECK(LENGTH(checksum) = 20), + object_name character varying(255) NOT NULL, + PRIMARY KEY (checksum) +); + +COMMENT ON COLUMN imported_row.checksum IS 'sha1(object_name;property_checksum;...)'; + + +CREATE TABLE imported_rowset_row ( + rowset_checksum bytea CHECK(LENGTH(rowset_checksum) = 20), + row_checksum bytea CHECK(LENGTH(row_checksum) = 20), + PRIMARY KEY (rowset_checksum, row_checksum), + CONSTRAINT imported_rowset_row_rowset + FOREIGN KEY (rowset_checksum) + REFERENCES imported_rowset (checksum) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT imported_rowset_row_row + FOREIGN KEY (row_checksum) + REFERENCES imported_row (checksum) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX imported_rowset_row_rowset_checksum ON imported_rowset_row (rowset_checksum); +CREATE INDEX imported_rowset_row_row_checksum ON imported_rowset_row (row_checksum); + + +CREATE TABLE imported_property ( + checksum bytea CHECK(LENGTH(checksum) = 20), + property_name character varying(64) NOT NULL, + property_value text NOT NULL, + format enum_property_format, + PRIMARY KEY (checksum) +); + +CREATE INDEX imported_property_search_idx ON imported_property (property_name); + + +CREATE TABLE imported_row_property ( + row_checksum bytea CHECK(LENGTH(row_checksum) = 20), + property_checksum bytea CHECK(LENGTH(property_checksum) = 20), + PRIMARY KEY (row_checksum, property_checksum), + CONSTRAINT imported_row_property_row + FOREIGN KEY (row_checksum) + REFERENCES imported_row (checksum) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT imported_row_property_property + FOREIGN KEY (property_checksum) + REFERENCES imported_property (checksum) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX imported_row_property_row_checksum ON imported_row_property (row_checksum); +CREATE INDEX imported_row_property_property_checksum ON imported_row_property (property_checksum); + + +CREATE TABLE sync_rule ( + id serial, + rule_name character varying(255) NOT NULL, + object_type enum_sync_rule_object_type NOT NULL, + update_policy enum_sync_rule_update_policy NOT NULL, + purge_existing enum_boolean NOT NULL DEFAULT 'n', + purge_action enum_sync_rule_purge_action NULL DEFAULT NULL, + filter_expression text DEFAULT NULL, + sync_state enum_sync_state NOT NULL DEFAULT 'unknown', + last_error_message text NULL DEFAULT NULL, + last_attempt timestamp with time zone NULL DEFAULT NULL, + description text DEFAULT NULL, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX sync_rule_name ON sync_rule (rule_name); + +CREATE TABLE sync_property ( + id serial, + rule_id integer NOT NULL, + source_id integer NOT NULL, + source_expression character varying(255) NOT NULL, + destination_field character varying(64), + priority smallint NOT NULL, + filter_expression text DEFAULT NULL, + merge_policy enum_sync_property_merge_policy DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT sync_property_rule + FOREIGN KEY (rule_id) + REFERENCES sync_rule (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT sync_property_source + FOREIGN KEY (source_id) + REFERENCES import_source (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX sync_property_rule ON sync_property (rule_id); +CREATE INDEX sync_property_source ON sync_property (source_id); + + +CREATE TABLE sync_run ( + id bigserial, + rule_id integer DEFAULT NULL, + rule_name character varying(255) NOT NULL, + start_time TIMESTAMP WITH TIME ZONE NOT NULL, + duration_ms integer DEFAULT NULL, + objects_deleted integer DEFAULT 0, + objects_created integer DEFAULT 0, + objects_modified integer DEFAULT 0, + last_former_activity bytea DEFAULT NULL CHECK(LENGTH(last_former_activity) = 20), + last_related_activity bytea DEFAULT NULL CHECK(LENGTH(last_related_activity) = 20), + PRIMARY KEY (id), + CONSTRAINT sync_run_rule + FOREIGN KEY (rule_id) + REFERENCES sync_rule (id) + ON DELETE SET NULL + ON UPDATE CASCADE +); + + +CREATE TABLE icinga_notification_states_set ( + notification_id integer NOT NULL, + property enum_state_name NOT NULL, + merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', + PRIMARY KEY (notification_id, property, merge_behaviour), + CONSTRAINT icinga_notification_states_set_notification + FOREIGN KEY (notification_id) + REFERENCES icinga_notification (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +COMMENT ON COLUMN icinga_notification_states_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; + + +CREATE TABLE icinga_notification_types_set ( + notification_id integer NOT NULL, + property enum_type_name NOT NULL, + merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', + PRIMARY KEY (notification_id, property, merge_behaviour), + CONSTRAINT icinga_notification_types_set_notification + FOREIGN KEY (notification_id) + REFERENCES icinga_notification (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +COMMENT ON COLUMN icinga_notification_types_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; + + +CREATE TABLE icinga_notification_var ( + notification_id integer NOT NULL, + checksum bytea DEFAULT NULL UNIQUE CHECK(LENGTH(checksum) = 20), + varname VARCHAR(255) NOT NULL, + varvalue TEXT DEFAULT NULL, + format enum_property_format, + PRIMARY KEY (notification_id, varname), + CONSTRAINT icinga_notification_var_notification + FOREIGN KEY (notification_id) + REFERENCES icinga_notification (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX notification_var_command ON icinga_notification_var (notification_id); +CREATE INDEX notification_var_search_idx ON icinga_notification_var (varname); +CREATE INDEX notification_var_checksum ON icinga_notification_var (checksum); + +CREATE TABLE icinga_notification_field ( + notification_id integer NOT NULL, + datafield_id integer NOT NULL, + is_required enum_boolean NOT NULL, + var_filter TEXT DEFAULT NULL, + PRIMARY KEY (notification_id, datafield_id), + CONSTRAINT icinga_notification_field_notification + FOREIGN KEY (notification_id) + REFERENCES icinga_notification (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_notification_field_datafield + FOREIGN KEY (datafield_id) + REFERENCES director_datafield (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX notification_field_key ON icinga_notification_field (notification_id, datafield_id); +CREATE INDEX notification_field_notification ON icinga_notification_field (notification_id); +CREATE INDEX notification_field_datafield ON icinga_notification_field (datafield_id); +COMMENT ON COLUMN icinga_notification_field.notification_id IS 'Makes only sense for templates'; + + +CREATE TABLE icinga_notification_inheritance ( + notification_id integer NOT NULL, + parent_notification_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (notification_id, parent_notification_id), + CONSTRAINT icinga_notification_inheritance_notification + FOREIGN KEY (notification_id) + REFERENCES icinga_notification (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_notification_inheritance_parent_notification + FOREIGN KEY (parent_notification_id) + REFERENCES icinga_notification (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX notification_inheritance ON icinga_notification_inheritance (notification_id, weight); + + +CREATE TABLE icinga_var ( + checksum bytea NOT NULL CHECK(LENGTH(checksum) = 20), + rendered_checksum bytea NOT NULL CHECK(LENGTH(checksum) = 20), + varname character varying(255) NOT NULL, + varvalue TEXT NOT NULL, + rendered TEXT NOT NULL, + PRIMARY KEY (checksum) +); + +CREATE INDEX var_search_idx ON icinga_var (varname); + + +CREATE TABLE icinga_flat_var ( + var_checksum bytea NOT NULL CHECK(LENGTH(var_checksum) = 20), + flatname_checksum bytea NOT NULL CHECK(LENGTH(flatname_checksum) = 20), + flatname character varying(512) NOT NULL, + flatvalue TEXT NOT NULL, + PRIMARY KEY (var_checksum, flatname_checksum), + CONSTRAINT flat_var_var + FOREIGN KEY (var_checksum) + REFERENCES icinga_var (checksum) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX flat_var_var_checksum ON icinga_flat_var (var_checksum); +CREATE INDEX flat_var_search_varname ON icinga_flat_var (flatname); +CREATE INDEX flat_var_search_varvalue ON icinga_flat_var (flatvalue); + + +CREATE TABLE icinga_command_resolved_var ( + command_id integer NOT NULL, + varname character varying(255) NOT NULL, + checksum bytea NOT NULL CHECK(LENGTH(checksum) = 20), + PRIMARY KEY (command_id, checksum), + CONSTRAINT command_resolved_var_command + FOREIGN KEY (command_id) + REFERENCES icinga_command (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT command_resolved_var_checksum + FOREIGN KEY (checksum) + REFERENCES icinga_var (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX command_resolved_var_search_varname ON icinga_command_resolved_var (varname); +CREATE INDEX command_resolved_var_command_id ON icinga_command_resolved_var (command_id); +CREATE INDEX command_resolved_var_schecksum ON icinga_command_resolved_var (checksum); + + +CREATE TABLE icinga_host_resolved_var ( + host_id integer NOT NULL, + varname character varying(255) NOT NULL, + checksum bytea NOT NULL CHECK(LENGTH(checksum) = 20), + PRIMARY KEY (host_id, checksum), + CONSTRAINT host_resolved_var_host + FOREIGN KEY (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT host_resolved_var_checksum + FOREIGN KEY (checksum) + REFERENCES icinga_var (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX host_resolved_var_search_varname ON icinga_host_resolved_var (varname); +CREATE INDEX host_resolved_var_host_id ON icinga_host_resolved_var (host_id); +CREATE INDEX host_resolved_var_schecksum ON icinga_host_resolved_var (checksum); + + +CREATE TABLE icinga_notification_resolved_var ( + notification_id integer NOT NULL, + varname character varying(255) NOT NULL, + checksum bytea NOT NULL CHECK(LENGTH(checksum) = 20), + PRIMARY KEY (notification_id, checksum), + CONSTRAINT notification_resolved_var_notification + FOREIGN KEY (notification_id) + REFERENCES icinga_notification (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT notification_resolved_var_checksum + FOREIGN KEY (checksum) + REFERENCES icinga_var (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX notification_resolved_var_search_varname ON icinga_notification_resolved_var (varname); +CREATE INDEX notification_resolved_var_notification_id ON icinga_notification_resolved_var (notification_id); +CREATE INDEX notification_resolved_var_schecksum ON icinga_notification_resolved_var (checksum); + + +CREATE TABLE icinga_service_set_resolved_var ( + service_set_id integer NOT NULL, + varname character varying(255) NOT NULL, + checksum bytea NOT NULL CHECK(LENGTH(checksum) = 20), + PRIMARY KEY (service_set_id, checksum), + CONSTRAINT service_set_resolved_var_service_set + FOREIGN KEY (service_set_id) + REFERENCES icinga_service_set (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT service_set_resolved_var_checksum + FOREIGN KEY (checksum) + REFERENCES icinga_var (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX service_set_resolved_var_search_varname ON icinga_service_set_resolved_var (varname); +CREATE INDEX service_set_resolved_var_service_set_id ON icinga_service_set_resolved_var (service_set_id); +CREATE INDEX service_set_resolved_var_schecksum ON icinga_service_set_resolved_var (checksum); + + +CREATE TABLE icinga_service_resolved_var ( + service_id integer NOT NULL, + varname character varying(255) NOT NULL, + checksum bytea NOT NULL CHECK(LENGTH(checksum) = 20), + PRIMARY KEY (service_id, checksum), + CONSTRAINT service_resolved_var_service + FOREIGN KEY (service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT service_resolved_var_checksum + FOREIGN KEY (checksum) + REFERENCES icinga_var (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX service_resolved_var_search_varname ON icinga_service_resolved_var (varname); +CREATE INDEX service_resolved_var_service_id ON icinga_service_resolved_var (service_id); +CREATE INDEX service_resolved_var_schecksum ON icinga_service_resolved_var (checksum); + + +CREATE TABLE icinga_user_resolved_var ( + user_id integer NOT NULL, + varname character varying(255) NOT NULL, + checksum bytea NOT NULL CHECK(LENGTH(checksum) = 20), + PRIMARY KEY (user_id, checksum), + CONSTRAINT user_resolved_var_user + FOREIGN KEY (user_id) + REFERENCES icinga_user (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT user_resolved_var_checksum + FOREIGN KEY (checksum) + REFERENCES icinga_var (checksum) + ON DELETE RESTRICT + ON UPDATE RESTRICT +); + +CREATE INDEX user_resolved_var_search_varname ON icinga_user_resolved_var (varname); +CREATE INDEX user_resolved_var_user_id ON icinga_user_resolved_var (user_id); +CREATE INDEX user_resolved_var_schecksum ON icinga_user_resolved_var (checksum); + + +CREATE TABLE icinga_dependency ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean DEFAULT 'n', + apply_to enum_host_service NULL DEFAULT NULL, + parent_host_id integer DEFAULT NULL, + parent_host_var character varying(128) DEFAULT NULL, + parent_service_id integer DEFAULT NULL, + child_host_id integer DEFAULT NULL, + child_service_id integer DEFAULT NULL, + disable_checks enum_boolean DEFAULT NULL, + disable_notifications enum_boolean DEFAULT NULL, + ignore_soft_states enum_boolean DEFAULT NULL, + period_id integer DEFAULT NULL, + zone_id integer DEFAULT NULL, + assign_filter text DEFAULT NULL, + parent_service_by_name character varying(255), + PRIMARY KEY (id), + CONSTRAINT icinga_dependency_parent_host + FOREIGN KEY (parent_host_id) + REFERENCES icinga_host (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_dependency_parent_service + FOREIGN KEY (parent_service_id) + REFERENCES icinga_service (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_dependency_child_host + FOREIGN KEY (child_host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_dependency_child_service + FOREIGN KEY (child_service_id) + REFERENCES icinga_service (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_dependency_period + FOREIGN KEY (period_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_dependency_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE INDEX dependency_parent_host ON icinga_dependency (parent_host_id); +CREATE INDEX dependency_parent_service ON icinga_dependency (parent_service_id); +CREATE INDEX dependency_child_host ON icinga_dependency (child_host_id); +CREATE INDEX dependency_child_service ON icinga_dependency (child_service_id); +CREATE INDEX dependency_period ON icinga_dependency (period_id); +CREATE INDEX dependency_zone ON icinga_dependency (zone_id); + + +CREATE TABLE icinga_dependency_inheritance ( + dependency_id integer NOT NULL, + parent_dependency_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (dependency_id, parent_dependency_id), + CONSTRAINT icinga_dependency_inheritance_dependency + FOREIGN KEY (dependency_id) + REFERENCES icinga_dependency (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_dependency_inheritance_parent_dependency + FOREIGN KEY (parent_dependency_id) + REFERENCES icinga_dependency (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX dependency_inheritance_unique_order ON icinga_dependency_inheritance (dependency_id, weight); +CREATE INDEX dependency_inheritance_dependency ON icinga_dependency_inheritance (dependency_id); +CREATE INDEX dependency_inheritance_dependency_parent ON icinga_dependency_inheritance (parent_dependency_id); + + +CREATE TABLE icinga_dependency_states_set ( + dependency_id integer NOT NULL, + property enum_state_name NOT NULL, + merge_behaviour enum_set_merge_behaviour NOT NULL DEFAULT 'override', + PRIMARY KEY (dependency_id, property, merge_behaviour), + CONSTRAINT icinga_dependency_states_set_dependency + FOREIGN KEY (dependency_id) + REFERENCES icinga_dependency (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX dependency_states_set_dependency ON icinga_dependency_states_set (dependency_id); +COMMENT ON COLUMN icinga_dependency_states_set.merge_behaviour IS 'override: = [], extend: += [], blacklist: -= []'; + +CREATE TABLE icinga_timeperiod_include ( + timeperiod_id integer NOT NULL, + include_id integer NOT NULL, + PRIMARY KEY (timeperiod_id, include_id), + CONSTRAINT icinga_timeperiod_timeperiod_include + FOREIGN KEY (include_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_timeperiod_include + FOREIGN KEY (timeperiod_id) + REFERENCES icinga_timeperiod (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE TABLE icinga_timeperiod_exclude ( + timeperiod_id integer NOT NULL, + exclude_id integer NOT NULL, + PRIMARY KEY (timeperiod_id, exclude_id), + CONSTRAINT icinga_timeperiod_timeperiod_exclude + FOREIGN KEY (exclude_id) + REFERENCES icinga_timeperiod (id) + ON DELETE RESTRICT + ON UPDATE CASCADE, + CONSTRAINT icinga_timeperiod_exclude + FOREIGN KEY (timeperiod_id) + REFERENCES icinga_timeperiod (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE icinga_scheduled_downtime ( + id serial, + uuid bytea UNIQUE CHECK(LENGTH(uuid) = 16), + object_name character varying(255) NOT NULL, + zone_id integer DEFAULT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean NOT NULL DEFAULT 'n', + apply_to enum_host_service NULL DEFAULT NULL, + assign_filter text DEFAULT NULL, + author character varying(255) DEFAULT NULL, + comment text DEFAULT NULL, + fixed enum_boolean DEFAULT NULL, + duration int DEFAULT NULL, + with_services enum_boolean NULL DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT icinga_scheduled_downtime_zone + FOREIGN KEY (zone_id) + REFERENCES icinga_zone (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX scheduled_downtime_object_name ON icinga_scheduled_downtime (object_name); +CREATE INDEX scheduled_downtime_zone ON icinga_scheduled_downtime (zone_id); + + +CREATE TABLE icinga_scheduled_downtime_inheritance ( + scheduled_downtime_id integer NOT NULL, + parent_scheduled_downtime_id integer NOT NULL, + weight integer DEFAULT NULL, + PRIMARY KEY (scheduled_downtime_id, parent_scheduled_downtime_id), + CONSTRAINT icinga_scheduled_downtime_inheritance_scheduled_downtime + FOREIGN KEY (scheduled_downtime_id) + REFERENCES icinga_scheduled_downtime (id) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT icinga_scheduled_downtime_inheritance_parent_scheduled_downtime + FOREIGN KEY (parent_scheduled_downtime_id) + REFERENCES icinga_scheduled_downtime (id) + ON DELETE RESTRICT + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX scheduled_downtime_inheritance_unique_order ON icinga_scheduled_downtime_inheritance (scheduled_downtime_id, weight); +CREATE INDEX scheduled_downtime_inheritance_scheduled_downtime ON icinga_scheduled_downtime_inheritance (scheduled_downtime_id); +CREATE INDEX scheduled_downtime_inheritance_scheduled_downtime_parent ON icinga_scheduled_downtime_inheritance (parent_scheduled_downtime_id); + + +CREATE TABLE icinga_scheduled_downtime_range ( + scheduled_downtime_id serial, + range_key character varying(255) NOT NULL, + range_value character varying(255) NOT NULL, + range_type enum_timeperiod_range_type NOT NULL DEFAULT 'include', + merge_behaviour enum_merge_behaviour NOT NULL DEFAULT 'set', + PRIMARY KEY (scheduled_downtime_id, range_type, range_key), + CONSTRAINT icinga_scheduled_downtime_range_scheduled_downtime + FOREIGN KEY (scheduled_downtime_id) + REFERENCES icinga_scheduled_downtime (id) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE INDEX scheduled_downtime_range_scheduled_downtime ON icinga_scheduled_downtime_range (scheduled_downtime_id); +COMMENT ON COLUMN icinga_scheduled_downtime_range.range_key IS 'monday, ...'; +COMMENT ON COLUMN icinga_scheduled_downtime_range.range_value IS '00:00-24:00, ...'; +COMMENT ON COLUMN icinga_scheduled_downtime_range.range_type IS 'include -> ranges {}, exclude ranges_ignore {} - not yet'; +COMMENT ON COLUMN icinga_scheduled_downtime_range.merge_behaviour IS 'set -> = {}, add -> += {}, substract -> -= {}'; + + +CREATE TABLE director_branch ( + uuid bytea NOT NULL UNIQUE CHECK(LENGTH(uuid) = 16), + owner character varying(255) NOT NULL, + branch_name character varying(255) NOT NULL, + description text DEFAULT NULL, + ts_merge_request bigint DEFAULT NULL, + PRIMARY KEY(uuid) +); +CREATE UNIQUE INDEX branch_branch_name ON director_branch (branch_name); + +CREATE TYPE enum_branch_action AS ENUM('create', 'modify', 'delete'); + +CREATE TABLE director_branch_activity ( + timestamp_ns bigint NOT NULL, + object_uuid bytea NOT NULL CHECK(LENGTH(object_uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + action enum_branch_action NOT NULL, + object_table character varying(64) NOT NULL, + author character varying(255) NOT NULL, + former_properties text NOT NULL, + modified_properties text NOT NULL, + PRIMARY KEY (timestamp_ns), + CONSTRAINT branch_activity_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); +CREATE INDEX branch_activity_object_uuid ON director_branch_activity (object_uuid); +CREATE INDEX branch_activity_branch_uuid ON director_branch_activity (branch_uuid); + + +CREATE TABLE branched_icinga_host ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + display_name CHARACTER VARYING(255) DEFAULT NULL, + address character varying(255) DEFAULT NULL, + address6 character varying(45) DEFAULT NULL, + check_command character varying(255) DEFAULT NULL, + max_check_attempts integer DEFAULT NULL, + check_period character varying(255) DEFAULT NULL, + check_interval character varying(8) DEFAULT NULL, + retry_interval character varying(8) DEFAULT NULL, + check_timeout smallint DEFAULT NULL, + enable_notifications enum_boolean DEFAULT NULL, + enable_active_checks enum_boolean DEFAULT NULL, + enable_passive_checks enum_boolean DEFAULT NULL, + enable_event_handler enum_boolean DEFAULT NULL, + enable_flapping enum_boolean DEFAULT NULL, + enable_perfdata enum_boolean DEFAULT NULL, + event_command character varying(255) DEFAULT NULL, + flapping_threshold_high smallint default null, + flapping_threshold_low smallint default null, + volatile enum_boolean DEFAULT NULL, + zone character varying(255) DEFAULT NULL, + command_endpoint character varying(255) DEFAULT NULL, + notes text DEFAULT NULL, + notes_url character varying(255) DEFAULT NULL, + action_url character varying(255) DEFAULT NULL, + icon_image character varying(255) DEFAULT NULL, + icon_image_alt character varying(255) DEFAULT NULL, + has_agent enum_boolean DEFAULT NULL, + master_should_connect enum_boolean DEFAULT NULL, + accept_config enum_boolean DEFAULT NULL, + custom_endpoint_name character varying(255) DEFAULT NULL, + api_key character varying(40) DEFAULT NULL, + -- template_choice character varying(255) DEFAULT NULL, -- TODO: Forbid them! + + imports TEXT DEFAULT NULL, + groups TEXT DEFAULT NULL, + vars TEXT DEFAULT NULL, + + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_host_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX host_branch_object_name ON branched_icinga_host (branch_uuid, object_name); +CREATE INDEX branched_host_search_object_name ON branched_icinga_host (object_name); +CREATE INDEX branched_host_search_display_name ON branched_icinga_host (display_name); + + +CREATE TABLE branched_icinga_hostgroup ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + display_name character varying(255) DEFAULT NULL, + assign_filter text DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_hostgroup_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX hostgroup_branch_object_name ON branched_icinga_hostgroup (branch_uuid, object_name); +CREATE INDEX branched_hostgroup_search_object_name ON branched_icinga_hostgroup (object_name); +CREATE INDEX branched_hostgroup_search_display_name ON branched_icinga_hostgroup (display_name); + + +CREATE TABLE branched_icinga_servicegroup ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + display_name character varying(255) DEFAULT NULL, + assign_filter text DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_servicegroup_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX servicegroup_branch_object_name ON branched_icinga_servicegroup (branch_uuid, object_name); +CREATE INDEX branched_servicegroup_search_object_name ON branched_icinga_servicegroup (object_name); +CREATE INDEX branched_servicegroup_search_display_name ON branched_icinga_servicegroup (display_name); + + +CREATE TABLE branched_icinga_usergroup ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + display_name character varying(255) DEFAULT NULL, + assign_filter text DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_usergroup_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX usergroup_branch_object_name ON branched_icinga_usergroup (branch_uuid, object_name); +CREATE INDEX branched_usergroup_search_object_name ON branched_icinga_usergroup (object_name); +CREATE INDEX branched_usergroup_search_display_name ON branched_icinga_usergroup (display_name); + + +CREATE TABLE branched_icinga_user ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + display_name character varying(255) DEFAULT NULL, + email character varying(255) DEFAULT NULL, + pager character varying(255) DEFAULT NULL, + enable_notifications enum_boolean DEFAULT NULL, + period character varying(255) DEFAULT NULL, + zone character varying(255) DEFAULT NULL, + + imports TEXT DEFAULT NULL, + groups TEXT DEFAULT NULL, + vars TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_user_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX user_branch_object_name ON branched_icinga_user (branch_uuid, object_name); +CREATE INDEX branched_user_search_object_name ON branched_icinga_user (object_name); +CREATE INDEX branched_user_search_display_name ON branched_icinga_user (display_name); + + +CREATE TABLE branched_icinga_zone ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + parent character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + is_global enum_boolean DEFAULT NULL, + + imports TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_zone_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX zone_branch_object_name ON branched_icinga_zone (branch_uuid, object_name); +CREATE INDEX branched_zone_search_object_name ON branched_icinga_zone (object_name); + + +CREATE TABLE branched_icinga_timeperiod ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + display_name character varying(255) DEFAULT NULL, + update_method character varying(64) DEFAULT NULL, + zone character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + prefer_includes enum_boolean DEFAULT NULL, + + imports TEXT DEFAULT NULL, + ranges TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_timeperiod_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX timeperiod_branch_object_name ON branched_icinga_timeperiod (branch_uuid, object_name); +CREATE INDEX branched_timeperiod_search_object_name ON branched_icinga_timeperiod (object_name); +CREATE INDEX branched_timeperiod_search_display_name ON branched_icinga_timeperiod (display_name); + + +CREATE TABLE branched_icinga_command ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean NOT NULL DEFAULT NULL, + methods_execute character varying(64) DEFAULT NULL, + command text DEFAULT NULL, + is_string enum_boolean DEFAULT NULL, +-- env text DEFAULT NULL, + timeout smallint DEFAULT NULL, + zone character varying(255) DEFAULT NULL, + + imports TEXT DEFAULT NULL, + arguments TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_command_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX command_branch_object_name ON branched_icinga_command (branch_uuid, object_name); +CREATE INDEX branched_command_search_object_name ON branched_icinga_command (object_name); + + +CREATE TABLE branched_icinga_apiuser ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name CHARACTER VARYING(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean NOT NULL DEFAULT NULL, + password CHARACTER VARYING(255) DEFAULT NULL, + client_dn CHARACTER VARYING(64) DEFAULT NULL, + permissions TEXT DEFAULT NULL, + + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_apiuser_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX apiuser_branch_object_name ON branched_icinga_apiuser (branch_uuid, object_name); +CREATE INDEX branched_apiuser_search_object_name ON branched_icinga_apiuser (object_name); + + +CREATE TABLE branched_icinga_endpoint ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + zone character varying(255) DEFAULT NULL, + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean NOT NULL DEFAULT NULL, + host character varying(255) DEFAULT NULL, + port d_smallint DEFAULT NULL, + log_duration character varying(32) DEFAULT NULL, + apiuser character varying(255) DEFAULT NULL, + + imports TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_endpoint_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX endpoint_branch_object_name ON branched_icinga_endpoint (branch_uuid, object_name); +CREATE INDEX branched_endpoint_search_object_name ON branched_icinga_endpoint (object_name); + + +CREATE TABLE branched_icinga_service ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + display_name character varying(255) DEFAULT NULL, + host character varying(255) DEFAULT NULL, + service_set character varying(255) DEFAULT NULL, + check_command character varying(255) DEFAULT NULL, + max_check_attempts integer DEFAULT NULL, + check_period character varying(255) DEFAULT NULL, + check_interval character varying(8) DEFAULT NULL, + retry_interval character varying(8) DEFAULT NULL, + check_timeout smallint DEFAULT NULL, + enable_notifications enum_boolean DEFAULT NULL, + enable_active_checks enum_boolean DEFAULT NULL, + enable_passive_checks enum_boolean DEFAULT NULL, + enable_event_handler enum_boolean DEFAULT NULL, + enable_flapping enum_boolean DEFAULT NULL, + enable_perfdata enum_boolean DEFAULT NULL, + event_command character varying(255) DEFAULT NULL, + flapping_threshold_high smallint DEFAULT NULL, + flapping_threshold_low smallint DEFAULT NULL, + volatile enum_boolean DEFAULT NULL, + zone character varying(255) DEFAULT NULL, + command_endpoint character varying(255) DEFAULT NULL, + notes text DEFAULT NULL, + notes_url character varying(255) DEFAULT NULL, + action_url character varying(255) DEFAULT NULL, + icon_image character varying(255) DEFAULT NULL, + icon_image_alt character varying(255) DEFAULT NULL, + use_agent enum_boolean DEFAULT NULL, + apply_for character varying(255) DEFAULT NULL, + use_var_overrides enum_boolean DEFAULT NULL, + assign_filter text DEFAULT NULL, + -- template_choice_id int DEFAULT NULL, + + imports TEXT DEFAULT NULL, + groups TEXT DEFAULT NULL, + vars TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_service_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX service_branch_object_name ON branched_icinga_service (branch_uuid, object_name); +CREATE INDEX branched_service_search_object_name ON branched_icinga_service (object_name); +CREATE INDEX branched_service_search_display_name ON branched_icinga_service (display_name); + + +CREATE TABLE branched_icinga_service_set ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + host character varying(255) DEFAULT NULL, + description TEXT DEFAULT NULL, + assign_filter text DEFAULT NULL, + + + imports TEXT DEFAULT NULL, + vars TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_service_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX service_set_branch_object_name ON branched_icinga_service_set (branch_uuid, object_name); +CREATE INDEX branched_service_set_search_object_name ON branched_icinga_service_set (object_name); + + +CREATE TABLE branched_icinga_notification ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name CHARACTER VARYING(255) DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + apply_to enum_host_service DEFAULT NULL, + host character varying(255) DEFAULT NULL, + service character varying(255) DEFAULT NULL, + times_begin integer DEFAULT NULL, + times_end integer DEFAULT NULL, + notification_interval integer DEFAULT NULL, + command character varying(255) DEFAULT NULL, + period character varying(255) DEFAULT NULL, + zone character varying(255) DEFAULT NULL, + assign_filter text DEFAULT NULL, + + states TEXT DEFAULT NULL, + types TEXT DEFAULT NULL, + users TEXT DEFAULT NULL, + usergroups TEXT DEFAULT NULL, + + imports TEXT DEFAULT NULL, + vars TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_notification_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX notification_branch_object_name ON branched_icinga_notification (branch_uuid, object_name); +CREATE INDEX branched_notification_search_object_name ON branched_icinga_notification (object_name); + + +CREATE TABLE branched_icinga_scheduled_downtime ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) DEFAULT NULL, + zone_id integer DEFAULT NULL, + object_type enum_object_type_all DEFAULT NULL, + disabled enum_boolean DEFAULT NULL, + apply_to enum_host_service DEFAULT NULL, + assign_filter text DEFAULT NULL, + author character varying(255) DEFAULT NULL, + comment text DEFAULT NULL, + fixed enum_boolean DEFAULT NULL, + duration int DEFAULT NULL, + with_services enum_boolean DEFAULT NULL, + + imports TEXT DEFAULT NULL, + ranges TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_scheduled_downtime_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX scheduled_downtime_branch_object_name ON branched_icinga_scheduled_downtime (branch_uuid, object_name); +CREATE INDEX branched_scheduled_downtime_search_object_name ON branched_icinga_scheduled_downtime (object_name); + + +CREATE TABLE branched_icinga_dependency ( + uuid bytea NOT NULL CHECK(LENGTH(uuid) = 16), + branch_uuid bytea NOT NULL CHECK(LENGTH(branch_uuid) = 16), + branch_created enum_boolean NOT NULL DEFAULT 'n', + branch_deleted enum_boolean NOT NULL DEFAULT 'n', + + object_name character varying(255) NOT NULL, + object_type enum_object_type_all NOT NULL, + disabled enum_boolean DEFAULT 'n', + apply_to enum_host_service NULL DEFAULT NULL, + parent_host character varying(255) DEFAULT NULL, + parent_host_var character varying(128) DEFAULT NULL, + parent_service character varying(255) DEFAULT NULL, + child_host character varying(255) DEFAULT NULL, + child_service character varying(255) DEFAULT NULL, + disable_checks enum_boolean DEFAULT NULL, + disable_notifications enum_boolean DEFAULT NULL, + ignore_soft_states enum_boolean DEFAULT NULL, + period_id integer DEFAULT NULL, + zone_id integer DEFAULT NULL, + assign_filter text DEFAULT NULL, + parent_service_by_name character varying(255), + + imports TEXT DEFAULT NULL, + set_null TEXT DEFAULT NULL, + PRIMARY KEY (branch_uuid, uuid), + CONSTRAINT icinga_dependency_branch + FOREIGN KEY (branch_uuid) + REFERENCES director_branch (uuid) + ON DELETE CASCADE + ON UPDATE CASCADE +); + +CREATE UNIQUE INDEX dependency_branch_object_name ON branched_icinga_dependency (branch_uuid, object_name); +CREATE INDEX branched_dependency_search_object_name ON branched_icinga_dependency (object_name); + + +INSERT INTO director_schema_migration + (schema_version, migration_time) + VALUES (182, NOW()); |