From e0db878eb71dd40d6c000f1debedad3f16f15ba6 Mon Sep 17 00:00:00 2001 From: chjacobsen <chjacobsen@ispconfig3> Date: Fri, 01 Apr 2011 15:59:23 -0400 Subject: [PATCH] Adding a new client remotelly, it was not been associated to the proper reseller. --- server/lib/classes/monitor_tools.inc.php | 125 +++++++++++++++++++++++++++++++++++++++-- 1 files changed, 118 insertions(+), 7 deletions(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index 1e33ea7..3d08bc8 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -332,7 +332,7 @@ /* the ISPC-Version has no state. It is, what it is */ $state = 'no_state'; - + /* * Return the Result */ @@ -446,7 +446,7 @@ * maybe someone knows better...???... */ $state = 'no_state'; - + /* * Return the Result */ @@ -518,8 +518,16 @@ /** the id of the server as int */ $server_id = intval($conf['server_id']); - /** get the "active" Services of the server from the DB */ - $services = $app->dbmaster->queryOneRecord('SELECT * FROM server WHERE server_id = ' . $server_id); + /** get the "active" Services of the server from the DB */ + $services = $app->db->queryOneRecord('SELECT * FROM server WHERE server_id = ' . $server_id); + /* + * If the DB is down, we have to set the db to "yes". + * If we don't do this, then the monitor will NOT monitor, that the db is down and so the + * rescue-module can not try to rescue the db + */ + if ($services == null) { + $services['db_server'] = 1; + } /* The type of the Monitor-data */ $type = 'services'; @@ -589,7 +597,7 @@ /* Monitor BIND-Server */ $data['bindserver'] = -1; // unknown - not needed if ($services['dns_server'] == 1) { - if ($this->_checkTcp('localhost', 53)) { + if ($this->_checkUdp('localhost', 53)) { $data['bindserver'] = 1; } else { $data['bindserver'] = 0; @@ -607,7 +615,7 @@ $state = 'error'; // because service is down } } - + /* * Return the Result */ @@ -791,6 +799,28 @@ $state = 'info'; $data['output'] = shell_exec('glsa-check -pv --nocolor affected 2>/dev/null'); } + } elseif (file_exists('/etc/SuSE-release')) { + + /* + * update and find the upgrade. + * if there is any output, then there is a needed update + */ + $aptData = shell_exec('zypper -q lu'); + if ($aptData == '') { + /* There is nothing to update! */ + $state = 'ok'; + } else { + /* + * There is something to update! this is in most cases not critical, so we can + * do a system-update once a month or so... + */ + $state = 'info'; + } + + /* + * Fetch the output + */ + $data['output'] = shell_exec('zypper --non-interactive up'); } else { /* * It is not Debian/Ubuntu, so there is no data and no state @@ -1070,6 +1100,7 @@ } public function monitorSysLog() { + global $app; global $conf; /* the id of the server as int */ @@ -1508,13 +1539,35 @@ } private function _checkTcp($host, $port) { - + /* Try to open a connection */ $fp = @fsockopen($host, $port, $errno, $errstr, 2); if ($fp) { + /* + * We got a connection, this means, everything is O.K. + * But maybe we are able to do more deep testing? + */ + 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"); + 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 { + /* We are NOT able to establish a connection */ return false; } } @@ -1543,6 +1596,64 @@ } } + /** + * 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(); -- Gitblit v1.9.1