Florian Schaal
2016-03-22 5ca959fa688255a8de61f89fe2751eb4d24a6912
server/lib/classes/cron.d/100-monitor_raid.inc.php
@@ -177,7 +177,9 @@
      system('which tw_cli', $retval);
      if($retval === 0) {
         $data['output'] = shell_exec('tw_cli info c0');
         // TYPOWORX FIX | Determine Controler-ID
         $availableControlers = shell_exec('tw_cli info | grep -Eo "c[0-9]+');
         $data['output'] = shell_exec('tw_cli info ' . $availableControlers);
         $state = 'ok';
         if(is_array($data['output'])) {
@@ -227,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;
@@ -238,14 +325,8 @@
       * Insert the data into the database
       */
      $sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
         'VALUES (' .
         $res['server_id'] . ', ' .
         "'" . $app->dbmaster->quote($res['type']) . "', " .
         'UNIX_TIMESTAMP(), ' .
         "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
         "'" . $res['state'] . "'" .
         ')';
      $app->dbmaster->query($sql);
         'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
      $app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
      /* The new data is written, now we can delete the old one */
      $this->_tools->delOldRecords($res['type'], $res['server_id']);