From 36d307956bcb0c07ad819826831db21913ed8ad5 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Tue, 25 Nov 2008 14:12:01 -0500
Subject: [PATCH] monitor now monitors RAID changed the menu (hopefully now better to understand) fixed some small errors in update-state
---
interface/web/monitor/tools.inc.php | 65 +++++++++
interface/web/monitor/show_sys_state.php | 44 +++++
server/mods-available/monitor_core_module.inc.php | 234 +++++++++++++++++++++++++++++----
interface/web/monitor/lib/module.conf.php | 30 ++-
interface/web/monitor/show_data.php | 12 +
5 files changed, 338 insertions(+), 47 deletions(-)
diff --git a/interface/web/monitor/lib/module.conf.php b/interface/web/monitor/lib/module.conf.php
index 9320046..b836627 100644
--- a/interface/web/monitor/lib/module.conf.php
+++ b/interface/web/monitor/lib/module.conf.php
@@ -10,7 +10,7 @@
$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 @@
'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 @@
* 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 @@
'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);
@@ -107,6 +104,10 @@
* Clear and set the Navigation-Items
*/
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',
@@ -136,6 +137,9 @@
'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 043a202..888f7de 100644
--- a/interface/web/monitor/show_data.php
+++ b/interface/web/monitor/show_data.php
@@ -84,6 +84,18 @@
$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 83e6068..2f19fc4 100644
--- a/interface/web/monitor/show_sys_state.php
+++ b/interface/web/monitor/show_sys_state.php
@@ -168,9 +168,9 @@
/*
* Show some state-info
*/
- $res .= showServerLoad();
- $res .= ' '. showDiskUsage();
- $res .= ' '.showServices();
+ //$res .= showServerLoad();
+ //$res .= ' '. showDiskUsage();
+ //$res .= ' '.showServices();
}
@@ -289,13 +289,49 @@
$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 6f56f56..5780a25 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 @@
$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 @@
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 aff1c38..342d76a 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -109,6 +109,8 @@
$this->monitorIspConfigLog();
$this->monitorSystemUpdate();
$this->monitorMailQueue();
+ $this->monitorRaid();
+ $this->monitorRkHunter();
}
function monitorServer(){
@@ -452,14 +454,12 @@
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,31 +476,48 @@
/* 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')){
- /*
- * 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';
- }
+ /*
+ * first update the "update-database"
+ */
+ shell_exec('apt-get update');
- /*
- * Fetch the output
- */
- $data['output'] = shell_exec('apt-get -s -q dist-upgrade');
+ /*
+ * 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';
+ }
+
+ /*
+ * Fetch the output
+ */
+ $data['output'] = shell_exec('apt-get -s -q dist-upgrade');
+ }
+ 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']= '';
+ }
/*
* Insert the data into the database
@@ -562,6 +579,87 @@
$app->db->query($sql);
}
+
+ 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()
{
@@ -781,6 +879,86 @@
"'" . $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()
--
Gitblit v1.9.1