From 0ae667e6cfdd1bcc85bacf85cd93a84f99fa88f8 Mon Sep 17 00:00:00 2001 From: cfoe <cfoe@ispconfig3> Date: Tue, 22 May 2012 04:08:05 -0400 Subject: [PATCH] added missing language string already present in default theme --- server/mods-available/monitor_core_module.inc.php | 1215 ++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 814 insertions(+), 401 deletions(-) diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php index 136463c..fa1b189 100644 --- a/server/mods-available/monitor_core_module.inc.php +++ b/server/mods-available/monitor_core_module.inc.php @@ -1,421 +1,834 @@ <?php /* -Copyright (c) 2008, 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. - * 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. - * 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. + * Redistributions of source code must retain the above copyright notice, + 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. + * 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. -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_core_module { - - /* TODO: this should be a config - var instead of a "constant" */ + var $interval = 5; // do the monitoring every 5 minutes - var $module_name = 'monitor_core_module'; var $class_name = 'monitor_core_module'; /* No actions at this time. maybe later... */ var $actions_available = array(); - - /* - This function is called when the module is loaded - */ - - function onLoad() { - global $app; - - /* - Annonce the actions that where provided by this module, so plugins - can register on them. - */ - /* none at them moment */ - //$app->plugins->announceEvents($this->module_name,$this->actions_available); - - /* - As we want to get notified of any changes on several database tables, - we register for them. - - The following function registers the function "functionname" - to be executed when a record for the table "dbtable" is - processed in the sys_datalog. "classname" is the name of the - class that contains the function functionname. - */ - /* none at them moment */ - //$app->modules->registerTableHook('mail_access','mail_module','process'); - - /* - Do the monitor every n minutes and write the result in the db - */ - $min = date('i'); - if (($min % $this->interval) == 0) - { - $this->doMonitor(); - } - } - - /* - This function is called when a change in one of the registered tables is detected. - The function then raises the events for the plugins. - */ - function process($tablename, $action, $data) { - // global $app; - // - // switch ($tablename) { - // case 'mail_access': - // if($action == 'i') $app->plugins->raiseEvent('mail_access_insert',$data); - // if($action == 'u') $app->plugins->raiseEvent('mail_access_update',$data); - // if($action == 'd') $app->plugins->raiseEvent('mail_access_delete',$data); - // break; - // } // end switch - } // end function - - /* - This method is called every n minutes, when the module ist loaded. - The method then does a system-monitoring - */ - // TODO: what monitoring is done should be a config-var - function doMonitor() - { - /* Calls the single Monitoring steps */ - $this->monitorServer(); - $this->monitorDiskUsage(); - } - - function monitorServer(){ - global $app; - global $conf; - - /* the id of the server as int */ - $server_id = intval($conf["server_id"]); - - /** The type of the data */ - $type = 'server_load'; - - /* Delete Data older than 1 day */ - $this->_delOldRecords($type, 0, 0, 1); - - /* - Fetch the data into a array - */ - $procUptime = shell_exec("cat /proc/uptime | cut -f1 -d' '"); - $data['up_days'] = floor($procUptime/86400); - $data['up_hours'] = floor(($procUptime-$data['up_days']*86400)/3600); - $data['up_minutes'] = floor(($procUptime-$data['up_days']*86400-$data['up_hours']*3600)/60); + /** The Tools */ + private $_tools = null; - $data['uptime'] = shell_exec("uptime"); - - $tmp = explode(",", $data['uptime'], 3); - $tmpUser = explode(" ", trim($tmp[1])); - $data['user_online'] = intval($tmpUser[0]); - - $loadTmp = explode(":" , trim($tmp[2])); - $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])); - - // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... - $state = 'ok'; - - /* - Insert the data into the database - */ - $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . - "VALUES (". - $conf["server_id"] . ", " . - "'" . $app->db->quote(serialize($type)) . "', " . - time() . ", " . - "'" . $app->db->quote(serialize($data)) . "', " . - "'" . $state . "'" . - ")"; - $app->db->query($sql); - } - - function monitorDiskUsage() { - global $app; + /** + * This function is called during ispconfig installation to determine + * if a symlink shall be created for this plugin. + */ + public function onInstall() { global $conf; - - /* the id of the server as int */ - $server_id = intval($conf["server_id"]); - - /** The type of the data */ - $type = 'disk_usage'; - - /* Delete Data older than 10 minutes */ - $this->_delOldRecords($type, 10); - - /* - Fetch the data into a array - */ - $fd = popen ("df", "r"); - $buffer = ''; - while (!feof($fd)) { - $buffer .= fgets($fd, 4096); - } - - // split into array - $df = split("\n", $buffer); - // ignore the first line make a array of the rest - for($i=1; $i <= sizeof($df); $i++){ - if ($df[$i] != '') - { - $s = preg_split ("/[\s]+/", $df[$i]); - $data[$i]['fs'] = $s[0]; - $data[$i]['size'] = $s[1]; - $data[$i]['used'] = $s[2]; - $data[$i]['available'] = $s[3]; - $data[$i]['percent'] = $s[4]; - $data[$i]['mounted'] = $s[5]; - } - } - - // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... - $state = 'ok'; - - /* - Insert the data into the database - */ - $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . - "VALUES (". - $conf["server_id"] . ", " . - "'" . $app->db->quote(serialize($type)) . "', " . - time() . ", " . - "'" . $app->db->quote(serialize($data)) . "', " . - "'" . $state . "'" . - ")"; - $app->db->query($sql); + return true; } - // - // - // function show_memusage () - // { - // global $app; - // - // $html_out .= '<table id="system_memusage">'; - // - // $fd = fopen ("/proc/meminfo", "r"); - // while (!feof($fd)) { - // $buffer .= fgets($fd, 4096); - // } - // fclose($fd); - // - // $meminfo = split("\n",$buffer); - // - // foreach($meminfo as $mline){ - // if($x > 2 and trim($mline) != "") { - // - // $mpart = split(":",$mline); - // - // $html_out .= '<tr> - // <td>'.$mpart[0].':</td> - // <td>'.$mpart[1].'</td> - // </tr>'; - // } - // - // $x++; - // } - // $html_out .= '</table>'; - // return $html_out; - // } - // - // function show_cpu () - // { - // global $app; - // - // $html_out .= '<table id="system_cpu">'; - // - // $n = 0; - // if(is_readable("/proc/cpuinfo")) { - // if($fd = fopen ("/proc/cpuinfo", "r")) { - // while (!feof($fd)) { - // $buffer .= fgets($fd, 4096); - // $n++; - // if($n > 100) break; - // } - // fclose($fd); - // } - // } - // - // $meminfo = split("\n",$buffer); - // - // if(is_array($meminfo)) { - // foreach($meminfo as $mline){ - // if(trim($mline) != "") { - // - // $mpart = split(":",$mline); - // - // $html_out .= '<tr> - // <td>'.$mpart[0].':</td> - // <td>'.$mpart[1].'</td> - // </tr>'; - // } - // } - // - // $x++; - // } - // $html_out .= '</table></div>'; - // - // - // return $html_out; - // } - // - // function show_services () - // { - // global $app; - // - // $html_out .= '<table id="system_services">'; - // - // // Checke Webserver - // if(_check_tcp('localhost',80)) { - // $status = '<span class="online">Online</span>'; - // } else { - // $status = '<span class="offline">Offline</span>'; - // } - // $html_out .= '<tr> - // <td>Web-Server:</td> - // <td>'.$status.'</td> - // </tr>'; - // - // - // // Checke FTP-Server - // if(_check_ftp('localhost',21)) { - // $status = '<span class="online">Online</span>'; - // } else { - // $status = '<span class="offline">Offline</span>'; - // } - // $html_out .= '<tr> - // <td>FTP-Server:</td> - // <td>'.$status.'</td> - // </tr>'; - // - // // Checke SMTP-Server - // if(_check_tcp('localhost',25)) { - // $status = '<span class="online">Online</span>'; - // } else { - // $status = '<span class="offline">Offline</span>'; - // } - // $html_out .= '<tr> - // <td>SMTP-Server:</td> - // <td>'.$status.'</td> - // </tr>'; - // - // // Checke POP3-Server - // if(_check_tcp('localhost',110)) { - // $status = '<span class="online">Online</span>'; - // } else { - // $status = '<span class="offline">Offline</span>'; - // } - // $html_out .= '<tr> - // <td>POP3-Server:</td> - // <td>'.$status.'</td> - // </tr>'; - // - // // Checke BIND-Server - // if(_check_tcp('localhost',53)) { - // $status = '<span class="online">Online</span>'; - // } else { - // $status = '<span class="offline">Offline</span>'; - // } - // $html_out .= '<tr> - // <td>DNS-Server:</td> - // <td>'.$status.'</td> - // </tr>'; - // - // // Checke MYSQL-Server - // //if($this->_check_tcp('localhost',3306)) { - // $status = '<span class="online">Online</span>'; - // //} else { - // //$status = '<span class="offline">Offline</span>'; - // //} - // $html_out .= '<tr> - // <td>mySQL-Server:</td> - // <td>'.$status.'</td> - // </tr>'; - // - // - // $html_out .= '</table></div>'; - // - // - // return $html_out; - // } - // - // function _check_tcp ($host,$port) { - // - // $fp = @fsockopen ($host, $port, &$errno, &$errstr, 2); - // - // if ($fp) { - // return true; - // fclose($fp); - // } else { - // return false; - // fclose($fp); - // } - // } - // - // function _check_udp ($host,$port) { - // - // $fp = @fsockopen ('udp://'.$host, $port, &$errno, &$errstr, 2); - // - // if ($fp) { - // return true; - // fclose($fp); - // } else { - // return false; - // fclose($fp); - // } - // } - // - // function _check_ftp ($host,$port){ - // - // $conn_id = @ftp_connect($host, $port); - // - // if($conn_id){ - // @ftp_close($conn_id); - // return true; - // } else { - // @ftp_close($conn_id); - // return false; - // } - // } - - /* - Deletes Records older than n. - */ - function _delOldRecords($type, $min, $hour=0, $days=0) { + + /** + * This function is called when the module is loaded + */ + public function onLoad() { global $app; - - $now = time(); - $old = $now - ($min * 60) - ($hour * 60 * 60) - ($days * 24 * 60 * 60); - $sql = "DELETE FROM monitor_data " . - "WHERE " . - "type =" . "'" . $app->db->quote(serialize($type)) . "' " . - "AND " . - "created < " . $old; - $app->db->query($sql); + + /* + * Do the monitor every n minutes and write the result to the db + */ + $min = @date('i'); + if (($min % $this->interval) == 0) { + $this->_doMonitor(); + } } - - -} // end class + + /** + * This function is called when a change in one of the registered tables is detected. + * The function then raises the events for the plugins. + */ + public function process($tablename, $action, $data) { + // not needed + } + + /** + * This method is called every n minutes, when the module ist loaded. + * The method then does a system-monitoring + */ + // TODO: what monitoring is done should be a config-var + private function _doMonitor() { + global $app; + /* + * We need the tools in almost every method, so initialize them once... + */ + $app->load('monitor_tools'); + $this->_tools = new monitor_tools(); + + /* + * Calls the single Monitoring steps + */ + $this->_monitorEmailQuota(); + $this->_monitorHDQuota(); + $this->_monitorServer(); + $this->_monitorOsVer(); + $this->_monitorIspcVer(); + $this->_monitorDiskUsage(); + $this->_monitorMemUsage(); + $this->_monitorCpu(); + $this->_monitorServices(); + if (@file_exists('/proc/user_beancounters')) { + $this->_monitorOpenVzHost(); + $this->_monitorOpenVzUserBeancounter(); + } + $this->_monitorMailLog(); + $this->_monitorMailWarnLog(); + $this->_monitorMailErrLog(); + $this->_monitorMessagesLog(); + $this->_monitorISPCCronLog(); + $this->_monitorFreshClamLog(); + $this->_monitorClamAvLog(); + $this->_monitorIspConfigLog(); + $this->_monitorSystemUpdate(); + $this->_monitorMailQueue(); + $this->_monitorRaid(); + $this->_monitorRkHunter(); + $this->_monitorFail2ban(); + $this->_monitorIPTables(); + $this->_monitorSysLog(); + } + + private function _monitorEmailQuota() { + global $app; + + /* + * This monitoring is expensive, so do it only every 15 minutes + */ + $min = @date('i'); + if ($min % 15 != 0) return; + + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorEmailQuota(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorHDQuota() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorHDQuota(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorServer() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorServer(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorOsVer() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorOsVer(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorIspcVer() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorIspcVer(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorDiskUsage() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorDiskUsage(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorMemUsage() { + global $app; + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorMemUsage(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorCpu() { + global $app; + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorCpu(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorServices() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorServices(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorOpenVzHost() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorOpenVzHost(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorOpenVzUserBeancounter() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorOpenVzUserBeancounter(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorSystemUpdate() { + /* + * This monitoring is expensive, so do it only once an hour + */ + $min = @date('i'); + if ($min != 0) + return; + + /* + * OK - here we go... + */ + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorSystemUpdate(); + + //* Ensure that output is encoded so that it does not break the serialize + $res['data']['output'] = htmlentities($res['data']['output']); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorMailQueue() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorMailQueue(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorRaid() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorRaid(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorRkHunter() { + /* + * This monitoring is expensive, so do it only once a day + */ + $min = @date('i'); + $hour = @date('H'); + if (!($min == 0 && $hour == 23)) + return; + /* + * OK . here we go... + */ + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorRkHunter(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorFail2ban() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorFail2ban(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + + private function _monitorIPTables() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorIPTables(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorSysLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorSysLog(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorMailLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorMailLog(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorMailWarnLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorMailWarnLog(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorMailErrLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorMailErrLog(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorMessagesLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorMessagesLog(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorISPCCronLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorISPCCronLog(); + + //* Ensure that output is encoded so that it does not break the serialize + $res['data']['output'] = htmlentities($res['data']['output']); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorFreshClamLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorFreshClamLog(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorClamAvLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorClamAvLog(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + private function _monitorIspConfigLog() { + global $app; + + /* + * First we get the Monitoring-data from the tools + */ + $res = $this->_tools->monitorIspConfigLog(); + + /* + * Insert the data into the database + */ + $sql = 'INSERT INTO monitor_data (server_id, type, created, data, state) ' . + 'VALUES (' . + $res['server_id'] . ', ' . + "'" . $app->dbmaster->quote($res['type']) . "', " . + 'UNIX_TIMESTAMP(), ' . + "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . + "'" . $res['state'] . "'" . + ')'; + $app->dbmaster->query($sql); + + /* The new data is written, now we can delete the old one */ + $this->_delOldRecords($res['type'], $res['server_id']); + } + + /** + * Deletes Records older than 4 minutes. + * The monitor writes new data every 5 minutes or longer (4 hour, 1 day). + * So if i delete all Date older than 4 minutes i can be sure, that all old data + * are deleted... + */ + private function _delOldRecords($type, $serverId) { + global $app; + + // $now = time(); + // $old = $now - (4 * 60); // 4 minutes + $old = 'UNIX_TIMESTAMP() - 240'; + + /* + * ATTENTION if i do NOT pay attention of the server id, i delete all data (of the type) + * of ALL servers. This means, if i have a multiserver-environment and a server has a + * time not synced with the others (for example, all server has 11:00 and ONE server has + * 10:45) then the actual data of this server (with the time-stamp 10:45) get lost + * even though it is the NEWEST data of this server. To avoid this i HAVE to include + * the server-id! + */ + $sql = 'DELETE FROM monitor_data ' . + 'WHERE ' . + ' type =' . "'" . $app->dbmaster->quote($type) . "' " . + 'AND ' . + ' created < ' . $old . ' ' . + 'AND ' . + ' server_id = ' . $serverId; + $app->dbmaster->query($sql); + } + +} ?> \ No newline at end of file -- Gitblit v1.9.1