From c9d97bfb2d2349194188d66e92e4adbafaba8b14 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Fri, 30 Apr 2010 20:19:47 -0400
Subject: [PATCH] The monitor now supports OpenVZ-Hosts and OpenVZ-VE's

---
 interface/web/monitor/tools.inc.php                      |  532 +++++++++--------
 interface/web/monitor/lib/lang/en.lng                    |    7 
 interface/web/monitor/show_sys_state.php                 |  855 +++++++++++++++------------
 interface/web/monitor/lib/lang/de.lng                    |   12 
 interface/web/themes/default/css/screen/content_ispc.css |   65 +
 server/mods-available/monitor_core_module.inc.php        |  206 ++++-
 interface/web/monitor/lib/module.conf.php                |    3 
 interface/web/monitor/show_data.php                      |    7 
 server/lib/classes/openvz_tools.inc.php                  |  149 ++++
 9 files changed, 1,140 insertions(+), 696 deletions(-)

diff --git a/interface/web/monitor/lib/lang/de.lng b/interface/web/monitor/lib/lang/de.lng
index b600d28..7a97fb2 100644
--- a/interface/web/monitor/lib/lang/de.lng
+++ b/interface/web/monitor/lib/lang/de.lng
@@ -40,6 +40,7 @@
 $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_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_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_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 a28cf09..18aa177 100644
--- a/interface/web/monitor/lib/lang/en.lng
+++ b/interface/web/monitor/lib/lang/en.lng
@@ -115,6 +115,11 @@
 $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_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 7d75816..352cb12 100644
--- a/interface/web/monitor/lib/module.conf.php
+++ b/interface/web/monitor/lib/module.conf.php
@@ -104,6 +104,9 @@
                   '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 5e7281d..b43d9c8 100644
--- a/interface/web/monitor/show_data.php
+++ b/interface/web/monitor/show_data.php
@@ -82,6 +82,13 @@
         $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 405492c..e089304 100644
--- a/interface/web/monitor/show_sys_state.php
+++ b/interface/web/monitor/show_sys_state.php
@@ -35,15 +35,15 @@
 $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 @@
 
 /*
  * 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 @@
 		$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;
+/*
+ * Creates HTML representing the state of the system (of all servers)
+*/
+function _getSysState() {
+	global $app;
 
-    /*
-     * Get all Servers and calculate the state of them
-     */
-    $html = '';
+	/** The data of all Servers as (sorted by name) array */
+	$serverData = array();
 
-    $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);
-    }
+	/*
+     * 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;
+function _getServerState($serverId, $serverName) {
+	global $app;
 
-    /*  The State of the server */
-    $serverState = 'ok';
+	/*  The State of the server */
+	$serverState = 'ok';
 
-    /** The messages */
-    $messages = array();
+	/** The messages */
+	$messages = array();
 
-    /** The Result of the function */
-    $res = '';
+	/** 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 */
+	/*
+     * 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']);
+		}
 	}
-	$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...
-         */
+	/*
+	 * 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
+	*/
 
-        /*
-        * 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>';
+	/*
+	 * 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>';
 
-    if ($showAll){
-        /*
-         * Show some state-info
-         */
-        //$res .= showServerLoad();
-        //$res .= '&nbsp;'. showDiskUsage();
-        //$res .= '&nbsp;'.showServices();
-    }
+	/*
+	 * 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'] . ')';
+	}
 
+	$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 />';
 
-    return $res;
+	/*
+	 * 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;
+	*/
+	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>";
+			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 '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':
-                /*
+				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;
-        }
-    }
+			*/
+				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':
-                /*
+	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;
-        }
-    }
+			*/
+				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 == '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 == '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_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_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 */
-    }
+	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 8bee86c..f407c60 100644
--- a/interface/web/monitor/tools.inc.php
+++ b/interface/web/monitor/tools.inc.php
@@ -26,21 +26,21 @@
 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 @@
             <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 @@
             </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 @@
             <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>';
-    }
+		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;
+	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>';
-    }
+			}
+		}
+		$html .= '</table>';
+		$html .= '</div></div>';
+	} else {
+		$html = '<p>'.$app->lng("no_data_cpuinfo_txt").'</p>';
+	}
 
-    return $html;
+	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>';
-    }
+		*/
+		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;
+	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>';
+		*/
+		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>';
-    }
+	} else {
+		$html = '<p>'.$app->lng("no_data_raid_txt").'</p>';
+	}
 
-    return $html;
+	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>';
+		*/
+		$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>';
-    }
+	} else {
+		$html = '<p>'.$app->lng("no_data_rkhunter_txt").'</p>';
+	}
 
-    return $html;
+	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>';
+		*/
+		$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>';
-    }
+	} else {
+		$html = '<p>There is no data available at the moment.</p>';
+	}
 
-    return $html;
+	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 aca368d..a6fdd9a 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 0000000..403613c
--- /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 7f15626..f0e7771 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -51,26 +51,7 @@
 		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 @@
      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 @@
 		$this->monitorMemUsage();
 		$this->monitorCpu();
 		$this->monitorServices();
+		$this->monitorOpenVzHost();
+		$this->monitorOpenVzUserBeancounter();
 		$this->monitorMailLog();
 		$this->monitorMailWarnLog();
 		$this->monitorMailErrLog();
@@ -296,7 +271,7 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 				$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		$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 @@
 		*/
 		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 @@
 		$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 @@
 		$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 @@
 		$app->dbmaster->query($sql);
 
 		/* The new data is written, now we can delete the old one */
-		$this->_delOldRecords($type, 10);
+		$this->_delOldRecords($type, 4);
 	}
 
 

--
Gitblit v1.9.1