mirror of
https://github.com/Cacti/cacti.git
synced 2026-11-02 18:17:00 +09:00
231 lines
7.4 KiB
PHP
231 lines
7.4 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_2_20() : void {
|
|
global $config;
|
|
|
|
include_once(CACTI_PATH_LIBRARY . '/data_query.php');
|
|
|
|
// Correct bad hostnames and host_id's in the data_input_data table
|
|
$entries = db_fetch_assoc("SELECT did.*, dif.type_code
|
|
FROM data_input_data AS did
|
|
INNER JOIN data_input_fields AS dif
|
|
ON did.data_input_field_id = dif.id
|
|
WHERE data_input_field_id in (
|
|
SELECT id
|
|
FROM data_input_fields
|
|
WHERE type_code != ''
|
|
)
|
|
AND data_template_data_id IN (
|
|
SELECT id
|
|
FROM data_template_data
|
|
WHERE local_data_id > 0
|
|
AND data_template_id > 0
|
|
)
|
|
AND type_code in ('host_id', 'hostname')
|
|
AND value = ''");
|
|
|
|
if (cacti_sizeof($entries)) {
|
|
foreach ($entries as $e) {
|
|
$data_template_data = db_fetch_row_prepared('SELECT *
|
|
FROM data_template_data
|
|
WHERE id = ?',
|
|
[$e['data_template_data_id']]);
|
|
|
|
if (cacti_sizeof($data_template_data)) {
|
|
$local_data = db_fetch_row_prepared('SELECT *
|
|
FROM data_local
|
|
WHERE id = ?',
|
|
[$data_template_data['local_data_id']]);
|
|
|
|
if (cacti_sizeof($local_data)) {
|
|
switch($e['type_code']) {
|
|
case 'hostname':
|
|
$hostname = db_fetch_cell_prepared('SELECT hostname
|
|
FROM host
|
|
WHERE id = ?',
|
|
[$local_data['host_id']]);
|
|
|
|
db_execute_prepared('UPDATE data_input_data
|
|
SET value = ?
|
|
WHERE data_input_field_id = ?
|
|
AND data_template_data_id = ?',
|
|
[$hostname, $e['data_input_field_id'], $e['data_template_data_id']]);
|
|
|
|
break;
|
|
case 'host_id':
|
|
db_execute_prepared('UPDATE data_input_data
|
|
SET value = ?
|
|
WHERE data_input_field_id = ?
|
|
AND data_template_data_id = ?',
|
|
[$local_data['host_id'], $e['data_input_field_id'], $e['data_template_data_id']]);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Correct issues with Cacti Data Template input's
|
|
db_execute("UPDATE data_input_data
|
|
SET t_value = 'on'
|
|
WHERE data_input_field_id IN (
|
|
SELECT id
|
|
FROM data_input_fields
|
|
WHERE type_code IN ('output_type', 'index_type', 'index_value')
|
|
)
|
|
AND data_template_data_id IN (
|
|
SELECT id
|
|
FROM data_template_data
|
|
WHERE data_template_id > 0
|
|
)");
|
|
|
|
// Host ID should not be checked, but should not be 'on' either
|
|
db_execute("UPDATE data_input_data
|
|
SET t_value = ''
|
|
WHERE data_input_field_id IN (
|
|
SELECT id
|
|
FROM data_input_fields
|
|
WHERE type_code IN ('host_id')
|
|
)
|
|
AND data_template_data_id IN (
|
|
SELECT id
|
|
FROM data_template_data
|
|
WHERE data_template_id > 0
|
|
)");
|
|
|
|
$broken_data_sources = db_fetch_assoc("SELECT did.*
|
|
FROM data_input_data AS did
|
|
WHERE data_input_field_id IN (
|
|
SELECT id
|
|
FROM data_input_fields
|
|
WHERE type_code in ('index_type', 'index_value', 'output_type_id')
|
|
)
|
|
AND data_template_data_id IN (
|
|
SELECT id
|
|
FROM data_template_data
|
|
WHERE data_template_id > 0
|
|
AND local_data_id > 0
|
|
) AND value = ''");
|
|
|
|
if (cacti_sizeof($broken_data_sources)) {
|
|
foreach ($broken_data_sources as $ds) {
|
|
$data_template_data = db_fetch_row_prepared('SELECT *
|
|
FROM data_template_data
|
|
WHERE id = ?',
|
|
[$ds['data_template_data_id']]);
|
|
|
|
$field_data = db_fetch_row_prepared('SELECT *
|
|
FROM data_input_fields
|
|
WHERE id = ?',
|
|
[$ds['data_input_field_id']]);
|
|
|
|
if (cacti_sizeof($data_template_data)) {
|
|
$local_data_id = $data_template_data['local_data_id'];
|
|
|
|
$local_data = db_fetch_row_prepared('SELECT *
|
|
FROM data_local
|
|
WHERE id = ?',
|
|
[$local_data_id]);
|
|
|
|
if (cacti_sizeof($local_data)) {
|
|
$local_graph_ids = db_fetch_assoc_prepared('SELECT DISTINCT local_graph_id
|
|
FROM data_template_rrd AS dtr
|
|
INNER JOIN graph_templates_item AS gti
|
|
ON dtr.id = gti.task_item_id
|
|
WHERE dtr.local_data_id = ?',
|
|
[$local_data_id]);
|
|
|
|
if (cacti_sizeof($local_graph_ids)) {
|
|
foreach ($local_graph_ids as $id) {
|
|
$local_graph = db_fetch_row_prepared('SELECT *
|
|
FROM graph_local
|
|
WHERE id = ?',
|
|
[$id['local_graph_id']]);
|
|
|
|
switch($field_data['type_code']) {
|
|
case 'index_type':
|
|
$index_type = get_best_data_query_index_type($local_graph['host_id'], $local_graph['snmp_query_id']);
|
|
|
|
db_execute_prepared('UPDATE data_input_data
|
|
SET value = ?
|
|
WHERE data_input_field_id = ?
|
|
AND data_template_data_id = ?',
|
|
[$index_type, $ds['data_input_field_id'], $ds['data_template_data_id']]);
|
|
|
|
break;
|
|
case 'index_value':
|
|
db_execute_prepared('UPDATE data_input_data
|
|
SET value = ?
|
|
WHERE data_input_field_id = ?
|
|
AND data_template_data_id = ?',
|
|
[$local_graph['snmp_index'], $ds['data_input_field_id'], $ds['data_template_data_id']]);
|
|
|
|
break;
|
|
case 'output_type_id':
|
|
if ($local_graph['snmp_query_graph_id'] == 0) {
|
|
$local_graph['snmp_query_graph_id'] = db_fetch_cell_prepared('SELECT id
|
|
FROM snmp_query_graph
|
|
WHERE graph_template_id = ?
|
|
AND snmp_query_id = ?',
|
|
[$local_graph['graph_template_id'], $local_graph['snmp_query_id']]);
|
|
}
|
|
|
|
db_execute_prepared('UPDATE data_input_data
|
|
SET value = ?
|
|
WHERE data_input_field_id = ?
|
|
AND data_template_data_id = ?',
|
|
[$local_graph['snmp_query_graph_id'], $ds['data_input_field_id'], $ds['data_template_data_id']]);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Fix the Report Item Columns
|
|
db_execute('ALTER TABLE reports_items
|
|
MODIFY COLUMN host_template_id int default "-1",
|
|
MODIFY COLUMN host_id int default "-1",
|
|
MODIFY COLUMN graph_template_id int default "-1"');
|
|
|
|
if (!db_column_exists('reports_items', 'site_id')) {
|
|
db_execute('ALTER TABLE reports_items
|
|
ADD COLUMN site_id int default "-1" AFTER graph_name_regexp');
|
|
}
|
|
|
|
db_execute('UPDATE reports_items
|
|
SET host_template_id = -1 WHERE host_template_id = 0');
|
|
|
|
db_execute('UPDATE reports_items
|
|
SET host_id = -1 WHERE host_id = 0');
|
|
|
|
db_execute('UPDATE reports_items
|
|
SET graph_template_id = -1 WHERE graph_template_id = 0');
|
|
}
|