From 2cb1563f63386b35a69e460051aa9b4a2851d104 Mon Sep 17 00:00:00 2001 From: ftimme <ft@falkotimme.com> Date: Wed, 30 May 2012 07:30:44 -0400 Subject: [PATCH] - Added (clickable) placeholders to client messaging function. - Added check so that the client password isn't inserted into the message (for security reasons). --- server/lib/classes/monitor_tools.inc.php | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 155 insertions(+), 9 deletions(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index 3d17880..a8a4025 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -151,7 +151,7 @@ //** Email Quota public function monitorEmailQuota() { - global $conf; + global $conf, $app; //* Initialize data array $data = array(); @@ -164,8 +164,31 @@ //* The state of the email_quota. $state = 'ok'; + + $mailboxes = $app->db->queryAllRecords("SELECT email 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 = '/var/vmail/'.$email_parts[1].'/'.$email_parts[0].'/.quotausage'; + if(file_exists($filename)) { + $quotafile = file($filename); + $data[$email]['used'] = trim($quotafile['1']); + unset($quotafile); + } else { + exec('du -s '.escapeshellcmd('/var/vmail/'.$email_parts[1].'/'.$email_parts[0]),$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)){ @@ -177,6 +200,7 @@ } closedir($dir); } + */ $res['server_id'] = $server_id; $res['type'] = $type; $res['data'] = $data; @@ -217,10 +241,12 @@ $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]; } } } @@ -407,6 +433,15 @@ * calculate the state */ $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']) { @@ -418,13 +453,13 @@ case 'udev': break; default: - if ($usePercent > 75) + if ($usePercent > 75 && $freesize < 2000) $state = $this->_setState($state, 'info'); - if ($usePercent > 80) + if ($usePercent > 80 && $freesize < 1000) $state = $this->_setState($state, 'warning'); - if ($usePercent > 90) + if ($usePercent > 90 && $freesize < 500) $state = $this->_setState($state, 'critical'); - if ($usePercent > 95) + if ($usePercent > 95 && $freesize < 100) $state = $this->_setState($state, 'error'); break; } @@ -846,7 +881,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 @@ -987,7 +1022,7 @@ /* * Fetch the output */ - $data['output'] = shell_exec('mpt-status --autoload -n'); + $data['output'] = shell_exec('mpt-status --autoload'); /* * Then calc the state. @@ -999,7 +1034,7 @@ * The output contains information for every RAID and every HDD. * We only need the state of the RAID */ - if (strpos($item, 'raidlevel:') !== false) { + if (strpos($item, 'state ') !== false) { /* * We found a raid, process the state of it */ @@ -1026,6 +1061,61 @@ } } } + + /* + * 3ware Controller + */ + system('which tw_cli', $retval); + if($retval === 0) { + + $data['output'] = shell_exec('tw_cli info c0'); + + $state = 'ok'; + foreach ($data['output'] as $item) { + if (strpos($item, 'RAID') !== false) { + if (strpos($item, ' VERIFYING ') !== false) { + $this->_setState($state, 'info'); + } + 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 @@ -1126,6 +1216,56 @@ $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'); + + /* + * 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'); + + /* + * 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; + $res['state'] = $state; + return $res; + } public function monitorSysLog() { global $app; @@ -1581,7 +1721,13 @@ * 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"); + // 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); -- Gitblit v1.9.1