From c9d97bfb2d2349194188d66e92e4adbafaba8b14 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Sat, 1 May 2010 00:19:47 +0000
Subject: [PATCH] The monitor now supports OpenVZ-Hosts and OpenVZ-VE's

---
 interface/web/monitor/lib/lang/de.lng         |  12 +-
 interface/web/monitor/lib/lang/en.lng         |   7 +
 interface/web/monitor/lib/module.conf.php     |   3 +
 interface/web/monitor/show_data.php           |   7 +
 interface/web/monitor/show_sys_state.php      | 899 ++++++++++--------
 interface/web/monitor/tools.inc.php           | 562 +++++------
 .../default/css/screen/content_ispc.css       |  65 +-
 server/lib/classes/openvz_tools.inc.php       | 149 +++
 .../monitor_core_module.inc.php               | 206 ++--
 9 files changed, 1177 insertions(+), 733 deletions(-)
 create mode 100644 server/lib/classes/openvz_tools.inc.php

diff --git a/interface/web/monitor/lib/lang/de.lng b/interface/web/monitor/lib/lang/de.lng
index b600d28062..7a97fb21f6 100644
--- a/interface/web/monitor/lib/lang/de.lng
+++ b/interface/web/monitor/lib/lang/de.lng
@@ -40,6 +40,7 @@ $wb['Show Clamav-Log'] = 'Clamav-Protokoll anzeigen';
 $wb['Show ISPConfig-Log'] = 'ISPConfig-Protokoll anzeigen';
 $wb['Show RKHunter-Log'] = 'RKHunter-Protokoll anzeigen';
 $wb['Show Jobqueue'] = 'Jobwarteschlange anzeigen';
+$wb['Show OpenVz VE BeanCounter'] = 'OpenVz VE Beancounter anzeigen';
 $wb['Show ISPC Cron-Log'] = 'ISPC Cron-Protokoll anzeigen';
 $wb['no_data_updates_txt'] = 'Derzeit stehen keine Daten über Updates zur Verfügung. Bitte später erneut überprüfen.';
 $wb['no_data_raid_txt'] = 'Derzeit stehen keine Daten über RAID zur Verfügung. Bitte später erneut überprüfen.';
@@ -66,10 +67,10 @@ $wb['monitor_nomdadm_txt'] = 'mdadm ist auf ihrem Server nicht installiert oder
 $wb['monitor_norkhunter_txt'] = 'RKHunter ist nicht installiert, deshalb gibt es keine Protokolldatei';
 $wb['monitor_serverstate_server_txt'] = 'Server';
 $wb['monitor_serverstate_state_txt'] = 'Status';
-$wb['monitor_serverstate_unknown_txt'] = 'unbekannt';
+$wb['monitor_serverstate_unknown_txt'] = 'Unbekannt';
 $wb['monitor_serverstate_info_txt'] = 'Info';
 $wb['monitor_serverstate_warning_txt'] = 'Warnung';
-$wb['monitor_serverstate_critical_txt'] = 'kritisch';
+$wb['monitor_serverstate_critical_txt'] = 'Kritisch';
 $wb['monitor_serverstate_error_txt'] = 'Fehler';
 $wb['monitor_serverstate_moreinfo_txt'] = 'Mehr Informationen...';
 $wb['monitor_serverstate_more_txt'] = 'mehr...';
@@ -115,6 +116,11 @@ $wb['monitor_serverstate_syslogunknown_txt'] = 'System-Protokoll: ???';
 $wb['monitor_serverstate_updatesok_txt'] = 'Ihr System ist aktuell';
 $wb['monitor_serverstate_updatesneeded_txt'] = 'Eine oder mehrere Komponenten benötigen ein Update';
 $wb['monitor_serverstate_updatesunknown_txt'] = 'System-Update: ???';
+$wb['monitor_serverstate_beancounterok_txt'] = 'Die Datei Beancounter beinhaltet keine Fehler';
+$wb['monitor_serverstate_beancounterinfo_txt'] = 'Die Datei Beancounter beinhaltet wenige Fehler';
+$wb['monitor_serverstate_beancounterwarning_txt'] = 'Die Datei Beancounter beinhaltet einige Fehler';
+$wb['monitor_serverstate_beancountercritical_txt'] = 'Die Datei Beancounter beinhaltet viele Fehler';
+$wb['monitor_serverstate_beancountererror_txt'] = 'Die Datei Beancounter beinhaltet zu viele Fehler';
 $wb['monitor_services_online_txt'] = 'Online';
 $wb['monitor_services_offline_txt'] = 'Offline';
 $wb['monitor_services_web_txt'] = 'Web-Server:';
@@ -135,4 +141,6 @@ $wb['monitor_title_raidstate_txt'] = 'RAID-Status';
 $wb['monitor_title_rkhunterlog_txt'] = 'RKHunter-Protokoll';
 $wb['monitor_updates_nosupport_txt'] = 'Ihre Distribution wird für die Überwachung nicht unterstützt';
 $wb['monitor_title_fail2ban_txt'] = 'Fail2Ban Log';
+$wb['monitor_title_beancounter_txt'] = 'OpenVz VE BeanCounter';
+$wb['monitor_beancounter_nosupport_txt'] = 'Dieser Server ist kein OpenVz-VE und besitzt deshalb auch keine Beancounter Informationen.';
 ?>
diff --git a/interface/web/monitor/lib/lang/en.lng b/interface/web/monitor/lib/lang/en.lng
index a28cf09245..18aa1772b1 100644
--- a/interface/web/monitor/lib/lang/en.lng
+++ b/interface/web/monitor/lib/lang/en.lng
@@ -115,6 +115,11 @@ $wb['monitor_serverstate_syslogunknown_txt'] = 'System log: ???';
 $wb['monitor_serverstate_updatesok_txt'] = 'Your system is up to date.';
 $wb['monitor_serverstate_updatesneeded_txt'] = 'One or more components needs an update';
 $wb['monitor_serverstate_updatesunknown_txt'] = 'System Update: ???';
+$wb['monitor_serverstate_beancounterok_txt'] = 'The beancounter is ok';
+$wb['monitor_serverstate_beancounterinfo_txt'] = 'There are vew failure in the beancounter';
+$wb['monitor_serverstate_beancounterwarning_txt'] = 'There are some failure in the beancounter';
+$wb['monitor_serverstate_beancountercritical_txt'] = 'There are many failure in the beancounter';
+$wb['monitor_serverstate_beancountererror_txt'] = 'There are too much failure in the beancounter';
 $wb['monitor_services_online_txt'] = 'Online';
 $wb['monitor_services_offline_txt'] = 'Offline';
 $wb['monitor_services_web_txt'] = 'Web-Server:';
@@ -134,5 +139,7 @@ $wb['monitor_title_mailq_txt'] = 'Mail Queue';
 $wb['monitor_title_raidstate_txt'] = 'RAID Status';
 $wb['monitor_title_rkhunterlog_txt'] = 'RKHunter Log';
 $wb['monitor_title_fail2ban_txt'] = 'Fail2Ban Log';
+$wb['monitor_title_beancounter_txt'] = 'OpenVz VE BeanCounter';
 $wb['monitor_updates_nosupport_txt'] = 'Your distribution is not supported for this monitoring';
+$wb['monitor_beancounter_nosupport_txt'] = 'This server is not a OpenVz VE and has no beancounter information';
 ?>
diff --git a/interface/web/monitor/lib/module.conf.php b/interface/web/monitor/lib/module.conf.php
index 7d7581681e..352cb12eb2 100644
--- a/interface/web/monitor/lib/module.conf.php
+++ b/interface/web/monitor/lib/module.conf.php
@@ -104,6 +104,9 @@ $items[] = array( 'title' 	=> "Show Services",
                   'target' 	=> 'content',
                   'link'	=> 'monitor/show_data.php?type=services');
 
+$items[] = array( 'title' 	=> "Show OpenVz VE BeanCounter",
+                  'target' 	=> 'content',
+                  'link'	=> 'monitor/show_data.php?type=openvz_beancounter');
 
 $module["nav"][] = array(	'title'	=> 'Server State',
                             'open' 	=> 1,
diff --git a/interface/web/monitor/show_data.php b/interface/web/monitor/show_data.php
index 5e7281d593..b43d9c8e3a 100644
--- a/interface/web/monitor/show_data.php
+++ b/interface/web/monitor/show_data.php
@@ -82,6 +82,13 @@ switch($dataType) {
         $title = $app->lng("Status of services").' ('. $monTransSrv .' : ' . $_SESSION['monitor']['server_name'] . ')';
         $description = '';
         break;
+    case 'openvz_beancounter':
+        $template = 'templates/show_data.htm';
+        $output .= showOpenVzBeanCounter();
+        $time = getDataTime('openvz_beancounter');
+        $title = $app->lng("monitor_title_beancounter_txt") . ' (' . $monTransSrv . ' : ' . $_SESSION['monitor']['server_name'] . ')';
+        $description = '';
+        break;
     case 'system_update':
         $template = 'templates/show_data.htm';
         $output .= showSystemUpdate();
diff --git a/interface/web/monitor/show_sys_state.php b/interface/web/monitor/show_sys_state.php
index 405492c541..e089304867 100644
--- a/interface/web/monitor/show_sys_state.php
+++ b/interface/web/monitor/show_sys_state.php
@@ -35,15 +35,15 @@ require_once('tools.inc.php');
 $app->auth->check_module_permissions('monitor');
 
 /* Change the Server if needed */
-if (isset($_GET['server'])){
-    $server = explode('|', $_GET['server'], 2);
-    $_SESSION['monitor']['server_id'] = $server[0];
-    $_SESSION['monitor']['server_name'] = $server[1];
+if (isset($_GET['server'])) {
+	$server = explode('|', $_GET['server'], 2);
+	$_SESSION['monitor']['server_id'] = $server[0];
+	$_SESSION['monitor']['server_name'] = $server[1];
 }
 
 /*
  *  Loading the template
- */
+*/
 $app->uses('tpl');
 $app->tpl->newTemplate("form.tpl.htm");
 $app->tpl->setInclude('content_tpl','templates/show_sys_state.htm');
@@ -53,18 +53,17 @@ $monTransRefreshsq = $app->lng("monitor_settings_refreshsq_txt");
 
 /*
  * setting the content
- */
-if ($_GET['state'] == 'server')
-{
-    $output = _getServerState($_SESSION['monitor']['server_id'], $_SESSION['monitor']['server_name'], true);
-    $title = $app->lng("monitor_general_serverstate_txt");
-    $stateType = 'server';
+*/
+if ($_GET['state'] == 'server') {
+	$res = _getServerState($_SESSION['monitor']['server_id'], $_SESSION['monitor']['server_name'], true);
+	$output = $res['html_verbose'];
+	$title = $app->lng("monitor_general_serverstate_txt");
+	$stateType = 'server';
 }
-else
-{
-    $output = _getSysState();
-    $title = $app->lng("monitor_general_systemstate_txt");
-    $stateType = 'system';
+else {
+	$output = _getSysState();
+	$title = $app->lng("monitor_general_systemstate_txt");
+	$stateType = 'system';
 }
 
 $app->tpl->setVar("state_data",$output);
@@ -89,428 +88,524 @@ foreach($refresh_values as $key => $val) {
 		$tmp .= "<option value='$key'>$val</option>";
 	}
 }
-$app->tpl->setVar("refresh",$tmp);
+$app->tpl->setVar("refresh", $tmp);
 
 /*
  * doing the output
- */
+*/
 $app->tpl_defaults();
 $app->tpl->pparse();
 
 
-function _getSysState(){
-    global $app;
-
-    /*
-     * Get all Servers and calculate the state of them
-     */
-    $html = '';
-
-    $servers = $app->db->queryAllRecords("SELECT server_id, server_name FROM server order by server_name");
-    foreach ($servers as $server)
-    {
-        $html .= _getServerState($server['server_id'], $server['server_name'], false);
-    }
+/*
+ * Creates HTML representing the state of the system (of all servers)
+*/
+function _getSysState() {
+	global $app;
+
+	/** The data of all Servers as (sorted by name) array */
+	$serverData = array();
+
+	/*
+     * Get all servers and calculate the state of them
+	*/
+	$servers = $app->db->queryAllRecords("SELECT server_id, server_name FROM server order by server_name");
+	foreach ($servers as $server) {
+		$serverData[] = _getServerState($server['server_id'], $server['server_name'], false);
+	}
 
-    return $html;
+	/*
+	 * Now we have a array with all servers. Some of them are normal servers, some of them
+	 * are OpenVz-Hosts and some are OpenVz-VE's. Next we need to know which of them are
+	 * OpenVz-VE's inside a OpenVz-Host (managed by the Monitor). If there is a OpenVZ-VE
+	 * inside a OpenVz-Host which is NOT in the Server-Farm and so not handled by the monitor,
+	 * we handle it like a "normal" server (in the output of the system-state)
+	*/
+	foreach ($serverData as $data) {
+		/* get all VE's of this server */
+		$veInfo = $data['ve_info'];
+
+		/*
+		 * if we found some, mark them all as VE's
+		*/
+		if (is_array($veInfo)) {
+			foreach ($veInfo as $info) {
+				for ($i = 0; $i < sizeof($serverData); $i++) {
+					if ($serverData[$i]['server_name'] == $info['hostname']) {
+						$serverData[$i]['is_ve'] = true;
+					}
+				}
+			}
+		}
+	}
+	
+	/*
+	 * Now we have to output all "normal" server or all OpenVZ-Hosts (or all OpenVZ-VE's without
+	 * a OpenVZ-Host managed by ISPConfig). The OpenVz-VE's are then included in them...
+	*/
+	$html = '';
+
+	foreach ($serverData as $data) {
+		if (!isset($data['is_ve'])) {
+			/*
+			 * it is NOT a Ve, so do the output of this server and off all VE's included in them
+			 */
+			$html .= $data['html_server'];
+			/* get all VE's of this server */
+			$veInfo = $data['ve_info'];
+			foreach ($veInfo as $info) {
+				for ($i = 0; $i < sizeof($serverData); $i++) {
+					if ($serverData[$i]['server_name'] == $info['hostname']) {
+						$html = str_replace('##VE_INFO##', $serverData[$i]['html_ve'] . '##VE_INFO##', $html);
+					}
+				}
+			}
+			$html = str_replace('##VE_INFO##', '', $html);
+		}
+	}
+	return $html;
 }
 
-/*
- * Calculates the State of ONE Server
+
+/**
+ * returns the state and html of ONE Server
+ * @param integer $serverId the id of the server
+ * @param string $serverName the hostname (like server1.yourdomain.com)
+ * @return array the state and representing html of the server
  */
-function _getServerState($serverId, $serverName, $showAll)
-{
-    global $app;
-
-    /*  The State of the server */
-    $serverState = 'ok';
-
-    /** The messages */
-    $messages = array();
-
-    /** The Result of the function */
-    $res = '';
-
-    /*
-     * get all monitoring-data from the server als process then
-     * (count them and set the server-state)
-     */
-    $records = $app->db->queryAllRecords("SELECT DISTINCT type, data FROM monitor_data WHERE server_id = " . $serverId);
-    $osData = null;
-	foreach($records as $record){
-        /* get the state from the db-data */
+function _getServerState($serverId, $serverName) {
+	global $app;
+
+	/*  The State of the server */
+	$serverState = 'ok';
+
+	/** The messages */
+	$messages = array();
+
+	/** The Result of the function */
+	$res = '';
+
+	/*
+     * Get all monitoring-data from the server and process then
+	*/
+	$records = $app->db->queryAllRecords("SELECT DISTINCT type, data FROM monitor_data WHERE server_id = " . $serverId);
+	$osData = null;
+	$veInfo = null;
+	foreach($records as $record) {
+		/* get the state from the db-data */
 		_processDbState($record['type'], $serverId, &$serverState, &$messages);
 		/* if we have the os-info, get it */
-		if ($record['type'] == 'os_info') $osData = unserialize($record['data']);
-    }
-
-    $res .= '<div class="systemmonitor-state state-'.$serverState.'">';
-    $res .= '<div class="systemmonitor-device device-server">';
-    $res .= '<div class="systemmonitor-content icons32 ico-'.$serverState.'">';
-    $res .= $app->lng("monitor_serverstate_server_txt") . ': ' . $serverName;
-	if ($osData != null){
-		$res .= ' (' . $osData['name'] . ' ' . $osData['version'] . ')';
+		if ($record['type'] == 'os_info') {
+			$osData = unserialize($record['data']);
+		}
+		/* if we have the ve-info, get it */
+		if ($record['type'] == 'openvz_veinfo') {
+			$veInfo = unserialize($record['data']);
+		}
+	}
+
+	/*
+	 * We now have the state of the server. Lets now create the HTML representing this state.
+	 * If we actually don't know, which type of verbose we need, let's create all
+	*/
+
+	/*
+	 * Info of a VE inside a OpenVz-Host
+	*/
+	$html_ve  = '<div class="systemmonitor-state state-' . $serverState . '-ve">';
+	$html_ve .= '<div class="systemmonitor-device device-ve">';
+	$html_ve .= '<div class="systemmonitor-content icons32 ico-' . $serverState . '">';
+	$html_ve .= $serverName . '<br>';
+	if ($osData != null) {
+		$html_ve .= $osData['name'] . ' ' . $osData['version'] . '<br>';
+	}
+	$html_ve .= $app->lng("monitor_serverstate_state_txt") . ': ' . $serverState . '<br>';
+
+	/*
+	 * Info of a "normal" Server or a OpenVz-Host
+	*/
+	$html_server .= '<div class="systemmonitor-state state-' . $serverState . '">';
+	$html_server .= '<div class="systemmonitor-device device-server">';
+	$html_server .= '<div class="systemmonitor-content icons32 ico-' . $serverState . '">';
+	$html_server .= $app->lng("monitor_serverstate_server_txt") . ': ' . $serverName;
+	if ($osData != null) {
+		$html_server .= ' (' . $osData['name'] . ' ' . $osData['version'] . ')';
 	}
-	$res .= '<br />';
-    $res .= $app->lng("monitor_serverstate_state_txt") . ': ' . $serverState . ' (';
-    //        $res .= sizeof($messages[$app->lng("monitor_serverstate_listok_txt")]) . ' ok | ';
-    $res .= sizeof($messages[$app->lng("monitor_serverstate_listunknown_txt")]) . ' ' . $app->lng("monitor_serverstate_unknown_txt") . ', ';
-    $res .= sizeof($messages[$app->lng("monitor_serverstate_listinfo_txt")]) . ' ' . $app->lng("monitor_serverstate_info_txt") . ', ';
-    $res .= sizeof($messages[$app->lng("monitor_serverstate_listwarning_txt")]) . ' ' . $app->lng("monitor_serverstate_warning_txt") . ', ';
-    $res .= sizeof($messages[$app->lng("monitor_serverstate_listcritical_txt")]) . ' ' . $app->lng("monitor_serverstate_critical_txt") . ', ';
-    $res .= sizeof($messages[$app->lng("monitor_serverstate_listerror_txt")]) . ' ' . $app->lng("monitor_serverstate_error_txt") . '';
-    $res .= ')<br />';
-
-    if ($showAll){
-        /*
-         * if we have to show all, then we do it...
-         */
-
-        /*
-        * Show all messages
-        */
-        foreach($messages as $key => $state){
-            /*
-             * There is no need, to show the "ok" - messages
-             */
-//            if ($key != 'ok')
-            {
-                $res .= $key . ':<br />';
-                foreach ($state as $msg)
-                {
-                    $res .= $msg . '<br />';
-                }
-                $res .= '<br />';
-            }
-        }
-    }
-    else
-    {
-        /*
-         * if not, we only show a link to the server...
-         */
-        $res .= "<a href='#' onclick='loadContent(\"monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "\");'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
-    }
-    $res .= '</div>';
-    $res .= '</div>';
-    $res .= '</div>';
-
-    if ($showAll){
-        /*
-         * Show some state-info
-         */
-        //$res .= showServerLoad();
-        //$res .= '&nbsp;'. showDiskUsage();
-        //$res .= '&nbsp;'.showServices();
-    }
-
-
-    return $res;
+
+	$html_server .= '<br />';
+	$html_server .= $app->lng("monitor_serverstate_state_txt") . ': ' . $serverState . ' (';
+	$html_server .= sizeof($messages[$app->lng("monitor_serverstate_listunknown_txt")]) . ' ' . $app->lng("monitor_serverstate_unknown_txt") . ', ';
+	$html_server .= sizeof($messages[$app->lng("monitor_serverstate_listinfo_txt")]) . ' ' . $app->lng("monitor_serverstate_info_txt") . ', ';
+	$html_server .= sizeof($messages[$app->lng("monitor_serverstate_listwarning_txt")]) . ' ' . $app->lng("monitor_serverstate_warning_txt") . ', ';
+	$html_server .= sizeof($messages[$app->lng("monitor_serverstate_listcritical_txt")]) . ' ' . $app->lng("monitor_serverstate_critical_txt") . ', ';
+	$html_server .= sizeof($messages[$app->lng("monitor_serverstate_listerror_txt")]) . ' ' . $app->lng("monitor_serverstate_error_txt") . '';
+	$html_server .= ')<br />';
+
+	/*
+	 * Verbose - Info 
+	*/
+	$html_verbose = $html_server;
+	foreach($messages as $key => $state) { {
+			$html_verbose .= $key . ':<br />';
+			foreach ($state as $msg) {
+				$html_verbose .= $msg . '<br />';
+			}
+			$html_verbose .= '<br />';
+		}
+	}
+
+	/*
+	 * The normal info also needs a link to the verbose info
+	*/
+	$html_ve .= "<a href='#' onclick='loadContent(\"monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "\");'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
+	$html_server .= "<a href='#' onclick='loadContent(\"monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "\");'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
+
+	/*
+	 * Finish all html's
+	*/
+	$html_ve      .= '</div></div></div>';
+	$html_server  .= '<div>##VE_INFO##</div></div></div></div>';
+	$html_verbose .= '</div></div></div>';
+
+	/*
+	 * create and return the result
+	*/
+	$res['state'] = $serverState;
+	$res['server_name'] = $serverName;
+	$res['html_server'] = $html_server;
+	$res['html_ve'] = $html_ve;
+	$res['html_verbose'] = $html_verbose;
+	$res['ve_info'] = $veInfo;
+	return $res;
 }
 
 /*
  * gets the state from the db and process it
- */
-function _processDbState($type, $serverId, $serverState, $messages)
-{
-    global $app;
+*/
+function _processDbState($type, $serverId, $serverState, $messages) {
+	global $app;
 
-   /*
+	/*
     * Always the NEWEST record of each monitoring is responsible for the
     * state
-    */
-    // get the State from the DB
-    $record = $app->db->queryOneRecord("SELECT state FROM monitor_data WHERE type = '" . $type . "' and server_id = " . $serverId . " order by created desc");
-    // change the new state to the highest state
-    $serverState = _setState($serverState, $record['state']);
+	*/
+// get the State from the DB
+	$record = $app->db->queryOneRecord("SELECT state FROM monitor_data WHERE type = '" . $type . "' and server_id = " . $serverId . " order by created desc");
+// change the new state to the highest state
+	$serverState = _setState($serverState, $record['state']);
 
-    /*
+	/*
      * The message depands on the type and the state
-     */
-    if ($type == 'cpu_info'){
-        /* this type has no state */
-    }
-    if ($type == 'disk_usage'){
-        switch ($record['state']) {
-            case 'ok':
-                $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_hdok_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'info':
-                $messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_hdgoingfull_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'warning':
-                $messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_hdnearlyfull_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'critical':
-                $messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_hdveryfull_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'error':
-                $messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_hdfull_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-
-            default:
-                $messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_hdunknown_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-        }
-    }
-    if ($type == 'mem_usage'){
-        /* this type has no state */
-    }
-    if ($type == 'server_load'){
-        switch ($record['state']) {
-            case 'ok':
-                $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_loadok_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'info':
-                $messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_loadheavy_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'warning':
-                $messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_loadhigh_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'critical':
-                $messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_loadhigher_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'error':
-                $messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_loadhighest_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            default:
-                $messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_loadunknown_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-        }
-    }
-    if ($type == 'services'){
-        switch ($record['state']) {
-            case 'ok':
-                $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_servicesonline_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-
-                break;
-            case 'error':
-                $messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_servicesoffline_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            default:
-                $messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_servicesunknown_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-        }
-    }
-    if ($type == 'system_update'){
-        switch ($record['state']) {
-            case 'ok':
-                $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_updatesok_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-
-                break;
-            case 'warning':
-                $messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_updatesneeded_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'no_state':
-                /*
+	*/
+	if ($type == 'cpu_info') {
+		/* this type has no state */
+	}
+	if ($type == 'disk_usage') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_hdok_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'info':
+				$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_hdgoingfull_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'warning':
+				$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_hdnearlyfull_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'critical':
+				$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_hdveryfull_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'error':
+				$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_hdfull_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+
+			default:
+				$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_hdunknown_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+		}
+	}
+	if ($type == 'mem_usage') {
+		/* this type has no state */
+	}
+	if ($type == 'server_load') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_loadok_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'info':
+				$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_loadheavy_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'warning':
+				$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_loadhigh_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'critical':
+				$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_loadhigher_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'error':
+				$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_loadhighest_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			default:
+				$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_loadunknown_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+		}
+	}
+	if ($type == 'services') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_servicesonline_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+
+				break;
+			case 'error':
+				$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_servicesoffline_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			default:
+				$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_servicesunknown_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+		}
+	}
+	if ($type == 'system_update') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_updatesok_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+
+				break;
+			case 'info':
+				$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_updatesneeded_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'no_state':
+			/*
                  *  not debian and not Ubuntu, so the state could not be monitored...
-                 */
-                break;
-            default:
-                $messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_updatesunknown_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-        }
-    }
-
-    if ($type == 'raid_state'){
-        switch ($record['state']) {
-            case 'ok':
-                $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_raidok_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'info':
-                $messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_raidresync_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'critical':
-                $messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_raidfault_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'error':
-                $messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_raiderror_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'no_state':
-                /*
+			*/
+				break;
+			default:
+				$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_updatesunknown_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+		}
+	}
+
+	if ($type == 'raid_state') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_raidok_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'info':
+				$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_raidresync_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'critical':
+				$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_raidfault_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'error':
+				$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_raiderror_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'no_state':
+			/*
                  *  mdadm is not installed or the RAID is not supported...
-                 */
-                break;
-            default:
-                $messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_raidunknown_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-        }
-    }
-
-
-    if ($type == 'mailq'){
-        switch ($record['state']) {
-            case 'ok':
-                $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_mailqok_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'info':
-                $messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_mailqheavy_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'warning':
-                $messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_mailqhigh_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'critical':
-                $messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_mailqhigher_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'error':
-                $messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_mailqhighest_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            default:
-                $messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_mailqunknown_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-        }
-    }
-
-    if ($type == 'sys_log'){
-        switch ($record['state']) {
-            case 'ok':
-                $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_syslogok_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'warning':
-                $messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_syslogwarning_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'error':
-                $messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_syslogerror_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            default:
-                $messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_syslogunknown_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-        }
-    }
-
-    if ($type == 'log_clamav'){
-        /* this type has no state */
-    }
-
-	if ($type == 'log_freshclam'){
-        switch ($record['state']) {
-            case 'ok':
-                $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_fclamok_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            case 'warning':
-                $messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_fclamoutdated_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-            default:
-                $messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_fclamunknown_txt") . ' ' .
-                                    "<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
-                break;
-        }
-    }
-
-    if ($type == 'log_ispconfig'){
-        /* this type has no state */
-    }
-    if ($type == 'log_mail'){
-        /* this type has no state */
-    }
-    if ($type == 'log_mail_err'){
-        /* this type has no state */
-    }
-    if ($type == 'log_mail_warn'){
-        /* this type has no state */
-    }
-    if ($type == 'log_messages'){
-        /* this type has no state */
-    }
-    if ($type == 'rkhunter'){
-        /* this type has no state */
-    }
+			*/
+				break;
+			default:
+				$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_raidunknown_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+		}
+	}
+
+	if ($type == 'openvz_beancounter') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_beancounterok_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'info':
+				$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_beancounterinfo_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'warning':
+				$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_beancounterwarning_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'critical':
+				$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_beancountercritical_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'error':
+				$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_beancountererror_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			default:
+				break;
+		}
+	}
+
+
+	if ($type == 'mailq') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_mailqok_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'info':
+				$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_mailqheavy_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'warning':
+				$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_mailqhigh_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'critical':
+				$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_mailqhigher_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'error':
+				$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_mailqhighest_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			default:
+				$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_mailqunknown_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+		}
+	}
+
+	if ($type == 'sys_log') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_syslogok_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'warning':
+				$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_syslogwarning_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'error':
+				$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_syslogerror_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			default:
+				$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_syslogunknown_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+		}
+	}
+
+	if ($type == 'log_clamav') {
+		/* this type has no state */
+	}
+
+	if ($type == 'log_freshclam') {
+		switch ($record['state']) {
+			case 'ok':
+				$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_fclamok_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			case 'info':
+				$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_fclamoutdated_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+			default:
+				$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_fclamunknown_txt") . ' ' .
+						"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				break;
+		}
+	}
+
+	if ($type == 'log_ispconfig') {
+		/* this type has no state */
+	}
+	if ($type == 'log_mail') {
+		/* this type has no state */
+	}
+	if ($type == 'log_mail_err') {
+		/* this type has no state */
+	}
+	if ($type == 'log_mail_warn') {
+		/* this type has no state */
+	}
+	if ($type == 'log_messages') {
+		/* this type has no state */
+	}
+	if ($type == 'rkhunter') {
+		/* this type has no state */
+	}
 }
 
- /*
+/*
   * Set the state to the given level (or higher, but not lesser).
   * * If the actual state is critical and you call the method with ok,
   *   then the state is critical.
   *
   * * If the actual state is critical and you call the method with error,
   *   then the state is error.
-  */
-function _setState($oldState, $newState)
-{
-   /*
+*/
+function _setState($oldState, $newState) {
+	/*
     * Calculate the weight of the old state
-    */
-    switch ($oldState) {
-        case 'no_state': $oldInt = 0;
-            break;
-        case 'ok': $oldInt = 1;
-            break;
-        case 'unknown': $oldInt = 2;
-            break;
-        case 'info': $oldInt = 3;
-            break;
-        case 'warning': $oldInt = 4;
-            break;
-        case 'critical': $oldInt = 5;
-            break;
-        case 'error': $oldInt = 6;
-            break;
-    }
-        /*
+	*/
+	switch ($oldState) {
+		case 'no_state': $oldInt = 0;
+			break;
+		case 'ok': $oldInt = 1;
+			break;
+		case 'unknown': $oldInt = 2;
+			break;
+		case 'info': $oldInt = 3;
+			break;
+		case 'warning': $oldInt = 4;
+			break;
+		case 'critical': $oldInt = 5;
+			break;
+		case 'error': $oldInt = 6;
+			break;
+	}
+	/*
          * Calculate the weight of the new state
-         */
-    switch ($newState) {
-        case 'no_state': $newInt = 0 ;
-            break;
-        case 'ok': $newInt = 1 ;
-            break;
-        case 'unknown': $newInt = 2 ;
-            break;
-        case 'info': $newInt = 3 ;
-            break;
-        case 'warning': $newInt = 4 ;
-            break;
-        case 'critical': $newInt = 5 ;
-            break;
-        case 'error': $newInt = 6 ;
-            break;
-    }
-
-   /*
+	*/
+	switch ($newState) {
+		case 'no_state': $newInt = 0 ;
+			break;
+		case 'ok': $newInt = 1 ;
+			break;
+		case 'unknown': $newInt = 2 ;
+			break;
+		case 'info': $newInt = 3 ;
+			break;
+		case 'warning': $newInt = 4 ;
+			break;
+		case 'critical': $newInt = 5 ;
+			break;
+		case 'error': $newInt = 6 ;
+			break;
+	}
+
+	/*
     * Set to the higher level
-    */
-    if ($newInt > $oldInt){
-        return $newState;
-    }
-    else
-    {
-        return $oldState;
-    }
+	*/
+	if ($newInt > $oldInt) {
+		return $newState;
+	}
+	else {
+		return $oldState;
+	}
 }
 
 ?>
diff --git a/interface/web/monitor/tools.inc.php b/interface/web/monitor/tools.inc.php
index 8bee86caa0..f407c60a7b 100644
--- a/interface/web/monitor/tools.inc.php
+++ b/interface/web/monitor/tools.inc.php
@@ -26,21 +26,21 @@ 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;
+function showServerLoad() {
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'server_load' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'server_load' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    if(isset($record['data'])) {
-        $data = unserialize($record['data']);
+	if(isset($record['data'])) {
+		$data = unserialize($record['data']);
 
-        /*
+		/*
         Format the data
-        */
+		*/
 		if (strlen($data['up_minutes']) == "1") $data['up_minutes'] = "0".$data['up_minutes'];
-        $html =
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
             <table>
             <tr>
@@ -51,7 +51,7 @@ function showServerLoad(){
             <td>' . $app->lng("Users online").':</td>
             <td>' . $data['user_online'] . '</td>
             </tr>' .
-            '<tr>
+				'<tr>
             <td>' . $app->lng("System load 1 minute") . ':</td>
             <td>' . $data['load_1'] . '</td>
             </tr>
@@ -66,27 +66,27 @@ function showServerLoad(){
             </table>
             </div>
             </div>';
-    } else {
-        $html = '<p>'.$app->lng("no_data_serverload_txt").'</p>';
-    }
+	} else {
+		$html = '<p>'.$app->lng("no_data_serverload_txt").'</p>';
+	}
 
-    return $html;
+	return $html;
 }
 
 function showDiskUsage () {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'disk_usage' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'disk_usage' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    if(isset($record['data'])) {
-        $data = unserialize($record['data']);
+	if(isset($record['data'])) {
+		$data = unserialize($record['data']);
 
-        /*
+		/*
         Format the data
-        */
-        $html =
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+		*/
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
             <table>
             <tr>
@@ -98,359 +98,389 @@ function showDiskUsage () {
             <td>'.$app->lng("monitor_diskusage_usage_txt").'</td>
             <td>'.$app->lng("monitor_diskusage_mounted_txt").'</td>
             </tr>';
-        foreach($data as $line) {
-            $html .= '<tr>';
-            foreach ($line as $item) {
-                $html .= '<td>' . $item . '</td>';
-            }
-            $html .= '</tr>';
-        }
-        $html .= '</table>';
-        $html .= '</div></div>';
-    } else {
-        $html = '<p>'.$app->lng("no_data_diskusage_txt").'</p>';
-    }
-
-
-    return $html;
+		foreach($data as $line) {
+			$html .= '<tr>';
+			foreach ($line as $item) {
+				$html .= '<td>' . $item . '</td>';
+			}
+			$html .= '</tr>';
+		}
+		$html .= '</table>';
+		$html .= '</div></div>';
+	} else {
+		$html = '<p>'.$app->lng("no_data_diskusage_txt").'</p>';
+	}
+
+
+	return $html;
 }
 
 function showMemUsage () {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mem_usage' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mem_usage' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    if(isset($record['data'])) {
-        $data = unserialize($record['data']);
+	if(isset($record['data'])) {
+		$data = unserialize($record['data']);
 
-        /*
+		/*
         Format the data
-        */
-        $html =
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+		*/
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
             <table>';
 
-        foreach($data as $key => $value){
-            if ($key != '') {
-                $html .= '<tr>
+		foreach($data as $key => $value) {
+			if ($key != '') {
+				$html .= '<tr>
                     <td>' . $key . ':</td>
                     <td>' . $value . '</td>
                     </tr>';
-            }
-        }
-        $html .= '</table>';
-        $html .= '</div></div>';
+			}
+		}
+		$html .= '</table>';
+		$html .= '</div></div>';
 
-    } else {
-        $html = '<p>'.$app->lng("no_data_memusage_txt").'</p>';
-    }
+	} else {
+		$html = '<p>'.$app->lng("no_data_memusage_txt").'</p>';
+	}
 
-    return $html;
+	return $html;
 }
 
 function showCpuInfo () {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'cpu_info' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'cpu_info' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    if(isset($record['data'])) {
-        $data = unserialize($record['data']);
+	if(isset($record['data'])) {
+		$data = unserialize($record['data']);
 
-        /*
+		/*
         Format the data
-        */
-        $html = 
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+		*/
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
             <table>';
-        foreach($data as $key => $value){
-            if ($key != '') {
-                $html .= '<tr>
+		foreach($data as $key => $value) {
+			if ($key != '') {
+				$html .= '<tr>
                     <td>' . $key . ':</td>
                     <td>' . $value . '</td>
                     </tr>';
-            }
-        }
-        $html .= '</table>';
-        $html .= '</div></div>';
-    } else {
-        $html = '<p>'.$app->lng("no_data_cpuinfo_txt").'</p>';
-    }
-
-    return $html;
+			}
+		}
+		$html .= '</table>';
+		$html .= '</div></div>';
+	} else {
+		$html = '<p>'.$app->lng("no_data_cpuinfo_txt").'</p>';
+	}
+
+	return $html;
 }
 
 function showServices () {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'services' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'services' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    if(isset($record['data'])) {
-        $data = unserialize($record['data']);
+	if(isset($record['data'])) {
+		$data = unserialize($record['data']);
 
-        /*
+		/*
         Format the data
-        */
-        $html =
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+		*/
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">
             <table>';
 
-        if($data['webserver'] != -1) {
-            if($data['webserver'] == 1) {
-                $status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
-            } else {
-                $status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
-            }
-            $html .= '<tr>
+		if($data['webserver'] != -1) {
+			if($data['webserver'] == 1) {
+				$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
+			} else {
+				$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
+			}
+			$html .= '<tr>
             <td>'.$app->lng("monitor_services_web_txt").'</td>
             <td>'.$status.'</td>
             </tr>';
-        }
+		}
 
 
-        if($data['ftpserver'] != -1) {
-            if($data['ftpserver'] == 1) {
-                $status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
-            } else {
-                $status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
-            }
-            $html .= '<tr>
+		if($data['ftpserver'] != -1) {
+			if($data['ftpserver'] == 1) {
+				$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
+			} else {
+				$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
+			}
+			$html .= '<tr>
             <td>'.$app->lng("monitor_services_ftp_txt").'</td>
             <td>'.$status.'</td>
             </tr>';
-        }
-
-        if($data['smtpserver'] != -1) {
-            if($data['smtpserver'] == 1) {
-                $status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
-            } else {
-                $status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
-            }
-            $html .= '<tr>
+		}
+
+		if($data['smtpserver'] != -1) {
+			if($data['smtpserver'] == 1) {
+				$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
+			} else {
+				$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
+			}
+			$html .= '<tr>
             <td>'.$app->lng("monitor_services_smtp_txt").'</td>
             <td>'.$status.'</td>
             </tr>';
-        }
-
-        if($data['pop3server'] != -1) {
-            if($data['pop3server'] == 1) {
-                $status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
-            } else {
-                $status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
-            }
-            $html .= '<tr>
+		}
+
+		if($data['pop3server'] != -1) {
+			if($data['pop3server'] == 1) {
+				$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
+			} else {
+				$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
+			}
+			$html .= '<tr>
             <td>'.$app->lng("monitor_services_pop_txt").'</td>
             <td>'.$status.'</td>
             </tr>';
-        }
-
-        if($data['imapserver'] != -1) {
-            if($data['imapserver'] == 1) {
-                $status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
-            } else {
-                $status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
-            }
-            $html .= '<tr>
+		}
+
+		if($data['imapserver'] != -1) {
+			if($data['imapserver'] == 1) {
+				$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
+			} else {
+				$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
+			}
+			$html .= '<tr>
             <td>'.$app->lng("monitor_services_imap_txt").'</td>
             <td>'.$status.'</td>
             </tr>';
-        }
-
-        if($data['bindserver'] != -1) {
-            if($data['bindserver'] == 1) {
-                $status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
-            } else {
-                $status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
-            }
-            $html .= '<tr>
+		}
+
+		if($data['bindserver'] != -1) {
+			if($data['bindserver'] == 1) {
+				$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
+			} else {
+				$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
+			}
+			$html .= '<tr>
             <td>'.$app->lng("monitor_services_mydns_txt").'</td>
             <td>'.$status.'</td>
             </tr>';
-        }
-
-        if($data['mysqlserver'] != -1) {
-            if($data['mysqlserver'] == 1) {
-                $status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
-            } else {
-                $status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
-            }
-            $html .= '<tr>
+		}
+
+		if($data['mysqlserver'] != -1) {
+			if($data['mysqlserver'] == 1) {
+				$status = '<span class="online">'.$app->lng("monitor_services_online_txt").'</span>';
+			} else {
+				$status = '<span class="offline">'.$app->lng("monitor_services_offline_txt").'</span>';
+			}
+			$html .= '<tr>
             <td>'.$app->lng("monitor_services_mysql_txt").'</td>
             <td>'.$status.'</td>
             </tr>';
-        }
+		}
 
 
-        $html .= '</table></div></div>';
-    } else {
-        $html = '<p>'.$app->lng("no_data_services_txt").'</p>';
-    }
+		$html .= '</table></div></div>';
+	} else {
+		$html = '<p>'.$app->lng("no_data_services_txt").'</p>';
+	}
 
 
-    return $html;
+	return $html;
 }
 
 function showSystemUpdate() {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $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");
+	/* fetch the Data from the DB */
+	$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'])) {
-        $html =
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+	if(isset($record['data'])) {
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
-        /*
+		/*
          * 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>'.$app->lng("monitor_updates_nosupport_txt").'</p>';
-        }
-        else {
-            $data = unserialize($record['data']);
-            $html .= nl2br($data['output']);
-        }
-        $html .= '</div></div>';
-    } else {
-        $html = '<p>'.$app->lng("no_data_updates_txt").'</p>';
-    }
-
-    return $html;
+		*/
+		if ($record['state'] == 'no_state') {
+			$html .= '<p>'.$app->lng("monitor_updates_nosupport_txt").'</p>';
+		}
+		else {
+			$data = unserialize($record['data']);
+			$html .= nl2br($data['output']);
+		}
+		$html .= '</div></div>';
+	} else {
+		$html = '<p>'.$app->lng("no_data_updates_txt").'</p>';
+	}
+
+	return $html;
+}
+
+
+function showOpenVzBeancounter() {
+	global $app;
+
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'openvz_beancounter' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+
+	if(isset($record['data'])) {
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
+            <div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
+		/*
+         * First, we have to detect, if there is any monitoring-data.
+         * If not (because the server is not a VE) show this.
+		*/
+		$data = unserialize($record['data']);
+		if ((!isset($data)) || ($data == '')) {
+			$html .= '<p>'.$app->lng("monitor_beancounter_nosupport_txt").'</p>';
+		}
+		else {
+			$html .= '<pre>' . nl2br($data) . '</pre>';
+		}
+		$html .= '</div></div>';
+	} else {
+		$html = '<p>'.$app->lng("no_data_updates_txt").'</p>';
+	}
+
+	return $html;
 }
 
 function showRaidState() {
-    global $app;
+	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");
+	/* 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'])) {
-        $html =
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+	if(isset($record['data'])) {
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
 
-        /*
+		/*
          * 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>'.$app->lng("monitor_nomdadm_txt").'</p>';
-        }
-        else {
-            $data = unserialize($record['data']);
-            $html .= nl2br($data['output']);
-        }
-        $html .= '</div></div>';
-
-    } else {
-        $html = '<p>'.$app->lng("no_data_raid_txt").'</p>';
-    }
-
-    return $html;
+		*/
+		if ($record['state'] == 'no_state') {
+			$html .= '<p>'.$app->lng("monitor_nomdadm_txt").'</p>';
+		}
+		else {
+			$data = unserialize($record['data']);
+			$html .= nl2br($data['output']);
+		}
+		$html .= '</div></div>';
+
+	} else {
+		$html = '<p>'.$app->lng("no_data_raid_txt").'</p>';
+	}
+
+	return $html;
 }
 
 function showRKHunter() {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'rkhunter' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'rkhunter' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    if(isset($record['data'])) {
-        $html =
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+	if(isset($record['data'])) {
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
 
-        /*
+		/*
          * First, we have to detect, if there is any monitoring-data.
          * If not (because rkhunter is not installed) show this.
-         */
-        $data = unserialize($record['data']);
-        if ($data['output'] == ''){
-            $html .= '<p>'.$app->lng("monitor_norkhunter_txt").'</p>';
-        }
-        else {
-            $html .= nl2br($data['output']);
-        }
-        $html .= '</div></div>';
-
-    } else {
-        $html = '<p>'.$app->lng("no_data_rkhunter_txt").'</p>';
-    }
-
-    return $html;
+		*/
+		$data = unserialize($record['data']);
+		if ($data['output'] == '') {
+			$html .= '<p>'.$app->lng("monitor_norkhunter_txt").'</p>';
+		}
+		else {
+			$html .= nl2br($data['output']);
+		}
+		$html .= '</div></div>';
+
+	} else {
+		$html = '<p>'.$app->lng("no_data_rkhunter_txt").'</p>';
+	}
+
+	return $html;
 }
 
 function showFail2ban() {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'log_fail2ban' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'log_fail2ban' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    if(isset($record['data'])) {
-        $html =
-           '<div class="systemmonitor-state state-'.$record['state'].'">
+	if(isset($record['data'])) {
+		$html =
+				'<div class="systemmonitor-state state-'.$record['state'].'">
             <div class="systemmonitor-content icons32 ico-'.$record['state'].'">';
 
-        /*
+		/*
          * First, we have to detect, if there is any monitoring-data.
          * If not (because fail2ban is not installed) show this.
-         */
-        $data = unserialize($record['data']);
-        if ($data == ''){
-            $html .= '<p>'.
-			'fail2ban is not installed at this server.<br />' .
-			'See more (for debian) <a href="http://www.howtoforge.com/fail2ban_debian_etch" target="htf">here...</a>'.
-			'</p>';
-        }
-        else {
-            $html .= nl2br($data);
-        }
-        $html .= '</div></div>';
-
-    } else {
-        $html = '<p>There is no data available at the moment.</p>';
-    }
-
-    return $html;
+		*/
+		$data = unserialize($record['data']);
+		if ($data == '') {
+			$html .= '<p>'.
+					'fail2ban is not installed at this server.<br />' .
+					'See more (for debian) <a href="http://www.howtoforge.com/fail2ban_debian_etch" target="htf">here...</a>'.
+					'</p>';
+		}
+		else {
+			$html .= nl2br($data);
+		}
+		$html .= '</div></div>';
+
+	} else {
+		$html = '<p>There is no data available at the moment.</p>';
+	}
+
+	return $html;
 }
 
 function showMailq() {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mailq' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = 'mailq' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    if(isset($record['data'])) {
-        $data = unserialize($record['data']);
-        $html = nl2br($data['output']);
-    } else {
-        $html = '<p>'.$app->lng("no_data_mailq_txt").'</p>';
-    }
+	if(isset($record['data'])) {
+		$data = unserialize($record['data']);
+		$html = nl2br($data['output']);
+	} else {
+		$html = '<p>'.$app->lng("no_data_mailq_txt").'</p>';
+	}
 
-    return $html;
+	return $html;
 }
 
 function getDataTime($type) {
-    global $app;
+	global $app;
 
-    /* fetch the Data from the DB */
-    $record = $app->db->queryOneRecord("SELECT created FROM monitor_data WHERE type = '" . $type . "' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
+	/* fetch the Data from the DB */
+	$record = $app->db->queryOneRecord("SELECT created FROM monitor_data WHERE type = '" . $type . "' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc");
 
-    /* TODO: datetimeformat should be set somewhat other way */
-    $dateTimeFormat = $app->lng("monitor_settings_datetimeformat_txt");
+	/* TODO: datetimeformat should be set somewhat other way */
+	$dateTimeFormat = $app->lng("monitor_settings_datetimeformat_txt");
 
-    if(isset($record['created'])) {
+	if(isset($record['created'])) {
 //        $res = date('Y-m-d H:i', $record['created']);
-        $res = date($dateTimeFormat, $record['created']);
-    } else {
-        $res = '????-??-?? ??:??';
-    }
-    return $res;
+		$res = date($dateTimeFormat, $record['created']);
+	} else {
+		$res = '????-??-?? ??:??';
+	}
+	return $res;
 }
 ?>
diff --git a/interface/web/themes/default/css/screen/content_ispc.css b/interface/web/themes/default/css/screen/content_ispc.css
index aca368db1d..a6fdd9ace8 100644
--- a/interface/web/themes/default/css/screen/content_ispc.css
+++ b/interface/web/themes/default/css/screen/content_ispc.css
@@ -105,9 +105,11 @@
   
 	/* Systemmonitor */
     .systemmonitor-state {
-		margin: 10px 0;
+		margin: 10px 5px;
 		font-family: Consolas, "Lucida Console", "Courier New", monospace;
 		font-size: 0.9em;
+		float: left;
+		width: 100%;
     }
     .systemmonitor-state.state-no_state {
 		border-top: 4px solid #95A19F;
@@ -122,8 +124,8 @@
 		background-color: #adffa2;
     }
     .systemmonitor-state.state-info {
-		border-top: 4px solid #fdff00;
-		background-color: #fdffa2;
+		border-top: 4px solid #183e99;
+		background-color: #d4e2ff;
     }
     .systemmonitor-state.state-warning {
 		border-top: 4px solid #ffa800;
@@ -137,17 +139,68 @@
 		border-top: 4px solid #ff0000;
 		background-color: #ff7f7f;
     }
+    .systemmonitor-state.state-no_state-ve {
+		float: left;
+		width: 213px;
+		border-top: 4px solid #95A19F;
+		background-color: #f8f8ff;
+    }
+    .systemmonitor-state.state-unknown-ve {
+		float: left;
+		width: 213px;
+		border-top: 4px solid #30302e;
+		background-color: #cecfc5;
+    }
+    .systemmonitor-state.state-ok-ve {
+		float: left;
+		width: 213px;
+		border-top: 4px solid #23fb00;
+		background-color: #adffa2;
+    }
+    .systemmonitor-state.state-info-ve {
+		float: left;
+		width: 213px;
+		border-top: 4px solid #183e99;
+		background-color: #d4e2ff;
+    }
+    .systemmonitor-state.state-warning-ve {
+		float: left;
+		width: 213px;
+		border-top: 4px solid #ffa800;
+		background-color: #ffda93;
+    }
+    .systemmonitor-state.state-critical-ve {
+		float: left;
+		width: 213px;
+		border-top: 4px solid #ff0000;
+		background-color: #ffb9b9;
+    }
+    .systemmonitor-state.state-error-ve {
+		float: left;
+		width: 213px;
+		border-top: 4px solid #ff0000;
+		background-color: #ff7f7f;
+    }
 
     .systemmonitor-device {
+        background-position: -6px 4px;
         background-repeat: no-repeat;
-        background-position: 12px 4px;
         min-height: 80px;
     }
     .systemmonitor-device.device-system { background-image: url("../../icons/x64/network.png"); }
-    .systemmonitor-device.device-server { background-image: url("../../icons/x64/server.png"); }
+    .systemmonitor-device.device-server { 
+		background-image: url("../../icons/x64/server.png");
+	}
+    .systemmonitor-device.device-ve {
+		background-image: url("../../icons/x64/server.png");
+		width: 213px;
+		float: left;
+		border: 1px dashed #aaaaaa;
+		border-top: none;
+	}
 
     .systemmonitor-content.icons32 {
-		padding:2px 10px 2px 80px;
+		padding:2px 10px 2px 56px;
         background-repeat: no-repeat;
         background-position: 12px 4px;
     }
diff --git a/server/lib/classes/openvz_tools.inc.php b/server/lib/classes/openvz_tools.inc.php
new file mode 100644
index 0000000000..403613c180
--- /dev/null
+++ b/server/lib/classes/openvz_tools.inc.php
@@ -0,0 +1,149 @@
+<?php
+/*
+Copyright (c) 2010, 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.
+*/
+
+class openvz_tools {
+	/**
+	 * Checks, if the server ist a OpenVZ - Host
+	 */
+	public function isOpenVzHost() {
+		/*
+		 * if there is a "/proc/user_beanconters" we have OpenVz "in use"
+		*/
+		if (file_exists('/proc/user_beancounters')) {
+			/*
+			 * if "vzctl" exists, it is a host
+			*/
+			system('which vzctl', $retval);
+			if($retval === 0) {
+				return true;
+			}
+			else {
+				return false;
+			}
+		}
+		else {
+			return false;
+		}
+	}
+
+	/**
+	 * Checks, if the server ist a OpenVZ - VE
+	 */
+	public function isOpenVzVe() {
+		/*
+		 * if there is a "/proc/user_beanconters" we have OpenVz "in use"
+		*/
+		if (file_exists('/proc/user_beancounters')) {
+			/*
+			 * if "vzctl" does not exists, it is a VE
+			*/
+			system('which vzctl', $retval);
+			if($retval === 0) {
+				return false;
+			}
+			else {
+				return true;
+			}
+		}
+		else {
+			return false;
+		}
+	}
+
+	/**
+	 * Return information about all created VE's at this Host
+	 */
+	public function getOpenVzVeInfo() {
+		/*
+		 * If it is not a OpenVz - Host, we have NO VE's
+		*/
+		if (!$this->isOpenVzHost()) {
+			return array();
+		}
+		/*
+		 * if it is a OpenVz-Host, we first have to get the VE - List and then parse it to a array
+		*/
+		$output = shell_exec('vzlist -a');
+
+		/* transfer this output-string into a array */
+		$outputArray = explode("\n", $output);
+
+		/* the first list of the output is not needed */
+		array_shift($outputArray);
+
+		/* now process all items of the rest */
+		$res = array();
+		foreach ($outputArray as $item) {
+			/*
+			 * eliminate all doubled spaces and spaces at the beginning and end
+			 */
+			while (strpos($item, '  ') !== false) {
+				$item = str_replace('  ', ' ', $item);
+			}
+			$item = trim($item);
+
+			/*
+			 * Now get every token and insert it to the array 
+			 */
+			if ($item != '') {
+				$tmp = explode(' ', $item);
+				$tmpRes['veid']     = $tmp[0];
+				$tmpRes['nproc']    = $tmp[1];
+				$tmpRes['status']   = $tmp[2];
+				$tmpRes['ip_addr']  = $tmp[3];
+				$tmpRes['hostname'] = $tmp[4];
+				$res[] = $tmpRes;
+			}
+		}
+
+		/* ready */
+		return $res;
+	}
+
+	/**
+	 * Return information about the user_beancounters of this VE
+	 */
+	public function getOpenVzVeBeanCounter() {
+		/*
+		 * If it is not a OpenVz - VE, we need no beancounter, because we use the beancounter
+		 * "inside" of each VE
+		*/
+		if (!$this->isOpenVzVe()) {
+			return "";
+		}
+		/*
+		 * if it is a OpenVz-VE, we get the output to a string
+		*/
+		$res = file_get_contents('/proc/user_beancounters');
+
+		/* ready */
+		return $res;
+	}
+}
+?>
\ No newline at end of file
diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php
index 7f15626569..f0e7771885 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -51,26 +51,7 @@ class monitor_core_module {
 		global $app;
 
 		/*
-        Annonce the actions that where provided by this module, so plugins
-        can register on them.
-		*/
-		/* none at them moment */
-		//$app->plugins->announceEvents($this->module_name,$this->actions_available);
-
-		/*
-        As we want to get notified of any changes on several database tables,
-        we register for them.
-
-        The following function registers the function "functionname"
-            to be executed when a record for the table "dbtable" is
-            processed in the sys_datalog. "classname" is the name of the
-            class that contains the function functionname.
-		*/
-		/* none at them moment */
-		//$app->modules->registerTableHook('mail_access','mail_module','process');
-
-		/*
-        Do the monitor every n minutes and write the result in the db
+         * Do the monitor every n minutes and write the result to the db
 		*/
 		$min = date('i');
 		if (($min % $this->interval) == 0) {
@@ -83,15 +64,7 @@ class monitor_core_module {
      The function then raises the events for the plugins.
 	*/
 	function process($tablename, $action, $data) {
-		//		global $app;
-		//
-		//		switch ($tablename) {
-		//			case 'mail_access':
-		//				if($action == 'i') $app->plugins->raiseEvent('mail_access_insert',$data);
-		//				if($action == 'u') $app->plugins->raiseEvent('mail_access_update',$data);
-		//				if($action == 'd') $app->plugins->raiseEvent('mail_access_delete',$data);
-		//				break;
-		//		} // end switch
+		// not needed
 	} // end function
 
 	//** Get distribution identifier
@@ -228,6 +201,8 @@ class monitor_core_module {
 		$this->monitorMemUsage();
 		$this->monitorCpu();
 		$this->monitorServices();
+		$this->monitorOpenVzHost();
+		$this->monitorOpenVzUserBeancounter();
 		$this->monitorMailLog();
 		$this->monitorMailWarnLog();
 		$this->monitorMailErrLog();
@@ -296,7 +271,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorOsVer() {
@@ -334,10 +309,10 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
-	
+
 	function monitorDiskUsage() {
 		global $app;
 		global $conf;
@@ -403,7 +378,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 
@@ -453,7 +428,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 
@@ -500,7 +475,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 
@@ -616,7 +591,116 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
+	}
+
+
+	function monitorOpenVzHost() {
+		global $app;
+		global $conf;
+
+		/* the id of the server as int */
+		$server_id = intval($conf["server_id"]);
+
+		/** The type of the data */
+		$type = 'openvz_veinfo';
+
+		/*
+        Fetch the data into a array
+		*/
+		$app->load(openvz_tools);
+		$openVzTools = new openvz_tools();
+		$data = $openVzTools->getOpenVzVeInfo();
+
+		/* the VE-Info 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 monitorOpenVzUserBeancounter() {
+		global $app;
+		global $conf;
+
+		/* the id of the server as int */
+		$server_id = intval($conf["server_id"]);
+
+		/** The type of the data */
+		$type = 'openvz_beancounter';
+
+		/*
+        Fetch the data into a array
+		*/
+		$app->load(openvz_tools);
+		$openVzTools = new openvz_tools();
+		$data = $openVzTools->getOpenVzVeBeanCounter();
+
+		/* calculate the state of the beancounter */
+		if ($data == '') {
+			$state = 'no_state';
+		}
+		else {
+			$state = 'ok';
+
+			/* transfer this output-string into a array */
+			$test = explode("\n", $data);
+
+			/* the first list of the output is not needed */
+			array_shift($test);
+
+			/* now process all items of the rest */
+			foreach ($test as $item) {
+				/*
+			     * eliminate all doubled spaces and spaces at the beginning and end
+				 */
+				while (strpos($item, '  ') !== false) {
+					$item = str_replace('  ', ' ', $item);
+				}
+				$item = trim($item);
+
+				/*
+			     * The failcounter is the LAST
+				 */
+				if ($item != '') {
+					$tmp = explode(' ', $item);
+					$failCounter = $tmp[sizeof($tmp)-1];
+					if ($failCounter > 0 ) $state = 'info';
+					if ($failCounter > 50 ) $state = 'warning';
+					if ($failCounter > 200 ) $state = 'critical';
+					if ($failCounter > 10000 ) $state = 'error';
+				}
+			}
+		}
+
+		/*
+        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);
 	}
 
 
@@ -657,8 +741,11 @@ class monitor_core_module {
 				$state = 'ok';
 			}
 			else {
-				/* There is something to update! */
-				$state = 'warning';
+				/*
+				 * There is something to update! this is in most cases not critical, so we can
+				 * do a system-update once a month or so...
+				*/
+				$state = 'info';
 			}
 
 			/*
@@ -738,7 +825,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 0, 2);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorMailQueue() {
@@ -784,7 +871,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 
@@ -799,7 +886,7 @@ class monitor_core_module {
 		$type = 'raid_state';
 
 		/* This monitoring is only available if mdadm is installed */
-		$location = system('which mdadm', $retval);
+		system('which mdadm', $retval);
 		if($retval === 0) {
 			/*
              * Fetch the output
@@ -878,7 +965,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorRkHunter() {
@@ -899,7 +986,7 @@ class monitor_core_module {
 		$type = 'rkhunter';
 
 		/* This monitoring is only available if rkhunter is installed */
-		$location = system('which rkhunter', $retval);
+		system('which rkhunter', $retval);
 		if($retval === 0) {
 			/*
              * Fetch the output
@@ -939,7 +1026,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 0, 2);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorFail2ban() {
@@ -953,8 +1040,8 @@ class monitor_core_module {
 		$type = 'log_fail2ban';
 
 		/* This monitoring is only available if fail2ban is installed */
-		$location = system('which fail2ban-client', $retval); // Debian, Ubuntu, Fedora
-		if($retval !== 0) $location = system('which fail2ban', $retval); // CentOS
+		system('which fail2ban-client', $retval); // Debian, Ubuntu, Fedora
+		if($retval !== 0) system('which fail2ban', $retval); // CentOS
 		if($retval === 0) {
 			/*  Get the data of the log */
 			$data = $this->_getLogData($type);
@@ -992,7 +1079,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorSysLog() {
@@ -1034,7 +1121,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorMailLog() {
@@ -1070,7 +1157,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorMailWarnLog() {
@@ -1106,7 +1193,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorMailErrLog() {
@@ -1142,7 +1229,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 
@@ -1179,7 +1266,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorISPCCronLog() {
@@ -1215,7 +1302,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorFreshClamLog() {
@@ -1265,7 +1352,12 @@ class monitor_core_module {
 		*/
 		foreach($lastLog as $line) {
 			if (strpos(strtolower($line), "outdated") !== false) {
-				$state = $this->_setState($state, 'warning');
+				/*
+				 * Outdatet is only info, because if we set this to warning, the server is
+				 * as long in state warning, as there is a new version of ClamAv which takes
+				 * sometimes weeks!
+				*/
+				$state = $this->_setState($state, 'info');
 			}
 		}
 
@@ -1283,7 +1375,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorClamAvLog() {
@@ -1316,7 +1408,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 	function monitorIspConfigLog() {
@@ -1349,7 +1441,7 @@ class monitor_core_module {
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 
-- 
GitLab