vogelor
2010-04-30 c9d97bfb2d2349194188d66e92e4adbafaba8b14
The monitor now supports OpenVZ-Hosts and OpenVZ-VE's

8 files modified
1 files added
1836 ■■■■■ changed files
interface/web/monitor/lib/lang/de.lng 12 ●●●● patch | view | raw | blame | history
interface/web/monitor/lib/lang/en.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/monitor/lib/module.conf.php 3 ●●●●● patch | view | raw | blame | history
interface/web/monitor/show_data.php 7 ●●●●● patch | view | raw | blame | history
interface/web/monitor/show_sys_state.php 855 ●●●●● patch | view | raw | blame | history
interface/web/monitor/tools.inc.php 532 ●●●● patch | view | raw | blame | history
interface/web/themes/default/css/screen/content_ispc.css 65 ●●●●● patch | view | raw | blame | history
server/lib/classes/openvz_tools.inc.php 149 ●●●●● patch | view | raw | blame | history
server/mods-available/monitor_core_module.inc.php 206 ●●●● patch | view | raw | blame | history
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.';
?>
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';
?>
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,
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();
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;
    }
}
?>
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;
}
?>
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;
    }
server/lib/classes/openvz_tools.inc.php
New file
@@ -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;
    }
}
?>
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);
    }