From b889edb33e4a09cc1f65d2fb9ad9f9ea16b1eae9 Mon Sep 17 00:00:00 2001 From: ftimme <ft@falkotimme.com> Date: Tue, 04 Sep 2012 11:42:42 -0400 Subject: [PATCH] - Ported changes from Apache plugin to nginx plugin. - Fixed errors in system.inc.php- --- server/mods-available/monitor_core_module.inc.php | 291 +++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 188 insertions(+), 103 deletions(-) diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php index a336786..099b89a 100644 --- a/server/mods-available/monitor_core_module.inc.php +++ b/server/mods-available/monitor_core_module.inc.php @@ -35,7 +35,7 @@ var $class_name = 'monitor_core_module'; /* No actions at this time. maybe later... */ var $actions_available = array(); - /** The Tools*/ + /** The Tools */ private $_tools = null; /** @@ -76,15 +76,17 @@ */ // 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(); @@ -110,8 +112,45 @@ $this->_monitorRaid(); $this->_monitorRkHunter(); $this->_monitorFail2ban(); + $this->_monitorIPTables(); $this->_monitorSysLog(); } + + private function _monitorEmailQuota() { + global $app, $conf; + + /* + * This monitoring is expensive, so do it only every 15 minutes + */ + $min = @date('i'); + if ($min % 15 != 0) return; + + $app->uses('getconf'); + $mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail'); + if($mail_config['mailbox_quota_stats'] == 'n') 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; @@ -120,7 +159,7 @@ * First we get the Monitoring-data from the tools */ $res = $this->_tools->monitorHDQuota(); - + /* * Insert the data into the database */ @@ -128,14 +167,14 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } private function _monitorServer() { @@ -145,7 +184,7 @@ * First we get the Monitoring-data from the tools */ $res = $this->_tools->monitorServer(); - + /* * Insert the data into the database */ @@ -153,14 +192,14 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } private function _monitorOsVer() { @@ -170,7 +209,7 @@ * First we get the Monitoring-data from the tools */ $res = $this->_tools->monitorOsVer(); - + /* * Insert the data into the database */ @@ -178,14 +217,14 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } private function _monitorIspcVer() { @@ -195,7 +234,7 @@ * First we get the Monitoring-data from the tools */ $res = $this->_tools->monitorIspcVer(); - + /* * Insert the data into the database */ @@ -203,14 +242,14 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } private function _monitorDiskUsage() { @@ -220,7 +259,7 @@ * First we get the Monitoring-data from the tools */ $res = $this->_tools->monitorDiskUsage(); - + /* * Insert the data into the database */ @@ -228,14 +267,14 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } private function _monitorMemUsage() { @@ -244,7 +283,7 @@ * First we get the Monitoring-data from the tools */ $res = $this->_tools->monitorMemUsage(); - + /* * Insert the data into the database */ @@ -252,14 +291,14 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } private function _monitorCpu() { @@ -268,7 +307,7 @@ * First we get the Monitoring-data from the tools */ $res = $this->_tools->monitorCpu(); - + /* * Insert the data into the database */ @@ -276,24 +315,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -301,24 +340,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -326,24 +365,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -351,21 +390,21 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } private function _monitorSystemUpdate() { /* * This monitoring is expensive, so do it only once an hour */ - $min = date('i'); + $min = @date('i'); if ($min != 0) return; @@ -373,12 +412,15 @@ * 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 */ @@ -386,24 +428,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -411,24 +453,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -436,34 +478,34 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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'); + $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 */ @@ -471,24 +513,50 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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->monitorFail2ban(); - + $res = $this->_tools->monitorIPTables(); + /* * Insert the data into the database */ @@ -496,24 +564,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -521,24 +589,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -546,24 +614,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -571,24 +639,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -596,24 +664,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -621,24 +689,27 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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'] = htmlentities($res['data']); + /* * Insert the data into the database */ @@ -646,24 +717,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -671,24 +742,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } private function _monitorClamAvLog() { - global $app; - + global $app; + /* * First we get the Monitoring-data from the tools */ $res = $this->_tools->monitorClamAvLog(); - + /* * Insert the data into the database */ @@ -696,24 +767,24 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $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 */ @@ -721,33 +792,47 @@ 'VALUES (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . - time() . ', ' . + '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($type, 4); + $this->_delOldRecords($res['type'], $res['server_id']); } - /* - Deletes Records older than n. + /** + * 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, $min, $hour=0, $days=0) { + private function _delOldRecords($type, $serverId) { global $app; - $now = time(); - $old = $now - ($min * 60) - ($hour * 60 * 60) - ($days * 24 * 60 * 60); + // $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) . "' " . + ' type =' . "'" . $app->dbmaster->quote($type) . "' " . 'AND ' . - 'created < ' . $old; + ' created < ' . $old . ' ' . + 'AND ' . + ' server_id = ' . $serverId; $app->dbmaster->query($sql); } } -?> +?> \ No newline at end of file -- Gitblit v1.9.1