From 4569cae57f127afd093794310ccd290d2d9fdf36 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Wed, 20 Apr 2016 10:58:46 -0400
Subject: [PATCH] Merge branch 'stable-3.1'

---
 server/lib/classes/cron.d/100-monitor_raid.inc.php |   85 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 85 insertions(+), 0 deletions(-)

diff --git a/server/lib/classes/cron.d/100-monitor_raid.inc.php b/server/lib/classes/cron.d/100-monitor_raid.inc.php
index 439ab8c..90b9a61 100644
--- a/server/lib/classes/cron.d/100-monitor_raid.inc.php
+++ b/server/lib/classes/cron.d/100-monitor_raid.inc.php
@@ -229,6 +229,91 @@
 			}
 		}
 
+		/*
+		* HP Proliant
+		*/
+		system('which hpacucli', $retval);
+		if($retval === 0) {
+			$state = 'ok';
+			$data['output'] = shell_exec('/usr/sbin/hpacucli ctrl all show config');
+			$tmp = explode("\n", $data['output']);
+			if(is_array($tmp)) {
+				foreach ($tmp as $item) {
+					if (strpos($item, 'logicaldrive') !== false) {
+						if (strpos($item, 'OK') !== false) {
+							$this->_tools->_setState($state = 'ok');
+						} elseif (strpos($item, 'Recovery Mode') !== false) {
+							$this->_tools->_setState($state = 'critical');
+							break;
+						} elseif (strpos($item, 'Failed') !== false) {
+							$this->_tools->_setState($state = 'error');
+							break;
+						} elseif (strpos($item, 'Recovering') !== false) {
+							$this->_tools->_setState($state = 'info');
+							break;
+						} else {
+							$this->_tools->_setState($state = 'critical');
+						}
+					}
+					if (strpos($item, 'physicaldrive') !== false) {
+						if (strpos($item, 'physicaldrive') !== false) {
+							if (strpos($item, 'OK') !== false) {
+								$this->_tools->_setState($state = 'ok');
+							} elseif (strpos($item, 'Failed') !== false) {
+								$this->_tools->_setState($state = 'critical');
+								break;
+							} elseif (strpos($item, 'Rebuilding') !== false) {
+								$this->_tools->_setState($state = 'info');
+								break;
+							} else {
+								$this->_tools->_setState($state = 'critical');
+								break;
+							}
+						}
+					}
+				}
+			}
+		}
+
+		/*
+		* LSI MegaRaid
+		*/
+		system('which megacli', $retval);
+		system('which megacli64', $retval64);
+		if($retval === 0 || $retval64 === 0) {
+			$binary=@($retval === 0)?'megacli':'megacli64';
+			$state = 'ok';
+			$data['output'] = shell_exec($binary.' -LDInfo -Lall -aAll');
+			if (strpos($data['output'], 'Optimal') !== false) {
+				$this->_tools->_setState($state, 'ok');
+			} else if (strpos($data['output'], 'Degraded') !== false) {
+				$this->_tools->_setState($state, 'critical');
+			} else if (strpos($data['output'], 'Offline') !== false) {
+				$this->_tools->_setState($state, 'critical');
+			} else {
+				$this->_tools->_setState($state, 'critical');
+			}
+		}
+
+		/*
+		* Adaptec-RAID
+		*/
+		system('which arcconf', $retval);
+		if($retval === 0) {
+			$state = 'ok';
+			$data['output'] = shell_exec('arcconf GETCONFIG 1 LD');
+			if(is_array($data['output'])) {
+				foreach ($data['output'] as $item) {
+					if (strpos($item, 'Logical device name                      : RAID') !== false) {
+						if (strpos($item, 'Optimal') !== false) {
+							$this->_tools->_setState($state, 'ok');
+						} else {
+							$this->_tools->_setState($state, 'critical');
+						}
+					}
+				}
+			}
+		}
 
 		$res = array();
 		$res['server_id'] = $server_id;

--
Gitblit v1.9.1