vogelor
2008-11-01 bf47aaebc744f6219a80baed9f770858d85a0602
server/mods-available/monitor_core_module.inc.php
@@ -100,6 +100,9 @@
      /* Calls the single Monitoring steps */
      $this->monitorServer();
      $this->monitorDiskUsage();
      $this->monitorMemUsage();
      $this->monitorCpu();
      $this->monitorServices();
   }
   
   function monitorServer(){
@@ -143,8 +146,8 @@
      */
      $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
         "VALUES (".
         $conf["server_id"] . ", " .
         "'" . $app->db->quote(serialize($type)) . "', " .
         $server_id . ", " .
         "'" . $app->db->quote($type) . "', " .
         time() . ", " .
         "'" . $app->db->quote(serialize($data)) . "', " .
         "'" . $state . "'" . 
@@ -168,14 +171,10 @@
      /*
      Fetch the data into a array
      */
      $fd = popen ("df", "r");
      $buffer = '';
      while (!feof($fd)) {
         $buffer .= fgets($fd, 4096);
      }
      $dfData = shell_exec("df");
      
      // split into array
      $df = split("\n", $buffer);
      $df = explode("\n", $dfData);
      // ignore the first line make a array of the rest
      for($i=1; $i <= sizeof($df); $i++){
         if ($df[$i] != '')
@@ -198,206 +197,221 @@
      */
      $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
         "VALUES (".
         $conf["server_id"] . ", " .
         "'" . $app->db->quote(serialize($type)) . "', " .
         $server_id . ", " .
         "'" . $app->db->quote($type) . "', " .
         time() . ", " .
         "'" . $app->db->quote(serialize($data)) . "', " .
         "'" . $state . "'" . 
         ")";
      $app->db->query($sql);
   }
   //
   //
   //   function show_memusage ()
   //   {
   //      global $app;
   //
   //      $html_out .= '<table id="system_memusage">';
   //
   //      $fd = fopen ("/proc/meminfo", "r");
   //      while (!feof($fd)) {
   //         $buffer .= fgets($fd, 4096);
   //      }
   //      fclose($fd);
   //
   //      $meminfo = split("\n",$buffer);
   //
   //      foreach($meminfo as $mline){
   //         if($x > 2 and trim($mline) != "") {
   //
   //            $mpart = split(":",$mline);
   //
   //            $html_out .= '<tr>
   //                  <td>'.$mpart[0].':</td>
   //                  <td>'.$mpart[1].'</td>
   //                  </tr>';
   //         }
   //
   //         $x++;
   //      }
   //      $html_out .= '</table>';
   //      return $html_out;
   //   }
   //
   //   function show_cpu ()
   //   {
   //      global $app;
   //
   //      $html_out .= '<table id="system_cpu">';
   //
   //      $n = 0;
   //      if(is_readable("/proc/cpuinfo")) {
   //         if($fd = fopen ("/proc/cpuinfo", "r")) {
   //            while (!feof($fd)) {
   //               $buffer .= fgets($fd, 4096);
   //               $n++;
   //               if($n > 100) break;
   //            }
   //            fclose($fd);
   //         }
   //      }
   //
   //      $meminfo = split("\n",$buffer);
   //
   //      if(is_array($meminfo)) {
   //         foreach($meminfo as $mline){
   //            if(trim($mline) != "") {
   //
   //               $mpart = split(":",$mline);
   //
   //               $html_out .= '<tr>
   //                     <td>'.$mpart[0].':</td>
   //                     <td>'.$mpart[1].'</td>
   //                     </tr>';
   //            }
   //         }
   //
   //         $x++;
   //      }
   //      $html_out .= '</table></div>';
   //
   //
   //      return $html_out;
   //   }
   //
   //   function show_services ()
   //   {
   //      global $app;
   //
   //      $html_out .= '<table id="system_services">';
   //
   //      // Checke Webserver
   //      if(_check_tcp('localhost',80)) {
   //         $status = '<span class="online">Online</span>';
   //      } else {
   //         $status = '<span class="offline">Offline</span>';
   //      }
   //      $html_out .= '<tr>
   //            <td>Web-Server:</td>
   //            <td>'.$status.'</td>
   //            </tr>';
   //
   //
   //      // Checke FTP-Server
   //      if(_check_ftp('localhost',21)) {
   //         $status = '<span class="online">Online</span>';
   //      } else {
   //         $status = '<span class="offline">Offline</span>';
   //      }
   //      $html_out .= '<tr>
   //            <td>FTP-Server:</td>
   //            <td>'.$status.'</td>
   //            </tr>';
   //
   //      // Checke SMTP-Server
   //      if(_check_tcp('localhost',25)) {
   //         $status = '<span class="online">Online</span>';
   //      } else {
   //         $status = '<span class="offline">Offline</span>';
   //      }
   //      $html_out .= '<tr>
   //            <td>SMTP-Server:</td>
   //            <td>'.$status.'</td>
   //            </tr>';
   //
   //      // Checke POP3-Server
   //      if(_check_tcp('localhost',110)) {
   //         $status = '<span class="online">Online</span>';
   //      } else {
   //         $status = '<span class="offline">Offline</span>';
   //      }
   //      $html_out .= '<tr>
   //            <td>POP3-Server:</td>
   //            <td>'.$status.'</td>
   //            </tr>';
   //
   //      // Checke BIND-Server
   //      if(_check_tcp('localhost',53)) {
   //         $status = '<span class="online">Online</span>';
   //      } else {
   //         $status = '<span class="offline">Offline</span>';
   //      }
   //      $html_out .= '<tr>
   //            <td>DNS-Server:</td>
   //            <td>'.$status.'</td>
   //            </tr>';
   //
   //      // Checke MYSQL-Server
   //      //if($this->_check_tcp('localhost',3306)) {
   //      $status = '<span class="online">Online</span>';
   //      //} else {
   //      //$status = '<span class="offline">Offline</span>';
   //      //}
   //      $html_out .= '<tr>
   //            <td>mySQL-Server:</td>
   //            <td>'.$status.'</td>
   //            </tr>';
   //
   //
   //      $html_out .= '</table></div>';
   //
   //
   //      return $html_out;
   //   }
   //
   //   function _check_tcp ($host,$port) {
   //
   //      $fp = @fsockopen ($host, $port, &$errno, &$errstr, 2);
   //
   //      if ($fp) {
   //         return true;
   //         fclose($fp);
   //      } else {
   //         return false;
   //         fclose($fp);
   //      }
   //   }
   //
   //   function _check_udp ($host,$port) {
   //
   //      $fp = @fsockopen ('udp://'.$host, $port, &$errno, &$errstr, 2);
   //
   //      if ($fp) {
   //         return true;
   //         fclose($fp);
   //      } else {
   //         return false;
   //         fclose($fp);
   //      }
   //   }
   //
   //   function _check_ftp ($host,$port){
   //
   //      $conn_id = @ftp_connect($host, $port);
   //
   //      if($conn_id){
   //         @ftp_close($conn_id);
   //         return true;
   //      } else {
   //         @ftp_close($conn_id);
   //         return false;
   //      }
   //   }
   function monitorMemUsage()
   {
      global $app;
      global $conf;
      /* the id of the server as int */
      $server_id = intval($conf["server_id"]);
      /** The type of the data */
      $type = 'mem_usage';
      /* Delete Data older than 10 minutes */
      $this->_delOldRecords($type, 10);
      /*
      Fetch the data into a array
      */
      $miData = shell_exec("cat /proc/meminfo");
      $memInfo = explode("\n", $miData);
      foreach($memInfo as $line){
         $part = split(":", $line);
         $key = trim($part[0]);
         $tmp = explode(" ", trim($part[1]));
         $value = 0;
         if ($tmp[1] == 'kB') $value = $tmp[0] * 1024;
         $data[$key] = $value;
      }
      // Todo: the state should be calculated. For example if the load is to heavy, the state is warning...
      $state = 'ok';
      /*
      Insert the data into the database
      */
      $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
         "VALUES (".
         $server_id . ", " .
         "'" . $app->db->quote($type) . "', " .
         time() . ", " .
         "'" . $app->db->quote(serialize($data)) . "', " .
         "'" . $state . "'" .
         ")";
      $app->db->query($sql);
   }
   function monitorCpu()
   {
      global $app;
      global $conf;
      /* the id of the server as int */
      $server_id = intval($conf["server_id"]);
      /** The type of the data */
      $type = 'cpu_info';
      /* There is only ONE CPU-Data, so delete the old one */
      $this->_delOldRecords($type, 0);
      /*
      Fetch the data into a array
      */
      $cpuData = shell_exec("cat /proc/cpuinfo");
      $cpuInfo = explode("\n", $cpuData);
      foreach($cpuInfo as $line){
         $part = split(":", $line);
         $key = trim($part[0]);
         $value = trim($part[1]);
         $data[$key] = $value;
      }
      // Todo: the state should be calculated. For example if the load is to heavy, the state is warning...
      $state = 'ok';
      /*
      Insert the data into the database
      */
      $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
         "VALUES (".
         $server_id . ", " .
         "'" . $app->db->quote($type) . "', " .
         time() . ", " .
         "'" . $app->db->quote(serialize($data)) . "', " .
         "'" . $state . "'" .
         ")";
      $app->db->query($sql);
   }
   function monitorServices()
   {
      global $app;
      global $conf;
      /* the id of the server as int */
      $server_id = intval($conf["server_id"]);
      /** The type of the data */
      $type = 'services';
      /* There is only ONE Service-Data, so delete the old one */
      $this->_delOldRecords($type, 0);
      // Checke Webserver
      if($this->_checkTcp('localhost',80)) {
         $data['webserver'] = true;
      } else {
         $data['webserver'] = false;
      }
      // Checke FTP-Server
      if($this->_checkFtp('localhost',21)) {
         $data['ftpserver'] = true;
      } else {
         $data['ftpserver'] = false;
      }
      // Checke SMTP-Server
      if($this->_checkTcp('localhost',25)) {
         $data['smtpserver'] = true;
      } else {
         $data['smtpserver'] = false;
      }
      // Checke POP3-Server
      if($this->_checkTcp('localhost',110)) {
         $data['pop3server'] = true;
      } else {
         $data['pop3server'] = false;
      }
      // Checke BIND-Server
      if($this->_checkTcp('localhost',53)) {
         $data['bindserver'] = true;
      } else {
         $data['bindserver'] = false;
      }
      // Checke MYSQL-Server
      if($this->_checkTcp('localhost',3306)) {
         $data['mysqlserver'] = true;
      } else {
         $data['mysqlserver'] = false;
      }
      // Todo: the state should be calculated. For example if the load is to heavy, the state is warning...
      $state = 'ok';
      /*
      Insert the data into the database
      */
      $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
         "VALUES (".
         $server_id . ", " .
         "'" . $app->db->quote($type) . "', " .
         time() . ", " .
         "'" . $app->db->quote(serialize($data)) . "', " .
         "'" . $state . "'" .
         ")";
      $app->db->query($sql);
   }
   function _checkTcp ($host,$port) {
         $fp = @fsockopen ($host, $port, &$errno, &$errstr, 2);
         if ($fp) {
            return true;
            fclose($fp);
         } else {
            return false;
            fclose($fp);
         }
      }
      function _checkUdp ($host,$port) {
         $fp = @fsockopen ('udp://'.$host, $port, &$errno, &$errstr, 2);
         if ($fp) {
            return true;
            fclose($fp);
         } else {
            return false;
            fclose($fp);
         }
      }
      function _checkFtp ($host,$port){
         $conn_id = @ftp_connect($host, $port);
         if($conn_id){
            @ftp_close($conn_id);
            return true;
         } else {
            @ftp_close($conn_id);
            return false;
         }
      }
   
   /*
    Deletes Records older than n.
@@ -409,7 +423,7 @@
      $old = $now - ($min * 60) - ($hour * 60 * 60) - ($days * 24 * 60 * 60);
      $sql = "DELETE FROM monitor_data " .
         "WHERE " .
         "type =" . "'" . $app->db->quote(serialize($type)) . "' " .
         "type =" . "'" . $app->db->quote($type) . "' " .
         "AND " .   
         "created < " . $old;
      $app->db->query($sql);