From e253202995d188925fa4e9df4f6dea0523511eae Mon Sep 17 00:00:00 2001
From: oilyflutesalad <oilyflutesalad@ispconfig3>
Date: Mon, 18 Jan 2010 05:56:48 -0500
Subject: [PATCH] Fixed: FS#928 - System Load Averages should no longer show as zero on non-english linux distros
---
server/mods-available/monitor_core_module.inc.php | 93 ++++++++++++++++++++++++++++++++++++++--------
1 files changed, 77 insertions(+), 16 deletions(-)
diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php
index beecd8a..642395e 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -148,12 +148,20 @@
$tmp = explode(",", $data['uptime'], 4);
$tmpUser = explode(" ", trim($tmp[2]));
$data['user_online'] = intval($tmpUser[0]);
-
+
+ /* Old Load Average Code
$loadTmp = explode(":" , trim($tmp[3]));
$load = explode(",", $loadTmp[1]);
$data['load_1'] = floatval(trim($load[0]));
$data['load_5'] = floatval(trim($load[1]));
- $data['load_15'] = floatval(trim($load[2]));
+ $data['load_15'] = floatval(trim($load[2])); */
+
+ //* New Load Average code to fix "always zero" bug in non-english distros. NEEDS TESTING
+ $loadTmp = shell_exec("cat /proc/loadavg | cut -f1-3 -d' '");
+ $load = explode(" ", $loadTmp);
+ $data['load_1'] = floatval(str_replace(',', '.', $load[0]));
+ $data['load_5'] = floatval(str_replace(',', '.', $load[1]));
+ $data['load_15'] = floatval(str_replace(',', '.', $load[2]));
/** The state of the server-load. */
$state = 'ok';
@@ -219,10 +227,14 @@
* calculate the state
*/
$usePercent = floatval($data[$i]['percent']);
- if ($usePercent > 75) $state = $this->_setState($state, 'info');
- if ($usePercent > 80) $state = $this->_setState($state, 'warning');
- if ($usePercent > 90) $state = $this->_setState($state, 'critical');
- if ($usePercent > 95) $state = $this->_setState($state, 'error');
+
+ //* We dont want to check the cdrom drive as a cd / dvd is always 100% full
+ if($data[$i]['type'] != 'iso9660' && $data[$i]['type'] != 'cramfs' && $data[$i]['type'] != 'udf') {
+ if ($usePercent > 75) $state = $this->_setState($state, 'info');
+ if ($usePercent > 80) $state = $this->_setState($state, 'warning');
+ if ($usePercent > 90) $state = $this->_setState($state, 'critical');
+ if ($usePercent > 95) $state = $this->_setState($state, 'error');
+ }
}
}
@@ -516,6 +528,34 @@
*/
$data['output'] = shell_exec('apt-get -s -q dist-upgrade');
}
+ elseif (file_exists("/etc/gentoo-release")) {
+
+ /*
+ * first update the portage tree
+ */
+ shell_exec('emerge --sync --quiet');
+
+ /*
+ * Then test the upgrade.
+ * if there is any output, then there is a needed update
+ */
+ $emergeData = shell_exec('emerge -puDNt --color n --nospinner --quiet world');
+ if ($emergeData == '')
+ {
+ /* There is nothing to update! */
+ $state = 'ok';
+ }
+ else
+ {
+ /* There is something to update! */
+ $state = 'warning';
+ }
+
+ /*
+ * Fetch the output
+ */
+ $data['output'] = shell_exec('emerge -pvuDNt --color n --nospinner world');
+ }
else {
/*
* It is not debian/Ubuntu, so there is no data and no state
@@ -605,8 +645,8 @@
$type = 'raid_state';
/* This monitoring is only available if mdadm is installed */
- $location = shell_exec('which mdadm');
- if($location != ''){
+ $location = system('which mdadm', $retval);
+ if($retval === 0){
/*
* Fetch the output
*/
@@ -694,10 +734,11 @@
function monitorRkHunter(){
/*
- * This monitoring is expensive, so do it only once a hour
+ * This monitoring is expensive, so do it only once a day
*/
$min = date('i');
- if ($min != 0) return;
+ $hour = date('H');
+ if (!($min == 0 && $hour == 23)) return;
global $app;
global $conf;
@@ -709,8 +750,8 @@
$type = 'rkhunter';
/* This monitoring is only available if rkhunter is installed */
- $location = shell_exec('which rkhunter');
- if($location != ''){
+ $location = system('which rkhunter', $retval);
+ if($retval === 0){
/*
* Fetch the output
*/
@@ -763,9 +804,9 @@
$type = 'log_fail2ban';
/* This monitoring is only available if fail2ban is installed */
- $location = shell_exec('which fail2ban-client'); // Debian & Ubuntu
- if($location == '') $location = shell_exec('which fail2ban'); // CentOS & Fedora
- if($location != ''){
+ $location = system('which fail2ban-client', $retval); // Debian, Ubuntu, Fedora
+ if($retval !== 0) $location = system('which fail2ban', $retval); // CentOS
+ if($retval === 0){
/* Get the data of the log */
$data = $this->_getLogData($type);
@@ -1181,43 +1222,63 @@
if(@is_file('/etc/debian_version')) $dist = 'debian';
if(@is_file('/etc/redhat-release')) $dist = 'redhat';
+ if(@is_file('/etc/SuSE-release')) $dist = 'suse';
+ if(@is_file('/etc/gentoo-release')) $dist = 'gentoo';
switch($log) {
case 'log_mail':
if($dist == 'debian') $logfile = '/var/log/mail.log';
if($dist == 'redhat') $logfile = '/var/log/maillog';
+ if($dist == 'suse') $logfile = '/var/log/mail.info';
+ if($dist == 'gentoo') $logfile = '/var/log/maillog';
break;
case 'log_mail_warn':
if($dist == 'debian') $logfile = '/var/log/mail.warn';
if($dist == 'redhat') $logfile = '/var/log/maillog';
+ if($dist == 'suse') $logfile = '/var/log/mail.warn';
+ if($dist == 'gentoo') $logfile = '/var/log/maillog';
break;
case 'log_mail_err':
if($dist == 'debian') $logfile = '/var/log/mail.err';
if($dist == 'redhat') $logfile = '/var/log/maillog';
+ if($dist == 'suse') $logfile = '/var/log/mail.err';
+ if($dist == 'gentoo') $logfile = '/var/log/maillog';
break;
case 'log_messages':
if($dist == 'debian') $logfile = '/var/log/messages';
if($dist == 'redhat') $logfile = '/var/log/messages';
+ if($dist == 'suse') $logfile = '/var/log/messages';
+ if($dist == 'gentoo') $logfile = '/var/log/messages';
break;
case 'log_ispc_cron':
if($dist == 'debian') $logfile = '/var/log/ispconfig/cron.log';
if($dist == 'redhat') $logfile = '/var/log/ispconfig/cron.log';
+ if($dist == 'suse') $logfile = '/var/log/ispconfig/cron.log';
+ if($dist == 'gentoo') $logfile = '/var/log/cron';
break;
case 'log_freshclam':
if($dist == 'debian') $logfile = '/var/log/clamav/freshclam.log';
if($dist == 'redhat') $logfile = (is_file('/var/log/clamav/freshclam.log') ? '/var/log/clamav/freshclam.log' : '/var/log/freshclam.log');
- break;
+ if($dist == 'suse') $logfile = '';
+ if($dist == 'gentoo') $logfile = '/var/log/clamav/freshclam.log';
+ break;
case 'log_clamav':
if($dist == 'debian') $logfile = '/var/log/clamav/clamav.log';
if($dist == 'redhat') $logfile = (is_file('/var/log/clamav/clamd.log') ? '/var/log/clamav/clamd.log' : '/var/log/maillog');
+ if($dist == 'suse') $logfile = '';
+ if($dist == 'gentoo') $logfile = '/var/log/clamav/clamd.log';
break;
case 'log_fail2ban':
if($dist == 'debian') $logfile = '/var/log/fail2ban.log';
if($dist == 'redhat') $logfile = '/var/log/fail2ban.log';
+ if($dist == 'suse') $logfile = '/var/log/fail2ban.log';
+ if($dist == 'gentoo') $logfile = '/var/log/fail2ban.log';
break;
case 'log_ispconfig':
if($dist == 'debian') $logfile = '/var/log/ispconfig/ispconfig.log';
if($dist == 'redhat') $logfile = '/var/log/ispconfig/ispconfig.log';
+ if($dist == 'suse') $logfile = '/var/log/ispconfig/ispconfig.log';
+ if($dist == 'gentoo') $logfile = '/var/log/ispconfig/ispconfig.log';
break;
default:
$logfile = '';
--
Gitblit v1.9.1