From e28564dbde4f922a6a8263e3dea32d56b60b5b5b Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Wed, 16 Jun 2010 11:41:46 -0400
Subject: [PATCH] Implemented: FS#468 - Client name conversion in FTP user too restricted

---
 server/mods-available/monitor_core_module.inc.php |  109 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 95 insertions(+), 14 deletions(-)

diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php
index f0e7771..da509e6 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -197,6 +197,7 @@
 		/* Calls the single Monitoring steps */
 		$this->monitorServer();
 		$this->monitorOSVer();
+		$this->monitorIspCVer();
 		$this->monitorDiskUsage();
 		$this->monitorMemUsage();
 		$this->monitorCpu();
@@ -312,6 +313,42 @@
 		$this->_delOldRecords($type, 4);
 	}
 
+
+	function monitorIspcVer() {
+		global $app;
+		global $conf;
+
+		/* the id of the server as int */
+		$server_id = intval($conf["server_id"]);
+
+		/** The type of the data */
+		$type = 'ispc_info';
+
+		/*
+        Fetch the data into a array
+		*/
+		$data['name'] = ISPC_APP_TITLE;
+		$data['version'] = ISPC_APP_VERSION;
+
+		/* the ISPC-Version 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 monitorDiskUsage() {
 		global $app;
@@ -666,7 +703,7 @@
 			foreach ($test as $item) {
 				/*
 			     * eliminate all doubled spaces and spaces at the beginning and end
-				 */
+				*/
 				while (strpos($item, '  ') !== false) {
 					$item = str_replace('  ', ' ', $item);
 				}
@@ -674,7 +711,7 @@
 
 				/*
 			     * The failcounter is the LAST
-				 */
+				*/
 				if ($item != '') {
 					$tmp = explode(' ', $item);
 					$failCounter = $tmp[sizeof($tmp)-1];
@@ -885,7 +922,15 @@
 		/** The type of the data */
 		$type = 'raid_state';
 
-		/* This monitoring is only available if mdadm is installed */
+		/*
+		 * We support some RAIDS. But if we can't find any of them, we have no data
+		*/
+		$state = 'no_state';
+		$data['output']= '';
+
+		/*
+		 * Check, if we have mdadm installed (software-raid)
+		*/
 		system('which mdadm', $retval);
 		if($retval === 0) {
 			/*
@@ -935,20 +980,56 @@
 					}
 				}
 			}
-
 		}
-		else {
+		/*
+		 * Check, if we have mpt-status installed (LSIsoftware-raid)
+		*/
+		system('which mpt-status', $retval);
+		if($retval === 0) {
 			/*
-             * mdadm is not installed, so there is no data and no state
-             *
-             * no_state, NOT unknown, because "unknown" is shown as state
-             * inside the GUI. no_state is hidden.
-             *
-             * We have to write NO DATA inside the DB, because the GUI
-             * could not know, if there is any dat, or not...
+             * Fetch the output
 			*/
-			$state = 'no_state';
-			$data['output']= '';
+			$data['output'] = shell_exec('mpt-status --autoload -n');
+
+			/*
+             * Then calc the state.
+			*/
+			$state = 'ok';
+			foreach ($data['output'] as $item) {
+				/*
+				 * The output contains information for every RAID and every HDD.
+				 * We only need the state of the RAID
+				*/
+				if (strpos($item, 'raidlevel:') !== false) {
+					/*
+					 * We found a raid, process the state of it
+					*/
+					if (strpos($item, ' ONLINE ') !== false) {
+						$this->_setState($state, 'ok');
+					}
+					else if (strpos($item, ' OPTIMAL ') !== false) {
+						$this->_setState($state, 'ok');
+					}
+					else if (strpos($item, ' INITIAL ') !== false) {
+						$this->_setState($state, 'info');
+					}
+					else if (strpos($item, ' INACTIVE ') !== false) {
+						$this->_setState($state, 'critical');
+					}
+					else if (strpos($item, ' RESYNC ') !== false) {
+						$this->_setState($state, 'info');
+					}
+					else if (strpos($item, ' DEGRADED ') !== false) {
+						$this->_setState($state, 'critical');
+					}
+					else {
+						/* we don't know the state. so we set the state to critical, that the
+						 * admin is warned, that something is wrong
+						*/
+						$this->_setState($state, 'critical');
+					}
+				}
+			}
 		}
 
 		/*

--
Gitblit v1.9.1