mirror of
https://github.com/Cacti/cacti.git
synced 2026-11-03 02:27:13 +09:00
* fix: correct codespell-detected spelling errors in PHP source files Fix 63 spelling errors identified by automated codespell scan across 23 files. All changes are in comments, docblocks, string literals, and one dead variable assignment ($flage → $flags in lib/database.php). No logic changes. Corrected words include: accommodate, authentication, complete, dependent, draggable, filtering, formatting, heartbeat, immediately, information, initialize, language, logging, parameter, please, resource, resetting, similarly, specified, SQLite, statistics, support, timeout, whether. Exclusions: parms/PARMS (Cacti CLI variable convention), tht/ot (SQL aliases), CurrOS/hasTables (PHP variables), pring (internal function). Fixes #6803 Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * fix: address Copilot review suggestions on PR #6804 Remove dead variable assignment activated by $postion -> $position typo fix in install/upgrades/1_0_0.php. The misspelled variable was never read, so fixing the name caused it to silently overwrite the correctly computed $position before the UPDATE. Removing the line restores the original (intended) behavior. Fix docblock possessive: "it's formatting" -> "its formatting" in lib/reports.php. Refs #6803 Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * i18n: regenerate cacti.pot after msgid changes in global_settings.php "pre-selected" -> "preselected" and "re-using" -> "reusing" changed two msgid strings. Regenerate cacti.pot so translation tooling picks up the corrected English source strings. Refs #6803 Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> --------- Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> Co-authored-by: TheWitness <thewitness@cacti.net>
2036 lines
102 KiB
PHP
2036 lines
102 KiB
PHP
<?php
|
|
/*
|
|
+-------------------------------------------------------------------------+
|
|
| Copyright (C) 2004-2026 The Cacti Group |
|
|
| |
|
|
| This program is free software; you can redistribute it and/or |
|
|
| modify it under the terms of the GNU General Public License |
|
|
| as published by the Free Software Foundation; either version 2 |
|
|
| of the License, or (at your option) any later version. |
|
|
| |
|
|
| This program is distributed in the hope that it will be useful, |
|
|
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
| GNU General Public License for more details. |
|
|
+-------------------------------------------------------------------------+
|
|
| Cacti: The Complete RRDTool-based Graphing Solution |
|
|
+-------------------------------------------------------------------------+
|
|
| This code is designed, written, and maintained by the Cacti Group. See |
|
|
| about.php and/or the AUTHORS file for specific developer information. |
|
|
+-------------------------------------------------------------------------+
|
|
| http://www.cacti.net/ |
|
|
+-------------------------------------------------------------------------+
|
|
*/
|
|
|
|
function upgrade_to_1_0_0() : void {
|
|
global $config, $plugins_integrated;
|
|
|
|
$default_engine_result = db_install_fetch_row("SHOW GLOBAL VARIABLES LIKE 'default_storage_engine'");
|
|
$default_engine = $default_engine_result['data'];
|
|
|
|
if (!cacti_sizeof($default_engine)) {
|
|
$default_engine_result = db_install_fetch_row("SHOW GLOBAL VARIABLES LIKE 'storage_engine'");
|
|
$default_engine = $default_engine_result['data'];
|
|
}
|
|
|
|
if (cacti_sizeof($default_engine)) {
|
|
$engine = $default_engine['Value'];
|
|
} else {
|
|
$engine = 'MyISAM';
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `user_auth_group` (
|
|
`id` int(10) unsigned NOT NULL auto_increment,
|
|
`name` varchar(20) NOT NULL,
|
|
`description` varchar(255) NOT NULL default '',
|
|
`graph_settings` varchar(2) DEFAULT NULL,
|
|
`login_opts` tinyint(1) NOT NULL DEFAULT '1',
|
|
`show_tree` varchar(2) DEFAULT 'on',
|
|
`show_list` varchar(2) DEFAULT 'on',
|
|
`show_preview` varchar(2) NOT NULL DEFAULT 'on',
|
|
`policy_graphs` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
|
`policy_trees` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
|
`policy_hosts` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
|
`policy_graph_templates` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
|
`enabled` char(2) NOT NULL DEFAULT 'on',
|
|
PRIMARY KEY (`id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Table that Contains User Groups';");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `user_auth_group_perms` (
|
|
`group_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
|
`item_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
|
`type` tinyint(2) unsigned NOT NULL DEFAULT '0',
|
|
PRIMARY KEY (`group_id`,`item_id`,`type`),
|
|
KEY `group_id` (`group_id`,`type`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Table that Contains User Group Permissions';");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `user_auth_group_realm` (
|
|
`group_id` int(10) unsigned NOT NULL,
|
|
`realm_id` int(10) unsigned NOT NULL,
|
|
PRIMARY KEY (`group_id`, `realm_id`),
|
|
KEY `group_id` (`group_id`),
|
|
KEY `realm_id` (`realm_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Table that Contains User Group Realm Permissions';");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `user_auth_group_members` (
|
|
`group_id` int(10) unsigned NOT NULL,
|
|
`user_id` int(10) unsigned NOT NULL,
|
|
PRIMARY KEY (`group_id`, `user_id`),
|
|
KEY `group_id` (`group_id`),
|
|
KEY `realm_id` (`user_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Table that Contains User Group Members';");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `settings_user_group` (
|
|
`group_id` smallint(8) unsigned NOT NULL DEFAULT '0',
|
|
`name` varchar(50) NOT NULL DEFAULT '',
|
|
`value` varchar(2048) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`group_id`,`name`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Stores the Default User Group Graph Settings';");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_stats_daily` (
|
|
`local_data_id` mediumint(8) unsigned NOT NULL,
|
|
`rrd_name` varchar(19) NOT NULL,
|
|
`average` DOUBLE DEFAULT NULL,
|
|
`peak` DOUBLE DEFAULT NULL,
|
|
PRIMARY KEY (`local_data_id`,`rrd_name`)
|
|
) ENGINE=$engine
|
|
ROW_FORMAT=Dynamic;");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_stats_hourly` (
|
|
`local_data_id` mediumint(8) unsigned NOT NULL,
|
|
`rrd_name` varchar(19) NOT NULL,
|
|
`average` DOUBLE DEFAULT NULL,
|
|
`peak` DOUBLE DEFAULT NULL,
|
|
PRIMARY KEY (`local_data_id`,`rrd_name`)
|
|
) ENGINE=$engine
|
|
ROW_FORMAT=Dynamic;");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_stats_hourly_cache` (
|
|
`local_data_id` mediumint(8) unsigned NOT NULL,
|
|
`rrd_name` varchar(19) NOT NULL,
|
|
`time` timestamp NOT NULL default '0000-00-00 00:00:00',
|
|
`value` DOUBLE DEFAULT NULL,
|
|
PRIMARY KEY (`local_data_id`,`time`,`rrd_name`),
|
|
KEY `time` USING BTREE (`time`)
|
|
) ENGINE=MEMORY;");
|
|
|
|
db_install_execute('CREATE TABLE IF NOT EXISTS `data_source_stats_hourly_last` (
|
|
`local_data_id` mediumint(8) unsigned NOT NULL,
|
|
`rrd_name` varchar(19) NOT NULL,
|
|
`value` DOUBLE DEFAULT NULL,
|
|
`calculated` DOUBLE DEFAULT NULL,
|
|
PRIMARY KEY (`local_data_id`,`rrd_name`)
|
|
) ENGINE=MEMORY;');
|
|
|
|
db_install_add_column('data_source_stats_hourly_last', ['name' => 'calculated', 'type' => 'DOUBLE', 'NULL' => true, 'default' => 'NULL', 'after' => 'value']);
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_stats_monthly` (
|
|
`local_data_id` mediumint(8) unsigned NOT NULL,
|
|
`rrd_name` varchar(19) NOT NULL,
|
|
`average` DOUBLE DEFAULT NULL,
|
|
`peak` DOUBLE DEFAULT NULL,
|
|
PRIMARY KEY (`local_data_id`,`rrd_name`)
|
|
) ENGINE=$engine
|
|
ROW_FORMAT=Dynamic;");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_stats_weekly` (
|
|
`local_data_id` mediumint(8) unsigned NOT NULL,
|
|
`rrd_name` varchar(19) NOT NULL,
|
|
`average` DOUBLE DEFAULT NULL,
|
|
`peak` DOUBLE DEFAULT NULL,
|
|
PRIMARY KEY (`local_data_id`,`rrd_name`)
|
|
) ENGINE=$engine
|
|
ROW_FORMAT=Dynamic;");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_stats_yearly` (
|
|
`local_data_id` mediumint(8) unsigned NOT NULL,
|
|
`rrd_name` varchar(19) NOT NULL,
|
|
`average` DOUBLE DEFAULT NULL,
|
|
`peak` DOUBLE DEFAULT NULL,
|
|
PRIMARY KEY (`local_data_id`,`rrd_name`)
|
|
) ENGINE=$engine
|
|
ROW_FORMAT=Dynamic;");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `poller_output_boost` (
|
|
`local_data_id` mediumint(8) unsigned NOT NULL default '0',
|
|
`rrd_name` varchar(19) NOT NULL default '',
|
|
`time` timestamp NOT NULL default '0000-00-00 00:00:00',
|
|
`output` varchar(512) NOT NULL,
|
|
PRIMARY KEY USING BTREE (`local_data_id`,`rrd_name`,`time`)
|
|
) ENGINE=$engine
|
|
ROW_FORMAT=Dynamic;");
|
|
|
|
db_install_execute('CREATE TABLE IF NOT EXISTS `poller_output_boost_processes` (
|
|
`sock_int_value` bigint(20) unsigned NOT NULL auto_increment,
|
|
`status` varchar(255) default NULL,
|
|
PRIMARY KEY (`sock_int_value`))
|
|
ENGINE=MEMORY;');
|
|
|
|
if (db_table_exists('plugin_domains', false)) {
|
|
db_install_rename_table('plugin_domains', 'user_domains');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `user_domains` (
|
|
`domain_id` int(10) unsigned NOT NULL auto_increment,
|
|
`domain_name` varchar(20) NOT NULL,
|
|
`type` int(10) UNSIGNED NOT NULL DEFAULT '0',
|
|
`enabled` char(2) NOT NULL DEFAULT 'on',
|
|
`defdomain` tinyint(3) NOT NULL DEFAULT '0',
|
|
`user_id` int(10) unsigned NOT NULL default '0',
|
|
PRIMARY KEY (`domain_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Table to Hold Login Domains';");
|
|
|
|
if (db_table_exists('plugin_domains_ldap', false)) {
|
|
db_install_rename_table('plugin_domains_ldap', 'user_domains_ldap');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `user_domains_ldap` (
|
|
`domain_id` int(10) unsigned NOT NULL,
|
|
`server` varchar(128) NOT NULL,
|
|
`port` int(10) unsigned NOT NULL,
|
|
`port_ssl` int(10) unsigned NOT NULL,
|
|
`proto_version` tinyint(3) unsigned NOT NULL,
|
|
`encryption` tinyint(3) unsigned NOT NULL,
|
|
`referrals` tinyint(3) unsigned NOT NULL,
|
|
`mode` tinyint(3) unsigned NOT NULL,
|
|
`dn` varchar(128) NOT NULL,
|
|
`group_require` char(2) NOT NULL,
|
|
`group_dn` varchar(128) NOT NULL,
|
|
`group_attrib` varchar(128) NOT NULL,
|
|
`group_member_type` tinyint(3) unsigned NOT NULL,
|
|
`search_base` varchar(128) NOT NULL,
|
|
`search_filter` varchar(128) NOT NULL,
|
|
`specific_dn` varchar(128) NOT NULL,
|
|
`specific_password` varchar(128) NOT NULL,
|
|
PRIMARY KEY (`domain_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Table to Hold Login Domains for LDAP';");
|
|
|
|
if (db_table_exists('plugin_snmpagent_cache', false)) {
|
|
db_install_rename_table('plugin_snmpagent_cache', 'snmpagent_cache');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `snmpagent_cache` (
|
|
`oid` varchar(191) NOT NULL,
|
|
`name` varchar(191) NOT NULL,
|
|
`mib` varchar(191) NOT NULL,
|
|
`type` varchar(255) NOT NULL DEFAULT '',
|
|
`otype` varchar(255) NOT NULL DEFAULT '',
|
|
`kind` varchar(255) NOT NULL DEFAULT '',
|
|
`max-access` varchar(255) NOT NULL DEFAULT 'not-accessible',
|
|
`value` varchar(255) NOT NULL DEFAULT '',
|
|
`description` varchar(5000) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`oid`),
|
|
KEY `name` (`name`),
|
|
KEY `mib` (`mib`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='SNMP MIB CACHE';");
|
|
|
|
if (db_table_exists('plugin_snmpagent_mibs', false)) {
|
|
db_install_rename_table('plugin_snmpagent_mibs', 'snmpagent_mibs');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `snmpagent_mibs` (
|
|
`id` int(8) NOT NULL AUTO_INCREMENT,
|
|
`name` varchar(32) NOT NULL DEFAULT '',
|
|
`file` varchar(255) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Registered MIB files';");
|
|
|
|
if (db_table_exists('plugin_snmpagent_cache_notifications', false)) {
|
|
db_install_rename_table('plugin_snmpagent_cache_notifications', 'snmpagent_cache_notifications');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `snmpagent_cache_notifications` (
|
|
`name` varchar(191) NOT NULL,
|
|
`mib` varchar(255) NOT NULL,
|
|
`attribute` varchar(255) NOT NULL,
|
|
`sequence_id` smallint(6) NOT NULL,
|
|
KEY `name` (`name`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Notifications and related attributes';");
|
|
|
|
if (db_table_exists('plugin_snmpagent_cache_textual_conventions', false)) {
|
|
db_install_rename_table('plugin_snmpagent_cache_textual_conventions', 'snmpagent_cache_textual_conventions');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `snmpagent_cache_textual_conventions` (
|
|
`name` varchar(191) NOT NULL,
|
|
`mib` varchar(191) NOT NULL,
|
|
`type` varchar(255) NOT NULL DEFAULT '',
|
|
`description` varchar(5000) NOT NULL DEFAULT '',
|
|
KEY `name` (`name`),
|
|
KEY `mib` (`mib`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Textual conventions';");
|
|
|
|
if (db_table_exists('plugin_snmpagent_managers', false)) {
|
|
db_install_rename_table('plugin_snmpagent_managers', 'snmpagent_managers');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `snmpagent_managers` (
|
|
`id` int(8) NOT NULL AUTO_INCREMENT,
|
|
`hostname` varchar(100) NOT NULL,
|
|
`description` varchar(255) NOT NULL,
|
|
`disabled` char(2) DEFAULT NULL,
|
|
`max_log_size` tinyint(1) NOT NULL,
|
|
`snmp_version` varchar(255) NOT NULL,
|
|
`snmp_community` varchar(255) NOT NULL,
|
|
`snmp_username` varchar(255) NOT NULL,
|
|
`snmp_auth_password` varchar(255) NOT NULL,
|
|
`snmp_auth_protocol` varchar(255) NOT NULL,
|
|
`snmp_priv_password` varchar(255) NOT NULL,
|
|
`snmp_priv_protocol` varchar(255) NOT NULL,
|
|
`snmp_engine_id` varchar(64) NOT NULL DEFAULT '',
|
|
`snmp_port` varchar(255) NOT NULL,
|
|
`snmp_message_type` tinyint(1) NOT NULL,
|
|
`notes` text,
|
|
PRIMARY KEY (`id`),
|
|
KEY `hostname` (`hostname`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='snmp notification receivers';");
|
|
|
|
if (!db_column_exists('snmpagent_managers', 'snmp_engine_id', false)) {
|
|
db_install_execute('ALTER TABLE snmpagent_managers
|
|
ADD COLUMN `snmp_engine_id` varchar(64) NOT NULL DEFAULT "" AFTER snmp_priv_protocol');
|
|
}
|
|
|
|
if (db_table_exists('plugin_snmpagent_managers_notifications', false)) {
|
|
db_install_rename_table('plugin_snmpagent_managers_notifications', 'snmpagent_managers_notifications');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `snmpagent_managers_notifications` (
|
|
`manager_id` int(8) NOT NULL,
|
|
`notification` varchar(190) NOT NULL,
|
|
`mib` varchar(191) NOT NULL,
|
|
KEY `mib` (`mib`),
|
|
KEY `manager_id` (`manager_id`),
|
|
KEY `manager_id2` (`manager_id`,`notification`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='snmp notifications to receivers';");
|
|
|
|
if (db_table_exists('plugin_snmpagent_notifications_log', false)) {
|
|
db_install_rename_table('plugin_snmpagent_notifications_log', 'snmpagent_notifications_log');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `snmpagent_notifications_log` (
|
|
`id` int(12) NOT NULL AUTO_INCREMENT,
|
|
`time` int(24) NOT NULL,
|
|
`severity` tinyint(1) NOT NULL,
|
|
`manager_id` int(8) NOT NULL,
|
|
`notification` varchar(190) NOT NULL,
|
|
`mib` varchar(191) NOT NULL,
|
|
`varbinds` varchar(5000) NOT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `time` (`time`),
|
|
KEY `severity` (`severity`),
|
|
KEY `manager_id` (`manager_id`),
|
|
KEY `manager_id2` (`manager_id`,`notification`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='logs snmp notifications to receivers';");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_purge_temp` (
|
|
`id` integer UNSIGNED auto_increment,
|
|
`name_cache` varchar(255) NOT NULL default '',
|
|
`local_data_id` mediumint(8) unsigned NOT NULL default '0',
|
|
`name` varchar(128) NOT NULL default '',
|
|
`size` integer UNSIGNED NOT NULL default '0',
|
|
`last_mod` TIMESTAMP NOT NULL default '0000-00-00 00:00:00',
|
|
`in_cacti` tinyint NOT NULL default '0',
|
|
`data_template_id` mediumint(8) unsigned NOT NULL default '0',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY name (`name`),
|
|
KEY local_data_id (`local_data_id`),
|
|
KEY in_cacti (`in_cacti`),
|
|
KEY data_template_id (`data_template_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='RRD Cleaner File Repository';");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_purge_action` (
|
|
`id` integer UNSIGNED auto_increment,
|
|
`name` varchar(128) NOT NULL default '',
|
|
`local_data_id` mediumint(8) unsigned NOT NULL default '0',
|
|
`action` tinyint(2) NOT NULL default 0,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY name (`name`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='RRD Cleaner File Actions';");
|
|
|
|
db_install_add_column('graph_tree', ['name' => 'enabled', 'type' => 'char(2)', 'default' => 'on', 'after' => 'id']);
|
|
db_install_add_column('graph_tree', ['name' => 'locked', 'type' => 'TINYINT', 'default' => 0, 'after' => 'enabled']);
|
|
db_install_add_column('graph_tree', ['name' => 'locked_date', 'type' => 'TIMESTAMP', 'default' => '0000-00-00', 'after' => 'locked']);
|
|
db_install_add_column('graph_tree', ['name' => 'last_modified', 'type' => 'TIMESTAMP', 'default' => '0000-00-00', 'after' => 'name']);
|
|
db_install_add_column('graph_tree', ['name' => 'user_id', 'type' => 'INT UNSIGNED', 'default' => 1, 'after' => 'name']);
|
|
db_install_add_column('graph_tree', ['name' => 'modified_by', 'type' => 'INT UNSIGNED', 'default' => 1]);
|
|
|
|
db_install_add_column('graph_tree_items', ['name' => 'parent', 'type' => 'BIGINT UNSIGNED', 'NULL' => true, 'after' => 'id']);
|
|
db_install_add_column('graph_tree_items', ['name' => 'position', 'type' => 'int UNSIGNED', 'NULL' => true, 'after' => 'parent']);
|
|
|
|
db_install_execute('ALTER TABLE graph_tree_items MODIFY COLUMN id BIGINT UNSIGNED NOT NULL auto_increment');
|
|
|
|
db_install_add_key('graph_tree_items', 'INDEX', 'parent', ['parent']);
|
|
|
|
db_install_drop_table('user_auth_cache');
|
|
db_install_execute("CREATE TABLE `user_auth_cache` (
|
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`user_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`hostname` varchar(64) NOT NULL DEFAULT '',
|
|
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`token` varchar(191) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `tokenkey` (`token`),
|
|
KEY `hostname` (`hostname`),
|
|
KEY `user_id` (`user_id`))
|
|
ENGINE=InnoDB
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Caches Remember Me Details'");
|
|
|
|
db_install_execute("ALTER TABLE host
|
|
MODIFY COLUMN status_fail_date timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
MODIFY COLUMN status_rec_date timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'");
|
|
|
|
db_install_execute("ALTER TABLE poller
|
|
MODIFY COLUMN last_update timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'");
|
|
|
|
db_install_execute("ALTER TABLE poller_command
|
|
MODIFY COLUMN time timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'");
|
|
|
|
db_install_execute("ALTER TABLE poller_output
|
|
MODIFY COLUMN time timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'");
|
|
|
|
db_install_execute("ALTER TABLE poller_time
|
|
MODIFY COLUMN start_time timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
MODIFY COLUMN end_time timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'");
|
|
|
|
db_install_execute("ALTER TABLE user_log
|
|
MODIFY COLUMN time timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'");
|
|
|
|
// Add secpass fields
|
|
db_install_add_column('user_auth', ['name' => 'lastchange', 'type' => 'int(12)', 'NULL' => false, 'default' => '-1']);
|
|
db_install_add_column('user_auth', ['name' => 'lastlogin', 'type' => 'int(12)', 'NULL' => false, 'default' => '-1']);
|
|
db_install_add_column('user_auth', ['name' => 'password_history', 'type' => 'varchar(4096)', 'NULL' => false, 'default' => '-1']);
|
|
db_install_add_column('user_auth', ['name' => 'locked', 'type' => 'varchar(3)', 'NULL' => false, 'default' => '']);
|
|
db_install_add_column('user_auth', ['name' => 'failed_attempts', 'type' => 'int(5)', 'NULL' => false, 'default' => '0']);
|
|
db_install_add_column('user_auth', ['name' => 'lastfail', 'type' => 'int(12)', 'NULL' => false, 'default' => '0']);
|
|
|
|
$pos_array = [];
|
|
|
|
// Convert all trees to new format, but never run more than once
|
|
if (db_column_exists('graph_tree_items', 'order_key', false)) {
|
|
$trees_result = db_install_fetch_assoc('SELECT id FROM graph_tree ORDER BY id');
|
|
$trees = $trees_result['data'];
|
|
|
|
if (cacti_sizeof($trees)) {
|
|
foreach ($trees as $t) {
|
|
$tree_items_result = db_install_fetch_assoc("SELECT *
|
|
FROM graph_tree_items
|
|
WHERE graph_tree_id = ?
|
|
AND order_key NOT LIKE '___000%'
|
|
ORDER BY order_key", [$t['id']], false);
|
|
$tree_items = $tree_items_result['data'];
|
|
|
|
// reset the position variable in case we run more than once
|
|
db_install_execute('UPDATE graph_tree_items
|
|
SET position=0
|
|
WHERE graph_tree_id = ?',
|
|
[$t['id']], false);
|
|
|
|
$prev_parent = 0;
|
|
$prev_id = 0;
|
|
$position = 0;
|
|
|
|
if (cacti_sizeof($tree_items)) {
|
|
foreach ($tree_items as $item) {
|
|
$translated_key = rtrim($item['order_key'], "0\r\n");
|
|
$missing_len = strlen($translated_key) % CHARS_PER_TIER;
|
|
|
|
if ($missing_len > 0) {
|
|
$translated_key .= substr('000', 0, CHARS_PER_TIER - $missing_len);
|
|
}
|
|
|
|
$parent_key_len = strlen($translated_key) - CHARS_PER_TIER;
|
|
$parent_key = substr($translated_key, 0, $parent_key_len);
|
|
|
|
$parent_id_result = db_install_fetch_cell('SELECT id
|
|
FROM graph_tree_items
|
|
WHERE graph_tree_id = ?
|
|
AND order_key LIKE ?',
|
|
[$item['graph_tree_id'], $parent_key . '000%'], false);
|
|
|
|
$parent_id = $parent_id_result['data'];
|
|
|
|
if (empty($parent_id)) {
|
|
$parent_id = 0;
|
|
}
|
|
|
|
// get order
|
|
if ($parent_id != $prev_parent) {
|
|
$position = 0;
|
|
}
|
|
|
|
if (!isset($pos_array[$parent_id])) {
|
|
$position_result = db_install_fetch_cell('SELECT MAX(position)
|
|
FROM graph_tree_items
|
|
WHERE graph_tree_id = ?
|
|
AND parent = ?',
|
|
[$item['graph_tree_id'], $parent_id], false);
|
|
|
|
$position = $position_result['data'] + 1;
|
|
} else {
|
|
$position = $pos_array[$parent_id] + 1;
|
|
}
|
|
|
|
$pos_array[$parent_id] = $position;
|
|
|
|
db_install_execute('UPDATE graph_tree_items
|
|
SET parent = ?, position = ?
|
|
WHERE id = ?',
|
|
[$parent_id, $position, $item['id']], false);
|
|
|
|
$prev_parent = $parent_id;
|
|
}
|
|
}
|
|
|
|
// get base tree items and set position
|
|
$tree_items_result = db_install_fetch_assoc('SELECT *
|
|
FROM graph_tree_items
|
|
WHERE graph_tree_id = ?
|
|
AND order_key LIKE "___000%"
|
|
ORDER BY order_key',
|
|
[$t['id']], false);
|
|
$tree_items = $tree_items_result['data'];
|
|
|
|
$position = 0;
|
|
$parent_id = 0;
|
|
|
|
if (cacti_sizeof($tree_items)) {
|
|
foreach ($tree_items as $item) {
|
|
db_install_execute('UPDATE graph_tree_items
|
|
SET parent = ?, position = ?
|
|
WHERE id = ?',
|
|
[$parent_id, $position, $item['id']], false);
|
|
|
|
$position++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
db_install_drop_column('graph_tree_items', 'order_key');
|
|
}
|
|
|
|
// handle all merged realms, drop plugin contents separately
|
|
upgrade_realms();
|
|
|
|
snmpagent_cache_install();
|
|
|
|
// Adding email column for future user
|
|
db_install_add_column('user_auth', ['name' => 'email_address', 'type' => 'varchar(128)', 'NULL' => true, 'after' => 'full_name']);
|
|
db_install_add_column('user_auth', ['name' => 'password_change', 'type' => 'char(2)', 'NULL' => true, 'default' => 'on', 'after' => 'must_change_password']);
|
|
|
|
db_install_drop_table('poller_output_realtime');
|
|
db_install_execute("CREATE TABLE poller_output_realtime (
|
|
local_data_id mediumint(8) unsigned NOT NULL default '0',
|
|
rrd_name varchar(19) NOT NULL default '',
|
|
time timestamp NOT NULL default '0000-00-00 00:00:00',
|
|
output text NOT NULL,
|
|
poller_id varchar(256) NOT NULL default '',
|
|
PRIMARY KEY (local_data_id,rrd_name,`time`),
|
|
KEY poller_id(poller_id(191)))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic");
|
|
|
|
db_install_drop_table('poller_output_rt');
|
|
|
|
// If we have never install Nectar before, we can simply install
|
|
$nectar_tables_result = db_install_fetch_row("SHOW TABLES LIKE '%plugin_nectar%'");
|
|
$nectar_tables = $nectar_tables_result['data'];
|
|
|
|
if (!cacti_sizeof($nectar_tables)) {
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `reports` (
|
|
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
|
`user_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
|
`name` varchar(100) NOT NULL DEFAULT '',
|
|
`cformat` char(2) NOT NULL DEFAULT '',
|
|
`format_file` varchar(255) NOT NULL DEFAULT '',
|
|
`font_size` smallint(2) unsigned NOT NULL DEFAULT '0',
|
|
`alignment` smallint(2) unsigned NOT NULL DEFAULT '0',
|
|
`graph_linked` char(2) NOT NULL DEFAULT '',
|
|
`intrvl` smallint(2) unsigned NOT NULL DEFAULT '0',
|
|
`count` smallint(2) unsigned NOT NULL DEFAULT '0',
|
|
`offset` int(12) unsigned NOT NULL DEFAULT '0',
|
|
`mailtime` bigint(20) unsigned NOT NULL DEFAULT '0',
|
|
`subject` varchar(64) NOT NULL DEFAULT '',
|
|
`from_name` varchar(40) NOT NULL,
|
|
`from_email` text NOT NULL,
|
|
`email` text NOT NULL,
|
|
`bcc` text NOT NULL,
|
|
`attachment_type` smallint(2) unsigned NOT NULL DEFAULT '1',
|
|
`graph_height` smallint(2) unsigned NOT NULL DEFAULT '0',
|
|
`graph_width` smallint(2) unsigned NOT NULL DEFAULT '0',
|
|
`graph_columns` smallint(2) unsigned NOT NULL DEFAULT '0',
|
|
`thumbnails` char(2) NOT NULL DEFAULT '',
|
|
`lastsent` bigint(20) unsigned NOT NULL DEFAULT '0',
|
|
`enabled` char(2) DEFAULT '',
|
|
PRIMARY KEY (`id`),
|
|
KEY `mailtime` (`mailtime`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Cacri Reporting Reports'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `reports_items` (
|
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`report_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`item_type` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
|
`tree_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`branch_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`tree_cascade` char(2) NOT NULL DEFAULT '',
|
|
`graph_name_regexp` varchar(128) NOT NULL DEFAULT '',
|
|
`host_template_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`host_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`graph_template_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`local_graph_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`timespan` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`align` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
|
`item_text` text NOT NULL,
|
|
`font_size` smallint(2) unsigned NOT NULL DEFAULT '10',
|
|
`sequence` smallint(5) unsigned NOT NULL DEFAULT '0',
|
|
PRIMARY KEY (`id`),
|
|
KEY `report_id` (`report_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Cacti Reporting Items'");
|
|
} else {
|
|
db_install_rename_table('plugin_nectar', 'reports');
|
|
db_install_rename_table('plugin_nectar_items', 'reports_items');
|
|
db_install_execute("UPDATE IGNORE settings SET name=REPLACE(name, 'nectar','reports') WHERE name LIKE '%nectar%'");
|
|
|
|
db_install_add_column('reports', ['name' => 'bcc', 'type' => 'TEXT', 'after' => 'email']);
|
|
db_install_add_column('reports', ['name' => 'from_name', 'type' => 'VARCHAR(40)', 'NULL' => false, 'default' => '', 'after' => 'mailtime']);
|
|
db_install_add_column('reports', ['name' => 'user_id', 'type' => 'mediumint(8)', 'unsigned' => true, 'NULL' => false, 'default' => '0', 'after' => 'id']);
|
|
db_install_add_column('reports', ['name' => 'graph_width', 'type' => 'smallint(2)', 'unsigned' => true, 'NULL' => false, 'default' => '0', 'after' => 'attachment_type']);
|
|
db_install_add_column('reports', ['name' => 'graph_height', 'type' => 'smallint(2)', 'unsigned' => true, 'NULL' => false, 'default' => '0', 'after' => 'graph_width']);
|
|
db_install_add_column('reports', ['name' => 'graph_columns', 'type' => 'smallint(2)', 'unsigned' => true, 'NULL' => false, 'default' => '0', 'after' => 'graph_height']);
|
|
db_install_add_column('reports', ['name' => 'thumbnails', 'type' => 'char(2)', 'NULL' => false, 'default' => '', 'after' => 'graph_columns']);
|
|
db_install_add_column('reports', ['name' => 'font_size', 'type' => 'smallint(2)', 'NULL' => false, 'default' => '16', 'after' => 'name']);
|
|
db_install_add_column('reports', ['name' => 'alignment', 'type' => 'smallint(2)', 'NULL' => false, 'default' => '0', 'after' => 'font_size']);
|
|
db_install_add_column('reports', ['name' => 'cformat', 'type' => 'char(2)', 'NULL' => false, 'default' => '', 'after' => 'name']);
|
|
db_install_add_column('reports', ['name' => 'format_file', 'type' => 'varchar(255)', 'NULL' => false, 'default' => '', 'after' => 'cformat']);
|
|
db_install_add_column('reports', ['name' => 'graph_linked', 'type' => 'char(2)', 'NULL' => false, 'default' => '', 'after' => 'alignment']);
|
|
db_install_add_column('reports', ['name' => 'subject', 'type' => 'varchar(64)', 'NULL' => false, 'default' => '', 'after' => 'mailtime']);
|
|
|
|
// plugin_reports_items upgrade
|
|
db_install_add_column('reports_items', ['name' => 'host_template_id', 'type' => 'int(10)', 'unsigned' => true, 'NULL' => false, 'default' => '0', 'after' => 'item_type']);
|
|
db_install_add_column('reports_items', ['name' => 'graph_template_id', 'type' => 'int(10)', 'unsigned' => true, 'NULL' => false, 'default' => '0', 'after' => 'host_id']);
|
|
db_install_add_column('reports_items', ['name' => 'tree_id', 'type' => 'int(10)', 'unsigned' => true, 'NULL' => false, 'default' => '0', 'after' => 'item_type']);
|
|
db_install_add_column('reports_items', ['name' => 'branch_id', 'type' => 'int(10)', 'unsigned' => true, 'NULL' => false, 'default' => '0', 'after' => 'tree_id']);
|
|
db_install_add_column('reports_items', ['name' => 'tree_cascade', 'type' => 'char(2)', 'NULL' => false, 'default' => '', 'after' => 'branch_id']);
|
|
db_install_add_column('reports_items', ['name' => 'graph_name_regexp', 'type' => 'varchar(128)', 'NULL' => false, 'default' => '', 'after' => 'tree_cascade']);
|
|
|
|
// fix host templates and graph template ids
|
|
$items_result = db_install_fetch_assoc('SELECT * FROM reports_items WHERE item_type=1');
|
|
$items = $items_result['data'];
|
|
|
|
if (cacti_sizeof($items)) {
|
|
foreach ($items as $row) {
|
|
$host_results = db_install_fetch_row('SELECT host.*
|
|
FROM graph_local
|
|
LEFT JOIN host
|
|
ON (graph_local.host_id=host.id)
|
|
WHERE graph_local.id = ?',
|
|
[$row['local_graph_id']], false);
|
|
$host = $host_results['data'];
|
|
|
|
if (cacti_sizeof($host)) {
|
|
$graph_template = db_install_fetch_cell('SELECT graph_template_id
|
|
FROM graph_local
|
|
WHERE id = ?',
|
|
[$row['local_graph_id']], false);
|
|
|
|
db_install_execute('UPDATE reports_items SET
|
|
host_id = ?,
|
|
host_template_id = ?,
|
|
graph_template_id = ?
|
|
WHERE id = ?',
|
|
[
|
|
$host['id'],
|
|
$host['host_template_id'],
|
|
$graph_template['data'],
|
|
$row['id']
|
|
], false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
db_install_add_column('host', ['name' => 'snmp_sysDescr', 'type' => 'varchar(300)', 'NULL' => false, 'default' => '', 'after' => 'snmp_timeout']);
|
|
db_install_add_column('host', ['name' => 'snmp_sysObjectID', 'type' => 'varchar(64)', 'NULL' => false, 'default' => '', 'after' => 'snmp_sysDescr']);
|
|
db_install_add_column('host', ['name' => 'snmp_sysUpTimeInstance', 'type' => 'int', 'NULL' => false, 'default' => '0', 'after' => 'snmp_sysObjectID', 'unsigned' => true]);
|
|
db_install_add_column('host', ['name' => 'snmp_sysContact', 'type' => 'varchar(300)', 'NULL' => false, 'default' => '', 'after' => 'snmp_sysUpTimeInstance']);
|
|
db_install_add_column('host', ['name' => 'snmp_sysName', 'type' => 'varchar(300)', 'NULL' => false, 'default' => '', 'after' => 'snmp_sysContact']);
|
|
db_install_add_column('host', ['name' => 'snmp_sysLocation', 'type' => 'varchar(300)', 'NULL' => false, 'default' => '', 'after' => 'snmp_sysName']);
|
|
db_install_add_column('host', ['name' => 'polling_time', 'type' => 'DOUBLE', 'default' => '0', 'after' => 'avg_time']);
|
|
|
|
if (!db_table_exists('aggregate_graph_templates')) {
|
|
// Aggregate Merge Changes
|
|
|
|
// V064 -> V065 tables were renamed
|
|
if (db_table_exists('plugin_color_templates', false)) {
|
|
db_install_rename_table('plugin_color_templates', 'plugin_aggregate_color_templates');
|
|
}
|
|
|
|
if (db_table_exists('plugin_color_templates_item', false)) {
|
|
db_install_rename_table('plugin_color_templates_item', 'plugin_aggregate_color_template_items');
|
|
}
|
|
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'color_template_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'name', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['primary'] = 'color_template_id';
|
|
$data['keys'][] = ''; // lib/plugins.php _requires_ keys!
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Color Templates';
|
|
db_table_create('plugin_aggregate_color_templates', $data);
|
|
|
|
$sql[] = 'INSERT IGNORE INTO `plugin_aggregate_color_templates` ' .
|
|
'(`color_template_id`, `name`) ' .
|
|
'VALUES ' .
|
|
"(1, 'Yellow: light -> dark, 4 colors'), " .
|
|
"(2, 'Red: light yellow > dark red, 8 colors'), " .
|
|
"(3, 'Red: light -> dark, 16 colors'), " .
|
|
"(4, 'Green: dark -> light, 16 colors');";
|
|
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'color_template_item_id', 'type' => 'int(12)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'color_template_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'color_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'sequence', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['primary'] = 'color_template_item_id';
|
|
$data['keys'][] = ''; // lib/plugins.php _requires_ keys!
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Color Items for Color Templates';
|
|
db_table_create('plugin_aggregate_color_template_items', $data);
|
|
|
|
$sql[] = 'INSERT IGNORE INTO `plugin_aggregate_color_template_items` ' .
|
|
'(`color_template_item_id`, `color_template_id`, `color_id`, `sequence`) VALUES ' .
|
|
'(1, 1, 4, 1), (2, 1, 24, 2), (3, 1, 98, 3), (4, 1, 25, 4), ' .
|
|
'(5, 2, 25, 1), (6, 2, 29, 2), (7, 2, 30, 3), (8, 2, 31, 4), (9, 2, 33, 5), (10, 2, 35, 6), (11, 2, 41, 7), (12, 2, 9, 8), ' .
|
|
'(13, 3, 15, 1), (14, 3, 31, 2), (15, 3, 28, 3), (16, 3, 8, 4), (17, 3, 34, 5), (18, 3, 33, 6), (19, 3, 35, 7), (20, 3, 41, 8), ' .
|
|
'(21, 3, 36, 9), (22, 3, 42, 10), (23, 3, 44, 11), (24, 3, 48, 12), (25, 3, 9, 13), (26, 3, 49, 14), (27, 3, 51, 15), (28, 3, 52, 16), ' .
|
|
'(29, 4, 76, 1), (30, 4, 84, 2), (31, 4, 89, 3), (32, 4, 17, 4), (33, 4, 86, 5), (34, 4, 88, 6), (35, 4, 90, 7), (36, 4, 94, 8), ' .
|
|
'(37, 4, 96, 9), (38, 4, 93, 10), (39, 4, 91, 11), (40, 4, 22, 12), (41, 4, 12, 13), (42, 4, 95, 14), (43, 4, 6, 15), (44, 4, 92, 16);';
|
|
|
|
// now run all SQL commands
|
|
if (cacti_sizeof($sql)) {
|
|
foreach ($sql as $query) {
|
|
$result = db_install_execute($query);
|
|
}
|
|
$sql = [];
|
|
}
|
|
|
|
// Autom8 Upgrade
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'name', 'type' => 'VARCHAR(64)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'graph_template_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'gprint_prefix', 'type' => 'VARCHAR(64)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'graph_type', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'total', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'total_type', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'total_prefix', 'type' => 'VARCHAR(64)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'order_type', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'created', 'type' => 'TIMESTAMP', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'user_id', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['primary'] = 'id';
|
|
$data['keys'][] = ['name' => 'graph_template_id', 'columns' => 'graph_template_id'];
|
|
$data['keys'][] = ['name' => 'user_id', 'columns' => 'user_id'];
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Template Definitions for Aggregate Graphs';
|
|
db_table_create('plugin_aggregate_graph_templates', $data);
|
|
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'aggregate_template_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'graph_templates_item_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'sequence', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'color_template', 'type' => 'int(11)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'item_skip', 'type' => 'CHAR(2)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'item_total', 'type' => 'CHAR(2)', 'NULL' => false];
|
|
$data['primary'] = 'aggregate_template_id`,`graph_templates_item_id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Aggregate Template Graph Items';
|
|
db_table_create('plugin_aggregate_graph_templates_item', $data);
|
|
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'aggregate_template_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'template_propogation', 'type' => 'CHAR(2)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'local_graph_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'title_format', 'type' => 'VARCHAR(128)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'graph_template_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'gprint_prefix', 'type' => 'VARCHAR(64)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'graph_type', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'total', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'total_type', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'total_prefix', 'type' => 'VARCHAR(64)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'order_type', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'created', 'type' => 'TIMESTAMP', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'user_id', 'type' => 'INTEGER', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['primary'] = 'id';
|
|
$data['keys'][] = ['name' => 'aggregate_template_id', 'columns' => 'aggregate_template_id'];
|
|
$data['keys'][] = ['name' => 'local_graph_id', 'columns' => 'local_graph_id'];
|
|
$data['keys'][] = ['name' => 'title_format', 'columns' => 'title_format'];
|
|
$data['keys'][] = ['name' => 'user_id', 'columns' => 'user_id'];
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Aggregate Graph Definitions';
|
|
db_table_create('plugin_aggregate_graphs', $data);
|
|
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'aggregate_graph_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'local_graph_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'sequence', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['primary'] = 'aggregate_graph_id`,`local_graph_id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Aggregate Graph Items';
|
|
db_table_create('plugin_aggregate_graphs_items', $data);
|
|
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'aggregate_graph_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'graph_templates_item_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'sequence', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'color_template', 'type' => 'int(11)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'item_skip', 'type' => 'CHAR(2)', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 'item_total', 'type' => 'CHAR(2)', 'NULL' => false];
|
|
$data['primary'] = 'aggregate_graph_id`,`graph_templates_item_id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Aggregate Graph Graph Items';
|
|
db_table_create('plugin_aggregate_graphs_graph_item', $data);
|
|
|
|
// TODO should this go in a separate upgrade function?
|
|
// Create table holding aggregate template graph params
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'aggregate_template_id', 'type' => 'int(10)', 'unsigned' => 'unsigned', 'NULL' => false];
|
|
$data['columns'][] = ['name' => 't_image_format_id', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'image_format_id', 'type' => 'tinyint(1)', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 't_height', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'height', 'type' => 'mediumint(8)', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 't_width', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'width', 'type' => 'mediumint(8)', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 't_upper_limit', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'upper_limit', 'type' => 'varchar(20)', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 't_lower_limit', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'lower_limit', 'type' => 'varchar(20)', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 't_vertical_label', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'vertical_label', 'type' => 'varchar(200)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 't_slope_mode', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'slope_mode', 'type' => 'char(2)', 'default' => 'on'];
|
|
$data['columns'][] = ['name' => 't_auto_scale', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'auto_scale', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 't_auto_scale_opts', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'auto_scale_opts', 'type' => 'tinyint(1)', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 't_auto_scale_log', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'auto_scale_log', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 't_scale_log_units', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'scale_log_units', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 't_auto_scale_rigid', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'auto_scale_rigid', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 't_auto_padding', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'auto_padding', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 't_base_value', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'base_value', 'type' => 'mediumint(8)', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 't_grouping', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'grouping', 'type' => 'char(2)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 't_unit_value', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'unit_value', 'type' => 'varchar(20)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 't_unit_exponent_value', 'type' => 'char(2)', 'default' => ''];
|
|
$data['columns'][] = ['name' => 'unit_exponent_value', 'type' => 'varchar(5)', 'NULL' => false, 'default' => ''];
|
|
$data['primary'] = 'aggregate_template_id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Aggregate Template Graph Data';
|
|
db_table_create('plugin_aggregate_graph_templates_graph', $data);
|
|
|
|
// TODO should this go in a separate upgrade function?
|
|
// Add cfed and graph_type override columns to aggregate tables
|
|
$columns = [];
|
|
$columns[] = ['name' => 't_graph_type_id', 'type' => 'char(2)', 'default' => '', 'after' => 'color_template'];
|
|
$columns[] = ['name' => 'graph_type_id', 'type' => 'tinyint(3)', 'NULL' => false, 'default' => 0, 'after' => 't_graph_type_id'];
|
|
$columns[] = ['name' => 't_cdef_id', 'type' => 'char(2)', 'default' => '', 'after' => 'graph_type_id'];
|
|
$columns[] = ['name' => 'cdef_id', 'type' => 'mediumint(8)', 'unsigned' => true, 'NULL' => true, 'after' => 't_cdef_id'];
|
|
|
|
foreach (['plugin_aggregate_graphs_graph_item', 'plugin_aggregate_graph_templates_item'] as $table) {
|
|
foreach ($columns as $column) {
|
|
db_install_add_column($table, $column);
|
|
}
|
|
}
|
|
|
|
// Merging aggregate into mainline
|
|
db_install_rename_table('plugin_aggregate_color_template_items', 'color_template_items');
|
|
db_install_rename_table('plugin_aggregate_color_templates', 'color_templates');
|
|
db_install_rename_table('plugin_aggregate_graph_templates', 'aggregate_graph_templates');
|
|
db_install_rename_table('plugin_aggregate_graph_templates_graph', 'aggregate_graph_templates_graph');
|
|
db_install_rename_table('plugin_aggregate_graph_templates_item', 'aggregate_graph_templates_item');
|
|
db_install_rename_table('plugin_aggregate_graphs', 'aggregate_graphs');
|
|
db_install_rename_table('plugin_aggregate_graphs_graph_item', 'aggregate_graphs_graph_item');
|
|
db_install_rename_table('plugin_aggregate_graphs_items', 'aggregate_graphs_items');
|
|
}
|
|
|
|
// automation rules
|
|
if (!db_table_exists('plugin_autom8_match_rule_items', false)) {
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'rule_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'rule_type', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'sequence', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'operation', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'field', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'operator', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'pattern', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['primary'] = 'id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Automation Match Rule Items';
|
|
db_table_create('plugin_autom8_match_rule_items', $data);
|
|
|
|
$sql[] = "INSERT IGNORE INTO `plugin_autom8_match_rule_items`
|
|
(`id`, `rule_id`, `rule_type`, `sequence`, `operation`, `field`, `operator`, `pattern`)
|
|
VALUES
|
|
(1, 1, 1, 1, 0, 'h.description', 14, ''),
|
|
(2, 1, 1, 2, 1, 'h.snmp_version', 12, '2'),
|
|
(3, 1, 3, 1, 0, 'ht.name', 1, 'Linux'),
|
|
(4, 2, 1, 1, 0, 'ht.name', 1, 'Linux'),
|
|
(5, 2, 1, 2, 1, 'h.snmp_version', 12, '2'),
|
|
(6, 2, 3, 1, 0, 'ht.name', 1, 'SNMP'),
|
|
(7, 2, 3, 2, 1, 'gt.name', 1, 'Traffic')";
|
|
} else {
|
|
if (db_table_exists('plugin_autom8_match_rules', false)) {
|
|
$sql[] = "UPDATE plugin_autom8_match_rules SET field=REPLACE(field, 'host_template.', 'ht.')";
|
|
$sql[] = "UPDATE plugin_autom8_match_rules SET field=REPLACE(field, 'host.', 'h.')";
|
|
$sql[] = "UPDATE plugin_autom8_match_rules SET field=REPLACE(field, 'graph_templates.', 'gt.')";
|
|
$sql[] = "UPDATE plugin_autom8_match_rules SET field=REPLACE(field, 'graph_templates_graph.', 'gtg.')";
|
|
}
|
|
}
|
|
|
|
if (!db_table_exists('plugin_autom8_graph_rules', false)) {
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'name', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'snmp_query_id', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'graph_type_id', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'enabled', 'type' => 'char(2)', 'NULL' => true, 'default' => ''];
|
|
$data['primary'] = 'id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Automation Graph Rules';
|
|
db_table_create('plugin_autom8_graph_rules', $data);
|
|
|
|
$sql[] = "INSERT IGNORE INTO `plugin_autom8_graph_rules`
|
|
(`id`, `name`, `snmp_query_id`, `graph_type_id`, `enabled`)
|
|
VALUES
|
|
(1, 'Traffic 64 bit Server', 1, 14, ''),
|
|
(2, 'Traffic 64 bit Server Linux', 1, 14, ''),
|
|
(3, 'Disk Space', 8, 18, '')";
|
|
}
|
|
|
|
if (!db_table_exists('plugin_autom8_graph_rule_items', false)) {
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'rule_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'sequence', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'operation', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'field', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'operator', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'pattern', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['primary'] = 'id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Automation Graph Rule Items';
|
|
db_table_create('plugin_autom8_graph_rule_items', $data);
|
|
|
|
$sql[] = "INSERT IGNORE INTO `plugin_autom8_graph_rule_items`
|
|
(`id`, `rule_id`, `sequence`, `operation`, `field`, `operator`, `pattern`)
|
|
VALUES
|
|
(1, 1, 1, 0, 'ifOperStatus', 7, 'Up'),
|
|
(2, 1, 2, 1, 'ifIP', 16, ''),
|
|
(3, 1, 3, 1, 'ifHwAddr', 16, ''),
|
|
(4, 2, 1, 0, 'ifOperStatus', 7, 'Up'),
|
|
(5, 2, 2, 1, 'ifIP', 16, ''),
|
|
(6, 2, 3, 1, 'ifHwAddr', 16, '')";
|
|
}
|
|
|
|
if (!db_table_exists('plugin_autom8_tree_rules', false)) {
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'name', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'tree_id', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'tree_item_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'leaf_type', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'host_grouping_type', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'rra_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'enabled', 'type' => 'char(2)', 'NULL' => true, 'default' => ''];
|
|
$data['primary'] = 'id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Automation Tree Rules';
|
|
db_table_create('plugin_autom8_tree_rules', $data);
|
|
|
|
$sql[] = "INSERT IGNORE INTO `plugin_autom8_tree_rules`
|
|
(`id`, `name`, `tree_id`, `tree_item_id`, `leaf_type`, `host_grouping_type`, `rra_id`, `enabled`)
|
|
VALUES
|
|
(1, 'New Device', 1, 0, 3, 1, 0, ''),
|
|
(2, 'New Graph', 1, 0, 2, 0, 1, '')";
|
|
}
|
|
|
|
if (!db_table_exists('plugin_autom8_tree_rule_items', false)) {
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'rule_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'sequence', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'field', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'rra_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'sort_type', 'type' => 'smallint(3)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'propagate_changes', 'type' => 'char(2)', 'NULL' => true, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'search_pattern', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'replace_pattern', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['primary'] = 'id';
|
|
$data['keys'][] = '';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
$data['comment'] = 'Automation Tree Rule Items';
|
|
db_table_create('plugin_autom8_tree_rule_items', $data);
|
|
|
|
$sql[] = "INSERT INTO `plugin_autom8_tree_rule_items`
|
|
(`id`, `rule_id`, `sequence`, `field`, `rra_id`, `sort_type`, `propagate_changes`, `search_pattern`, `replace_pattern`)
|
|
VALUES
|
|
(1, 1, 1, 'ht.name', 0, 1, '', '^(.*)\\\\s*Linux\\\\s*(.*)$', '$\{1\}\\\\n$\{2\}'),
|
|
(2, 1, 2, 'h.hostname', 0, 1, '', '^(\\\\w*)\\\\s*(\\\\w*)\\\\s*(\\\\w*).*$', '$\{1\}\\\\n$\{2\}\\\\n$\{3\}'),
|
|
(3, 2, 1, '0', 0, 2, 'on', 'Traffic', ''),
|
|
(4, 2, 2, 'gtg.title_cache', 0, 1, '', '^(.*)\\\\s*-\\\\s*Traffic -\\\\s*(.*)$', '$\{1\}\\\\n$\{2\}');";
|
|
} else {
|
|
$sql[] = "UPDATE plugin_autom8_tree_rule_items SET field = REPLACE(field, 'host_template.', 'ht.')";
|
|
$sql[] = "UPDATE plugin_autom8_tree_rule_items SET field = REPLACE(field, 'host.', 'h.')";
|
|
$sql[] = "UPDATE plugin_autom8_tree_rule_items SET field = REPLACE(field, 'graph_templates.', 'gt.')";
|
|
$sql[] = "UPDATE plugin_autom8_tree_rule_items SET field = REPLACE(field, 'graph_templates_graph.', 'gtg.')";
|
|
}
|
|
|
|
// now run all SQL commands
|
|
if (cacti_sizeof($sql)) {
|
|
foreach ($sql as $query) {
|
|
$result = db_install_execute($query);
|
|
}
|
|
$sql = [];
|
|
}
|
|
|
|
// autom8 table renames
|
|
$autom8_tables = [
|
|
'plugin_autom8_graph_rules',
|
|
'plugin_autom8_graph_rule_items',
|
|
'plugin_autom8_match_rule_items',
|
|
'plugin_autom8_tree_rules',
|
|
'plugin_autom8_tree_rule_items'
|
|
];
|
|
|
|
foreach ($autom8_tables as $table) {
|
|
$new_table = str_replace('plugin_autom8', 'automation', $table);
|
|
|
|
if (db_table_exists($table)) {
|
|
db_install_execute("DROP TABLE IF EXISTS $new_table");
|
|
db_install_rename_table($table, str_replace('plugin_autom8', 'automation', $table));
|
|
}
|
|
}
|
|
|
|
db_install_execute("UPDATE IGNORE settings SET name = REPLACE(name, 'autom8', 'automation') WHERE name LIKE 'autom8%'");
|
|
|
|
// migrate discovery to Core if exists
|
|
if (db_table_exists('plugin_discover_hosts', false)) {
|
|
db_install_rename_table('plugin_discover_hosts', 'automation_devices');
|
|
db_install_drop_column('automation_devices', 'hash');
|
|
|
|
db_install_execute("ALTER TABLE automation_devices
|
|
ADD COLUMN id BIGINT unsigned auto_increment FIRST,
|
|
ADD COLUMN network_id INT unsigned NOT NULL default '0' AFTER id,
|
|
ADD COLUMN snmp_port int(10) unsigned NOT NULL DEFAULT '161' AFTER snmp_version,
|
|
ADD COLUMN snmp_engine_id varchar(30) DEFAULT '' AFTER snmp_context,
|
|
DROP PRIMARY KEY,
|
|
ADD PRIMARY KEY(id),
|
|
ADD UNIQUE INDEX ip(ip);
|
|
ADD INDEX network_id(network_id),
|
|
COMMENT='Table of Discovered Devices'");
|
|
|
|
if (db_table_exists('plugin_discover_processes', false)) {
|
|
db_install_drop_table('plugin_discover_processes');
|
|
}
|
|
|
|
if (db_table_exists('plugin_discover_template', false)) {
|
|
db_install_rename_table('plugin_discover_template', 'automation_templates');
|
|
db_install_execute("ALTER TABLE automation_templates
|
|
CHANGE COLUMN sysdescr sysDescr VARCHAR(255) DEFAULT ''");
|
|
db_install_add_column('automation_templates', ['name' => 'availability_method', 'type' => 'int(10)', 'default' => 2, 'after' => 'host_template']);
|
|
db_install_add_column('automation_templates', ['name' => 'sysName', 'type' => 'VARCHAR(255)', 'default' => '', 'after' => 'sysdescr']);
|
|
db_install_add_column('automation_templates', ['name' => 'sysOid', 'type' => 'VARCHAR(60)', 'default' => '', 'after' => 'sysname']);
|
|
db_install_add_column('automation_templates', ['name' => 'sequence', 'type' => 'INT UNSIGNED', 'default' => 0, 'after' => 'sysoid']);
|
|
db_install_drop_column('automation_templates', 'tree');
|
|
db_install_drop_column('automation_templates', 'snmp_version');
|
|
db_install_execute('UPDATE automation_templates SET sequence=id');
|
|
}
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `automation_devices` (
|
|
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
|
`network_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`hostname` varchar(100) NOT NULL DEFAULT '',
|
|
`ip` varchar(17) NOT NULL DEFAULT '',
|
|
`community` varchar(100) NOT NULL DEFAULT '',
|
|
`snmp_version` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
|
`snmp_port` int(10) unsigned NOT NULL DEFAULT '161',
|
|
`snmp_username` varchar(50) DEFAULT NULL,
|
|
`snmp_password` varchar(50) DEFAULT NULL,
|
|
`snmp_auth_protocol` char(5) DEFAULT '',
|
|
`snmp_priv_passphrase` varchar(200) DEFAULT '',
|
|
`snmp_priv_protocol` char(6) DEFAULT '',
|
|
`snmp_context` varchar(64) DEFAULT '',
|
|
`snmp_engine_id` varchar(30) DEFAULT '',
|
|
`sysName` varchar(100) NOT NULL DEFAULT '',
|
|
`sysLocation` varchar(255) NOT NULL DEFAULT '',
|
|
`sysContact` varchar(255) NOT NULL DEFAULT '',
|
|
`sysDescr` varchar(255) NOT NULL DEFAULT '',
|
|
`sysUptime` int(32) NOT NULL DEFAULT '0',
|
|
`os` varchar(64) NOT NULL DEFAULT '',
|
|
`snmp` tinyint(4) NOT NULL DEFAULT '0',
|
|
`known` tinyint(4) NOT NULL DEFAULT '0',
|
|
`up` tinyint(4) NOT NULL DEFAULT '0',
|
|
`time` int(11) NOT NULL DEFAULT '0',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `ip` (`ip`),
|
|
KEY `hostname` (`hostname`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Table of Discovered Devices'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `automation_ips` (
|
|
`ip_address` varchar(20) NOT NULL DEFAULT '',
|
|
`hostname` varchar(250) DEFAULT NULL,
|
|
`network_id` int(10) unsigned DEFAULT NULL,
|
|
`pid` int(10) unsigned DEFAULT NULL,
|
|
`status` int(10) unsigned DEFAULT NULL,
|
|
`thread` int(10) unsigned DEFAULT NULL,
|
|
PRIMARY KEY (`ip_address`),
|
|
KEY `pid` (`pid`))
|
|
ENGINE=MEMORY
|
|
COMMENT='List of discoverable ip addresses used for scanning'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `automation_networks` (
|
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`poller_id` int(10) unsigned DEFAULT '0',
|
|
`name` varchar(128) NOT NULL DEFAULT '' COMMENT 'The name for this network',
|
|
`subnet_range` varchar(255) NOT NULL DEFAULT '' COMMENT 'Defined subnet ranges for discovery',
|
|
`dns_servers` varchar(128) NOT NULL DEFAULT '' COMMENT 'DNS Servers to use for name resolution',
|
|
`enabled` char(2) DEFAULT '',
|
|
`snmp_id` int(10) unsigned DEFAULT NULL,
|
|
`enable_netbios` char(2) DEFAULT '',
|
|
`add_to_cacti` char(2) DEFAULT '',
|
|
`total_ips` int(10) unsigned DEFAULT '0',
|
|
`up_hosts` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`snmp_hosts` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`ping_method` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'The ping method (ICMP:TCP:UDP)',
|
|
`ping_port` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'For TCP:UDP the port to ping',
|
|
`ping_timeout` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'The ping timeout in seconds',
|
|
`ping_retries` int(10) unsigned DEFAULT '0',
|
|
`sched_type` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Schedule type: manual or automatic',
|
|
`threads` int(10) unsigned DEFAULT '1',
|
|
`run_limit` int(10) unsigned NULL DEFAULT '0' COMMENT 'The maximum runtime for the discovery',
|
|
`start_at` varchar(20) DEFAULT NULL,
|
|
`next_start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
`recur_every` int(10) unsigned DEFAULT '1',
|
|
`day_of_week` varchar(45) DEFAULT NULL COMMENT 'The days of week to run in crontab format',
|
|
`month` varchar(45) DEFAULT NULL COMMENT 'The months to run in crontab format',
|
|
`day_of_month` varchar(45) DEFAULT NULL COMMENT 'The days of month to run in crontab format',
|
|
`monthly_week` varchar(45) DEFAULT NULL,
|
|
`monthly_day` varchar(45) DEFAULT NULL,
|
|
`last_runtime` double NOT NULL DEFAULT '0' COMMENT 'The last runtime for discovery',
|
|
`last_started` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'The time the discovery last started',
|
|
`last_status` varchar(128) NOT NULL DEFAULT '' COMMENT 'The last exit message if any',
|
|
`rerun_data_queries` char(2) DEFAULT NULL COMMENT 'Rerun data queries or not for existing hosts',
|
|
PRIMARY KEY (`id`),
|
|
KEY `poller_id` (`poller_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Stores scanning subnet definitions'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `automation_processes` (
|
|
`pid` int(8) unsigned NOT NULL,
|
|
`poller_id` int(10) unsigned DEFAULT '0',
|
|
`network_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`task` varchar(20) NULL DEFAULT '',
|
|
`status` varchar(20) DEFAULT NULL,
|
|
`command` varchar(20) DEFAULT NULL,
|
|
`up_hosts` int(10) unsigned DEFAULT '0',
|
|
`snmp_hosts` int(10) unsigned DEFAULT '0',
|
|
`heartbeat` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`pid`, `network_id`))
|
|
ENGINE=MEMORY
|
|
COMMENT='Table tracking active poller processes'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `automation_snmp` (
|
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`name` varchar(100) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Group of SNMP Option Sets'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `automation_snmp_items` (
|
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`snmp_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`sequence` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`snmp_version` varchar(100) NOT NULL DEFAULT '',
|
|
`snmp_readstring` varchar(100) NOT NULL,
|
|
`snmp_port` int(10) NOT NULL DEFAULT '161',
|
|
`snmp_timeout` int(10) unsigned NOT NULL DEFAULT '500',
|
|
`snmp_retries` tinyint(11) unsigned NOT NULL DEFAULT '3',
|
|
`max_oids` int(12) unsigned DEFAULT '10',
|
|
`snmp_username` varchar(50) DEFAULT NULL,
|
|
`snmp_password` varchar(50) DEFAULT NULL,
|
|
`snmp_auth_protocol` char(5) DEFAULT '',
|
|
`snmp_priv_passphrase` varchar(200) DEFAULT '',
|
|
`snmp_priv_protocol` char(6) DEFAULT '',
|
|
`snmp_context` varchar(64) DEFAULT '',
|
|
PRIMARY KEY (`id`,`snmp_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Set of SNMP Options'");
|
|
|
|
$snmp_count = db_fetch_cell('SELECT COUNT(*) FROM automation_snmp');
|
|
|
|
if (empty($snmp_count)) {
|
|
db_install_execute("INSERT IGNORE INTO `automation_snmp`
|
|
VALUES (1,'Default Option Set')");
|
|
|
|
db_install_execute("INSERT IGNORE INTO `automation_snmp_items`
|
|
VALUES (1,1,1,2,'public',161,1000,3,10,'','','MD5','','DES','')");
|
|
|
|
db_install_execute("INSERT IGNORE INTO `automation_snmp_items`
|
|
VALUES (2,1,2,2,'private',161,1000,3,10,'','','MD5','','DES','');");
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `automation_templates` (
|
|
`id` int(8) NOT NULL AUTO_INCREMENT,
|
|
`host_template` int(8) NOT NULL DEFAULT '0',
|
|
`availability_method` int(10) unsigned DEFAULT '2',
|
|
`sysDescr` varchar(255) NULL DEFAULT '',
|
|
`sysName` varchar(255) NULL DEFAULT '',
|
|
`sysOid` varchar(60) NULL DEFAULT '',
|
|
`sequence` int(10) unsigned DEFAULT '0',
|
|
PRIMARY KEY (`id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Templates of SNMP Sys variables used for automation'");
|
|
|
|
db_install_execute("UPDATE automation_match_rule_items SET field = REPLACE(field, 'host_template.', 'ht.')");
|
|
db_install_execute("UPDATE automation_match_rule_items SET field = REPLACE(field, 'host.', 'h.')");
|
|
db_install_execute("UPDATE automation_match_rule_items SET field = REPLACE(field, 'graph_templates.', 'gt.')");
|
|
db_install_execute("UPDATE automation_match_rule_items SET field = REPLACE(field, 'graph_templates_graph.', 'gtg.')");
|
|
|
|
// stamp out duplicate colors
|
|
$duplicates_results = db_install_fetch_assoc('SELECT hex, COUNT(*) AS totals
|
|
FROM colors
|
|
GROUP BY hex
|
|
HAVING totals > 1');
|
|
$duplicates = $duplicates_results['data'];
|
|
|
|
if (cacti_sizeof($duplicates)) {
|
|
foreach ($duplicates as $duplicate) {
|
|
$hexes_results = db_install_fetch_assoc('SELECT id, hex
|
|
FROM colors
|
|
WHERE hex = ?
|
|
ORDER BY id ASC',
|
|
[$duplicate['hex']], true);
|
|
$hexes = $hexes_results['data'];
|
|
|
|
$first = true;
|
|
$keephex = 0;
|
|
|
|
foreach ($hexes as $hex) {
|
|
if ($first) {
|
|
$keephex = $hex['id'];
|
|
$first = false;
|
|
} else {
|
|
db_install_execute('UPDATE graph_templates_item
|
|
SET color_id = ?
|
|
WHERE color_id = ?',
|
|
[$keephex, $hex['id']]);
|
|
|
|
if (db_table_exists('color_template_items')) {
|
|
db_install_execute('UPDATE color_template_items
|
|
SET color_id = ?
|
|
WHERE color_id = ?',
|
|
[$keephex, $hex['id']]);
|
|
}
|
|
|
|
db_install_execute('DELETE FROM colors WHERE id = ?', [$hex['id']]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
db_install_add_key('colors', 'UNIQUE INDEX', 'hex', ['hex']);
|
|
db_install_add_column('colors', ['name' => 'name', 'type' => 'varchar(40)', 'default' => '', 'after' => 'id']);
|
|
db_install_add_column('colors', ['name' => 'read_only', 'type' => 'char(2)', 'default' => '', 'after' => 'hex']);
|
|
|
|
// import remaining colors into database
|
|
import_colors();
|
|
|
|
db_install_execute("ALTER TABLE settings MODIFY COLUMN value varchar(2048) NOT NULL default ''");
|
|
|
|
if (db_table_exists('settings_graphs', false)) {
|
|
db_install_execute("ALTER TABLE settings_graphs MODIFY COLUMN value varchar(2048) NOT NULL default ''");
|
|
}
|
|
db_install_execute("ALTER TABLE user_auth MODIFY COLUMN password varchar(2048) NOT NULL default ''");
|
|
|
|
db_install_rename_table('settings_graphs', 'settings_user');
|
|
|
|
db_install_add_column('user_auth', ['name' => 'reset_perms', 'type' => 'INT(12) unsigned', 'default' => '0', 'after' => 'lastfail']);
|
|
|
|
rsa_check_keypair();
|
|
|
|
db_install_add_column('graph_templates_item', ['name' => 'vdef_id', 'type' => 'mediumint(8) unsigned', 'NULL' => false, 'default' => 0, 'after' => 'cdef_id']);
|
|
db_install_add_column('graph_templates_item', ['name' => 'line_width', 'type' => 'DECIMAL(4,2)', 'default' => 0, 'after' => 'graph_type_id']);
|
|
db_install_add_column('graph_templates_item', ['name' => 'dashes', 'type' => 'varchar(20)', 'NULL' => true, 'after' => 'line_width']);
|
|
db_install_add_column('graph_templates_item', ['name' => 'dash_offset', 'type' => 'mediumint(4)', 'NULL' => true, 'after' => 'dashes']);
|
|
db_install_add_column('graph_templates_item', ['name' => 'shift', 'type' => 'char(2)', 'NULL' => true, 'after' => 'vdef_id']);
|
|
db_install_add_column('graph_templates_item', ['name' => 'textalign', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 'consolidation_function_id']);
|
|
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_alt_y_grid', 'type' => 'char(2)', 'default' => '', 'after' => 'unit_exponent_value']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'alt_y_grid', 'type' => 'char(2)', 'NULL' => true, 'after' => 't_alt_y_grid']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_right_axis', 'type' => 'char(2)', 'default' => '', 'after' => 'alt_y_grid']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'right_axis', 'type' => 'varchar(20)', 'NULL' => true, 'after' => 't_right_axis']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_right_axis_label', 'type' => 'char(2)', 'default' => '', 'after' => 'right_axis']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'right_axis_label', 'type' => 'varchar(200)', 'NULL' => true, 'after' => 't_right_axis_label']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_right_axis_format', 'type' => 'char(2)', 'default' => '', 'after' => 'right_axis_label']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'right_axis_format', 'type' => 'mediumint(8)', 'NULL' => true, 'after' => 't_right_axis_format']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_right_axis_formatter', 'type' => 'char(2)', 'default' => '', 'after' => 'right_axis_format']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'right_axis_formatter', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_right_axis_formatter']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_left_axis_formatter', 'type' => 'char(2)', 'default' => '', 'after' => 'right_axis_formatter']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'left_axis_formatter', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_left_axis_formatter']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_no_gridfit', 'type' => 'char(2)', 'default' => '', 'after' => 'left_axis_formatter']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'no_gridfit', 'type' => 'char(2)', 'NULL' => true, 'after' => 't_no_gridfit']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_unit_length', 'type' => 'char(2)', 'default' => '', 'after' => 'no_gridfit']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'unit_length', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_unit_length']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_tab_width', 'type' => 'char(2)', 'default' => '', 'after' => 'unit_length']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'tab_width', 'type' => 'varchar(20)', 'default' => '30', 'NULL' => true, 'after' => 't_tab_width']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_dynamic_labels', 'type' => 'char(2)', 'default' => '', 'after' => 'tab_width']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'dynamic_labels', 'type' => 'char(2)', 'NULL' => true, 'after' => 't_dynamic_labels']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_force_rules_legend', 'type' => 'char(2)', 'default' => '', 'after' => 'dynamic_labels']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'force_rules_legend', 'type' => 'char(2)', 'NULL' => true, 'after' => 't_force_rules_legend']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_legend_position', 'type' => 'char(2)', 'default' => '', 'after' => 'force_rules_legend']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'legend_position', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_legend_position']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 't_legend_direction', 'type' => 'char(2)', 'default' => '', 'after' => 'legend_position']);
|
|
db_install_add_column('graph_templates_graph', ['name' => 'legend_direction', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_legend_direction']);
|
|
|
|
// create new table sessions
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'varchar(32)', 'NULL' => false ];
|
|
$data['columns'][] = ['name' => 'remote_addr', 'type' => 'varchar(25)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'access', 'type' => 'INT(10)', 'unsigned' => 'unsigned', 'NULL' => true];
|
|
$data['columns'][] = ['name' => 'data', 'type' => 'text', 'NULL' => true];
|
|
$data['primary'] = 'id';
|
|
$data['comment'] = 'Used for Database based Session Storage';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
db_table_create('sessions', $data);
|
|
|
|
// create new table VDEF
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'hash', 'type' => 'varchar(32)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'name', 'type' => 'varchar(255)', 'NULL' => false, 'default' => ''];
|
|
$data['primary'] = 'id';
|
|
$data['comment'] = 'vdef';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
db_table_create('vdef', $data);
|
|
|
|
// create new table VDEF_ITEMS
|
|
$data = [];
|
|
$data['columns'][] = ['name' => 'id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'auto_increment' => true];
|
|
$data['columns'][] = ['name' => 'hash', 'type' => 'varchar(32)', 'NULL' => false, 'default' => ''];
|
|
$data['columns'][] = ['name' => 'vdef_id', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'sequence', 'type' => 'mediumint(8)', 'unsigned' => 'unsigned', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'type', 'type' => 'tinyint(2)', 'NULL' => false, 'default' => 0];
|
|
$data['columns'][] = ['name' => 'value', 'type' => 'varchar(150)', 'NULL' => false, 'default' => ''];
|
|
$data['primary'] = 'id';
|
|
$data['keys'][] = ['name' => 'vdef_id', 'columns' => 'vdef_id'];
|
|
$data['comment'] = 'vdef items';
|
|
$data['type'] = $engine;
|
|
$data['row_format'] = 'Dynamic';
|
|
db_table_create('vdef_items', $data);
|
|
|
|
// fill table VDEF
|
|
db_install_execute("REPLACE INTO `vdef` VALUES (1, 'e06ed529238448773038601afb3cf278', 'Maximum');");
|
|
db_install_execute("REPLACE INTO `vdef` VALUES (2, 'e4872dda82092393d6459c831a50dc3b', 'Minimum');");
|
|
db_install_execute("REPLACE INTO `vdef` VALUES (3, '5ce1061a46bb62f36840c80412d2e629', 'Average');");
|
|
db_install_execute("REPLACE INTO `vdef` VALUES (4, '06bd3cbe802da6a0745ea5ba93af554a', 'Last (Current)');");
|
|
db_install_execute("REPLACE INTO `vdef` VALUES (5, '631c1b9086f3979d6dcf5c7a6946f104', 'First');");
|
|
db_install_execute("REPLACE INTO `vdef` VALUES (6, '6b5335843630b66f858ce6b7c61fc493', 'Total: Current Data Source');");
|
|
db_install_execute("REPLACE INTO `vdef` VALUES (7, 'c80d12b0f030af3574da68b28826cd39', '95th Percentage: Current Data Source');");
|
|
|
|
// fill table VDEF
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (1, '88d33bf9271ac2bdf490cf1784a342c1', 1, 1, 4, 'CURRENT_DATA_SOURCE');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (2, 'a307afab0c9b1779580039e3f7c4f6e5', 1, 2, 1, '1');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (3, '0945a96068bb57c80bfbd726cf1afa02', 2, 1, 4, 'CURRENT_DATA_SOURCE');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (4, '95a8df2eac60a89e8a8ca3ea3d019c44', 2, 2, 1, '2');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (5, 'cc2e1c47ec0b4f02eb13708cf6dac585', 3, 1, 4, 'CURRENT_DATA_SOURCE');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (6, 'a2fd796335b87d9ba54af6a855689507', 3, 2, 1, '3');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (7, 'a1d7974ee6018083a2053e0d0f7cb901', 4, 1, 4, 'CURRENT_DATA_SOURCE');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (8, '26fccba1c215439616bc1b83637ae7f3', 4, 2, 1, '5');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (9, 'a8993b265f4c5398f4a47c44b5b37a07', 5, 1, 4, 'CURRENT_DATA_SOURCE');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (10, '5a380d469d611719057c3695ce1e4eee', 5, 2, 1, '6');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (11, '65cfe546b17175fad41fcca98c057feb', 6, 1, 4, 'CURRENT_DATA_SOURCE');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (12, 'f330b5633c3517d7c62762cef091cc9e', 6, 2, 1, '7');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (13, 'f1bf2ecf54ca0565cf39c9c3f7e5394b', 7, 1, 4, 'CURRENT_DATA_SOURCE');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (14, '11a26f18feba3919be3af426670cba95', 7, 2, 6, '95');");
|
|
db_install_execute("REPLACE INTO `vdef_items` VALUES (15, 'e7ae90275bc1efada07c19ca3472d9db', 7, 3, 1, '8');");
|
|
|
|
db_install_add_column('data_template_data', ['name' => 't_data_source_profile_id', 'type' => 'CHAR(2)', 'default' => '']);
|
|
db_install_add_column('data_template_data', ['name' => 'data_source_profile_id', 'type' => 'mediumint(8) unsigned', 'NULL' => false, 'default' => '0']);
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_profiles` (
|
|
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
|
`hash` varchar(32) NOT NULL DEFAULT '',
|
|
`name` varchar(255) NOT NULL DEFAULT '',
|
|
`step` int(10) unsigned NOT NULL DEFAULT '300',
|
|
`heartbeat` int(10) unsigned NOT NULL DEFAULT '600',
|
|
`x_files_factor` double DEFAULT '0.5',
|
|
`default` char(2) DEFAULT '',
|
|
PRIMARY KEY (`id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Stores Data Source Profiles'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_profiles_cf` (
|
|
`data_source_profile_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
|
`consolidation_function_id` smallint(5) unsigned NOT NULL DEFAULT '0',
|
|
PRIMARY KEY (`data_source_profile_id`,`consolidation_function_id`),
|
|
KEY `data_source_profile_id` (`data_source_profile_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Maps the Data Source Profile Consolidation Functions'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `data_source_profiles_rra` (
|
|
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
|
`data_source_profile_id` mediumint(8) unsigned not null default '0',
|
|
`name` varchar(255) NOT NULL DEFAULT '',
|
|
`steps` int(10) unsigned DEFAULT '1',
|
|
`rows` int(10) unsigned NOT NULL DEFAULT '700',
|
|
PRIMARY KEY (`id`),
|
|
KEY `data_source_profile_id` (`data_source_profile_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Stores RRA Definitions for Data Source Profiles'");
|
|
|
|
// get the current data source profiles
|
|
if (db_table_exists('data_template_data_rra', false)) {
|
|
$profiles_results = db_install_fetch_assoc('SELECT pattern, rrd_step, rrd_heartbeat, x_files_factor
|
|
FROM (
|
|
SELECT data_template_data_id, GROUP_CONCAT(rra_id) AS pattern
|
|
FROM data_template_data_rra
|
|
GROUP BY data_template_data_id
|
|
) AS dtdr
|
|
INNER JOIN data_template_data AS dtd
|
|
ON dtd.id=dtdr.data_template_data_id
|
|
INNER JOIN data_template_rrd AS dtr
|
|
ON dtd.id=dtr.local_data_template_rrd_id
|
|
INNER JOIN rra AS r
|
|
ON r.id IN(pattern)
|
|
GROUP BY pattern, rrd_step, rrd_heartbeat, x_files_factor');
|
|
$profiles = $profiles_results['data'];
|
|
|
|
$i = 1;
|
|
|
|
if (cacti_sizeof($profiles)) {
|
|
foreach ($profiles as $profile) {
|
|
$pattern = $profile['pattern'];
|
|
|
|
$save = [];
|
|
$save['id'] = 0;
|
|
$save['name'] = 'Upgrade Profile ' . $i;
|
|
$save['hash'] = get_hash_data_source_profile(0);
|
|
$save['step'] = $profile['rrd_step'];
|
|
$save['heartbeat'] = $profile['rrd_heartbeat'];
|
|
$save['x_files_factor'] = $profile['x_files_factor'];
|
|
|
|
$id = sql_save($save, 'data_source_profiles');
|
|
|
|
$rras = explode(',', $pattern);
|
|
|
|
foreach ($rras as $r) {
|
|
db_install_execute("INSERT INTO data_source_profiles_rra
|
|
(`data_source_profile_id`, `name`, `steps`, `rows`)
|
|
SELECT '$id' AS `data_source_profile_id`, `name`, `steps`, `rows` FROM `rra` WHERE `id`=" . $r);
|
|
|
|
db_install_execute("REPLACE INTO data_source_profiles_cf
|
|
(data_source_profile_id, consolidation_function_id)
|
|
SELECT '$id' AS data_source_profile_id, consolidation_function_id FROM rra_cf WHERE rra_id=" . $r);
|
|
}
|
|
|
|
db_install_execute("UPDATE data_template_data
|
|
SET data_source_profile_id=$id
|
|
WHERE data_template_data.id IN(
|
|
SELECT data_template_data_id
|
|
FROM (
|
|
SELECT data_template_data_id, GROUP_CONCAT(rra_id) AS pattern
|
|
FROM data_template_data_rra
|
|
GROUP BY data_template_data_id
|
|
HAVING pattern='" . $pattern . "'
|
|
) AS rs);");
|
|
}
|
|
|
|
$i++;
|
|
}
|
|
}
|
|
|
|
db_install_drop_table('rra');
|
|
db_install_drop_table('rra_cf');
|
|
db_install_drop_table('data_template_data_rra');
|
|
db_install_drop_column('data_template_data', 't_rra_id');
|
|
db_install_drop_column('automation_tree_rule_items', 'rra_id');
|
|
db_install_drop_column('automation_tree_rules', 'rra_id');
|
|
db_install_drop_column('graph_tree_items', 'rra_id');
|
|
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_alt_y_grid', 'type' => 'char(2)', 'default' => '0', 'after' => 'unit_exponent_value']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'alt_y_grid', 'type' => 'char(2)', 'NULL' => true, 'after' => 't_alt_y_grid']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_right_axis', 'type' => 'char(2)', 'default' => '0', 'after' => 'alt_y_grid']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'right_axis', 'type' => 'varchar(20)', 'NULL' => true, 'after' => 't_right_axis']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_right_axis_label', 'type' => 'char(2)', 'default' => '0', 'after' => 'right_axis']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'right_axis_label', 'type' => 'varchar(200)', 'NULL' => true, 'after' => 't_right_axis_label']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_right_axis_format', 'type' => 'char(2)', 'default' => '0', 'after' => 'right_axis_label']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'right_axis_format', 'type' => 'mediumint(8)', 'NULL' => true, 'after' => 't_right_axis_format']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_right_axis_formatter', 'type' => 'char(2)', 'default' => '0', 'after' => 'right_axis_format']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'right_axis_formatter', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_right_axis_formatter']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_left_axis_formatter', 'type' => 'char(2)', 'default' => '0', 'after' => 'right_axis_formatter']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'left_axis_formatter', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_left_axis_formatter']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_no_gridfit', 'type' => 'char(2)', 'default' => '0', 'after' => 'left_axis_formatter']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'no_gridfit', 'type' => 'char(2)', 'NULL' => true, 'after' => 't_no_gridfit']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_unit_length', 'type' => 'char(2)', 'default' => '0', 'after' => 'no_gridfit']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'unit_length', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_unit_length']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_tab_width', 'type' => 'char(2)', 'default' => '30', 'after' => 'unit_length']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'tab_width', 'type' => 'varchar(20)', 'NULL' => true, 'after' => 't_tab_width']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_dynamic_labels', 'type' => 'char(2)', 'default' => '0', 'after' => 'tab_width']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'dynamic_labels', 'type' => 'char(2)', 'NULL' => true, 'after' => 't_dynamic_labels']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_force_rules_legend', 'type' => 'char(2)', 'default' => '0', 'after' => 'dynamic_labels']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'force_rules_legend', 'type' => 'char(2)', 'NULL' => true, 'after' => 't_force_rules_legend']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_legend_position', 'type' => 'char(2)', 'default' => '0', 'after' => 'force_rules_legend']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'legend_position', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_legend_position']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 't_legend_direction', 'type' => 'char(2)', 'default' => '0', 'after' => 'legend_position']);
|
|
db_install_add_column('aggregate_graph_templates_graph', ['name' => 'legend_direction', 'type' => 'varchar(10)', 'NULL' => true, 'after' => 't_legend_direction']);
|
|
|
|
// Update Aggregate CDEFs to become system level
|
|
db_install_add_column('cdef', ['name' => 'system', 'type' => 'mediumint(8) unsigned', 'NULL' => false, 'default' => '0', 'after' => 'hash']);
|
|
db_install_execute("UPDATE cdef SET `system` = 1 WHERE name LIKE '\_%'");
|
|
|
|
// Add some important missing indexes
|
|
db_install_add_key('data_local', 'INDEX', 'data_template_id', ['data_template_id']);
|
|
db_install_add_key('data_local', 'INDEX', 'snmp_query_id', ['snmp_query_id']);
|
|
|
|
db_install_execute("ALTER TABLE poller
|
|
MODIFY COLUMN last_update TIMESTAMP NOT NULL default '0000-00-00'");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS poller_resource_cache (
|
|
id int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
resource_type varchar(20) DEFAULT NULL,
|
|
md5sum varchar(32) DEFAULT NULL,
|
|
path varchar(191) DEFAULT NULL,
|
|
update_time timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
contents longblob,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY path (path))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Caches all scripts, resources files, and plugins'");
|
|
|
|
db_install_add_column('host', ['name' => 'poller_id', 'type' => 'INT UNSIGNED', 'default' => '0', 'after' => 'id']);
|
|
db_install_add_key('host', 'INDEX', 'poller_id', ['poller_id']);
|
|
|
|
if (db_table_exists('plugin_spikekill_templates', false)) {
|
|
$templates_results = db_install_fetch_assoc('SELECT graph_template_id FROM plugin_spikekill_templates',[], false);
|
|
$templates = implode(',', array_rekey($templates_results, 'graph_template_id', 'graph_template_id'));
|
|
db_install_execute("REPLACE INTO settings (name, value) VALUES ('spikekill_templates','$templates')");
|
|
}
|
|
|
|
// Migrate superlinks pages to new external links table
|
|
if (db_table_exists('superlinks_auth', false)) {
|
|
db_install_rename_table('superlinks_pages', 'external_links');
|
|
|
|
db_install_drop_column('external_links', 'imagecache');
|
|
|
|
db_install_add_column('external_links', ['name' => 'enabled', 'type' => 'CHAR(2)', 'default' => 'on', 'after' => 'disabled']);
|
|
|
|
if (db_column_exists('external_links', 'disabled')) {
|
|
db_install_execute('UPDATE external_links SET enabled="on" WHERE disabled=""');
|
|
db_install_execute('UPDATE external_links SET enabled="" WHERE disabled="on"');
|
|
db_install_drop_column('external_links', 'disabled');
|
|
}
|
|
|
|
db_install_execute('DELETE FROM external_links WHERE style NOT IN ("TAB", "CONSOLE", "FRONT", "FRONTTOP")');
|
|
|
|
db_install_execute('ALTER TABLE external_links
|
|
MODIFY COLUMN contentfile VARCHAR(255) NOT NULL default "",
|
|
MODIFY COLUMN title VARCHAR(20) NOT NULL default "",
|
|
MODIFY COLUMN style VARCHAR(10) NOT NULL default ""');
|
|
|
|
db_install_drop_table('superlinks_auth');
|
|
} else {
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `external_links` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`sortorder` int(11) NOT NULL DEFAULT '0',
|
|
`enabled` char(2) DEFAULT 'on',
|
|
`contentfile` varchar(255) NOT NULL DEFAULT '',
|
|
`title` varchar(20) NOT NULL DEFAULT '',
|
|
`style` varchar(10) NOT NULL DEFAULT '',
|
|
`extendedstyle` varchar(50) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Stores External Link Information'");
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `sites` (
|
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`name` varchar(100) NOT NULL DEFAULT '',
|
|
`address1` varchar(100) DEFAULT '',
|
|
`address2` varchar(100) DEFAULT '',
|
|
`city` varchar(50) DEFAULT '',
|
|
`state` varchar(20) DEFAULT NULL,
|
|
`postal_code` varchar(20) DEFAULT '',
|
|
`country` varchar(30) DEFAULT '',
|
|
`timezone` varchar(40) DEFAULT '',
|
|
`latitude` decimal(13,10) NOT NULL DEFAULT '0.0000000000',
|
|
`longitude` decimal(13,10) NOT NULL DEFAULT '0.0000000000',
|
|
`alternate_id` varchar(30) DEFAULT '',
|
|
`notes` varchar(1024),
|
|
PRIMARY KEY (`id`),
|
|
KEY `name` (`name`),
|
|
KEY `city` (`city`),
|
|
KEY `state` (`state`),
|
|
KEY `postal_code` (`postal_code`),
|
|
KEY `country` (`country`),
|
|
KEY `alternate_id` (`alternate_id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Contains information about customer sites';");
|
|
|
|
db_install_add_column('host', ['name' => 'site_id', 'type' => 'INT UNSIGNED', 'NULL' => false, 'default' => '0', 'after' => 'poller_id']);
|
|
db_install_execute("ALTER TABLE host MODIFY COLUMN poller_id mediumint(8) unsigned default '1'");
|
|
db_install_add_key('host', 'INDEX', 'site_id', ['site_id']);
|
|
|
|
db_install_drop_table('poller');
|
|
db_install_execute("CREATE TABLE `poller` (
|
|
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
|
`disabled` char(2) DEFAULT '',
|
|
`name` varchar(30) DEFAULT NULL,
|
|
`notes` varchar(1024) DEFAULT '',
|
|
`status` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`hostname` varchar(250) NOT NULL DEFAULT '',
|
|
`dbdefault` varchar(20) NOT NULL DEFAULT 'cacti',
|
|
`dbhost` varchar(64) NOT NULL DEFAULT '',
|
|
`dbuser` varchar(20) NOT NULL DEFAULT '',
|
|
`dbpass` varchar(64) NOT NULL DEFAULT '',
|
|
`dbport` int(10) unsigned DEFAULT '3306',
|
|
`dbssl` char(3) DEFAULT '',
|
|
`total_time` double DEFAULT '0',
|
|
`snmp` mediumint(8) unsigned DEFAULT '0',
|
|
`script` mediumint(8) unsigned DEFAULT '0',
|
|
`server` mediumint(8) unsigned DEFAULT '0',
|
|
`last_update` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
`last_status` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`))
|
|
ENGINE=$engine
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Pollers for Cacti'");
|
|
|
|
db_install_execute('INSERT INTO poller (id, name, hostname) VALUES (1, "Main Poller", "' . php_uname('n') . '")');
|
|
db_install_execute('UPDATE automation_networks SET poller_id=1 WHERE poller_id=0');
|
|
db_install_execute('UPDATE automation_processes SET poller_id=1 WHERE poller_id=0');
|
|
db_install_execute('UPDATE host SET poller_id=1 WHERE poller_id=0');
|
|
db_install_execute('UPDATE poller_command SET poller_id=1 WHERE poller_id=0');
|
|
db_install_execute('UPDATE poller_item SET poller_id=1 WHERE poller_id=0');
|
|
db_install_execute('UPDATE poller_output_realtime SET poller_id=1 WHERE poller_id=0');
|
|
db_install_execute('UPDATE poller_time SET poller_id=1 WHERE poller_id=0');
|
|
|
|
db_install_execute('ALTER TABLE sessions MODIFY COLUMN data MEDIUMBLOB');
|
|
|
|
db_install_add_column('host', ['name' => 'snmp_engine_id', 'type' => 'varchar(30)', 'default' => '', 'after' => 'snmp_context']);
|
|
db_install_add_column('poller_item', ['name' => 'snmp_engine_id', 'type' => 'varchar(30)', 'default' => '', 'after' => 'snmp_context']);
|
|
db_install_add_column('automation_snmp_items', ['name' => 'snmp_engine_id', 'type' => 'varchar(30)', 'default' => '', 'after' => 'snmp_context']);
|
|
|
|
db_install_execute('ALTER TABLE host MODIFY COLUMN poller_id int(10) unsigned DEFAULT "1"');
|
|
db_install_execute('ALTER TABLE host MODIFY COLUMN site_id int(10) unsigned DEFAULT "1"');
|
|
|
|
// adding columns for remote poller sync
|
|
db_install_add_column('host', ['name' => 'last_updated', 'type' => 'timestamp', 'default' => 'CURRENT_TIMESTAMP', 'on_update' => 'CURRENT_TIMESTAMP', 'after' => 'availability']);
|
|
db_install_add_key('host', 'INDEX', 'last_updated', ['last_updated']);
|
|
|
|
db_install_add_column('host_snmp_cache', ['name' => 'last_updated', 'type' => 'timestamp', 'default' => 'CURRENT_TIMESTAMP', 'on_update' => 'CURRENT_TIMESTAMP', 'after' => 'present']);
|
|
db_install_add_key('host_snmp_cache', 'INDEX', 'last_updated', ['last_updated']);
|
|
|
|
db_install_add_column('poller_item', ['name' => 'last_updated', 'type' => 'timestamp', 'default' => 'CURRENT_TIMESTAMP', 'on_update' => 'CURRENT_TIMESTAMP', 'after' => 'present']);
|
|
db_install_add_key('poller_item', 'INDEX', 'last_updated', ['last_updated']);
|
|
|
|
db_install_add_column('poller_command', ['name' => 'last_updated', 'type' => 'timestamp', 'default' => 'CURRENT_TIMESTAMP', 'on_update' => 'CURRENT_TIMESTAMP', 'after' => 'command']);
|
|
db_install_add_key('poller_command', 'INDEX', 'last_updated', ['last_updated']);
|
|
|
|
db_install_execute('ALTER TABLE automation_networks MODIFY COLUMN poller_id int(10) unsigned DEFAULT "1"');
|
|
db_install_execute('ALTER TABLE automation_processes MODIFY COLUMN poller_id int(10) unsigned DEFAULT "1"');
|
|
db_install_execute('ALTER TABLE poller_command MODIFY COLUMN poller_id int(10) unsigned DEFAULT "1"');
|
|
db_install_execute('ALTER TABLE poller_item MODIFY COLUMN poller_id int(10) unsigned DEFAULT "1"');
|
|
db_install_execute('ALTER TABLE poller_time MODIFY COLUMN poller_id int(10) unsigned DEFAULT "1"');
|
|
|
|
// add new column to make data query graphs easier to manage
|
|
db_install_add_column('graph_local', ['name' => 'snmp_query_graph_id', 'type' => 'INT UNSIGNED', 'NULL' => false, 'default' => '0', 'after' => 'snmp_query_id']);
|
|
db_install_add_key('graph_local', 'INDEX', 'snmp_query_graph_id', ['snmp_query_graph_id']);
|
|
|
|
// add the snmp query graph id to graph local
|
|
db_install_execute("UPDATE graph_local AS gl
|
|
INNER JOIN (
|
|
SELECT DISTINCT local_graph_id, task_item_id
|
|
FROM graph_templates_item
|
|
) AS gti
|
|
ON gl.id=gti.local_graph_id
|
|
INNER JOIN data_template_rrd AS dtr
|
|
ON gti.task_item_id=dtr.id
|
|
INNER JOIN data_template_data AS dtd
|
|
ON dtr.local_data_id=dtd.local_data_id
|
|
INNER JOIN data_input_fields AS dif
|
|
ON dif.data_input_id=dtd.data_input_id
|
|
INNER JOIN data_input_data AS did
|
|
ON did.data_template_data_id=dtd.id
|
|
AND did.data_input_field_id=dif.id
|
|
INNER JOIN snmp_query_graph_rrd AS sqgr
|
|
ON sqgr.snmp_query_graph_id=did.value
|
|
SET gl.snmp_query_graph_id=did.value
|
|
WHERE input_output='in'
|
|
AND type_code='output_type'
|
|
AND gl.snmp_query_id>0");
|
|
|
|
if (!db_column_exists('graph_tree', 'sequence', false)) {
|
|
// allow sorting of trees
|
|
db_install_add_column('graph_tree', ['name' => 'sequence', 'type' => 'int(10) unsigned', 'NULL' => false, 'default' => '1', 'after' => 'name']);
|
|
$trees_results = db_install_fetch_assoc('SELECT id FROM graph_tree ORDER BY name');
|
|
$trees = $trees_results['data'];
|
|
|
|
if (cacti_sizeof($trees)) {
|
|
foreach ($trees as $sequence => $tree) {
|
|
db_install_execute('UPDATE graph_tree SET sequence = ? WHERE id = ?', [$sequence + 1, $tree['id']]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// removing obsolete column
|
|
if (!db_column_exists('graph_templates_graph', 'export', false)) {
|
|
db_install_drop_column('graph_templates_graph', 'export');
|
|
db_install_drop_column('graph_templates_graph', 't_export');
|
|
db_install_drop_column('aggregate_graph_templates_graph', 'export');
|
|
db_install_drop_column('aggregate_graph_templates_graph', 't_export');
|
|
}
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `poller_data_template_field_mappings` (
|
|
`data_template_id` int(10) unsigned NOT NULL DEFAULT '0',
|
|
`data_name` varchar(40) NOT NULL DEFAULT '',
|
|
`data_source_names` varchar(125) NOT NULL DEFAULT '',
|
|
`last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`data_template_id`,`data_name`,`data_source_names`))
|
|
ENGINE=InnoDB
|
|
ROW_FORMAT=Dynamic
|
|
COMMENT='Tracks mapping of Data Templates to their Data Source Names'");
|
|
|
|
db_install_execute('INSERT IGNORE INTO poller_data_template_field_mappings
|
|
SELECT dtr.data_template_id, dif.data_name, GROUP_CONCAT(dtr.data_source_name ORDER BY dtr.data_source_name) AS data_source_names, NOW()
|
|
FROM data_template_rrd AS dtr
|
|
INNER JOIN data_input_fields AS dif
|
|
ON dtr.data_input_field_id = dif.id
|
|
WHERE dtr.local_data_id=0
|
|
GROUP BY dtr.data_template_id, dif.data_name');
|
|
|
|
db_install_execute('ALTER TABLE host_snmp_cache MODIFY COLUMN field_value varchar(512) DEFAULT NULL');
|
|
|
|
// repair system data input methods
|
|
repair_system_data_input_methods('upgrade');
|
|
|
|
$fields = 't_auto_scale_opts t_auto_scale_log t_scale_log_units t_auto_scale_rigid t_auto_padding t_base_value t_grouping t_unit_value t_unit_exponent_value t_alt_y_grid t_right_axis t_right_axis_label t_right_axis_format t_right_axis_formatter t_left_axis_formatter t_no_gridfit t_unit_length t_tab_width t_dynamic_labels t_force_rules_legend t_legend_position t_legend_direction t_image_format_id t_title t_height t_width t_upper_limit t_lower_limit t_vertical_label t_slope_mode t_auto_scale';
|
|
|
|
// repair install issues
|
|
$fields = explode(' ', $fields);
|
|
|
|
foreach ($fields as $field) {
|
|
db_install_execute("UPDATE graph_templates_graph SET $field='' WHERE $field IS NULL");
|
|
db_install_execute("UPDATE graph_templates_graph SET $field='' WHERE $field='0'");
|
|
}
|
|
db_install_execute("UPDATE graph_templates_graph SET unit_value='' WHERE unit_value='on'");
|
|
|
|
db_install_add_key('data_local', 'INDEX', 'snmp_index', ['snmp_index(191)']);
|
|
db_install_add_key('graph_local', 'INDEX', 'snmp_index', ['snmp_index(191)']);
|
|
|
|
$wathermark_results = db_install_fetch_cell('SELECT name FROM settings WHERE name = "graph_wathermark"');
|
|
$wathermark = $wathermark_results['data'];
|
|
|
|
if ($wathermark == 'graph_wathermark') {
|
|
$wathermark_results = db_install_fetch_cell('SELECT COUNT(*) FROM settings WHERE name = "graph_wathermark"');
|
|
$wathermark = $wathermark_results['data'];
|
|
|
|
if ($wathermark == 0) {
|
|
db_install_execute('UPDATE settings SET name = "graph_watermark" WHERE name = "graph_wathermark"');
|
|
} else {
|
|
db_install_execute('DELETE FROM settings WHERE name = "graph_wathermark"');
|
|
}
|
|
}
|
|
|
|
db_install_drop_key('data_input', 'index', 'name');
|
|
}
|
|
|
|
function upgrade_realms() : void {
|
|
$upgrade_realms = [
|
|
['new_realm' => 101, 'file_pattern' => 'plugins.php'],
|
|
['new_realm' => 23, 'file_pattern' => 'discovery.php'],
|
|
['new_realm' => 25, 'file_pattern' => 'graph_image_rt.php'],
|
|
['new_realm' => 21, 'file_pattern' => 'nectar.php'],
|
|
['new_realm' => 22, 'file_pattern' => 'nectar_user.php'],
|
|
['new_realm' => 24, 'file_pattern' => 'superlinks.php'],
|
|
['new_realm' => 18, 'file_pattern' => 'clog.php'],
|
|
['new_realm' => 19, 'file_pattern' => 'clog_user.php']
|
|
];
|
|
|
|
$set_drop_realms = [
|
|
['new_realm' => 5, 'file_pattern' => 'aggregate'],
|
|
['new_realm' => 15, 'file_pattern' => 'managers.php'],
|
|
['new_realm' => 15, 'file_pattern' => 'rrdcleaner.php'],
|
|
['new_realm' => 15, 'file_pattern' => 'settings.php'],
|
|
['new_realm' => 15, 'file_pattern' => 'superlinks-mgmt.php'],
|
|
['new_realm' => 1, 'file_pattern' => 'domains.php'],
|
|
['new_realm' => 1, 'file_pattern' => 'ugroup.php'],
|
|
];
|
|
|
|
$drop_realms = ['settings.php'];
|
|
|
|
$remove_plugins = [
|
|
'aggregate',
|
|
'autom8',
|
|
'clog',
|
|
'discovery',
|
|
'domains',
|
|
'dsstats',
|
|
'nectar',
|
|
'realtime',
|
|
'rrdclean',
|
|
'settings',
|
|
'snmpagent',
|
|
'spikekill',
|
|
'superlinks',
|
|
'ugroup'
|
|
];
|
|
|
|
// Check for the installation of the plugin architecture
|
|
if (db_table_exists('plugin_realms')) {
|
|
// There can be only one of these, so just update if exist
|
|
foreach ($upgrade_realms as $r) {
|
|
$exists_results = db_install_fetch_row('SELECT *
|
|
FROM plugin_realms
|
|
WHERE file LIKE ?', ['%' . $r['file_pattern'] . '%'], false);
|
|
|
|
$exists = $exists_results['data'];
|
|
|
|
if (cacti_sizeof($exists)) {
|
|
$old_realm = $exists['id'] + 100;
|
|
|
|
db_execute_prepared('UPDATE IGNORE user_auth_realm
|
|
SET realm_id = ?
|
|
WHERE realm_id = ?',
|
|
[$r['new_realm'], $old_realm]);
|
|
}
|
|
}
|
|
|
|
// There are more than one of these so update and drop
|
|
foreach ($set_drop_realms as $r) {
|
|
$exists_results = db_install_fetch_row('SELECT *
|
|
FROM plugin_realms
|
|
WHERE file LIKE ?',
|
|
['%' . $r['file_pattern'] . '%'], false);
|
|
|
|
$exists = $exists_results['data'];
|
|
|
|
if (cacti_sizeof($exists)) {
|
|
$old_realm = $exists['id'] + 100;
|
|
|
|
db_execute_prepared('REPLACE INTO user_auth_realm (user_id, realm_id)
|
|
SELECT user_id, "' . $r['new_realm'] . '" AS realm_id
|
|
FROM user_auth_realm
|
|
WHERE realm_id = ?',
|
|
[$old_realm]);
|
|
|
|
db_execute_prepared('DELETE FROM user_auth_realm
|
|
WHERE realm_id = ?',
|
|
[$old_realm]);
|
|
}
|
|
}
|
|
|
|
// Drop realms that have been deprecated
|
|
foreach ($drop_realms as $r) {
|
|
$exists_results = db_install_fetch_row('SELECT *
|
|
FROM plugin_realms
|
|
WHERE file LIKE ?',
|
|
['%' . $r . '%'], false);
|
|
|
|
$exists = $exists_results['data'];
|
|
|
|
if ($exists) {
|
|
$old_realm = $exists['id'] + 100;
|
|
|
|
db_execute_prepared('DELETE FROM user_auth_realm WHERE realm_id = ?', [$old_realm]);
|
|
}
|
|
}
|
|
} else {
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `plugin_config` (
|
|
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
|
`directory` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`status` tinyint(2) NOT NULL DEFAULT 0,
|
|
`author` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`webpage` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`version` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`id`),
|
|
KEY `status` (`status`),
|
|
KEY `directory` (`directory`))
|
|
ENGINE=InnoDB
|
|
ROW_FORMAT=DYNAMIC");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `plugin_db_changes` (
|
|
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
|
`plugin` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`table` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`column` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
|
|
`method` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`id`),
|
|
KEY `plugin` (`plugin`),
|
|
KEY `method` (`method`))
|
|
ENGINE=InnoDB
|
|
ROW_FORMAT=DYNAMIC");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `plugin_hooks` (
|
|
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
|
`name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`hook` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`file` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`function` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`status` int(8) NOT NULL DEFAULT 0,
|
|
PRIMARY KEY (`id`),
|
|
KEY `hook` (`hook`),
|
|
KEY `status` (`status`))
|
|
ENGINE=InnoDB
|
|
ROW_FORMAT=DYNAMIC");
|
|
|
|
db_install_execute("CREATE TABLE IF NOT EXISTS `plugin_realms` (
|
|
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
|
`plugin` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
`file` text COLLATE utf8mb4_unicode_ci NOT NULL,
|
|
`display` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`id`),
|
|
KEY `plugin` (`plugin`))
|
|
ENGINE=InnoDB
|
|
ROW_FORMAT=DYNAMIC");
|
|
|
|
db_install_execute("REPLACE INTO plugin_hooks (name, hook, file, function, status) VALUES
|
|
('internal', 'config_arrays', '', 'plugin_config_arrays', 1),
|
|
('internal', 'draw_navigation_text', '', 'plugin_draw_navigation_text', 1)");
|
|
}
|
|
|
|
// Add realms to the admin user if it exists
|
|
$user_auth = db_install_fetch_row('SELECT * FROM user_auth WHERE id=1');
|
|
|
|
if (cacti_sizeof($user_auth['data'])) {
|
|
db_install_execute('INSERT IGNORE INTO user_auth_realm VALUES (18,1)');
|
|
db_install_execute('INSERT IGNORE INTO user_auth_realm VALUES (20,1)');
|
|
db_install_execute('INSERT IGNORE INTO user_auth_realm VALUES (21,1)');
|
|
db_install_execute('INSERT IGNORE INTO user_auth_realm VALUES (23,1)');
|
|
}
|
|
|
|
// add admin permissions
|
|
$userid = db_install_fetch_cell("SELECT * FROM user_auth WHERE id='1' AND username='admin'");
|
|
|
|
if (!empty($userid['data'])) {
|
|
db_install_execute('REPLACE INTO `user_auth_realm` VALUES (19,1);');
|
|
db_install_execute('REPLACE INTO `user_auth_realm` VALUES (22,1);');
|
|
}
|
|
|
|
if (db_table_exists('superlinks_auth', false)) {
|
|
// drop no longer present superlink pages
|
|
db_install_execute('DELETE FROM superlinks_auth
|
|
WHERE pageid NOT IN (SELECT id FROM superlinks_pages)');
|
|
|
|
// create authorization records for existing pages
|
|
db_install_execute('REPLACE INTO user_auth_realm
|
|
(user_id, realm_id)
|
|
SELECT userid, pageid+10000
|
|
FROM superlinks_auth');
|
|
|
|
// create authorization records for viewing the external links tab
|
|
db_install_execute('REPLACE INTO user_auth_realm
|
|
(user_id, realm_id)
|
|
SELECT userid, "24" AS realm_id
|
|
FROM superlinks_auth');
|
|
|
|
// Handle special userid=0 case in Superlinks
|
|
db_install_execute('REPLACE INTO user_auth_realm (user_id, realm_id)
|
|
SELECT user_id, pageid
|
|
FROM (
|
|
SELECT ua.id AS user_id, sa.pageid+10000 AS pageid
|
|
FROM user_auth AS ua
|
|
JOIN superlinks_auth AS sa
|
|
WHERE sa.userid=0
|
|
) AS rs');
|
|
}
|
|
|
|
foreach ($remove_plugins as $p) {
|
|
// remove plugin
|
|
db_install_execute('DELETE FROM plugin_config WHERE directory = ?', [$p]);
|
|
db_install_execute('DELETE FROM plugin_realms WHERE plugin = ?', [$p]);
|
|
db_install_execute('DELETE FROM plugin_db_changes WHERE plugin = ?', [$p]);
|
|
db_install_execute('DELETE FROM plugin_hooks WHERE name = ?', [$p]);
|
|
}
|
|
}
|