From 05d5e97dd5b73d0792e3416fd66b9257b752fd0c Mon Sep 17 00:00:00 2001 From: Jean Flach Date: Tue, 19 Mar 2019 14:34:14 +0100 Subject: [PATCH 1/3] Add Schema --- etc/schema/mysql/command.sql | 62 +++++++ etc/schema/mysql/comment.sql | 44 +++++ etc/schema/mysql/customvar.sql | 26 +++ etc/schema/mysql/downtime.sql | 54 ++++++ etc/schema/mysql/endpoint.sql | 16 ++ etc/schema/mysql/environment.sql | 18 ++ etc/schema/mysql/helper/cleanup_url.sql | 29 +++ etc/schema/mysql/helper/functions.sql | 5 + ...populate_pending_hosts_for_environment.sql | 56 ++++++ etc/schema/mysql/host.sql | 143 +++++++++++++++ etc/schema/mysql/notification.sql | 54 ++++++ etc/schema/mysql/service.sql | 136 +++++++++++++++ etc/schema/mysql/tests/action_url.csv | 11 ++ etc/schema/mysql/tests/command.csv | 7 + etc/schema/mysql/tests/endpoint.csv | 2 + etc/schema/mysql/tests/environment.csv | 4 + etc/schema/mysql/tests/eventcommand.csv | 2 + etc/schema/mysql/tests/host.csv | 2 + etc/schema/mysql/tests/hostgroup.csv | 5 + etc/schema/mysql/tests/hostgroup_member.csv | 2 + etc/schema/mysql/tests/icon_image.csv | 11 ++ etc/schema/mysql/tests/import.sql | 165 ++++++++++++++++++ etc/schema/mysql/tests/notes_url.csv | 11 ++ etc/schema/mysql/tests/notification.csv | 2 + etc/schema/mysql/tests/service.csv | 3 + etc/schema/mysql/tests/servicegroup.csv | 2 + .../mysql/tests/servicegroup_member.csv | 2 + etc/schema/mysql/tests/user.csv | 3 + etc/schema/mysql/tests/usergroup.csv | 3 + etc/schema/mysql/tests/usergroup_member.csv | 3 + etc/schema/mysql/tests/zone.csv | 3 + etc/schema/mysql/timeperiod.sql | 50 ++++++ etc/schema/mysql/types | 128 ++++++++++++++ etc/schema/mysql/url.sql | 32 ++++ etc/schema/mysql/user.sql | 67 +++++++ etc/schema/mysql/zone.sql | 31 ++++ 36 files changed, 1194 insertions(+) create mode 100644 etc/schema/mysql/command.sql create mode 100644 etc/schema/mysql/comment.sql create mode 100644 etc/schema/mysql/customvar.sql create mode 100644 etc/schema/mysql/downtime.sql create mode 100644 etc/schema/mysql/endpoint.sql create mode 100644 etc/schema/mysql/environment.sql create mode 100644 etc/schema/mysql/helper/cleanup_url.sql create mode 100644 etc/schema/mysql/helper/functions.sql create mode 100644 etc/schema/mysql/helper/populate_pending_hosts_for_environment.sql create mode 100644 etc/schema/mysql/host.sql create mode 100644 etc/schema/mysql/notification.sql create mode 100644 etc/schema/mysql/service.sql create mode 100644 etc/schema/mysql/tests/action_url.csv create mode 100644 etc/schema/mysql/tests/command.csv create mode 100644 etc/schema/mysql/tests/endpoint.csv create mode 100644 etc/schema/mysql/tests/environment.csv create mode 100644 etc/schema/mysql/tests/eventcommand.csv create mode 100644 etc/schema/mysql/tests/host.csv create mode 100644 etc/schema/mysql/tests/hostgroup.csv create mode 100644 etc/schema/mysql/tests/hostgroup_member.csv create mode 100644 etc/schema/mysql/tests/icon_image.csv create mode 100644 etc/schema/mysql/tests/import.sql create mode 100644 etc/schema/mysql/tests/notes_url.csv create mode 100644 etc/schema/mysql/tests/notification.csv create mode 100644 etc/schema/mysql/tests/service.csv create mode 100644 etc/schema/mysql/tests/servicegroup.csv create mode 100644 etc/schema/mysql/tests/servicegroup_member.csv create mode 100644 etc/schema/mysql/tests/user.csv create mode 100644 etc/schema/mysql/tests/usergroup.csv create mode 100644 etc/schema/mysql/tests/usergroup_member.csv create mode 100644 etc/schema/mysql/tests/zone.csv create mode 100644 etc/schema/mysql/timeperiod.sql create mode 100644 etc/schema/mysql/types create mode 100644 etc/schema/mysql/url.sql create mode 100644 etc/schema/mysql/user.sql create mode 100644 etc/schema/mysql/zone.sql diff --git a/etc/schema/mysql/command.sql b/etc/schema/mysql/command.sql new file mode 100644 index 00000000..604a9460 --- /dev/null +++ b/etc/schema/mysql/command.sql @@ -0,0 +1,62 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE command ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + type + name)', + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + env_id binary(20) NOT NULL COMMENT 'env.id', + + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(command.vars)', + arguments_checksum binary(20) NOT NULL COMMENT 'sha1(arguments from command_argument where command_argument.command_id = id)', + envvars_checksum binary(20) NOT NULL COMMENT 'sha1(envvars from command_envvar where command_envvar.command_id = id)', + + type enum('CheckCommand','NotificationCommand','EventCommand') NOT NULL, + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + command text NOT NULL, + timeout smallint(5) unsigned NOT NULL, + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE command_argument ( + command_id binary(20) NOT NULL COMMENT 'command.id', + argument_key varchar(64) NOT NULL, + env_id binary(20) NOT NULL COMMENT 'env.id', + + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + + argument_value text DEFAULT NULL, + argument_order tinyint(3) DEFAULT NULL, + description text DEFAULT NULL, + argument_key_override varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + repeat_key enum('y','n') NOT NULL, + required enum('y','n') NOT NULL, + set_if varchar(255) DEFAULT NULL, + skip_key enum('y','n') NOT NULL, + + PRIMARY KEY (command_id,argument_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE command_envvar ( + command_id binary(20) NOT NULL COMMENT 'command.id', + envvar_key varchar(64) NOT NULL, + env_id binary(20) NOT NULL COMMENT 'env.id', + + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + + envvar_value text NOT NULL, + + PRIMARY KEY (command_id,envvar_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE command_customvar ( + command_id binary(20) NOT NULL COMMENT 'command.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + PRIMARY KEY (customvar_id, command_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; + +/* TODO(el): Default custom variables are missing */ diff --git a/etc/schema/mysql/comment.sql b/etc/schema/mysql/comment.sql new file mode 100644 index 00000000..9ba35ad4 --- /dev/null +++ b/etc/schema/mysql/comment.sql @@ -0,0 +1,44 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE host_comment ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'environment.id', + host_id binary(20) NOT NULL COMMENT 'host.id', + + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL, + name varchar(255) NOT NULL, + + author varchar(255) NOT NULL COLLATE utf8mb4_unicode_ci, + text text NOT NULL, + entry_type enum('comment','ack','downtime','flapping') NOT NULL, + entry_time bigint(20) unsigned NOT NULL, + is_persistent enum('y','n') NOT NULL, + expire_time bigint(20) unsigned DEFAULT NULL, + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE service_comment ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'environment.id', + service_id binary(20) NOT NULL COMMENT 'service.id', + + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL, + name varchar(255) NOT NULL, + + author varchar(255) NOT NULL COLLATE utf8mb4_unicode_ci, + text text NOT NULL, + entry_type enum('comment','ack','downtime','flapping') NOT NULL, + entry_time bigint(20) unsigned NOT NULL, + is_persistent enum('y','n') NOT NULL, + expire_time bigint(20) unsigned DEFAULT NULL, + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; \ No newline at end of file diff --git a/etc/schema/mysql/customvar.sql b/etc/schema/mysql/customvar.sql new file mode 100644 index 00000000..290f38b5 --- /dev/null +++ b/etc/schema/mysql/customvar.sql @@ -0,0 +1,26 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE customvar ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name + value)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + reference_counter int(6) unsigned NOT NULL COMMENT 'if 0, the custom var needs to be deleted', + + name varchar(255) NOT NULL COLLATE utf8_bin, + value text NOT NULL, + + PRIMARY KEY (id) +) ENGINE=InnoDb ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; + +CREATE TABLE customvar_flat ( + customvar_id binary(20) NOT NULL COMMENT 'sha1(customvar.id)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + path_checksum binary(20) NOT NULL COMMENT 'sha1(flatname before conversion)', + flatname_checksum binary(20) NOT NULL COMMENT 'sha1(flatname after conversion)', + + flatname varchar(512) NOT NULL COLLATE utf8_bin COMMENT 'Path converted with `.` and `[ ]`', + flatvalue text NOT NULL, + + PRIMARY KEY (customvar_id, path_checksum) +) ENGINE=InnoDb ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; \ No newline at end of file diff --git a/etc/schema/mysql/downtime.sql b/etc/schema/mysql/downtime.sql new file mode 100644 index 00000000..be1b2c37 --- /dev/null +++ b/etc/schema/mysql/downtime.sql @@ -0,0 +1,54 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE host_downtime ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'environment.id', + host_id binary(20) NOT NULL COMMENT 'host.id', + + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + name varchar(255) NOT NULL, + + author varchar(255) NOT NULL COLLATE utf8mb4_unicode_ci, + comment text NOT NULL, + entry_time bigint(20) unsigned NOT NULL, + scheduled_start_time bigint(20) unsigned NOT NULL, + scheduled_end_time bigint(20) unsigned NOT NULL, + duration bigint(20) unsigned NOT NULL, + is_fixed enum('y', 'n') NOT NULL, + + is_in_effect enum('y', 'n') NOT NULL, + actual_start_time bigint(20) unsigned DEFAULT NULL COMMENT 'Time when the host went into a problem state during the downtimes timeframe', + actual_end_time bigint(20) unsigned DEFAULT NULL COMMENT 'Problem state assumed: scheduled_end_time if fixed, start_time + duration otherwise', + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE service_downtime ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'environment.id', + service_id binary(20) DEFAULT NULL COMMENT 'service.id', + + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + name varchar(255) NOT NULL, + + author varchar(255) NOT NULL COLLATE utf8mb4_unicode_ci, + comment text NOT NULL, + entry_time bigint(20) unsigned NOT NULL, + scheduled_start_time bigint(20) unsigned NOT NULL, + scheduled_end_time bigint(20) unsigned NOT NULL, + duration bigint(20) unsigned NOT NULL, + is_fixed enum('y', 'n') NOT NULL, + + is_in_effect enum('y', 'n') NOT NULL, + actual_start_time bigint(20) unsigned DEFAULT NULL COMMENT 'Time when the host went into a problem state during the downtimes timeframe', + actual_end_time bigint(20) unsigned DEFAULT NULL COMMENT 'Problem state assumed: scheduled_end_time if fixed, start_time + duration otherwise', + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; \ No newline at end of file diff --git a/etc/schema/mysql/endpoint.sql b/etc/schema/mysql/endpoint.sql new file mode 100644 index 00000000..9f78af43 --- /dev/null +++ b/etc/schema/mysql/endpoint.sql @@ -0,0 +1,16 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE endpoint ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL, + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + zone_id binary(20) NOT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; \ No newline at end of file diff --git a/etc/schema/mysql/environment.sql b/etc/schema/mysql/environment.sql new file mode 100644 index 00000000..0397193f --- /dev/null +++ b/etc/schema/mysql/environment.sql @@ -0,0 +1,18 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE environment ( + id binary(20) NOT NULL COMMENT 'sha1(name)', + name varchar(255) NOT NULL, + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE icingadb_instance ( + id binary(16) NOT NULL COMMENT 'UUIDv4', + environment_id binary(20) NOT NULL COMMENT 'environment.id', + heartbeat bigint(20) unsigned NOT NULL COMMENT '*nix timestamp', + responsible enum('y','n') NOT NULL, + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; \ No newline at end of file diff --git a/etc/schema/mysql/helper/cleanup_url.sql b/etc/schema/mysql/helper/cleanup_url.sql new file mode 100644 index 00000000..de00dd86 --- /dev/null +++ b/etc/schema/mysql/helper/cleanup_url.sql @@ -0,0 +1,29 @@ +DROP PROCEDURE IF EXISTS cleanup_url; +DELIMITER // +CREATE PROCEDURE cleanup_url() + BEGIN + DELETE + FROM action_url + WHERE NOT EXISTS( + SELECT h.action_url_id + FROM host h + WHERE h.action_url_id = action_url.id + ); + + DELETE + FROM notes_url + WHERE NOT EXISTS( + SELECT h.notes_url_id + FROM host h + WHERE h.notes_url_id = notes_url.id + ); + + DELETE + FROM icon_image + WHERE NOT EXISTS( + SELECT h.icon_image_id + FROM host h + WHERE h.icon_image_id = icon_image.id + ); + END// +DELIMITER ; diff --git a/etc/schema/mysql/helper/functions.sql b/etc/schema/mysql/helper/functions.sql new file mode 100644 index 00000000..00171b19 --- /dev/null +++ b/etc/schema/mysql/helper/functions.sql @@ -0,0 +1,5 @@ +DROP FUNCTION IF EXISTS unix_timestamp_ms; + +CREATE FUNCTION unix_timestamp_ms() + RETURNS BIGINT UNSIGNED + RETURN FLOOR((UNIX_TIMESTAMP(NOW(3)) * 1000)); diff --git a/etc/schema/mysql/helper/populate_pending_hosts_for_environment.sql b/etc/schema/mysql/helper/populate_pending_hosts_for_environment.sql new file mode 100644 index 00000000..4e80d94a --- /dev/null +++ b/etc/schema/mysql/helper/populate_pending_hosts_for_environment.sql @@ -0,0 +1,56 @@ + +DELIMITER // +CREATE PROCEDURE populate_pending_hosts_for_environment( + IN env_id BINARY(20) +) + BEGIN + SET @bigNow = unix_timestamp_ms(); + INSERT INTO host_state ( + host_id, + env_id, + state_type, + soft_state, + hard_state, + attempt, + is_active_check, + is_problem, + is_handled, + is_reachable, + is_flapping, + is_acknowledged, + in_downtime, + last_update, + last_state_change, + last_soft_state, + last_hard_state, + next_check + ) SELECT + h.id, + env_id, + 'hard', + 99, + 99, + 1, + 'n', + 'n', + 'n', + 'y', + 'n', + 'n', + 'n', + @bigNow, + @bigNow, + 99, + 99, + @bigNow + h.check_interval * 1000 + FROM host h + WHERE NOT EXISTS( + SELECT host_id + FROM host_state hs + WHERE hs.host_id = h.id) + AND h.env_id = env_id; + + END + +// +DELIMITER ; diff --git a/etc/schema/mysql/host.sql b/etc/schema/mysql/host.sql new file mode 100644 index 00000000..3fbda500 --- /dev/null +++ b/etc/schema/mysql/host.sql @@ -0,0 +1,143 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE host ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(host.vars)', + groups_checksum binary(20) NOT NULL COMMENT 'sha1(hostgroup.name + hostgroup.name ...)', + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + display_name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + address varchar(255) NOT NULL, + address6 varchar(255) NOT NULL, + address_bin binary(4) DEFAULT NULL, + address6_bin binary(16) DEFAULT NULL, + + checkcommand varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'checkcommand.name', + checkcommand_id binary(20) NOT NULL COMMENT 'checkcommand.id', + + max_check_attempts int(10) unsigned NOT NULL, + + check_period varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'timeperiod.name', + check_period_id binary(20) DEFAULT NULL COMMENT 'timeperiod.id', + + check_timeout int(10) unsigned DEFAULT NULL, + check_interval int(10) unsigned NOT NULL, + check_retry_interval int(10) unsigned NOT NULL, + + active_checks_enabled enum('y','n') NOT NULL, + passive_checks_enabled enum('y','n') NOT NULL, + event_handler_enabled enum('y','n') NOT NULL, + notifications_enabled enum('y','n') NOT NULL, + + flapping_enabled enum('y','n') NOT NULL, + flapping_threshold_low float unsigned NOT NULL, + flapping_threshold_high float unsigned NOT NULL, + + perfdata_enabled enum('y','n') NOT NULL, + + eventcommand varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'eventcommand.name', + eventcommand_id binary(20) DEFAULT NULL COMMENT 'eventcommand.id', + + is_volatile enum('y','n') NOT NULL, + + action_url_id binary(20) DEFAULT NULL COMMENT 'action_url.id', + notes_url_id binary(20) DEFAULT NULL COMMENT 'notes_url.id', + notes text NOT NULL, + icon_image_id binary(20) DEFAULT NULL COMMENT 'icon_image.id', + icon_image_alt varchar(32) NOT NULL, + + zone varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'zone.name', + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + command_endpoint varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'endpoint.name', + command_endpoint_id binary(20) DEFAULT NULL COMMENT 'endpoint.id', + + PRIMARY KEY (id), + KEY idx_action_url_checksum (action_url_id) COMMENT 'cleanup', + KEY idx_notes_url_checksum (notes_url_id) COMMENT 'cleanup', + KEY idx_icon_image_checksum (icon_image_id) COMMENT 'cleanup' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE hostgroup ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(hostgroup.vars)', + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + display_name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE hostgroup_member ( + host_id binary(20) NOT NULL COMMENT 'host.id', + hostgroup_id binary(20) NOT NULL COMMENT 'hostgroup.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + + PRIMARY KEY (hostgroup_id,host_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE host_customvar ( + host_id binary(20) NOT NULL COMMENT 'host.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + + PRIMARY KEY (customvar_id, host_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE hostgroup_customvar ( + hostgroup_id binary(20) NOT NULL COMMENT 'hostgroup.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + + PRIMARY KEY (customvar_id, hostgroup_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; + +CREATE TABLE host_state ( + host_id binary(20) NOT NULL COMMENT 'host.id', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + + state_type enum('hard', 'soft') NOT NULL, + soft_state tinyint(1) unsigned NOT NULL, + hard_state tinyint(1) unsigned NOT NULL, + attempt tinyint(1) unsigned NOT NULL, + severity smallint unsigned NOT NULL, + + output text DEFAULT NULL, + long_output text DEFAULT NULL, + performance_data text DEFAULT NULL, + check_commandline varchar(255) DEFAULT NULL, + + is_problem enum('y', 'n') NOT NULL, + is_handled enum('y', 'n') NOT NULL, + is_reachable enum('y', 'n') NOT NULL, + is_flapping enum('y', 'n') NOT NULL, + + is_acknowledged enum('y', 'n', 'sticky') NOT NULL, + acknowledgement_comment_id binary(20) DEFAULT NULL COMMENT 'comment.id', + + in_downtime enum('y', 'n') NOT NULL, + + execution_time bigint(20) unsigned DEFAULT NULL, + latency bigint(20) unsigned DEFAULT NULL, + timeout bigint(20) unsigned DEFAULT NULL, + + last_update bigint(20) unsigned NOT NULL, + last_state_change bigint(20) unsigned NOT NULL, + last_soft_state tinyint(1) unsigned NOT NULL, + last_hard_state tinyint(1) unsigned NOT NULL, + next_check bigint(20) unsigned NOT NULL, + + PRIMARY KEY (host_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; diff --git a/etc/schema/mysql/notification.sql b/etc/schema/mysql/notification.sql new file mode 100644 index 00000000..3ed56e24 --- /dev/null +++ b/etc/schema/mysql/notification.sql @@ -0,0 +1,54 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE notification ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL, + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(notification.vars)', + users_checksum binary(20) NOT NULL, + usergroups_checksum binary(20) NOT NULL, + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + host_id binary(20) NOT NULL COMMENT 'host.id', + service_id binary(20) DEFAULT NULL COMMENT 'service.id', + command_id binary(20) NOT NULL COMMENT 'command.id', + + times_begin int(10) unsigned DEFAULT NULL, + times_end int(10) unsigned DEFAULT NULL, + notification_interval int(10) unsigned NOT NULL, + period_id binary(20) DEFAULT NULL COMMENT 'timeperiod.id', + + states tinyint(2) unsigned NOT NULL, + types smallint(3) unsigned NOT NULL, + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE notification_user ( + notification_id binary(20) NOT NULL COMMENT 'notification.id', + user_id binary(20) NOT NULL COMMENT 'user.id', + env_id binary(20) NOT NULL COMMENT 'environment.id', + + PRIMARY KEY (notification_id,user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE notification_usergroup ( + notification_id binary(20) NOT NULL COMMENT 'notification.id', + usergroup_id binary(20) NOT NULL COMMENT 'usergroup.id', + env_id binary(20) NOT NULL COMMENT 'environment.id', + + PRIMARY KEY (notification_id, usergroup_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE notification_customvar ( + notification_id binary(20) NOT NULL COMMENT 'notification.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + PRIMARY KEY (customvar_id, notification_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; diff --git a/etc/schema/mysql/service.sql b/etc/schema/mysql/service.sql new file mode 100644 index 00000000..f83224f0 --- /dev/null +++ b/etc/schema/mysql/service.sql @@ -0,0 +1,136 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE service ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(service.vars)', + groups_checksum binary(20) NOT NULL COMMENT 'sha1(servicegroup.name + servicegroup.name ...)', + host_id binary(20) NOT NULL COMMENT 'sha1(host.id)', + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + display_name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + checkcommand varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'checkcommand.name', + checkcommand_id binary(20) NOT NULL COMMENT 'checkcommand.id', + + max_check_attempts int(10) unsigned NOT NULL, + + check_period varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'timeperiod.name', + check_period_id binary(20) DEFAULT NULL COMMENT 'timeperiod.id', + + check_timeout int(10) unsigned DEFAULT NULL, + check_interval int(10) unsigned NOT NULL, + check_retry_interval int(10) unsigned NOT NULL, + + active_checks_enabled enum('y','n') NOT NULL, + passive_checks_enabled enum('y','n') NOT NULL, + event_handler_enabled enum('y','n') NOT NULL, + notifications_enabled enum('y','n') NOT NULL, + + flapping_enabled enum('y','n') NOT NULL, + flapping_threshold_low float unsigned NOT NULL, + flapping_threshold_high float unsigned NOT NULL, + + perfdata_enabled enum('y','n') NOT NULL, + + eventcommand varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'eventcommand.name', + eventcommand_id binary(20) DEFAULT NULL COMMENT 'eventcommand.id', + + is_volatile enum('y','n') NOT NULL, + + action_url_id binary(20) DEFAULT NULL COMMENT 'action_url.id', + notes_url_id binary(20) DEFAULT NULL COMMENT 'notes_url.id', + notes text NOT NULL, + icon_image_id binary(20) DEFAULT NULL COMMENT 'icon_image.id', + icon_image_alt varchar(32) NOT NULL, + + zone varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'zone.name', + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + command_endpoint varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'endpoint.name', + command_endpoint_id binary(20) DEFAULT NULL COMMENT 'endpoint.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE servicegroup ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(servicegroup.vars)', + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + display_name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE servicegroup_member ( + service_id binary(20) NOT NULL COMMENT 'service.id', + servicegroup_id binary(20) NOT NULL COMMENT 'servicegroup.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + + PRIMARY KEY (servicegroup_id,service_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE service_customvar ( + service_id binary(20) NOT NULL COMMENT 'service.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + + PRIMARY KEY (customvar_id, service_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE servicegroup_customvar ( + servicegroup_id binary(20) NOT NULL COMMENT 'servicegroup.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + + PRIMARY KEY (customvar_id, servicegroup_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; + +CREATE TABLE service_state ( + service_id binary(20) NOT NULL COMMENT 'service.id', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + + state_type enum('hard', 'soft') NOT NULL, + soft_state tinyint(1) unsigned NOT NULL, + hard_state tinyint(1) unsigned NOT NULL, + attempt tinyint(1) unsigned NOT NULL, + severity smallint unsigned NOT NULL, + + output text DEFAULT NULL, + long_output text DEFAULT NULL, + performance_data text DEFAULT NULL, + check_commandline varchar(255) DEFAULT NULL, + + is_problem enum('y', 'n') NOT NULL, + is_handled enum('y', 'n') NOT NULL, + is_reachable enum('y', 'n') NOT NULL, + is_flapping enum('y', 'n') NOT NULL, + + is_acknowledged enum('y', 'n', 'sticky') NOT NULL, + acknowledgement_comment_id binary(20) DEFAULT NULL COMMENT 'comment.id', + + in_downtime enum('y', 'n') NOT NULL, + + execution_time bigint(20) unsigned DEFAULT NULL, + latency bigint(20) unsigned DEFAULT NULL, + timeout bigint(20) unsigned DEFAULT NULL, + + last_update bigint(20) unsigned NOT NULL, + last_state_change bigint(20) unsigned NOT NULL, + last_soft_state tinyint(1) unsigned NOT NULL, + last_hard_state tinyint(1) unsigned NOT NULL, + next_check bigint(20) unsigned NOT NULL, + + PRIMARY KEY (service_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; diff --git a/etc/schema/mysql/tests/action_url.csv b/etc/schema/mysql/tests/action_url.csv new file mode 100644 index 00000000..9cf0dd10 --- /dev/null +++ b/etc/schema/mysql/tests/action_url.csv @@ -0,0 +1,11 @@ +id;action_url +7ae3bfebcb1d644e9ad9;http://google.com +4bdd2ffe5134c4283afd;https://netways.de +f2040cbe68069d252c8d;https://icinga.com +4a4e5b48bf31ae07ca84;https://example.com +271661f114b4a123bdc8;https://test.net +67af359061dd5e8417d4;http://localhost:8080/action +fe465a8ed9e9ca13ab92;https://github.com/icinga +9978ba84b178edb04c5f;http://heise.de +db1b8dde62083321f6fc;http://www.myaction.com/action?host=$host.name$ +000ab0a3143b170aa9be;https://foobar.com/action \ No newline at end of file diff --git a/etc/schema/mysql/tests/command.csv b/etc/schema/mysql/tests/command.csv new file mode 100644 index 00000000..a83fdf2a --- /dev/null +++ b/etc/schema/mysql/tests/command.csv @@ -0,0 +1,7 @@ +id;zone_id;env_id;name_checksum;properties_checksum;arguments_checksum;envvars_checksum;type;name;name_ci;command;timeout +028c76d230427a74cf13;5bf526ee976b4ccade5a;b65da3345b7d4cff9a24;e092682d99e54714972c;56e79a3538284e88b0c6;8724b67d15e3407ca18a;9d62a097e80b47be9b52;CheckCommand;ssh;ssh;check_ssh;10 +7c6a6e2c6cd0b7eb6e3d;5bf526ee976b4ccade5a;b65da3345b7d4cff9a24;9be217119fb447fdaabb;74e1d06fc0ec41fe96ae;8352f468b029422a935f;beacaf4124f9447498c1;CheckCommand;http;http;check_http;10 +9669632761ac9a6b34c7;5bf526ee976b4ccade5a;b65da3345b7d4cff9a24;d31aa3f08a3249b59e35;d2d80d9f3501482b9993;b2f8bbee31684e609d58;c7a536eeec964e64bede;CheckCommand;ping;ping;check_ping;10 +b35cfcabd029d83ed0e9;5bf526ee976b4ccade5a;b65da3345b7d4cff9a24;afc75755c38e427892c7;091a208425604cd3906a;a69d97ba65ef4870ac6e;4a300f6d2c6e437c951d;CheckCommand;udp;udp;check_udp;30 +8026ac5396f0824556a5;5bf526ee976b4ccade5a;b65da3345b7d4cff9a24;2ecd4850301f4270b93b;c2de4a2fbdba4e9594a3;db6cff485e18432aa5e2;d9f6ce09ed7b48d2ab17;CheckCommand;smtp;smtp;check_smtp;50 +e55cfd3301c0454a8481;5bf526ee976b4ccade5a;b65da3345b7d4cff9a24;fa27c97c4e5d48938ca4;6b952824120747fe9501;50cbf42f63b948a89e0e;33fe8a4ed79049928857;NotificationCommand;notify-by-email;notify-by-email;notifiy-by-email;20 \ No newline at end of file diff --git a/etc/schema/mysql/tests/endpoint.csv b/etc/schema/mysql/tests/endpoint.csv new file mode 100644 index 00000000..4d91a159 --- /dev/null +++ b/etc/schema/mysql/tests/endpoint.csv @@ -0,0 +1,2 @@ +id;env_id;name_checksum;properties_checksum;name;name_ci;zone_checksum; +de05024e342884336eb9;b65da3345b7d4cff9a24;182b2683d3ce1422da51;1d38f896a509ce6a233f;host-1.example.com;host-1.example.com;5bf526ee976b4ccade5a \ No newline at end of file diff --git a/etc/schema/mysql/tests/environment.csv b/etc/schema/mysql/tests/environment.csv new file mode 100644 index 00000000..b3e206f9 --- /dev/null +++ b/etc/schema/mysql/tests/environment.csv @@ -0,0 +1,4 @@ +env_id;name +b65da3345b7d4cff9a24;berlin +2591057fe9b1668fe6f3;rio +a776df0725a7fb7e8350;london \ No newline at end of file diff --git a/etc/schema/mysql/tests/eventcommand.csv b/etc/schema/mysql/tests/eventcommand.csv new file mode 100644 index 00000000..fdd74625 --- /dev/null +++ b/etc/schema/mysql/tests/eventcommand.csv @@ -0,0 +1,2 @@ +id;env_id;name_checksum;name +6625851376b230891032;b65da3345b7d4cff9a24;33f3e3be317c6e79daae;run_my_event.sh \ No newline at end of file diff --git a/etc/schema/mysql/tests/host.csv b/etc/schema/mysql/tests/host.csv new file mode 100644 index 00000000..560cd96a --- /dev/null +++ b/etc/schema/mysql/tests/host.csv @@ -0,0 +1,2 @@ +id;env_id;name_checksum;properties_checksum;customvars_checksum;groups_checksum;name;name_ci;display_name;address;address6;address_bin;address6_bin;checkcommand;checkcommand_id;max_check_attempts;check_period;check_period_id;check_timeout;check_interval;check_retry_interval;active_checks_enabled;passive_checks_enabled;event_handler_enabled;notifications_enabled;flapping_enabled;flapping_threshold_low;flapping_threshold_high;perfdata_enabled;eventcommand;eventcommand_id;is_volatile;action_url_id;notes_url_id;notes;icon_image_id;icon_image_alt;zone;zone_id;command_endpoint;command_endpoint_id +4bf94dba13178df0a0a4;b65da3345b7d4cff9a24;29d5877b34cc481ddf93;52ea2238f3f248295f4e;fe98cdc58d454dd68c6c;2f27f2ad0f9e725febb1;host-1.example.com;host-1.example.com;Host-1;127.0.0.1;::1;abcd;abcdefgh;/bin/foobar;028c76d230427a74cf13;3;24x7;0f75d7bbb6bcc4ac23cc;50;60;10;y;y;y;y;y;"";"";y;"";"";n;"";"";foobar asdf;"";"";master;5bf526ee976b4ccade5a;host-1.example.com;de05024e342884336eb9 \ No newline at end of file diff --git a/etc/schema/mysql/tests/hostgroup.csv b/etc/schema/mysql/tests/hostgroup.csv new file mode 100644 index 00000000..5923ce8f --- /dev/null +++ b/etc/schema/mysql/tests/hostgroup.csv @@ -0,0 +1,5 @@ +id;env_id;name_checksum;properties_checksum;name;name_ci;display_name +2707e212c64878787ff7;b65da3345b7d4cff9a24;061c5b49e09d4fab6232;b739d140a7a58a65b61f;linux-server;linux-server;Linux Server +21229b386d88d686e22f;b65da3345b7d4cff9a24;25697d5e364550ee4bb3;b77b58b5ce480395acb2;windows;windows;Windows +2f27f2ad0f9e725febb1;b65da3345b7d4cff9a24;75e381fffc334e19c372;167e9930fd7b55b376aa;Dc1;dc1;DC 1 +bc04f6c12cf74149bdb7;b65da3345b7d4cff9a24;86a2f9a4799960bac520;461146038345a545f79c;Dc2;dc2;DC 2 \ No newline at end of file diff --git a/etc/schema/mysql/tests/hostgroup_member.csv b/etc/schema/mysql/tests/hostgroup_member.csv new file mode 100644 index 00000000..65e0b385 --- /dev/null +++ b/etc/schema/mysql/tests/hostgroup_member.csv @@ -0,0 +1,2 @@ +host_id;hostgroup_id;env_id +4bf94dba13178df0a0a4;2707e212c64878787ff7;b65da3345b7d4cff9a24 \ No newline at end of file diff --git a/etc/schema/mysql/tests/icon_image.csv b/etc/schema/mysql/tests/icon_image.csv new file mode 100644 index 00000000..b148f91a --- /dev/null +++ b/etc/schema/mysql/tests/icon_image.csv @@ -0,0 +1,11 @@ +id;icon_image +7e2bc7526cf32e0ca468;/usr/local/icons/icon.img +152a0cb13bb7725fdba0;/var/www/icon.ico +c1e1a286bf94b776876b;/icons/linux.png +9c78fe334eb32efbe5dc;/icons/windows.png +f1eaa4bce4a5adbad360;/icons/bsd.png +c27aa5794a5391881c4e;/icons/cloud.png +e2ce7f6b557ca20e7929;/icons/switch.png +3612e1fd75143e4582ec;/icons/router.png +d2b0743a6c62896b07b6;/icons/hub.png +403956eaf7a48505726b;/icons/rj45-cable.png \ No newline at end of file diff --git a/etc/schema/mysql/tests/import.sql b/etc/schema/mysql/tests/import.sql new file mode 100644 index 00000000..2f657763 --- /dev/null +++ b/etc/schema/mysql/tests/import.sql @@ -0,0 +1,165 @@ +LOAD DATA INFILE '/var/lib/mysql-files/environment.csv' +REPLACE +INTO TABLE environment +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/host.csv' +REPLACE +INTO TABLE host +CHARACTER SET utf8mb4 +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/hostgroup.csv' +REPLACE +INTO TABLE hostgroup +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/hostgroup_member.csv' +REPLACE +INTO TABLE hostgroup_member +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/service.csv' +REPLACE +INTO TABLE service +CHARACTER SET utf8mb4 +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/servicegroup.csv' +REPLACE +INTO TABLE servicegroup +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/servicegroup_member.csv' +REPLACE +INTO TABLE servicegroup_member +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/command.csv' +REPLACE +INTO TABLE command +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/eventcommand.csv' +REPLACE +INTO TABLE eventcommand +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/action_url.csv' +REPLACE +INTO TABLE action_url +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/notes_url.csv' +REPLACE +INTO TABLE notes_url +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/icon_image.csv' +REPLACE +INTO TABLE icon_image +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/endpoint.csv' +REPLACE +INTO TABLE endpoint +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/zone.csv' +REPLACE +INTO TABLE zone +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/notification.csv' +REPLACE +INTO TABLE notification +CHARACTER SET utf8mb4 +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/user.csv' +REPLACE +INTO TABLE user +CHARACTER SET utf8mb4 +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/usergroup.csv' +REPLACE +INTO TABLE usergroup +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; + +LOAD DATA INFILE '/var/lib/mysql-files/usergroup_member.csv' +REPLACE +INTO TABLE usergroup_member +COLUMNS TERMINATED BY ';' +OPTIONALLY ENCLOSED BY '"' +ESCAPED BY '"' +LINES TERMINATED BY '\n' +IGNORE 1 LINES; \ No newline at end of file diff --git a/etc/schema/mysql/tests/notes_url.csv b/etc/schema/mysql/tests/notes_url.csv new file mode 100644 index 00000000..9571a1ce --- /dev/null +++ b/etc/schema/mysql/tests/notes_url.csv @@ -0,0 +1,11 @@ +id;notes_url +0f75d7bbb6bcc4ac23cc;https://netways.de/notes +48c192d5df8397c5aefb;https://mynotes1.com/notes +d3bd74fb834008ef18b0;http://mynotes2.com/notes2 +f018361bed42fb11e307;http://netways.de/ +c6bce8bb9287eecec438;http://google.com/notes +1b3802cd9bf366a6deb6;http://example.com/foobar +72b8661ed08a3638094e;https://foobar.com/notes +d9930220bddf331861e7;http://barfoo.net +5201df53a52a5026ecfb;https://www.test.com/myicinganotes +4d1951edf8204a93ac91;http://localhost:8080/notes \ No newline at end of file diff --git a/etc/schema/mysql/tests/notification.csv b/etc/schema/mysql/tests/notification.csv new file mode 100644 index 00000000..9bafea0a --- /dev/null +++ b/etc/schema/mysql/tests/notification.csv @@ -0,0 +1,2 @@ +id;env_id;name_checksum;properties_checksum;name;name_ci;host_id;service_id;command_id;times_begin;times_end;notification_interval;period_id;states;types;zone_id +0a30d6199584432ea369;b65da3345b7d4cff9a24;fe53687c39514a5794b7;2992037dd9dd4577ae79;notify-1;notify-1;4bf94dba13178df0a0a4;NULL;e55cfd3301c0454a8481;NULL;NULL;300;f98a83dfd1fd4aaa9af9;15;96;5bf526ee976b4ccade5a \ No newline at end of file diff --git a/etc/schema/mysql/tests/service.csv b/etc/schema/mysql/tests/service.csv new file mode 100644 index 00000000..937d8dc7 --- /dev/null +++ b/etc/schema/mysql/tests/service.csv @@ -0,0 +1,3 @@ +id;env_id;name_checksum;properties_checksum;groups_checksum;host_checksum;name;name_ci;display_name;checkcommand;checkcommand_id;max_check_attempts;check_period;check_period_id;check_timeout;check_interval;check_retry_interval;active_checks_enabled;passive_checks_enabled;event_handler_enabled;notifications_enabled;flapping_enabled;flapping_threshold_low;flapping_threshold_high;perfdata_enabled;eventcommand;eventcommand_id;is_volatile;action_url_id;notes_url_id;notes;icon_image_id;icon_image_alt;zone;zone_id;command_endpoint;command_endpoint_id +761cd44dac02475eace0;b65da3345b7d4cff9a24;c06ec2d10dc547f4b0ae;0fe34c2ab0a84d70bc1f;bafbaa5b9c024db19376;4bf94dba13178df0a0a4;ssh;ssh;SSH;ssh;028c76d230427a74cf13;3;24x7;f82ff663461d45baac03;60;60;10;y;y;y;y;y;NULL;NULL;y;NULL;NULL;n;NULL;NULL;NULL;NULL;NULL;master;5bf526ee976b4ccade5a;host-1.example.com;4bf94dba13178df0a0a4 +1c26aa30d3b9406ba838;b65da3345b7d4cff9a24;54cb075cbcfe43a6b927;f9250c3bc58248d7b5e6;1247ae00b6ef4f0ca7e1;129421882f9a5d27097f;http;http;HTTP;http;7c6a6e2c6cd0b7eb6e3d;3;24x7;f82ff663461d45baac03;60;60;10;y;y;n;y;n;NULL;NULL;y;NULL;NULL;n;NULL;NULL;NULL;NULL;NULL;master;5bf526ee976b4ccade5a;NULL;NULL \ No newline at end of file diff --git a/etc/schema/mysql/tests/servicegroup.csv b/etc/schema/mysql/tests/servicegroup.csv new file mode 100644 index 00000000..7668efcd --- /dev/null +++ b/etc/schema/mysql/tests/servicegroup.csv @@ -0,0 +1,2 @@ +id;env_id;name_checksum;properties_checksum;name;name_ci;display_name;zone_id +6eaf35fcc99d490cb110;b65da3345b7d4cff9a24;7078e8355bb444d78616;60a2a3583ce443c498a5;myGroup;mygroup;My Group;5bf526ee976b4ccade5a \ No newline at end of file diff --git a/etc/schema/mysql/tests/servicegroup_member.csv b/etc/schema/mysql/tests/servicegroup_member.csv new file mode 100644 index 00000000..f1569ae6 --- /dev/null +++ b/etc/schema/mysql/tests/servicegroup_member.csv @@ -0,0 +1,2 @@ +service_id;servicegroup_id;env_id +761cd44dac02475eace0;6eaf35fcc99d490cb110;b65da3345b7d4cff9a24 \ No newline at end of file diff --git a/etc/schema/mysql/tests/user.csv b/etc/schema/mysql/tests/user.csv new file mode 100644 index 00000000..5dbc70b0 --- /dev/null +++ b/etc/schema/mysql/tests/user.csv @@ -0,0 +1,3 @@ +id;env_id;name_checksum;properties_checksum;groups_checksum;name;name_ci;label;email;pager;notifications_enabled;period_id;states;types;zone_id +68e12f6f9ebb42cea93b;b65da3345b7d4cff9a24;9379c8d791fe4728ab4c;d75ffc6507b34f18b083;210436e39ad141d189b4;John;john;John;john@doe.com;NULL;y;f98a83dfd1fd4aaa9af9;15;96;5bf526ee976b4ccade5a +2744e0261ab04aa2ad66;b65da3345b7d4cff9a24;c04cdda645d341c1bfc3;c49635a2d3e74f329d60;9f57dd06be924335ad1c;Bob;bob;Bob;bob@apple.com;NULL;y;996b2dfd57a14d39b815;7;32;5bf526ee976b4ccade5a \ No newline at end of file diff --git a/etc/schema/mysql/tests/usergroup.csv b/etc/schema/mysql/tests/usergroup.csv new file mode 100644 index 00000000..01ff1469 --- /dev/null +++ b/etc/schema/mysql/tests/usergroup.csv @@ -0,0 +1,3 @@ +id;env_id;name_checksum;properties_checksum;name;name_ci;display_name;zone_id +4ba982d6c3a44798ad73;b65da3345b7d4cff9a24;e9e70554b63d4e04ade3;a7ead798a7b94668a6de;Administrators;administrators;Admins;5bf526ee976b4ccade5a +074302b6f8ae40c88567;b65da3345b7d4cff9a24;1710fe8a008c433486cb;dc30bdf415544b6fa061;Users;users;Users;5bf526ee976b4ccade5a \ No newline at end of file diff --git a/etc/schema/mysql/tests/usergroup_member.csv b/etc/schema/mysql/tests/usergroup_member.csv new file mode 100644 index 00000000..25062cb0 --- /dev/null +++ b/etc/schema/mysql/tests/usergroup_member.csv @@ -0,0 +1,3 @@ +user_id;usergroup_id;env_id +2744e0261ab04aa2ad66;4ba982d6c3a44798ad73;b65da3345b7d4cff9a24 +68e12f6f9ebb42cea93b;074302b6f8ae40c88567;b65da3345b7d4cff9a24 \ No newline at end of file diff --git a/etc/schema/mysql/tests/zone.csv b/etc/schema/mysql/tests/zone.csv new file mode 100644 index 00000000..538eaa20 --- /dev/null +++ b/etc/schema/mysql/tests/zone.csv @@ -0,0 +1,3 @@ +id;env_checksum;name_checksum;properties_checksum;name;name_ci;is_global;parent_id +5bf526ee976b4ccade5a;b65da3345b7d4cff9a24;1c99751939822f45bdbe;69616e902472807a9478;master;master;n;NULL +627b6a90fbee738ae674;b65da3345b7d4cff9a24;dc2baecdb1b69ffc174a;e5c614f057dede0a5765;global;global;y;NULL \ No newline at end of file diff --git a/etc/schema/mysql/timeperiod.sql b/etc/schema/mysql/timeperiod.sql new file mode 100644 index 00000000..76040313 --- /dev/null +++ b/etc/schema/mysql/timeperiod.sql @@ -0,0 +1,50 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE timeperiod ( + id binary(20) NOT NULL COMMENT 'sha1(env.name + name)', + env_id binary(20) NOT NULL COMMENT 'env.id', + + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + ranges_checksum binary(20) NOT NULL COMMENT 'sha1(ranges from timeperiod_ranges where timeperiod_range.timeperiod_id = id)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(timeperiod.vars)', + includes_checksum binary(20) NOT NULL COMMENT 'sha1(includes)', + excludes_checksum binary(20) NOT NULL COMMENT 'sha1(excludes)', + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + display_name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + prefer_includes enum('y','n') NOT NULL, + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE timeperiod_range ( + timeperiod_id binary(20) NOT NULL COMMENT 'timeperiod.id', + range_key varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + env_id binary(20) NOT NULL COMMENT 'env.id', + + range_value varchar(255) NOT NULL, + + PRIMARY KEY (timeperiod_id,range_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE timeperiod_override ( + timeperiod_id binary(20) NOT NULL COMMENT 'timeperiod.id', + override_id binary(20) NOT NULL COMMENT 'timeperiod.id', + env_id binary(20) NOT NULL COMMENT 'env.id', + + override_type enum('include','exclude') NOT NULL, + + PRIMARY KEY (timeperiod_id,override_id,override_type) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE timeperiod_customvar ( + timeperiod_id binary(20) NOT NULL COMMENT 'timeperiod.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + PRIMARY KEY (customvar_id, timeperiod_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; \ No newline at end of file diff --git a/etc/schema/mysql/types b/etc/schema/mysql/types new file mode 100644 index 00000000..3f6099a4 --- /dev/null +++ b/etc/schema/mysql/types @@ -0,0 +1,128 @@ +object:* + name + zone (if has zone) + +checksum:* + name_checksum + environment_checksum + zone_id (if has zone) + +object:*command + name + type (CheckCommand, EventCommand, NotificationCommand) + command + timeout + + arguments (not part of property_checksum) + envvars (not part of property_checksum) + +checksum:Xcommand + properties_checksum + arguments_checksum + argument_ids + envvars_checksum + envvar_ids + +object:notification + times_begin (not part of property_checksum) + times_end (not part of property_checksum) + +checksum:notification + host_id + service_id (if servicenotification) + command_id + properties_checksum + user_ids + users_checksum + usergroup_ids + usergroups_checksum + +object:Xcomment + author + text + entry_type + is_persistent + expire_time + +checksum:Xcomment + host_id (if hostcomment) + service_id (if servicecomment) + +object:Xgroup + display_name + +checksum:Xgroup + properties_checksum + +object:user + display_name + email + pager + notification_enabled + states + types + +checksum:user + properies_checksum + group_ids + groups_checksum + period_id + +object:zone + is_global + +checkusm:zone + properties_checksum + parents_checksum + parent_ids + +object:endpoint + +checksum:endpoint + properties_checksum + +object:host/service + checkcommand + max_check_attempts + check_timeout + check_interval + check_retry_interval + active_checks_enabled + passive_checks_enabled + event_handler_enabled + notifications_enabled + flapping_enabled + flapping_threshold_low + flapping_threshold_high + perfdata_enabled + is_volatile + notes + icon_image_alt + command_endpoint + check_period + eventcommand + display_name + address (if host) + address6 (if host) + +checksum:host/service + host_id (if service) + action_url_id + notes_url_id + icon_image_id + command_endpoint_id + check_period_id + eventcommand_id + groups_checksum + group_ids + +object:timeperiod + display_name + prefer_indluces + +checksum:timeperiod + ranges_checksum + includes_checksum + include_ids + excludes_checksum + exclude_ids diff --git a/etc/schema/mysql/url.sql b/etc/schema/mysql/url.sql new file mode 100644 index 00000000..c7b8df90 --- /dev/null +++ b/etc/schema/mysql/url.sql @@ -0,0 +1,32 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE icon_image ( + id binary(20) NOT NULL COMMENT 'sha1(icon_image)', + icon_image text COLLATE utf8mb4_unicode_ci NOT NULL, + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + reference_counter int(6) unsigned NOT NULL COMMENT 'if 0, the custom var needs to be deleted', + + PRIMARY KEY (env_id, id), + KEY idx_icon_image (icon_image(255)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE action_url ( + id binary(20) NOT NULL COMMENT 'sha1(action_url)', + action_url text COLLATE utf8mb4_unicode_ci NOT NULL, + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + reference_counter int(6) unsigned NOT NULL COMMENT 'if 0, the custom var needs to be deleted', + + PRIMARY KEY (env_id, id), + KEY idx_action_url (action_url(255)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE notes_url ( + id binary(20) NOT NULL COMMENT 'sha1(notes_url)', + notes_url text COLLATE utf8mb4_unicode_ci NOT NULL, + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + reference_counter int(6) unsigned NOT NULL COMMENT 'if 0, the custom var needs to be deleted', + + PRIMARY KEY (env_id, id), + KEY idx_notes_url (notes_url(255)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; \ No newline at end of file diff --git a/etc/schema/mysql/user.sql b/etc/schema/mysql/user.sql new file mode 100644 index 00000000..343bfa1a --- /dev/null +++ b/etc/schema/mysql/user.sql @@ -0,0 +1,67 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE user ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(user.vars)', + groups_checksum binary(20) NOT NULL COMMENT 'sha1(usergroup.name + userroup.name ...)', + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + display_name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + email varchar(255) NOT NULL, + pager varchar(255) NOT NULL, + + notifications_enabled enum('y', 'n') NOT NULL, + + period_id binary(20) DEFAULT NULL COMMENT 'timeperiod.id', + + states tinyint(2) unsigned NOT NULL, + types smallint(3) unsigned NOT NULL, + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE usergroup ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + customvars_checksum binary(20) NOT NULL COMMENT 'sha1(usergroup.vars)', + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + display_name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + zone_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE usergroup_member ( + user_id binary(20) NOT NULL COMMENT 'user.id', + usergroup_id binary(20) NOT NULL COMMENT 'usergroup.id', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + + PRIMARY KEY (user_id,usergroup_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE user_customvar ( + user_id binary(20) NOT NULL COMMENT 'user.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + PRIMARY KEY (customvar_id, user_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; + +CREATE TABLE usergroup_customvar ( + usergroup_id binary(20) NOT NULL COMMENT 'usergroup.id', + customvar_id binary(20) NOT NULL COMMENT 'customvar.id', + env_id binary(20) DEFAULT NULL COMMENT 'sha1(environment.name)', + PRIMARY KEY (customvar_id, usergroup_id) +) ENGINE=InnoDb ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin; \ No newline at end of file diff --git a/etc/schema/mysql/zone.sql b/etc/schema/mysql/zone.sql new file mode 100644 index 00000000..96324429 --- /dev/null +++ b/etc/schema/mysql/zone.sql @@ -0,0 +1,31 @@ +SET sql_mode = 'STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION'; +SET innodb_strict_mode = 1; + +CREATE TABLE zone ( + id binary(20) NOT NULL COMMENT 'sha1(environment.name + name)', + env_id binary(20) NOT NULL COMMENT 'sha1(environment.name)', + name_checksum binary(20) NOT NULL COMMENT 'sha1(name)', + properties_checksum binary(20) NOT NULL COMMENT 'sha1(all properties)', + parents_checksum binary(20) NOT NULL COMMENT 'sha1(all parents checksums)', + + name varchar(255) NOT NULL, + name_ci varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + + is_global enum('y','n') NOT NULL, + parent_id binary(20) DEFAULT NULL COMMENT 'zone.id', + + + PRIMARY KEY (id), + INDEX idx_parent_id (parent_id), + UNIQUE INDEX idx_env_id_id (env_id,id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; + +CREATE TABLE zone_tree ( + parent_id binary(20) NOT NULL COMMENT 'zone.id', + child_id binary(20) NOT NULL COMMENT 'zone.id', + env_id binary(20) NOT NULL COMMENT 'env.id', + depth tinyint(3) unsigned NOT NULL, + + PRIMARY KEY (child_id,depth), + UNIQUE INDEX zone_relation (child_id,parent_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC; \ No newline at end of file From e1319b5acd004a5ecfa702ed34c67622bd807d7d Mon Sep 17 00:00:00 2001 From: Jean Flach Date: Tue, 19 Mar 2019 15:55:57 +0100 Subject: [PATCH 2/3] Add config parser --- config/config.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ icingadb.ini | 7 ++++++ main.go | 33 ++++++++++++++++++------- 3 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 config/config.go create mode 100644 icingadb.ini diff --git a/config/config.go b/config/config.go new file mode 100644 index 00000000..f6eb5760 --- /dev/null +++ b/config/config.go @@ -0,0 +1,63 @@ +package config + +import ( + "errors" + "github.com/go-ini/ini" +) + +type RedisInfo struct { + Host string `ini:"host"` + Port string `ini:"port"` + User string `ini:"user"` + Password string `ini:"password"` +} + +var redisInfo = &RedisInfo{ + Port: "6379", +} + +type MysqlInfo struct { + Host string `ini:"host"` + Port string `ini:"port"` + Database string `ini:"database"` + User string `ini:"user"` + Password string `ini:"password"` +} + +var mysqlInfo = &MysqlInfo{ + Port: "3306", + Database: "icingadb", +} + +func ParseConfig(path string) error { + cfg, err := ini.Load(path) + + if err := cfg.Section("redis").MapTo(redisInfo); err != nil { + return err + } + + if redisInfo.Host == "" { + return errors.New("config: missing redis host") + } + + if err = cfg.Section("mysql").MapTo(mysqlInfo); err != nil { + return err + } + + if mysqlInfo.Host == "" { + return errors.New("config: missing mysql host") + } + if mysqlInfo.User == "" || mysqlInfo.Password == "" { + return errors.New("config: missing mysql credentials") + } + + return nil +} + +func GetMysqlInfo() *MysqlInfo { + return mysqlInfo +} + +func GetRedisInfo() *RedisInfo { + return redisInfo +} diff --git a/icingadb.ini b/icingadb.ini new file mode 100644 index 00000000..f9fd5793 --- /dev/null +++ b/icingadb.ini @@ -0,0 +1,7 @@ +[redis] +host="127.0.0.1" + +[mysql] +host="127.0.0.1" +user="module-dev" +password="icinga0815!" diff --git a/main.go b/main.go index 5d6195b6..7c6c3a4b 100644 --- a/main.go +++ b/main.go @@ -4,29 +4,44 @@ import ( "git.icinga.com/icingadb/icingadb-connection" "git.icinga.com/icingadb/icingadb-ha" "git.icinga.com/icingadb/icingadb-json-decoder" + "git.icinga.com/icingadb/icingadb-main/config" "git.icinga.com/icingadb/icingadb-main/configobject/host" "git.icinga.com/icingadb/icingadb-main/configobject/sync" "git.icinga.com/icingadb/icingadb-main/supervisor" log "github.com/sirupsen/logrus" ) +type RedisInfo struct { + host string + port int + user string + password string +} + func main() { - redisConn, err := icingadb_connection.NewRDBWrapper("127.0.0.1:6379") + if err := config.ParseConfig("icingadb.ini"); err != nil { + log.Fatal(err) + } + + redisInfo := config.GetRedisInfo() + mysqlInfo := config.GetMysqlInfo() + + redisConn, err := icingadb_connection.NewRDBWrapper(redisInfo.Host + ":" + redisInfo.Port) if err != nil { log.Fatal(err) } - mysqlConn, err := icingadb_connection.NewDBWrapper("module-dev:icinga0815!@tcp(127.0.0.1:3306)/icingadb" ) + mysqlConn, err := icingadb_connection.NewDBWrapper(mysqlInfo.User + ":" + mysqlInfo.Password + "@tcp(" + mysqlInfo.Host + ":" + mysqlInfo.Port + ")/" + mysqlInfo.Database) if err != nil { log.Fatal(err) } super := supervisor.Supervisor{ - ChErr: make (chan error), - ChEnv: make(chan *icingadb_ha.Environment), + ChErr: make(chan error), + ChEnv: make(chan *icingadb_ha.Environment), ChDecode: make(chan *icingadb_json_decoder.JsonDecodePackages), - Rdbw: redisConn, - Dbw: mysqlConn, + Rdbw: redisConn, + Dbw: mysqlConn, } ha := icingadb_ha.HA{} @@ -42,7 +57,7 @@ func main() { super.ChErr <- sync.Operator(&super, chHA, &sync.Context{ ObjectType: "host", - Factory: host.NewHost, + Factory: host.NewHost, InsertStmt: host.BulkInsertStmt, DeleteStmt: host.BulkDeleteStmt, UpdateStmt: host.BulkUpdateStmt, @@ -51,10 +66,10 @@ func main() { for { select { - case err := <- super.ChErr: + case err := <-super.ChErr: if err != nil { log.Fatal(err) } } } -} \ No newline at end of file +} From 4f62bf0db104e88772d8bb3a151f75a2f9f5d079 Mon Sep 17 00:00:00 2001 From: Jean Flach Date: Wed, 20 Mar 2019 09:35:32 +0100 Subject: [PATCH 3/3] Add config file parsing --- config/config.go | 9 ++++++--- main.go | 15 ++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/config/config.go b/config/config.go index f6eb5760..47470c1e 100644 --- a/config/config.go +++ b/config/config.go @@ -31,13 +31,16 @@ var mysqlInfo = &MysqlInfo{ func ParseConfig(path string) error { cfg, err := ini.Load(path) + if err != nil { + return err + } if err := cfg.Section("redis").MapTo(redisInfo); err != nil { return err } if redisInfo.Host == "" { - return errors.New("config: missing redis host") + return errors.New("missing redis host") } if err = cfg.Section("mysql").MapTo(mysqlInfo); err != nil { @@ -45,10 +48,10 @@ func ParseConfig(path string) error { } if mysqlInfo.Host == "" { - return errors.New("config: missing mysql host") + return errors.New("missing mysql host") } if mysqlInfo.User == "" || mysqlInfo.Password == "" { - return errors.New("config: missing mysql credentials") + return errors.New("missing mysql credentials") } return nil diff --git a/main.go b/main.go index 7c6c3a4b..dcfb0827 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "flag" "git.icinga.com/icingadb/icingadb-connection" "git.icinga.com/icingadb/icingadb-ha" "git.icinga.com/icingadb/icingadb-json-decoder" @@ -11,16 +12,12 @@ import ( log "github.com/sirupsen/logrus" ) -type RedisInfo struct { - host string - port int - user string - password string -} - func main() { - if err := config.ParseConfig("icingadb.ini"); err != nil { - log.Fatal(err) + configPath := flag.String("config", "icingadb.ini", "path to config") + flag.Parse() + + if err := config.ParseConfig(*configPath); err != nil { + log.Fatalf("Error reading config: %v", err) } redisInfo := config.GetRedisInfo()