| | |
| | | $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'; |
| | |
| | | * 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'); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | $cpuData = shell_exec("cat /proc/cpuinfo"); |
| | | $cpuInfo = explode("\n", $cpuData); |
| | | $processor = 0; |
| | | |
| | | foreach($cpuInfo as $line){ |
| | | $part = preg_split("/:/", $line); |
| | | |
| | | $part = preg_split("/:/", $line); |
| | | $key = trim($part[0]); |
| | | $value = trim($part[1]); |
| | | $data[$key] = $value; |
| | | if($key == 'processor') $processor = intval($value); |
| | | if($key != '') $data[$key.' '.$processor] = $value; |
| | | } |
| | | |
| | | /* the cpu has no state. It is, what it is */ |
| | |
| | | */ |
| | | $data['output'] = shell_exec('apt-get -s -q dist-upgrade'); |
| | | } |
| | | elseif (file_exists("/etc/gentoo-release")) { |
| | | |
| | | /* |
| | | * first update the portage tree |
| | | */ |
| | | |
| | | // In keeping with gentoo's rsync policy, don't update to frequently (every four hours - taken from http://www.gentoo.org/doc/en/source_mirrors.xml) |
| | | $do_update = true; |
| | | if (file_exists('/usr/portage/metadata/timestamp.chk')) |
| | | { |
| | | $datetime = file_get_contents('/usr/portage/metadata/timestamp.chk'); |
| | | $datetime = trim($datetime); |
| | | |
| | | $dstamp = strtotime($datetime); |
| | | if ($dstamp) |
| | | { |
| | | $checkat = $dstamp + 14400; // + 4hours |
| | | if (mktime() < $checkat) { |
| | | $do_update = false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if ($do_update) { |
| | | 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 |
| | |
| | | $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 |
| | | */ |
| | |
| | | |
| | | 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; |
| | |
| | | $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 |
| | | */ |
| | |
| | | $type = 'log_fail2ban'; |
| | | |
| | | /* This monitoring is only available if fail2ban is installed */ |
| | | $location = shell_exec('which fail2ban-client'); |
| | | 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); |
| | | |
| | |
| | | |
| | | |
| | | function _getLogData($log){ |
| | | switch($log) { |
| | | |
| | | $dist = ''; |
| | | $logfile = ''; |
| | | |
| | | 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': |
| | | $logfile = '/var/log/mail.log'; |
| | | 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': |
| | | $logfile = '/var/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': |
| | | $logfile = '/var/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': |
| | | $logfile = '/var/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': |
| | | $logfile = '/var/log/ispconfig/cron.log'; |
| | | 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': |
| | | $logfile = '/var/log/clamav/freshclam.log'; |
| | | break; |
| | | 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'); |
| | | if($dist == 'suse') $logfile = ''; |
| | | if($dist == 'gentoo') $logfile = '/var/log/clamav/freshclam.log'; |
| | | break; |
| | | case 'log_clamav': |
| | | $logfile = '/var/log/clamav/clamav.log'; |
| | | 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': |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | 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': |
| | | $logfile = '/var/log/ispconfig/ispconfig.log'; |
| | | 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 = ''; |
| | |
| | | // Getting the logfile content |
| | | if($logfile != '') { |
| | | $logfile = escapeshellcmd($logfile); |
| | | if(stristr($logfile, ';')) { |
| | | if(stristr($logfile, ';') or substr($logfile,0,9) != '/var/log/' or stristr($logfile, '..')) { |
| | | $log = 'Logfile path error.'; |
| | | } |
| | | else |