From f02be96750e48859cc63f1f2b64a86a9202178b4 Mon Sep 17 00:00:00 2001 From: Till Brehm <tbrehm@ispconfig.org> Date: Mon, 22 Sep 2014 07:25:20 -0400 Subject: [PATCH] Fixed a error in OS detection code for CentOS. --- server/lib/classes/monitor_tools.inc.php | 855 ++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 575 insertions(+), 280 deletions(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index a9bdaed..19f69bb 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -1,31 +1,31 @@ <?php /* - Copyright (c) 2007-2011, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com - All rights reserved. + Copyright (c) 2007-2011, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com + All rights reserved. - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. + this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. * Neither the name of ISPConfig nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. + may be used to endorse or promote products derived from this software without + specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ class monitor_tools { @@ -44,8 +44,89 @@ //** Debian or Ubuntu if (file_exists('/etc/debian_version')) { + if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu')) { + if (strstr(trim(file_get_contents('/etc/issue')), 'LTS')) { + $lts=" LTS"; + } else { + $lts=""; + } - if (trim(file_get_contents('/etc/debian_version')) == '4.0') { + $issue=file_get_contents('/etc/issue'); + $distname = 'Ubuntu'; + $distid = 'debian40'; + $distbaseid = 'debian'; + $ver = explode(' ', $issue); + $ver = array_filter($ver); + $ver = next($ver); + $mainver = explode('.', $ver); + $mainver = array_filter($mainver); + $mainver = current($mainver).'.'.next($mainver); + switch ($mainver){ + case "14.04": + $relname = "(Trusty Tahr)"; + break; + case "13.10": + $relname = "(Saucy Salamander)"; + break; + case "13.04": + $relname = "(Raring Ringtail)"; + break; + case "12.10": + $relname = "(Quantal Quetzal)"; + break; + case "12.04": + $relname = "(Precise Pangolin)"; + break; + case "11.10": + $relname = "(Oneiric Ocelot)"; + break; + case "11.14": + $relname = "(Natty Narwhal)"; + break; + case "10.10": + $relname = "(Maverick Meerkat)"; + break; + case "10.04": + $relname = "(Lucid Lynx)"; + break; + case "9.10": + $relname = "(Karmic Koala)"; + break; + case "9.04": + $relname = "(Jaunty Jackpole)"; + break; + case "8.10": + $relname = "(Intrepid Ibex)"; + break; + case "8.04": + $relname = "(Hardy Heron)"; + break; + case "7.10": + $relname = "(Gutsy Gibbon)"; + break; + case "7.04": + $relname = "(Feisty Fawn)"; + break; + case "6.10": + $relname = "(Edgy Eft)"; + break; + case "6.06": + $relname = "(Dapper Drake)"; + break; + case "5.10": + $relname = "(Breezy Badger)"; + break; + case "5.04": + $relname = "(Hoary Hedgehog)"; + break; + case "4.10": + $relname = "(Warty Warthog)"; + break; + default: + $relname = "UNKNOWN"; + } + $distver = $ver.$lts." ".$relname; + } elseif(trim(file_get_contents('/etc/debian_version')) == '4.0') { $distname = 'Debian'; $distver = '4.0'; $distid = 'debian40'; @@ -58,6 +139,11 @@ } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '6.0') || trim(file_get_contents('/etc/debian_version')) == 'squeeze/sid') { $distname = 'Debian'; $distver = 'Squeeze/Sid'; + $distid = 'debian60'; + $distbaseid = 'debian'; + } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || substr(trim(file_get_contents('/etc/debian_version')),0,2) == '7.' || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') { + $distname = 'Debian'; + $distver = 'Wheezy/Sid'; $distid = 'debian60'; $distbaseid = 'debian'; } else { @@ -124,6 +210,16 @@ $distver = '5.3'; $distid = 'centos53'; $distbaseid = 'fedora'; + } elseif(stristr($content, 'CentOS Linux release 6')) { + $distname = 'CentOS'; + $distver = 'Unknown'; + $distid = 'centos53'; + $distbaseid = 'fedora'; + } elseif(stristr($content, 'CentOS Linux release 7')) { + $distname = 'CentOS'; + $distver = 'Unknown'; + $distid = 'centos53'; + $distbaseid = 'fedora'; } else { $distname = 'Redhat'; $distver = 'Unknown'; @@ -149,35 +245,93 @@ return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid); } + //** Email Quota + public function monitorEmailQuota() { + global $conf, $app; + + //* Initialize data array + $data = array(); + + //* the id of the server as int + $server_id = intval($conf['server_id']); + + //* The type of the data + $type = 'email_quota'; + + //* The state of the email_quota. + $state = 'ok'; + + $mailboxes = $app->db->queryAllRecords("SELECT email,maildir FROM mail_user WHERE server_id = $server_id"); + if(is_array($mailboxes)) { + foreach($mailboxes as $mb) { + $email = $mb['email']; + $email_parts = explode('@', $mb['email']); + $filename = $mb['maildir'].'/.quotausage'; + if(file_exists($filename) && !is_link($filename)) { + $quotafile = file($filename); + preg_match('/storage.*?([0-9]+)/s', implode('',$quotafile), $storage_value); + $data[$email]['used'] = $storage_value[1]; + $app->log("Mail storage $email: " . $storage_value[1], LOGLEVEL_DEBUG); + unset($quotafile); + } else { + exec('du -s '.escapeshellcmd($mb['maildir']), $out); + $parts = explode(' ', $out[0]); + $data[$email]['used'] = intval($parts[0])*1024; + unset($out); + unset($parts); + } + } + } + + unset($mailboxes); + + //* Dovecot quota check Courier in progress lathama@gmail.com + /* + if($dir = opendir("/var/vmail")){ + while (($quotafiles = readdir($dir)) !== false){ + if(preg_match('/.\_quota$/', $quotafiles)){ + $quotafile = (file("/var/vmail/" . $quotafiles)); + $emailaddress = preg_replace('/_quota/',"", $quotafiles); + $emailaddress = preg_replace('/_/',"@", $emailaddress); + $data[$emailaddress]['used'] = trim($quotafile['1']); + } + } + closedir($dir); + } + */ + $res['server_id'] = $server_id; + $res['type'] = $type; + $res['data'] = $data; + $res['state'] = $state; + return $res; + } + + //** Filesystem Quota public function monitorHDQuota() { global $conf; - /* Initialize data array */ + //* Initialize data array $data = array(); - /* the id of the server as int */ + //* the id of the server as int $server_id = intval($conf['server_id']); - /** The type of the data */ + //* The type of the data $type = 'harddisk_quota'; - /** The state of the harddisk_quota. */ + //* The state of the harddisk_quota. $state = 'ok'; - /** Fetch the data for all users */ - $dfData = shell_exec('repquota -au'); + //* Fetch the data for all users + $dfData = shell_exec('repquota -au 2>/dev/null'); - // split into array + //* Split into array $df = explode("\n", $dfData); - /* - * ignore the first 5 lines, process the rest - */ + //* ignore the first 5 lines, process the rest for ($i = 5; $i <= sizeof($df); $i++) { if ($df[$i] != '') { - /* - * Make a array of the data - */ + //* Make a array of the data $s = preg_split('/[\s]+/', $df[$i]); $username = $s[0]; if (substr($username, 0, 3) == 'web') { @@ -185,29 +339,27 @@ $data['user'][$username]['used'] += $s[2]; $data['user'][$username]['soft'] += $s[3]; $data['user'][$username]['hard'] += $s[4]; + $data['user'][$username]['files'] += $s[5]; } else { $data['user'][$username]['used'] = $s[2]; $data['user'][$username]['soft'] = $s[3]; $data['user'][$username]['hard'] = $s[4]; + $data['user'][$username]['files'] = $s[5]; } } } } - /** Fetch the data for all users */ - $dfData = shell_exec('repquota -ag'); + //** Fetch the data for all users + $dfData = shell_exec('repquota -ag 2>/dev/null'); - // split into array + //* split into array $df = explode("\n", $dfData); - /* - * ignore the first 5 lines, process the rest - */ + //* ignore the first 5 lines, process the rest for ($i = 5; $i <= sizeof($df); $i++) { if ($df[$i] != '') { - /* - * Make a array of the data - */ + //* Make a array of the data $s = preg_split('/[\s]+/', $df[$i]); $groupname = $s[0]; if (substr($groupname, 0, 6) == 'client') { @@ -224,9 +376,7 @@ } } - /* - * Return the Result - */ + //* Return the Result $res['server_id'] = $server_id; $res['type'] = $type; $res['data'] = $data; @@ -241,10 +391,12 @@ $server_id = intval($conf['server_id']); /** The type of the data */ + + $type = 'server_load'; /* - Fetch the data into a array + Fetch the data into a array */ $procUptime = shell_exec("cat /proc/uptime | cut -f1 -d' '"); $data['up_days'] = floor($procUptime / 86400); @@ -295,7 +447,7 @@ $type = 'os_info'; /* - Fetch the data into a array + Fetch the data into a array */ $dist = $this->get_distname(); @@ -325,7 +477,7 @@ $type = 'ispc_info'; /* - Fetch the data into a array + Fetch the data into a array */ $data['name'] = ISPC_APP_TITLE; $data['version'] = ISPC_APP_VERSION; @@ -344,7 +496,7 @@ } public function monitorDiskUsage() { - global $conf; + global $app, $conf; /* the id of the server as int */ $server_id = intval($conf['server_id']); @@ -356,7 +508,10 @@ $state = 'ok'; /** Fetch the data of ALL devices into a array (needed for monitoring!) */ - $dfData = shell_exec('df -hT'); + //$dfData = shell_exec('df -hT 2>/dev/null'); + $app->uses('getconf'); + $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); + $dfData = shell_exec('df -hT|grep -v "'.$web_config['website_basedir'].'/" 2>/dev/null'); // split into array $df = explode("\n", $dfData); @@ -382,25 +537,34 @@ */ $usePercent = floatval($data[$i]['percent']); + //* get the free memsize + if(substr($data[$i]['available'], -1) == 'G') { + $freesize = floatval($data[$i]['available'])*1024; + } elseif(substr($data[$i]['available'], -1) == 'T') { + $freesize = floatval($data[$i]['available'])*1024*1024; + } else { + $freesize = floatval($data[$i]['available']); + } + //* We don't want to check some filesystem which have no sensible filling levels switch ($data[$i]['type']) { - case 'iso9660': - case 'cramfs': - case 'udf': - case 'tmpfs': - case 'devtmpfs': - case 'udev': - break; - default: - 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'); - break; + case 'iso9660': + case 'cramfs': + case 'udf': + case 'tmpfs': + case 'devtmpfs': + case 'udev': + break; + default: + if ($usePercent > 75 && $freesize < 2000) + $state = $this->_setState($state, 'info'); + if ($usePercent > 80 && $freesize < 1000) + $state = $this->_setState($state, 'warning'); + if ($usePercent > 90 && $freesize < 500) + $state = $this->_setState($state, 'critical'); + if ($usePercent > 95 && $freesize < 100) + $state = $this->_setState($state, 'error'); + break; } } } @@ -425,7 +589,7 @@ $type = 'mem_usage'; /* - Fetch the data into a array + Fetch the data into a array */ $miData = shell_exec('cat /proc/meminfo'); @@ -467,7 +631,7 @@ $type = 'cpu_info'; /* - Fetch the data into a array + Fetch the data into a array */ if (file_exists('/proc/cpuinfo')) { $cpuData = shell_exec('cat /proc/cpuinfo'); @@ -637,7 +801,7 @@ $type = 'openvz_veinfo'; /* - Fetch the data into a array + Fetch the data into a array */ $app->load(openvz_tools); $openVzTools = new openvz_tools(); @@ -667,7 +831,7 @@ $type = 'openvz_beancounter'; /* - Fetch the data into a array + Fetch the data into a array */ $app->load(openvz_tools); $openVzTools = new openvz_tools(); @@ -820,7 +984,7 @@ /* * Fetch the output */ - $data['output'] = shell_exec('zypper --non-interactive up'); + $data['output'] = shell_exec('zypper lu'); } else { /* * It is not Debian/Ubuntu, so there is no data and no state @@ -862,7 +1026,7 @@ */ $tmp = explode("\n", $data['output']); $more = $tmp[sizeof($tmp) - 1]; - $this->_getIntArray($more); + $res = $this->_getIntArray($more); $data['bytes'] = $res[0]; $data['requests'] = $res[1]; @@ -920,7 +1084,7 @@ /* fetch the next line */ $line = $tmp[$i]; - if ((strpos($line, '[U_]') !== false) || (strpos($line, '[_U]') !== false)) { + if ((strpos($line, 'U_]') !== false) || (strpos($line, '[_U') !== false) || (strpos($line, 'U_U') !== false)) { /* One Disk is not working. * if the next line starts with "[>" or "[=" then * recovery (resync) is in state and the state is @@ -961,43 +1125,105 @@ /* * Fetch the output */ - $data['output'] = shell_exec('mpt-status --autoload -n'); + $data['output'] = shell_exec('mpt-status --autoload'); /* * Then calc the state. */ $state = 'ok'; - foreach ($data['output'] as $item) { - /* - * The output contains information for every RAID and every HDD. - * We only need the state of the RAID - */ - if (strpos($item, 'raidlevel:') !== false) { + if(is_array($data['output'])) { + foreach ($data['output'] as $item) { /* - * We found a raid, process the state of it - */ - if (strpos($item, ' ONLINE ') !== false) { - $this->_setState($state, 'ok'); - } elseif (strpos($item, ' OPTIMAL ') !== false) { - $this->_setState($state, 'ok'); - } elseif (strpos($item, ' INITIAL ') !== false) { + * The output contains information for every RAID and every HDD. + * We only need the state of the RAID + */ + if (strpos($item, 'state ') !== false) { + /* + * We found a raid, process the state of it + */ + if (strpos($item, ' ONLINE ') !== false) { + $this->_setState($state, 'ok'); + } elseif (strpos($item, ' OPTIMAL ') !== false) { + $this->_setState($state, 'ok'); + } elseif (strpos($item, ' INITIAL ') !== false) { + $this->_setState($state, 'info'); + } elseif (strpos($item, ' INACTIVE ') !== false) { + $this->_setState($state, 'critical'); + } elseif (strpos($item, ' RESYNC ') !== false) { + $this->_setState($state, 'info'); + } elseif (strpos($item, ' DEGRADED ') !== false) { + $this->_setState($state, 'critical'); + } else { + /* we don't know the state. so we set the state to critical, that the + * admin is warned, that something is wrong + */ + $this->_setState($state, 'critical'); + } + } + } + } + } + } + + /* + * 3ware Controller + */ + + system('which tw_cli', $retval); + if($retval === 0) { + + // TYPOWORX FIX | Determine Controler-ID + $availableControlers = shell_exec('tw_cli info | grep -Eo "c[0-9]+'); + $data['output'] = shell_exec('tw_cli info ' . $availableControlers); + + $state = 'ok'; + if(is_array($data['output'])) { + foreach ($data['output'] as $item) { + if (strpos($item, 'RAID') !== false) { + if (strpos($item, ' VERIFYING ') !== false) { $this->_setState($state, 'info'); - } elseif (strpos($item, ' INACTIVE ') !== false) { - $this->_setState($state, 'critical'); - } elseif (strpos($item, ' RESYNC ') !== false) { - $this->_setState($state, 'info'); - } elseif (strpos($item, ' DEGRADED ') !== false) { - $this->_setState($state, 'critical'); - } else { - /* we don't know the state. so we set the state to critical, that the - * admin is warned, that something is wrong - */ + } + else if (strpos($item, ' MIGRATE-PAUSED ') !== false) { + $this->_setState($state, 'info'); + } + else if (strpos($item, ' MIGRATING ') !== false) { + $this->_setState($state, 'ok'); + } + else if (strpos($item, ' INITIALIZING ') !== false) { + $this->_setState($state, 'info'); + } + else if (strpos($item, ' INIT-PAUSED ') !== false) { + $this->_setState($state, 'info'); + } + else if (strpos($item, ' REBUILDING ') !== false) { + $this->_setState($state, 'info'); + } + else if (strpos($item, ' REBUILD-PAUSED ') !== false) { + $this->_setState($state, 'warning'); + } + else if (strpos($item, ' RECOVERY ') !== false) { + $this->_setState($state, 'warning'); + } + else if (strpos($item, ' DEGRADED ') !== false) { + $this->_setState($state, 'critical'); + } + else if (strpos($item, ' UNKNOWN ') !== false) { + $this->_setState($state, 'critical'); + } + else if (strpos($item, ' OK ') !== false) { + $this->_setState($state, 'ok'); + } + else if (strpos($item, ' OPTIMAL ') !== false) { + $this->_setState($state, 'ok'); + } + else { $this->_setState($state, 'critical'); } } } } } + /* * Return the Result @@ -1092,6 +1318,56 @@ /* * Return the Result */ + $res['server_id'] = $server_id; + $res['type'] = $type; + $res['data'] = $data; + $res['state'] = $state; + return $res; + } + + public function monitorIPTables() { + global $conf; + + /* the id of the server as int */ + $server_id = intval($conf['server_id']); + + /** The type of the data */ + $type = 'iptables_rules'; + + /* This monitoring is only available if fail2ban is installed */ + system('which iptables', $retval); // Debian, Ubuntu, Fedora + if ($retval === 0) { + /* Get the data of the log */ + $data['output'] = '<h2>iptables -S (ipv4)</h2>'.shell_exec('iptables -S 2>/dev/null'); + + /* + * At this moment, there is no state (maybe later) + */ + $state = 'no_state'; + } else { + $state = 'no_state'; + $data = ''; + } + + + /* This monitoring is only available if fail2ban is installed */ + system('which ip6tables', $retval); // Debian, Ubuntu, Fedora + if ($retval === 0) { + /* Get the data of the log */ + $data['output'] .= '<br><h2>ip6tables -S (ipv6)</h2>'.shell_exec('ip6tables -S 2>/dev/null'); + + /* + * At this moment, there is no state (maybe later) + */ + $state = 'no_state'; + } else { + $state = 'no_state'; + $data = ''; + } + + /* + * Return the Result + */ $res['server_id'] = $server_id; $res['type'] = $type; $res['data'] = $data; @@ -1319,15 +1595,20 @@ * Now we have the last log in the array. * Check if the outdated-string is found... */ + $clamav_outdated_warning = false; + $clamav_bytecode_updated = false; foreach ($lastLog as $line) { - if (strpos(strtolower($line), 'outdated') !== false) { - /* - * Outdatet is only info, because if we set this to warning, the server is - * as long in state warning, as there is a new version of ClamAv which takes - * sometimes weeks! - */ - $state = $this->_setState($state, 'info'); + if (stristr($line,'outdated')) { + $clamav_outdated_warning = true; } + if(stristr($line,'main.cld is up to date')) { + $clamav_bytecode_updated = true; + } + } + + //* Warn when clamav is outdated and main.cld update failed. + if($clamav_outdated_warning == true && $clamav_bytecode_updated == false) { + $state = $this->_setState($state, 'info'); } /* @@ -1407,108 +1688,108 @@ } switch ($log) { - case 'log_mail': - if ($dist == 'debian') { - $logfile = '/var/log/mail.log'; - } elseif ($dist == 'redhat') { - $logfile = '/var/log/maillog'; - } elseif ($dist == 'suse') { - $logfile = '/var/log/mail.info'; - } elseif ($dist == 'gentoo') { - $logfile = '/var/log/maillog'; - } - break; - case 'log_mail_warn': - if ($dist == 'debian') { - $logfile = '/var/log/mail.warn'; - } elseif ($dist == 'redhat') { - $logfile = '/var/log/maillog'; - } elseif ($dist == 'suse') { - $logfile = '/var/log/mail.warn'; - } elseif ($dist == 'gentoo') { - $logfile = '/var/log/maillog'; - } - break; - case 'log_mail_err': - if ($dist == 'debian') { - $logfile = '/var/log/mail.err'; - } elseif ($dist == 'redhat') { - $logfile = '/var/log/maillog'; - } elseif ($dist == 'suse') { - $logfile = '/var/log/mail.err'; - } elseif ($dist == 'gentoo') { - $logfile = '/var/log/maillog'; - } - break; - case 'log_messages': - if ($dist == 'debian') { - $logfile = '/var/log/messages'; - } elseif ($dist == 'redhat') { - $logfile = '/var/log/messages'; - } elseif ($dist == 'suse') { - $logfile = '/var/log/messages'; - } elseif ($dist == 'gentoo') { - $logfile = '/var/log/messages'; - } - break; - case 'log_ispc_cron': - if ($dist == 'debian') { - $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; - } elseif ($dist == 'redhat') { - $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; - } elseif ($dist == 'suse') { - $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; - } elseif ($dist == 'gentoo') { - $logfile = '/var/log/cron'; - } - break; - case 'log_freshclam': - if ($dist == 'debian') { - $logfile = '/var/log/clamav/freshclam.log'; - } elseif ($dist == 'redhat') { - $logfile = (is_file('/var/log/clamav/freshclam.log') ? '/var/log/clamav/freshclam.log' : '/var/log/freshclam.log'); - } elseif ($dist == 'suse') { - $logfile = '/var/log/freshclam.log'; - } elseif ($dist == 'gentoo') { - $logfile = '/var/log/clamav/freshclam.log'; - } - break; - case 'log_clamav': - if ($dist == 'debian') { - $logfile = '/var/log/clamav/clamav.log'; - } elseif ($dist == 'redhat') { - $logfile = (is_file('/var/log/clamav/clamd.log') ? '/var/log/clamav/clamd.log' : '/var/log/maillog'); - } elseif ($dist == 'suse') { - $logfile = '/var/log/clamd.log'; - } elseif ($dist == 'gentoo') { - $logfile = '/var/log/clamav/clamd.log'; - } - break; - case 'log_fail2ban': - if ($dist == 'debian') { - $logfile = '/var/log/fail2ban.log'; - } elseif ($dist == 'redhat') { - $logfile = '/var/log/fail2ban.log'; - } elseif ($dist == 'suse') { - $logfile = '/var/log/fail2ban.log'; - } elseif ($dist == 'gentoo') { - $logfile = '/var/log/fail2ban.log'; - } - break; - case 'log_ispconfig': - if ($dist == 'debian') { - $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; - } elseif ($dist == 'redhat') { - $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; - } elseif ($dist == 'suse') { - $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; - } elseif ($dist == 'gentoo') { - $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; - } - break; - default: - $logfile = ''; - break; + case 'log_mail': + if ($dist == 'debian') { + $logfile = '/var/log/mail.log'; + } elseif ($dist == 'redhat') { + $logfile = '/var/log/maillog'; + } elseif ($dist == 'suse') { + $logfile = '/var/log/mail.info'; + } elseif ($dist == 'gentoo') { + $logfile = '/var/log/maillog'; + } + break; + case 'log_mail_warn': + if ($dist == 'debian') { + $logfile = '/var/log/mail.warn'; + } elseif ($dist == 'redhat') { + $logfile = '/var/log/maillog'; + } elseif ($dist == 'suse') { + $logfile = '/var/log/mail.warn'; + } elseif ($dist == 'gentoo') { + $logfile = '/var/log/maillog'; + } + break; + case 'log_mail_err': + if ($dist == 'debian') { + $logfile = '/var/log/mail.err'; + } elseif ($dist == 'redhat') { + $logfile = '/var/log/maillog'; + } elseif ($dist == 'suse') { + $logfile = '/var/log/mail.err'; + } elseif ($dist == 'gentoo') { + $logfile = '/var/log/maillog'; + } + break; + case 'log_messages': + if ($dist == 'debian') { + $logfile = '/var/log/syslog'; + } elseif ($dist == 'redhat') { + $logfile = '/var/log/messages'; + } elseif ($dist == 'suse') { + $logfile = '/var/log/messages'; + } elseif ($dist == 'gentoo') { + $logfile = '/var/log/messages'; + } + break; + case 'log_ispc_cron': + if ($dist == 'debian') { + $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; + } elseif ($dist == 'redhat') { + $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; + } elseif ($dist == 'suse') { + $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; + } elseif ($dist == 'gentoo') { + $logfile = '/var/log/cron'; + } + break; + case 'log_freshclam': + if ($dist == 'debian') { + $logfile = '/var/log/clamav/freshclam.log'; + } elseif ($dist == 'redhat') { + $logfile = (is_file('/var/log/clamav/freshclam.log') ? '/var/log/clamav/freshclam.log' : '/var/log/freshclam.log'); + } elseif ($dist == 'suse') { + $logfile = '/var/log/freshclam.log'; + } elseif ($dist == 'gentoo') { + $logfile = '/var/log/clamav/freshclam.log'; + } + break; + case 'log_clamav': + if ($dist == 'debian') { + $logfile = '/var/log/clamav/clamav.log'; + } elseif ($dist == 'redhat') { + $logfile = (is_file('/var/log/clamav/clamd.log') ? '/var/log/clamav/clamd.log' : '/var/log/maillog'); + } elseif ($dist == 'suse') { + $logfile = '/var/log/clamd.log'; + } elseif ($dist == 'gentoo') { + $logfile = '/var/log/clamav/clamd.log'; + } + break; + case 'log_fail2ban': + if ($dist == 'debian') { + $logfile = '/var/log/fail2ban.log'; + } elseif ($dist == 'redhat') { + $logfile = '/var/log/fail2ban.log'; + } elseif ($dist == 'suse') { + $logfile = '/var/log/fail2ban.log'; + } elseif ($dist == 'gentoo') { + $logfile = '/var/log/fail2ban.log'; + } + break; + case 'log_ispconfig': + if ($dist == 'debian') { + $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; + } elseif ($dist == 'redhat') { + $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; + } elseif ($dist == 'suse') { + $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; + } elseif ($dist == 'gentoo') { + $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; + } + break; + default: + $logfile = ''; + break; } // Getting the logfile content @@ -1539,26 +1820,42 @@ } private function _checkTcp($host, $port) { - + /* Try to open a connection */ $fp = @fsockopen($host, $port, $errno, $errstr, 2); if ($fp) { /* - * We got a connection, but maybe apache is not able to send data over this - * connection? + * We got a connection, this means, everything is O.K. + * But maybe we are able to do more deep testing? */ - fwrite($fp, "GET / HTTP/1.0\r\n\r\n"); - stream_set_timeout($fp, 2); - $res = fread($fp, 10); - $info = stream_get_meta_data($fp); - fclose($fp); - if ($info['timed_out']) { - return false; // Apache was not able to send data over this connection - } else { - return true; // Apache was able to send data over this connection + if ($port == 80) { + /* + * Port 80 means, testing APACHE + * So we can do a deepter test and try to get data over this connection. + * (if apache hangs, we get a connection but a timeout by trying to GET the data!) + */ + // fwrite($fp, "GET / HTTP/1.0\r\n\r\n"); + $out = "GET / HTTP/1.1\r\n"; + $out .= "Host: localhost\r\n"; + $out .= "User-Agent: Mozilla/5.0 (ISPConfig monitor)\r\n"; + $out .= "Accept: application/xml,application/xhtml+xml,text/html\r\n"; + $out .= "Connection: Close\r\n\r\n"; + fwrite($fp, $out); + stream_set_timeout($fp, 5); // Timeout after 5 seconds + $res = fread($fp, 10); // try to get 10 bytes (enough to test!) + $info = stream_get_meta_data($fp); + if ($info['timed_out']) { + return false; // Apache was not able to send data over this connection + } } + + /* The connection is no longer needed */ + fclose($fp); + /* We are able to establish a connection */ + return true; } else { - return false; // Apache was not able to establish a connection + /* We are NOT able to establish a connection */ + return false; } } @@ -1585,69 +1882,67 @@ return false; } } - - /* - * Set the state to the given level (or higher, but not lesser). - * * If the actual state is critical and you call the method with ok, - * then the state is critical. - * - * * If the actual state is critical and you call the method with error, - * then the state is error. - */ - private function _setState($oldState, $newState) - { - /* - * Calculate the weight of the old state - */ - switch ($oldState) { - case 'no_state': $oldInt = 0; - break; - case 'ok': $oldInt = 1; - break; - case 'unknown': $oldInt = 2; - break; - case 'info': $oldInt = 3; - break; - case 'warning': $oldInt = 4; - break; - case 'critical': $oldInt = 5; - break; - case 'error': $oldInt = 6; - break; - } - /* - * Calculate the weight of the new state - */ - switch ($newState) { - case 'no_state': $newInt = 0 ; - break; - case 'ok': $newInt = 1 ; - break; - case 'unknown': $newInt = 2 ; - break; - case 'info': $newInt = 3 ; - break; - case 'warning': $newInt = 4 ; - break; - case 'critical': $newInt = 5 ; - break; - case 'error': $newInt = 6 ; - break; - } - /* - * Set to the higher level - */ - if ($newInt > $oldInt){ - return $newState; - } - else - { - return $oldState; - } - } + /** + * Set the state to the given level (or higher, but not lesser). + * * If the actual state is critical and you call the method with ok, + * then the state is critical. + * + * * If the actual state is critical and you call the method with error, + * then the state is error. + */ + private function _setState($oldState, $newState) { + /* + * Calculate the weight of the old state + */ + switch ($oldState) { + case 'no_state': $oldInt = 0; + break; + case 'ok': $oldInt = 1; + break; + case 'unknown': $oldInt = 2; + break; + case 'info': $oldInt = 3; + break; + case 'warning': $oldInt = 4; + break; + case 'critical': $oldInt = 5; + break; + case 'error': $oldInt = 6; + break; + } + /* + * Calculate the weight of the new state + */ + switch ($newState) { + case 'no_state': $newInt = 0; + break; + case 'ok': $newInt = 1; + break; + case 'unknown': $newInt = 2; + break; + case 'info': $newInt = 3; + break; + case 'warning': $newInt = 4; + break; + case 'critical': $newInt = 5; + break; + case 'error': $newInt = 6; + break; + } + + /* + * Set to the higher level + */ + if ($newInt > $oldInt) { + return $newState; + } else { + return $oldState; + } + } private function _getIntArray($line) { + /** The array of float found */ $res = array(); /* First build a array from the line */ -- Gitblit v1.9.1