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