From 36d307956bcb0c07ad819826831db21913ed8ad5 Mon Sep 17 00:00:00 2001 From: vogelor <vogelor@ispconfig3> Date: Tue, 25 Nov 2008 19:12:01 +0000 Subject: [PATCH] monitor now monitors RAID changed the menu (hopefully now better to understand) fixed some small errors in update-state --- interface/web/monitor/lib/module.conf.php | 30 ++- interface/web/monitor/show_data.php | 12 + interface/web/monitor/show_sys_state.php | 44 +++- interface/web/monitor/tools.inc.php | 65 ++++- .../monitor_core_module.inc.php | 232 ++++++++++++++++-- 5 files changed, 337 insertions(+), 46 deletions(-) diff --git a/interface/web/monitor/lib/module.conf.php b/interface/web/monitor/lib/module.conf.php index 93200466b2..b8366278b5 100644 --- a/interface/web/monitor/lib/module.conf.php +++ b/interface/web/monitor/lib/module.conf.php @@ -10,7 +10,7 @@ $module["tab_width"] = ''; $module["startpage"] = "monitor/show_sys_state.php?state=system"; unset($items); -$items[] = array( 'title' => "Show System State", +$items[] = array( 'title' => "Show Overview", 'target' => 'content', 'link' => 'monitor/show_sys_state.php?state=system'); @@ -59,7 +59,7 @@ $items[] = array( 'title' => "Show CPU info", 'target' => 'content', 'link' => 'monitor/show_data.php?type=cpu_info'); -$module["nav"][] = array( 'title' => 'System-Information', +$module["nav"][] = array( 'title' => 'Hardware-Information', 'open' => 1, 'items' => $items); @@ -67,19 +67,19 @@ $module["nav"][] = array( 'title' => 'System-Information', * Clear and set the Navigation-Items */ unset($items); -$items[] = array( 'title' => "Show Server State", +$items[] = array( 'title' => "Show Overview", 'target' => 'content', 'link' => 'monitor/show_sys_state.php?state=server'); -/* - * The next menu is only available at debian or Ubuntu - */ -if(file_exists('/etc/debian_version')){ + $items[] = array( 'title' => "Show Update State", 'target' => 'content', 'link' => 'monitor/show_data.php?type=system_update'); -} -$items[] = array( 'title' => "Show Server Load", +$items[] = array( 'title' => "Show RAID state", + 'target' => 'content', + 'link' => 'monitor/show_data.php?type=raid_state'); + +$items[] = array( 'title' => "Show Server load", 'target' => 'content', 'link' => 'monitor/show_data.php?type=server_load'); @@ -95,11 +95,8 @@ $items[] = array( 'title' => "Show Services", 'target' => 'content', 'link' => 'monitor/show_data.php?type=services'); -$items[] = array( 'title' => "Show Mailq", - 'target' => 'content', - 'link' => 'monitor/show_data.php?type=mailq'); -$module["nav"][] = array( 'title' => 'Monitoring', +$module["nav"][] = array( 'title' => 'Server State', 'open' => 1, 'items' => $items); @@ -108,6 +105,10 @@ $module["nav"][] = array( 'title' => 'Monitoring', */ unset($items); +$items[] = array( 'title' => "Show Mail-Queue", + 'target' => 'content', + 'link' => 'monitor/show_data.php?type=mailq'); + $items[] = array( 'title' => "Show Mail-Log", 'target' => 'content', 'link' => 'monitor/show_log.php?log=log_mail'); @@ -136,6 +137,9 @@ $items[] = array( 'title' => "Show ISPConfig-Log", 'target' => 'content', 'link' => 'monitor/show_log.php?log=log_ispconfig'); +//$items[] = array( 'title' => "Show RKHunter-Log", +// 'target' => 'content', +// 'link' => 'monitor/show_data.php?type=rkhunter'); $module["nav"][] = array( 'title' => 'Logfiles', 'open' => 1, diff --git a/interface/web/monitor/show_data.php b/interface/web/monitor/show_data.php index 043a20231c..888f7de35d 100644 --- a/interface/web/monitor/show_data.php +++ b/interface/web/monitor/show_data.php @@ -84,6 +84,18 @@ switch($dataType) { $title = "Mailq" . ' (Server: ' . $_SESSION['monitor']['server_name'] . ')'; $description = ''; break; + case 'raid_state': + $template = 'templates/show_data.htm'; + $output .= showRaidState(); + $title = "RAID-State" . ' (Server: ' . $_SESSION['monitor']['server_name'] . ')'; + $description = ''; + break; + case 'rkhunter': + $template = 'templates/show_data.htm'; + $output .= showRKHunter(); + $title = "RKHunter-Log" . ' (Server: ' . $_SESSION['monitor']['server_name'] . ')'; + $description = ''; + break; default: $template = ''; break; diff --git a/interface/web/monitor/show_sys_state.php b/interface/web/monitor/show_sys_state.php index 83e6068fba..2f19fc4556 100644 --- a/interface/web/monitor/show_sys_state.php +++ b/interface/web/monitor/show_sys_state.php @@ -168,9 +168,9 @@ function _getServerState($serverId, $serverName, $showAll) /* * Show some state-info */ - $res .= showServerLoad(); - $res .= ' '. showDiskUsage(); - $res .= ' '.showServices(); + //$res .= showServerLoad(); + //$res .= ' '. showDiskUsage(); + //$res .= ' '.showServices(); } @@ -289,13 +289,49 @@ function _processDbState($type, $serverId, &$serverState, &$messages) $messages['warning'][] = 'One or more Components needs a update ' . "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[more...]</a>"; break; + case 'no_state': + /* + * not debian and not Ubuntu, so the state could not be monitored... + */ + break; default: - $messages['unknown'][] = 'System-Updatese:??? ' . + $messages['unknown'][] = 'System-Update:??? ' . "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[more...]</a>"; break; } } + if ($type == 'raid_state'){ + switch ($record['state']) { + case 'ok': + $messages['ok'][] = 'Your RAID is ok ' . + "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[more...]</a>"; + break; + case 'info': + $messages['info'][] = 'Your RAID is in RESYNC mode ' . + "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[more...]</a>"; + break; + case 'critical': + $messages['critical'][] = 'Your RAID has one FAULT disk. Replace as soon as possible! '. + "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[more...]</a>"; + break; + case 'error': + $messages['error'][] = 'Your RAID is not working anymore ' . + "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[more...]</a>"; + break; + case 'no_state': + /* + * mdadm is not installed or the RAID is not supported... + */ + break; + default: + $messages['unknown'][] = 'RAID state: ??? ' . + "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[more...]</a>"; + break; + } + } + + if ($type == 'mailq'){ switch ($record['state']) { case 'ok': diff --git a/interface/web/monitor/tools.inc.php b/interface/web/monitor/tools.inc.php index 6f56f5600b..5780a25b2a 100644 --- a/interface/web/monitor/tools.inc.php +++ b/interface/web/monitor/tools.inc.php @@ -1,4 +1,31 @@ <?php +/* +Copyright (c) 2007-2008, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ function showServerLoad(){ global $app; @@ -250,8 +277,17 @@ function showSystemUpdate() $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'system_update' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc"); if(isset($record['data'])) { - $data = unserialize($record['data']); - $html = nl2br($data['output']); + /* + * First, we have to detect, if there is any monitoring-data. + * If not (because the destribution is not supported) show this. + */ + if ($record['state'] == 'no_state'){ + $html = '<p>' . "Your distribution is not supported for this monitoring" . '</p>'; + } + else { + $data = unserialize($record['data']); + $html = nl2br($data['output']); + } } else { $html = '<p>' . "No Update-Data available" . '</p>'; } @@ -259,6 +295,31 @@ function showSystemUpdate() return $html; } +function showRaidState() +{ + global $app; + + /* fetch the Data from the DB */ + $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'raid_state' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc"); + + if(isset($record['data'])) { + /* + * First, we have to detect, if there is any monitoring-data. + * If not (because the destribution is not supported) show this. + */ + if ($record['state'] == 'no_state'){ + $html = '<p>' . "mdadm ist not installed or your Server has no supported RAID" . '</p>'; + } + else { + $data = unserialize($record['data']); + $html = nl2br($data['output']); + } + } else { + $html = '<p>' . "No RAID-Data available" . '</p>'; + } + + return $html; +} function showMailq() { diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php index aff1c38240..342d76af10 100644 --- a/server/mods-available/monitor_core_module.inc.php +++ b/server/mods-available/monitor_core_module.inc.php @@ -109,6 +109,8 @@ class monitor_core_module { $this->monitorIspConfigLog(); $this->monitorSystemUpdate(); $this->monitorMailQueue(); + $this->monitorRaid(); + $this->monitorRkHunter(); } function monitorServer(){ @@ -452,14 +454,12 @@ class monitor_core_module { function monitorSystemUpdate(){ - /* This monitoring is only available at debian or Ubuntu */ - if(!file_exists('/etc/debian_version')) return; - /* - * This monitoring is expensive, so do it only once a hour! + * This monitoring is expensive, so do it only once a day (at 5:00) */ + $hour = date('G'); $min = date('i'); - if ($min != 0) return; + if (($min != 0) && ($hour != 5)) return; /* * OK - here we go... @@ -476,32 +476,49 @@ class monitor_core_module { /* There is only ONE Update-Data, so delete the old one */ $this->_delOldRecords($type, 0); - /* - * first update the "update-database" - */ - shell_exec('apt-get update'); + /* This monitoring is only available at debian or Ubuntu */ + if(file_exists('/etc/debian_version')){ + + /* + * first update the "update-database" + */ + shell_exec('apt-get update'); + + /* + * Then test the upgrade. + * if there is any output, then there is a needed update + */ + $aptData = shell_exec('apt-get -s -qq dist-upgrade'); + if ($aptData == '') + { + /* There is nothing to update! */ + $state = 'ok'; + } + else + { + /* There is something to update! */ + $state = 'warning'; + } - /* - * Then test the upgrade. - * if there is any output, then there is a needed update - */ - $aptData = shell_exec('apt-get -s -qq dist-upgrade'); - if ($aptData == '') - { - /* There is nothing to update! */ - $state = 'ok'; + /* + * Fetch the output + */ + $data['output'] = shell_exec('apt-get -s -q dist-upgrade'); } - else - { - /* There is something to update! */ - $state = 'warning'; + else { + /* + * It is not debian/Ubuntu, 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... + */ + $state = 'no_state'; + $data['output']= ''; } - /* - * Fetch the output - */ - $data['output'] = shell_exec('apt-get -s -q dist-upgrade'); - /* * Insert the data into the database */ @@ -563,6 +580,87 @@ class monitor_core_module { } + function monitorRaid(){ + global $app; + global $conf; + + /* the id of the server as int */ + $server_id = intval($conf["server_id"]); + + /** The type of the data */ + $type = 'raid_state'; + + /* There is only ONE RAID-Data, so delete the old one */ + $this->_delOldRecords($type, 0); + + /* This monitoring is only available if mdadm is installed */ + $location = shell_exec('which mdadm'); + if($location != ''){ + /* + * Fetch the output + */ + $data['output'] = shell_exec('cat /proc/mdstat'); + + /* + * Then calc the state. + */ + $tmp = explode("\n", $data['output']); + $state = 'ok'; + foreach($tmp as $line) { + if (strpos($line, '[U_]' !== false)) + { + /* One Disk is not working */ + $state = $this->_setState($state, 'critical'); + } + if (strpos($line, '[_U]' !== false)) + { + /* One Disk is not working */ + $state = $this->_setState($state, 'critical'); + } + if (strpos($line, '[__]' !== false)) + { + /* both Disk are not working */ + $state = $this->_setState($state, 'error'); + } + if (strpos($line, '[=' !== false)) + { + /* the raid is in resync */ + $state = $this->_setState($state, 'information'); + } + } + + } + else { + /* + * 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... + */ + $state = 'no_state'; + $data['output']= ''; + } + + /* + * 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 monitorRkHunter(){ + } + function monitorMailLog() { global $app; @@ -781,6 +879,86 @@ class monitor_core_module { "'" . $state . "'" . ")"; $app->db->query($sql); + +/* for later (to detect that the version is outdated) +-------------------------------------- +Received signal: wake up +ClamAV update process started at Sun Nov 23 12:03:49 2008 +main.cvd is up to date (version: 49, sigs: 437972, f-level: 35, builder: sven) +Trying host db.local.clamav.net (85.214.20.182)... +Downloading daily-8675.cdiff [100%] +Downloading daily-8676.cdiff [100%] +daily.cld updated (version: 8676, sigs: 26800, f-level: 35, builder: ccordes) +Database updated (464772 signatures) from db.local.clamav.net (IP: 85.214.20.182) +Clamd successfully notified about the update. +-------------------------------------- +-------------------------------------- +freshclam daemon 0.90.1 (OS: linux-gnu, ARCH: i386, CPU: i486) +ClamAV update process started at Sun Nov 23 12:37:49 2008 +WARNING: Your ClamAV installation is OUTDATED! +WARNING: Local version: 0.90.1 Recommended version: 0.94.1 +DON'T PANIC! Read http://www.clamav.net/support/faq +Downloading main-43.cdiff [0%] +Downloading main-44.cdiff [0%] +Downloading main-45.cdiff [0%] +Downloading main-46.cdiff [0%] +Downloading main-47.cdiff [0%] +Downloading main-48.cdiff [0%] +Downloading main-49.cdiff [0%] +main.cvd updated (version: 49, sigs: 437972, f-level: 35, builder: sven) +WARNING: Your ClamAV installation is OUTDATED! +WARNING: Current functionality level = 14, recommended = 35 +DON'T PANIC! Read http://www.clamav.net/support/faq +ERROR: getfile: daily-2692.cdiff not found on remote server (IP: 62.75.166.141) +ERROR: getpatch: Can't download daily-2692.cdiff from db.local.clamav.net +ERROR: getfile: daily-2692.cdiff not found on remote server (IP: 62.26.160.3) +ERROR: getpatch: Can't download daily-2692.cdiff from db.local.clamav.net +ERROR: getfile: daily-2692.cdiff not found on remote server (IP: 213.174.32.130) +ERROR: getpatch: Can't download daily-2692.cdiff from db.local.clamav.net +ERROR: getfile: daily-2692.cdiff not found on remote server (IP: 212.1.60.18) +ERROR: getpatch: Can't download daily-2692.cdiff from db.local.clamav.net +ERROR: getfile: daily-2692.cdiff not found on remote server (IP: 193.27.50.222) +ERROR: getpatch: Can't download daily-2692.cdiff from db.local.clamav.net +WARNING: Incremental update failed, trying to download daily.cvd +Downloading daily.cvd [0%] +daily.cvd updated (version: 8676, sigs: 26800, f-level: 35, builder: ccordes) +WARNING: Your ClamAV installation is OUTDATED! +WARNING: Current functionality level = 14, recommended = 35 +DON'T PANIC! Read http://www.clamav.net/support/faq +Database updated (464772 signatures) from db.local.clamav.net (IP: 91.198.238.33) +-------------------------------------- +-------------------------------------- +freshclam daemon 0.94.1 (OS: linux-gnu, ARCH: i386, CPU: i486) +ClamAV update process started at Sun Nov 23 13:01:17 2008 +Trying host db.local.clamav.net (193.27.50.222)... +Downloading main.cvd [100%] +main.cvd updated (version: 49, sigs: 437972, f-level: 35, builder: sven) +daily.cvd is up to date (version: 8676, sigs: 26800, f-level: 35, builder: ccordes) +Database updated (464772 signatures) from db.local.clamav.net (IP: 193.27.50.222) +-------------------------------------- +-------------------------------------- +freshclam daemon 0.94.1 (OS: linux-gnu, ARCH: i386, CPU: i486) +ClamAV update process started at Tue Nov 25 19:11:42 2008 +main.cvd is up to date (version: 49, sigs: 437972, f-level: 35, builder: sven) +Trying host db.local.clamav.net (85.214.44.186)... +Downloading daily-8677.cdiff [100%] +Downloading daily-8678.cdiff [100%] +Downloading daily-8679.cdiff [100%] +daily.cld updated (version: 8679, sigs: 26975, f-level: 35, builder: ccordes) +Database updated (464947 signatures) from db.local.clamav.net (IP: 85.214.44.186) +-------------------------------------- +-------------------------------------- +freshclam daemon 0.94.1 (OS: linux-gnu, ARCH: i386, CPU: i486) +ClamAV update process started at Tue Nov 25 19:16:18 2008 +main.cvd is up to date (version: 49, sigs: 437972, f-level: 35, builder: sven) +daily.cld is up to date (version: 8679, sigs: 26975, f-level: 35, builder: ccordes) +-------------------------------------- +Received signal: wake up +ClamAV update process started at Tue Nov 25 20:16:25 2008 +main.cvd is up to date (version: 49, sigs: 437972, f-level: 35, builder: sven) +daily.cld is up to date (version: 8679, sigs: 26975, f-level: 35, builder: ccordes) +-------------------------------------- + */ } function monitorIspConfigLog() -- GitLab