mirror of
https://github.com/Cacti/cacti.git
synced 2026-10-23 03:27:02 +09:00
331 lines
9.6 KiB
PHP
331 lines
9.6 KiB
PHP
#!/usr/bin/env 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/ |
|
|
+-------------------------------------------------------------------------+
|
|
*/
|
|
|
|
error_reporting(0);
|
|
|
|
if (!isset($called_by_script_server)) {
|
|
include_once(__DIR__ . '/../include/cli_check.php');
|
|
|
|
$checks = [
|
|
'ss_poller',
|
|
'ss_poller_items',
|
|
'ss_recache',
|
|
'ss_boost',
|
|
'ss_boost_mem',
|
|
'ss_boost_table',
|
|
'ss_boost_records',
|
|
'ss_boost_avg_size',
|
|
'ss_boost_timing',
|
|
'ss_export',
|
|
'ss_thold_time',
|
|
'ss_thold_checks',
|
|
'ss_thold_hstats',
|
|
'ss_syslog_time',
|
|
'ss_syslog_stats',
|
|
'ss_monitor_time',
|
|
'ss_monitor_stats',
|
|
'ss_report_stats',
|
|
'ss_spike_time',
|
|
'ss_spike_stats',
|
|
'ss_webseer_counts',
|
|
'ss_webseer_stats',
|
|
];
|
|
|
|
foreach ($checks as $check) {
|
|
if (function_exists($check)) {
|
|
print $check . ': ' . call_user_func($check) . PHP_EOL;
|
|
}
|
|
}
|
|
}
|
|
|
|
function ss_thold_time() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="stats_thold"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^Time/', $_stat)) {
|
|
$stats .= str_replace('Time:', '', $_stat);
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? '0' : trim($stats);
|
|
}
|
|
|
|
function ss_thold_checks() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="stats_thold"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^Tholds/', $_stat)) {
|
|
$stats .= str_replace('Tholds:', '', $_stat);
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? '0' : trim($stats);
|
|
}
|
|
|
|
function ss_thold_hstats() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="stats_thold"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^TotalDevices/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^DownDevices/', $_stat)) {
|
|
$stats .= $_stat;
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? 'TotalDevices:0 DownDevices:0' : trim($stats);
|
|
}
|
|
|
|
function ss_monitor_time() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="stats_monitor"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^Time/', $_stat)) {
|
|
$stats .= str_replace('Time:', '', $_stat);
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? '0' : trim($stats);
|
|
}
|
|
|
|
function ss_monitor_stats() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="stats_monitor"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^Reboots/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^DownDevices/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^Notifications/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^Purges/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? 'Reboots:0 DownDevices:0 Notifications:0 Purges:0' : trim($stats);
|
|
}
|
|
|
|
function ss_syslog_time() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="syslog_stats"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^time/', $_stat)) {
|
|
$stats .= str_replace('time:', '', $_stat);
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? '0' : trim($stats);
|
|
}
|
|
|
|
function ss_syslog_stats() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="syslog_stats"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^deletes/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^incoming/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^removes/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^xfers/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^alerts/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^alarms/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^reports/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? 'deletes:0 incoming:0 removes:0 xfers:0 alerts:0 alarms:0 reports:0' : trim($stats);
|
|
}
|
|
|
|
function ss_poller() : mixed {
|
|
$stats = db_fetch_cell('SELECT value
|
|
FROM settings
|
|
WHERE name="stats_poller"');
|
|
|
|
return empty($stats) ? 'Time:0 Method:0 Processes:0 Threads:0 Hosts:0 HostsPerProcess:0 DataSources:0 RRDsProcessed:0 ErrorHosts:0 TotalErrors:0' : trim($stats);
|
|
}
|
|
|
|
function ss_webseer_counts() : mixed {
|
|
$stats = [];
|
|
|
|
if (db_table_exists('plugin_webseer_urls')) {
|
|
$stats = db_fetch_row('SELECT SUM(triggered) AS triggered,
|
|
SUM(CASE WHEN triggered=0 THEN 1 ELSE 0 END) AS successful,
|
|
SUM(CASE WHEN enabled="" THEN 1 ELSE 0 END) AS disabled
|
|
FROM plugin_webseer_urls');
|
|
}
|
|
|
|
return !cacti_sizeof($stats) ? 'triggered:0 successful:0 disabled:0' : 'triggered:' . $stats['triggered'] . ' successful:' . $stats['successful'] . ' disabled:' . $stats['disabled'];
|
|
}
|
|
|
|
function ss_webseer_stats() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="stats_webseer"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^Time/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^Checks/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^Servers/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? 'Time:0 Checks:0 Servers:0' : trim($stats);
|
|
}
|
|
|
|
function ss_poller_items() : mixed {
|
|
$poller_cache = db_fetch_assoc('SELECT action, COUNT(*) AS count
|
|
FROM poller_item
|
|
GROUP BY action');
|
|
|
|
$entries = [0, 0, 0];
|
|
|
|
if (cacti_sizeof($poller_cache)) {
|
|
foreach ($poller_cache as $item) {
|
|
$entries[$item['action']] = $item['count'];
|
|
}
|
|
}
|
|
|
|
return trim(
|
|
'snmp:' . $entries[0] . ' ' .
|
|
'script:' . $entries[1] . ' ' .
|
|
'script_server:' . $entries[2]
|
|
);
|
|
}
|
|
|
|
function ss_recache() : mixed {
|
|
$stats = db_fetch_cell('SELECT value
|
|
FROM settings
|
|
WHERE name LIKE "stats_recache%"
|
|
LIMIT 1');
|
|
|
|
return empty($stats) ? 'RecacheTime:0 DevicesRecached:0' : trim($stats);
|
|
}
|
|
|
|
function ss_boost() : mixed {
|
|
$stats = db_fetch_cell('SELECT value
|
|
FROM settings
|
|
WHERE name = "stats_boost"');
|
|
|
|
return empty($stats) ? 'Time:0 RRDUpdates:0' : trim($stats);
|
|
}
|
|
|
|
function ss_boost_mem() : mixed {
|
|
$stats = db_fetch_cell('SELECT SUM(value)
|
|
FROM settings
|
|
WHERE name LIKE "boost_peak_memory%"');
|
|
|
|
return empty($stats) ? '0' : trim($stats);
|
|
}
|
|
|
|
function ss_boost_table() : mixed {
|
|
$stats = db_fetch_cell('SELECT DATA_LENGTH+INDEX_LENGTH AS tbl_len
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_NAME = "poller_output_boost"
|
|
AND TABLE_SCHEMA = SCHEMA()');
|
|
|
|
return empty($stats) ? '0' : trim($stats);
|
|
}
|
|
|
|
function ss_boost_records() : mixed {
|
|
$stats = db_fetch_cell('SELECT TABLE_ROWS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_NAME = "poller_output_boost"
|
|
AND TABLE_SCHEMA = SCHEMA()');
|
|
|
|
return empty($stats) ? '0' : trim($stats);
|
|
}
|
|
|
|
function ss_boost_avg_size() : mixed {
|
|
$stats = db_fetch_cell('SELECT AVG_ROW_LENGTH
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_NAME = "poller_output_boost"
|
|
AND TABLE_SCHEMA = SCHEMA()');
|
|
|
|
return empty($stats) ? '0' : trim($stats);
|
|
}
|
|
|
|
function ss_boost_timing() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="stats_detail_boost"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^get_records:/', $_stat)) {
|
|
$stats .= str_replace('get_records', 'rrd_get_records', $_stat) . ' ';
|
|
} elseif (preg_match('/^results_cycle:/', $_stat)) {
|
|
$stats .= str_replace('results_cycle', 'rrd_results_cycle', $_stat) . ' ';
|
|
} elseif (preg_match('/^rrd_filename_and_template:/', $_stat)) {
|
|
$stats .= str_replace('rrd_filename_and_template', 'rrd_template', $_stat) . ' ';
|
|
} elseif (preg_match('/^rrd_lastupdate:/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^rrdupdate:/', $_stat)) {
|
|
$stats .= str_replace('rrdupdate', 'rrd_update', $_stat) . ' ';
|
|
} elseif (preg_match('/^delete:/', $_stat)) {
|
|
$stats .= str_replace('delete', 'rrd_delete', $_stat) . ' ';
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? 'get_records:0 results_cycle:0 rrd_filename_and_template:0 rrd_lastupdate:0 rrdupdate:0 delete:0' : trim($stats);
|
|
}
|
|
|
|
function ss_export() : mixed {
|
|
$_stats = explode(' ', db_fetch_cell('SELECT value FROM settings WHERE name="stats_export"'));
|
|
|
|
$stats = '';
|
|
|
|
foreach ($_stats as $_stat) {
|
|
if (preg_match('/^ExportDuration/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
} elseif (preg_match('/^TotalGraphsExported/', $_stat)) {
|
|
$stats .= $_stat . ' ';
|
|
}
|
|
}
|
|
|
|
return empty($stats) ? 'ExportDuration:0 TotalGraphsExported:0' : trim($stats);
|
|
}
|