From c9d97bfb2d2349194188d66e92e4adbafaba8b14 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Fri, 30 Apr 2010 20:19:47 -0400
Subject: [PATCH] The monitor now supports OpenVZ-Hosts and OpenVZ-VE's
---
server/mods-available/monitor_core_module.inc.php | 206 +++++++++++++++++++++++++++++++++++++--------------
1 files changed, 149 insertions(+), 57 deletions(-)
diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php
index 7f15626..f0e7771 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -51,26 +51,7 @@
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
+ * Do the monitor every n minutes and write the result to the db
*/
$min = date('i');
if (($min % $this->interval) == 0) {
@@ -83,15 +64,7 @@
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
+ // not needed
} // end function
//** Get distribution identifier
@@ -228,6 +201,8 @@
$this->monitorMemUsage();
$this->monitorCpu();
$this->monitorServices();
+ $this->monitorOpenVzHost();
+ $this->monitorOpenVzUserBeancounter();
$this->monitorMailLog();
$this->monitorMailWarnLog();
$this->monitorMailErrLog();
@@ -296,7 +271,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorOsVer() {
@@ -334,10 +309,10 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
-
+
function monitorDiskUsage() {
global $app;
global $conf;
@@ -403,7 +378,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
@@ -453,7 +428,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
@@ -500,7 +475,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
@@ -616,7 +591,116 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
+ }
+
+
+ function monitorOpenVzHost() {
+ global $app;
+ global $conf;
+
+ /* the id of the server as int */
+ $server_id = intval($conf["server_id"]);
+
+ /** The type of the data */
+ $type = 'openvz_veinfo';
+
+ /*
+ Fetch the data into a array
+ */
+ $app->load(openvz_tools);
+ $openVzTools = new openvz_tools();
+ $data = $openVzTools->getOpenVzVeInfo();
+
+ /* the VE-Info has no state. It is, what it is */
+ $state = 'no_state';
+
+ /*
+ Insert the data into the database
+ */
+ $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
+ "VALUES (".
+ $server_id . ", " .
+ "'" . $app->dbmaster->quote($type) . "', " .
+ time() . ", " .
+ "'" . $app->dbmaster->quote(serialize($data)) . "', " .
+ "'" . $state . "'" .
+ ")";
+ $app->dbmaster->query($sql);
+
+ /* The new data is written, now we can delete the old one */
+ $this->_delOldRecords($type, 4);
+ }
+
+ function monitorOpenVzUserBeancounter() {
+ global $app;
+ global $conf;
+
+ /* the id of the server as int */
+ $server_id = intval($conf["server_id"]);
+
+ /** The type of the data */
+ $type = 'openvz_beancounter';
+
+ /*
+ Fetch the data into a array
+ */
+ $app->load(openvz_tools);
+ $openVzTools = new openvz_tools();
+ $data = $openVzTools->getOpenVzVeBeanCounter();
+
+ /* calculate the state of the beancounter */
+ if ($data == '') {
+ $state = 'no_state';
+ }
+ else {
+ $state = 'ok';
+
+ /* transfer this output-string into a array */
+ $test = explode("\n", $data);
+
+ /* the first list of the output is not needed */
+ array_shift($test);
+
+ /* now process all items of the rest */
+ foreach ($test as $item) {
+ /*
+ * eliminate all doubled spaces and spaces at the beginning and end
+ */
+ while (strpos($item, ' ') !== false) {
+ $item = str_replace(' ', ' ', $item);
+ }
+ $item = trim($item);
+
+ /*
+ * The failcounter is the LAST
+ */
+ if ($item != '') {
+ $tmp = explode(' ', $item);
+ $failCounter = $tmp[sizeof($tmp)-1];
+ if ($failCounter > 0 ) $state = 'info';
+ if ($failCounter > 50 ) $state = 'warning';
+ if ($failCounter > 200 ) $state = 'critical';
+ if ($failCounter > 10000 ) $state = 'error';
+ }
+ }
+ }
+
+ /*
+ Insert the data into the database
+ */
+ $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
+ "VALUES (".
+ $server_id . ", " .
+ "'" . $app->dbmaster->quote($type) . "', " .
+ time() . ", " .
+ "'" . $app->dbmaster->quote(serialize($data)) . "', " .
+ "'" . $state . "'" .
+ ")";
+ $app->dbmaster->query($sql);
+
+ /* The new data is written, now we can delete the old one */
+ $this->_delOldRecords($type, 4);
}
@@ -657,8 +741,11 @@
$state = 'ok';
}
else {
- /* There is something to update! */
- $state = 'warning';
+ /*
+ * 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';
}
/*
@@ -738,7 +825,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 0, 2);
+ $this->_delOldRecords($type, 4);
}
function monitorMailQueue() {
@@ -784,7 +871,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
@@ -799,7 +886,7 @@
$type = 'raid_state';
/* This monitoring is only available if mdadm is installed */
- $location = system('which mdadm', $retval);
+ system('which mdadm', $retval);
if($retval === 0) {
/*
* Fetch the output
@@ -878,7 +965,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorRkHunter() {
@@ -899,7 +986,7 @@
$type = 'rkhunter';
/* This monitoring is only available if rkhunter is installed */
- $location = system('which rkhunter', $retval);
+ system('which rkhunter', $retval);
if($retval === 0) {
/*
* Fetch the output
@@ -939,7 +1026,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 0, 2);
+ $this->_delOldRecords($type, 4);
}
function monitorFail2ban() {
@@ -953,8 +1040,8 @@
$type = 'log_fail2ban';
/* This monitoring is only available if fail2ban is installed */
- $location = system('which fail2ban-client', $retval); // Debian, Ubuntu, Fedora
- if($retval !== 0) $location = system('which fail2ban', $retval); // CentOS
+ system('which fail2ban-client', $retval); // Debian, Ubuntu, Fedora
+ if($retval !== 0) system('which fail2ban', $retval); // CentOS
if($retval === 0) {
/* Get the data of the log */
$data = $this->_getLogData($type);
@@ -992,7 +1079,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorSysLog() {
@@ -1034,7 +1121,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorMailLog() {
@@ -1070,7 +1157,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorMailWarnLog() {
@@ -1106,7 +1193,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorMailErrLog() {
@@ -1142,7 +1229,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
@@ -1179,7 +1266,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorISPCCronLog() {
@@ -1215,7 +1302,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorFreshClamLog() {
@@ -1265,7 +1352,12 @@
*/
foreach($lastLog as $line) {
if (strpos(strtolower($line), "outdated") !== false) {
- $state = $this->_setState($state, 'warning');
+ /*
+ * 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');
}
}
@@ -1283,7 +1375,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorClamAvLog() {
@@ -1316,7 +1408,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
function monitorIspConfigLog() {
@@ -1349,7 +1441,7 @@
$app->dbmaster->query($sql);
/* The new data is written, now we can delete the old one */
- $this->_delOldRecords($type, 10);
+ $this->_delOldRecords($type, 4);
}
--
Gitblit v1.9.1