tbrehm
2010-06-16 e28564dbde4f922a6a8263e3dea32d56b60b5b5b
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');
               }
            }
         }
      }
      /*