From f62c63c8ffe7bc84947ec6bafaf61f1c487871a0 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Sat, 01 May 2010 04:06:54 -0400
Subject: [PATCH] the monitor now also supports LSI Hardware-RAID (DELL-Server)
---
server/mods-available/monitor_core_module.inc.php | 72 +++++++++++++++++++++++++++++-------
1 files changed, 58 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..e46512b 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -666,7 +666,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 +674,7 @@
/*
* The failcounter is the LAST
- */
+ */
if ($item != '') {
$tmp = explode(' ', $item);
$failCounter = $tmp[sizeof($tmp)-1];
@@ -885,7 +885,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 +943,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