From bf47aaebc744f6219a80baed9f770858d85a0602 Mon Sep 17 00:00:00 2001 From: vogelor <vogelor@ispconfig3> Date: Sat, 01 Nov 2008 12:52:00 -0400 Subject: [PATCH] First release of the core-module monitor which monitors each server. --- server/mods-available/monitor_core_module.inc.php | 420 +++++++++++++++++++++++++++++++----------------------------- 1 files changed, 217 insertions(+), 203 deletions(-) diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php index 136463c..ceed3ce 100644 --- a/server/mods-available/monitor_core_module.inc.php +++ b/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); -- Gitblit v1.9.1