First version of the new monitor - module (works for more than one server)
It is now possible to add "navigation-text" without links (actions) to the left navigations-side of the template (needed by the monitor module to add the server-dropdown)
3 files deleted
4 files modified
1 files renamed
3 files added
| | |
| | | `type` varchar(255) NOT NULL, |
| | | `created` int(11) NOT NULL, |
| | | `data` mediumtext NOT NULL, |
| | | `state` enum('unknown','ok','warning','error') NOT NULL default 'unknown', |
| | | `state` enum('unknown','ok','warning','critical', 'error') NOT NULL default 'unknown', |
| | | PRIMARY KEY (`server_id`,`type`,`created`) |
| | | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
| | | |
| | |
| | | <?php |
| | | |
| | | /* |
| | | Config of the Module |
| | | */ |
| | | $module["name"] = "monitor"; |
| | | $module["title"] = "Monitor"; |
| | | $module["template"] = "module.tpl.htm"; |
| | | $module["startpage"] = "monitor/system.php?mod=index"; |
| | | $module["tab_width"] = ''; |
| | | $module["startpage"] = "monitor/system.php?type=overview"; |
| | | |
| | | /* |
| | | We need all the available servers on the left navigation. |
| | | So fetch them from the database and add then to the navigation as dropdown-list |
| | | */ |
| | | $servers = $app->db->queryAllRecords("SELECT server_id, server_name FROM server order by server_name"); |
| | | |
| | | $dropDown = "<select id='server_id' onchange=\"loadContent('monitor/show_data.php?type=overview&server=' + document.getElementById('server_id').value);\">"; |
| | | foreach ($servers as $server) |
| | | { |
| | | $dropDown .= "<option value='" . $server['server_id'] . "|" . $server['server_name'] . "'>" . $server['server_name'] . "</option>"; |
| | | } |
| | | $dropDown .= "</select>"; |
| | | |
| | | /* |
| | | Now add them as dropdown to the navigation |
| | | */ |
| | | $items[] = array( 'title' => $dropDown, |
| | | 'target' => '', // no action! |
| | | 'link' => ''); // no action! |
| | | |
| | | $module["nav"][] = array( 'title' => 'Server to Monitor', |
| | | 'open' => 1, |
| | | 'items' => $items); |
| | | |
| | | /* |
| | | The first Server at the list is the server first selected |
| | | */ |
| | | $_SESSION['monitor']['server_id'] = $servers[0]['server_id']; |
| | | $_SESSION['monitor']['server_name'] = $servers[0]['server_name']; |
| | | |
| | | /* |
| | | Logmonitoring module |
| | | */ |
| | | |
| | | $items[] = array( 'title' => "Load", |
| | | // aufräumen |
| | | unset($items); |
| | | $items[] = array( 'title' => "Server Load", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/system.php?mod=load'); |
| | | 'link' => 'monitor/show_data.php?type=server_load'); |
| | | |
| | | $items[] = array( 'title' => "Harddisk", |
| | | $items[] = array( 'title' => "Disk usage", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/system.php?mod=disk'); |
| | | 'link' => 'monitor/show_data.php?type=disk_usage'); |
| | | |
| | | $items[] = array( 'title' => "Memory usage", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/system.php?mod=memusage'); |
| | | |
| | | $items[] = array( 'title' => "CPU", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/system.php?mod=cpu'); |
| | | 'link' => 'monitor/show_data.php?type=mem_usage'); |
| | | |
| | | $items[] = array( 'title' => "Services", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/system.php?mod=services'); |
| | | 'link' => 'monitor/show_data.php?type=services'); |
| | | |
| | | |
| | | $module["nav"][] = array( 'title' => 'System', |
| | | $module["nav"][] = array( 'title' => 'Monitoring', |
| | | 'open' => 1, |
| | | 'items' => $items); |
| | | |
| | | // aufräumen |
| | | unset($items); |
| | | |
| | | $items[] = array( 'title' => "CPU", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/show_data.php?type=cpu_info'); |
| | | |
| | | $module["nav"][] = array( 'title' => 'System-Information', |
| | | 'open' => 1, |
| | | 'items' => $items); |
| | | |
| | | // aufräumen |
| | | unset($items); |
| | | |
| | | |
| | | /* |
| | | Logmonitoring module |
| | |
| | | |
| | | $items[] = array( 'title' => "Mail log", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/logview.php?log=mail_log'); |
| | | 'link' => 'monitor/show_log.php?log=log_mail'); |
| | | |
| | | $items[] = array( 'title' => "Mail warn", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/logview.php?log=mail_warn'); |
| | | 'link' => 'monitor/show_log.php?log=log_mail_warn'); |
| | | |
| | | $items[] = array( 'title' => "Mail err", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/logview.php?log=mail_err'); |
| | | 'link' => 'monitor/show_log.php?log=log_mail_err'); |
| | | |
| | | $items[] = array( 'title' => "Messages", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/logview.php?log=messages'); |
| | | 'link' => 'monitor/show_log.php?log=log_messages'); |
| | | |
| | | $items[] = array( 'title' => "Freshclam", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/logview.php?log=freshclam'); |
| | | 'link' => 'monitor/show_log.php?log=log_freshclam'); |
| | | |
| | | $items[] = array( 'title' => "Clamav", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/logview.php?log=clamav'); |
| | | 'link' => 'monitor/show_log.php?log=log_clamav'); |
| | | |
| | | $items[] = array( 'title' => "ISPConfig", |
| | | 'target' => 'content', |
| | | 'link' => 'monitor/logview.php?log=ispconfig'); |
| | | 'link' => 'monitor/show_log.php?log=log_ispconfig'); |
| | | |
| | | |
| | | $module["nav"][] = array( 'title' => 'Logfiles', |
New file |
| | |
| | | <?php |
| | | |
| | | /* |
| | | Copyright (c) 2007-2008, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, |
| | | are permitted provided that the following conditions are met: |
| | | |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright notice, |
| | | this list of conditions and the following disclaimer in the documentation |
| | | and/or other materials provided with the distribution. |
| | | * Neither the name of ISPConfig nor the names of its contributors |
| | | may be used to endorse or promote products derived from this software without |
| | | specific prior written permission. |
| | | |
| | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| | | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| | | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| | | IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
| | | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| | | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| | | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| | | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| | | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| | | */ |
| | | |
| | | require_once('../../lib/config.inc.php'); |
| | | require_once('../../lib/app.inc.php'); |
| | | |
| | | //* Check permissions for module |
| | | $app->auth->check_module_permissions('monitor'); |
| | | |
| | | |
| | | /* Get the dataType to show */ |
| | | $dataType = $_GET["type"]; |
| | | |
| | | /* 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]; |
| | | } |
| | | |
| | | |
| | | $output = ''; |
| | | |
| | | switch($dataType) { |
| | | case 'server_load': |
| | | $template = 'templates/show_data.htm'; |
| | | $output .= showServerLoad(); |
| | | $title = 'Server Load (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | $description = ''; |
| | | break; |
| | | case 'disk_usage': |
| | | $template = 'templates/show_data.htm'; |
| | | $output .= showDiskUsage(); |
| | | $title = 'Disk usage (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | $description = ''; |
| | | break; |
| | | case 'mem_usage': |
| | | $template = 'templates/show_data.htm'; |
| | | $output .= showMemUsage(); |
| | | $title = 'Memory usage (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | $description = ''; |
| | | break; |
| | | case 'cpu_info': |
| | | $template = 'templates/show_data.htm'; |
| | | $output .= showCpuInfo(); |
| | | $title = 'CPU info (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | $description = ''; |
| | | break; |
| | | case 'services': |
| | | $template = 'templates/show_data.htm'; |
| | | $output .= showServices(); |
| | | $title = 'Status of services (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | $description = ''; |
| | | break; |
| | | case 'overview': |
| | | $template = 'templates/show_data.htm'; |
| | | $output .= showServerLoad(); |
| | | $output .= ' '. showDiskUsage(); |
| | | $output .= ' '.showServices(); |
| | | $title = 'System Monitor (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | $description = ''; |
| | | break; |
| | | default: |
| | | $template = ''; |
| | | break; |
| | | } |
| | | |
| | | |
| | | // Loading the template |
| | | $app->uses('tpl'); |
| | | $app->tpl->newTemplate("form.tpl.htm"); |
| | | $app->tpl->setInclude('content_tpl',$template); |
| | | |
| | | $app->tpl->setVar("output",$output); |
| | | $app->tpl->setVar("title",$title); |
| | | $app->tpl->setVar("description",$description); |
| | | |
| | | |
| | | $app->tpl_defaults(); |
| | | $app->tpl->pparse(); |
| | | |
| | | |
| | | |
| | | |
| | | 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"); |
| | | $data = unserialize($record['data']); |
| | | |
| | | /* |
| | | Format the data |
| | | */ |
| | | $html .= |
| | | '<table id="system_load"> |
| | | <tr> |
| | | <td>' . $app->lng("Server online since").':</td> |
| | | <td>' . $data['up_days'] . ' days, ' . $data['up_hours'] . ':' . $data['up_minutes'] . ' hours</center></td> |
| | | </tr> |
| | | <tr> |
| | | <td>' . $app->lng("Users online").':</td> |
| | | <td>' . $data['user_online'] . '</td> |
| | | </tr>' . |
| | | '<tr> |
| | | <td>' . $app->lng("System load 1 minute") . ':</td> |
| | | <td>' . $data['load_1'] . '</td> |
| | | </tr> |
| | | <tr> |
| | | <td>' . $app->lng("System load 5 minutes") . ':</td> |
| | | <td>' . $data['load_5'] . '</td> |
| | | </tr> |
| | | <tr> |
| | | <td>'.$app->lng("System load 15 minutes").':</td> |
| | | <td>' . $data['load_15'] . '</td> |
| | | </tr> |
| | | </table>'; |
| | | return $html; |
| | | } |
| | | |
| | | function showDiskUsage () { |
| | | 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"); |
| | | $data = unserialize($record['data']); |
| | | |
| | | /* |
| | | Format the data |
| | | */ |
| | | $html .= '<table id="system_disk">'; |
| | | foreach($data as $line) { |
| | | $html .= '<tr>'; |
| | | foreach ($line as $item) { |
| | | $html .= '<td>' . $item . '</td>'; |
| | | } |
| | | $html .= '</tr>'; |
| | | } |
| | | $html .= '</table>'; |
| | | |
| | | return $html; |
| | | } |
| | | |
| | | |
| | | function showMemUsage () |
| | | { |
| | | 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"); |
| | | $data = unserialize($record['data']); |
| | | |
| | | /* |
| | | Format the data |
| | | */ |
| | | $html .= '<table id="system_memusage">'; |
| | | |
| | | foreach($data as $key => $value){ |
| | | if ($key != '') { |
| | | $html .= '<tr> |
| | | <td>' . $key . ':</td> |
| | | <td>' . $value . '</td> |
| | | </tr>'; |
| | | } |
| | | } |
| | | $html .= '</table>'; |
| | | return $html; |
| | | } |
| | | |
| | | function showCpuInfo () |
| | | { |
| | | 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"); |
| | | $data = unserialize($record['data']); |
| | | |
| | | /* |
| | | Format the data |
| | | */ |
| | | $html .= '<table id="system_cpu">'; |
| | | foreach($data as $key => $value){ |
| | | if ($key != '') { |
| | | $html .= '<tr> |
| | | <td>' . $key . ':</td> |
| | | <td>' . $value . '</td> |
| | | </tr>'; |
| | | } |
| | | } |
| | | $html .= '</table>'; |
| | | |
| | | return $html; |
| | | } |
| | | |
| | | function showServices () |
| | | { |
| | | 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"); |
| | | $data = unserialize($record['data']); |
| | | |
| | | /* |
| | | Format the data |
| | | */ |
| | | $html .= '<table id="system_services">'; |
| | | |
| | | if($data['webserver'] == true) { |
| | | $status = '<span class="online">Online</span>'; |
| | | } else { |
| | | $status = '<span class="offline">Offline</span>'; |
| | | } |
| | | $html .= '<tr> |
| | | <td>Web-Server:</td> |
| | | <td>'.$status.'</td> |
| | | </tr>'; |
| | | |
| | | |
| | | if($data['ftpserver'] == true) { |
| | | $status = '<span class="online">Online</span>'; |
| | | } else { |
| | | $status = '<span class="offline">Offline</span>'; |
| | | } |
| | | $html .= '<tr> |
| | | <td>FTP-Server:</td> |
| | | <td>'.$status.'</td> |
| | | </tr>'; |
| | | |
| | | if($data['smtpserver'] == true) { |
| | | $status = '<span class="online">Online</span>'; |
| | | } else { |
| | | $status = '<span class="offline">Offline</span>'; |
| | | } |
| | | $html .= '<tr> |
| | | <td>SMTP-Server:</td> |
| | | <td>'.$status.'</td> |
| | | </tr>'; |
| | | |
| | | if($data['pop3server'] == true) { |
| | | $status = '<span class="online">Online</span>'; |
| | | } else { |
| | | $status = '<span class="offline">Offline</span>'; |
| | | } |
| | | $html .= '<tr> |
| | | <td>POP3-Server:</td> |
| | | <td>'.$status.'</td> |
| | | </tr>'; |
| | | |
| | | if($data['bindserver'] == true) { |
| | | $status = '<span class="online">Online</span>'; |
| | | } else { |
| | | $status = '<span class="offline">Offline</span>'; |
| | | } |
| | | $html .= '<tr> |
| | | <td>DNS-Server:</td> |
| | | <td>'.$status.'</td> |
| | | </tr>'; |
| | | |
| | | if($data['mysqlserver'] == true) { |
| | | $status = '<span class="online">Online</span>'; |
| | | } else { |
| | | $status = '<span class="offline">Offline</span>'; |
| | | } |
| | | $html .= '<tr> |
| | | <td>mySQL-Server:</td> |
| | | <td>'.$status.'</td> |
| | | </tr>'; |
| | | |
| | | |
| | | $html .= '</table></div>'; |
| | | |
| | | |
| | | return $html; |
| | | } |
| | | ?> |
New file |
| | |
| | | <?php |
| | | |
| | | /* |
| | | Copyright (c) 2007-2008, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, |
| | | are permitted provided that the following conditions are met: |
| | | |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright notice, |
| | | this list of conditions and the following disclaimer in the documentation |
| | | and/or other materials provided with the distribution. |
| | | * Neither the name of ISPConfig nor the names of its contributors |
| | | may be used to endorse or promote products derived from this software without |
| | | specific prior written permission. |
| | | |
| | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| | | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| | | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| | | IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
| | | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| | | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| | | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| | | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| | | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| | | */ |
| | | |
| | | require_once('../../lib/config.inc.php'); |
| | | require_once('../../lib/app.inc.php'); |
| | | |
| | | //* Check permissions for module |
| | | $app->auth->check_module_permissions('monitor'); |
| | | |
| | | // Loading the template |
| | | $app->uses('tpl'); |
| | | $app->tpl->newTemplate("form.tpl.htm"); |
| | | $app->tpl->setInclude('content_tpl','templates/show_log.htm'); |
| | | |
| | | // Importing the GET values |
| | | $refresh = intval($_GET["refresh"]); |
| | | $logParam = $_GET["log"]; |
| | | |
| | | |
| | | /* |
| | | Setting the db-type and the caption |
| | | */ |
| | | switch($logParam) { |
| | | case 'log_mail': |
| | | $logId = 'log_mail'; |
| | | $title = 'Mail - Log (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | break; |
| | | case 'log_mail_warn': |
| | | $logId = 'log_mail_warn'; |
| | | $title = 'Mail-Warn - Log (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | break; |
| | | case 'log_mail_err': |
| | | $logId = 'log_mail_err'; |
| | | $title = 'Mail-Error - Log (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | break; |
| | | case 'log_messages': |
| | | $logId = 'log_messages'; |
| | | $title = 'Messages (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | break; |
| | | case 'log_freshclam': |
| | | $logId = 'log_freshclam'; |
| | | $title = 'Freshclam - Log (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | break; |
| | | case 'log_clamav': |
| | | $logId = 'log_clamav'; |
| | | $title = 'Clamav - Log (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | break; |
| | | case 'log_ispconfig': |
| | | $logId = 'log_ispconfig'; |
| | | $title = 'ISP Config - Log (Server: ' . $_SESSION['monitor']['server_name'] . ')'; |
| | | break; |
| | | default: |
| | | $logId = '???'; |
| | | $title = '???'; |
| | | break; |
| | | } |
| | | |
| | | |
| | | /* |
| | | Creating the array with the refresh intervals |
| | | Attention: the core-moule ist triggered every 5 minutes, |
| | | so reload every 2 minutes is impossible! |
| | | */ |
| | | $refresh_values = array('0' => '- No Refresh -','5' => '5','10' => '10','15' => '15','30' => '30','60' => '60'); |
| | | $tmp = ''; |
| | | foreach($refresh_values as $key => $val) { |
| | | if($key == $refresh) { |
| | | $tmp .= "<option value='$key' SELECTED>$val</option>"; |
| | | } else { |
| | | $tmp .= "<option value='$key'>$val</option>"; |
| | | } |
| | | } |
| | | $app->tpl->setVar("refresh",$tmp); |
| | | |
| | | |
| | | /* fetch the Data from the DB */ |
| | | $record = $app->db->queryOneRecord("SELECT data, state FROM monitor_data WHERE type = '" . $app->db->quote($logId) . "' and server_id = " . $_SESSION['monitor']['server_id'] . " order by created desc"); |
| | | $data = unserialize($record['data']); |
| | | |
| | | $logData = nl2br($data); |
| | | |
| | | $app->tpl->setVar("log_data", $logData); |
| | | $app->tpl->setVar("title", $title); |
| | | $app->tpl->setVar("log_id",$logId); |
| | | |
| | | |
| | | $app->tpl_defaults(); |
| | | $app->tpl->pparse(); |
| | | ?> |
New file |
| | |
| | | <h2><tmpl_var name="title"></h2>
|
| | |
|
| | | <div class="panel panel_logview">
|
| | |
|
| | | <div class="pnl_toolsarea">
|
| | | <fieldset><legend>Tools</legend>
|
| | | <div class="buttons">
|
| | | <select name="refreshinterval" id="refreshinterval" onChange="loadContentRefresh('monitor/show_log.php?log={tmpl_var name="log_id"}')">{tmpl_var name="refresh"}</select>
|
| | | </div>
|
| | | </fieldset>
|
| | | </div>
|
| | |
|
| | | <div class="pnl_formarea">
|
| | | <fieldset><legend></legend>
|
| | | <div class="codeview"><tmpl_var name="log_data"></div>
|
| | | </fieldset>
|
| | | </div>
|
| | |
|
| | | </div>
|
| | |
| | | <ul id="submenu">
|
| | | <tmpl_loop name="nav_left">
|
| | | <li id="title"><a href="#" onClick="loadContent('<tmpl_var name='startpage'>')"><tmpl_var name="title"></a></li>
|
| | | <li id="title">
|
| | | <tmpl_if name="startpage">
|
| | | <a href="#" onClick="loadContent('<tmpl_var name='startpage'>')">
|
| | | </tmpl_if>
|
| | | <tmpl_var name="title">
|
| | | <tmpl_if name="startpage">
|
| | | </a>
|
| | | </tmpl_if>
|
| | | </li>
|
| | | <tmpl_loop name="items">
|
| | | <li><a href="#" onClick="loadContent('<tmpl_var name='link'>')"><tmpl_var name="title"></a></li>
|
| | | <li>
|
| | | <tmpl_if name="link">
|
| | | <a href="#" onClick="loadContent('<tmpl_var name='link'>')">
|
| | | </tmpl_if>
|
| | | <tmpl_var name="title">
|
| | | <tmpl_if name="link">
|
| | | </a>
|
| | | </tmpl_if>
|
| | | </li>
|
| | | </tmpl_loop>
|
| | | </tmpl_loop>
|
| | | </ul>
|
| | |
| | | $this->monitorMemUsage(); |
| | | $this->monitorCpu(); |
| | | $this->monitorServices(); |
| | | $this->monitorMailLog(); |
| | | $this->monitorMailWarnLog(); |
| | | $this->monitorMailErrLog(); |
| | | $this->monitorMessagesLog(); |
| | | $this->monitorFreshClamLog(); |
| | | $this->monitorClamAvLog(); |
| | | $this->monitorIspConfigLog(); |
| | | } |
| | | |
| | | function monitorServer(){ |
| | |
| | | /* There is only ONE Service-Data, so delete the old one */ |
| | | $this->_delOldRecords($type, 0); |
| | | |
| | | // Checke Webserver |
| | | /* Monitor Webserver */ |
| | | if($this->_checkTcp('localhost',80)) { |
| | | $data['webserver'] = true; |
| | | } else { |
| | | $data['webserver'] = false; |
| | | } |
| | | |
| | | // Checke FTP-Server |
| | | /* Monitor FTP-Server */ |
| | | if($this->_checkFtp('localhost',21)) { |
| | | $data['ftpserver'] = true; |
| | | } else { |
| | | $data['ftpserver'] = false; |
| | | } |
| | | |
| | | // Checke SMTP-Server |
| | | /* Monitor SMTP-Server */ |
| | | if($this->_checkTcp('localhost',25)) { |
| | | $data['smtpserver'] = true; |
| | | } else { |
| | | $data['smtpserver'] = false; |
| | | } |
| | | // Checke POP3-Server |
| | | |
| | | /* Monitor POP3-Server */ |
| | | if($this->_checkTcp('localhost',110)) { |
| | | $data['pop3server'] = true; |
| | | } else { |
| | | $data['pop3server'] = false; |
| | | } |
| | | |
| | | // Checke BIND-Server |
| | | /* Monitor BIND-Server */ |
| | | if($this->_checkTcp('localhost',53)) { |
| | | $data['bindserver'] = true; |
| | | } else { |
| | | $data['bindserver'] = false; |
| | | } |
| | | |
| | | // Checke MYSQL-Server |
| | | /* Monitor MYSQL-Server */ |
| | | if($this->_checkTcp('localhost',3306)) { |
| | | $data['mysqlserver'] = true; |
| | | } else { |
| | |
| | | $app->db->query($sql); |
| | | |
| | | } |
| | | |
| | | function monitorMailLog() |
| | | { |
| | | global $app; |
| | | global $conf; |
| | | |
| | | /* the id of the server as int */ |
| | | $server_id = intval($conf["server_id"]); |
| | | |
| | | /** The type of the data */ |
| | | $type = 'log_mail'; |
| | | |
| | | /* There is only ONE Log-Data, so delete the old one */ |
| | | $this->_delOldRecords($type, 0); |
| | | |
| | | |
| | | /* Get the data of the log */ |
| | | $data = $this->_getLogData($type); |
| | | |
| | | // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... |
| | | $state = 'ok'; |
| | | |
| | | /* |
| | | Insert the data into the database |
| | | */ |
| | | $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . |
| | | "VALUES (". |
| | | $server_id . ", " . |
| | | "'" . $app->db->quote($type) . "', " . |
| | | time() . ", " . |
| | | "'" . $app->db->quote(serialize($data)) . "', " . |
| | | "'" . $state . "'" . |
| | | ")"; |
| | | $app->db->query($sql); |
| | | } |
| | | |
| | | function monitorMailWarnLog() |
| | | { |
| | | global $app; |
| | | global $conf; |
| | | |
| | | /* the id of the server as int */ |
| | | $server_id = intval($conf["server_id"]); |
| | | |
| | | /** The type of the data */ |
| | | $type = 'log_mail_warn'; |
| | | |
| | | /* There is only ONE Log-Data, so delete the old one */ |
| | | $this->_delOldRecords($type, 0); |
| | | |
| | | |
| | | /* Get the data of the log */ |
| | | $data = $this->_getLogData($type); |
| | | |
| | | // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... |
| | | $state = 'ok'; |
| | | |
| | | /* |
| | | Insert the data into the database |
| | | */ |
| | | $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . |
| | | "VALUES (". |
| | | $server_id . ", " . |
| | | "'" . $app->db->quote($type) . "', " . |
| | | time() . ", " . |
| | | "'" . $app->db->quote(serialize($data)) . "', " . |
| | | "'" . $state . "'" . |
| | | ")"; |
| | | $app->db->query($sql); |
| | | } |
| | | |
| | | function monitorMailErrLog() |
| | | { |
| | | global $app; |
| | | global $conf; |
| | | |
| | | /* the id of the server as int */ |
| | | $server_id = intval($conf["server_id"]); |
| | | |
| | | /** The type of the data */ |
| | | $type = 'log_mail_err'; |
| | | |
| | | /* There is only ONE Log-Data, so delete the old one */ |
| | | $this->_delOldRecords($type, 0); |
| | | |
| | | |
| | | /* Get the data of the log */ |
| | | $data = $this->_getLogData($type); |
| | | |
| | | // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... |
| | | $state = 'ok'; |
| | | |
| | | /* |
| | | Insert the data into the database |
| | | */ |
| | | $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . |
| | | "VALUES (". |
| | | $server_id . ", " . |
| | | "'" . $app->db->quote($type) . "', " . |
| | | time() . ", " . |
| | | "'" . $app->db->quote(serialize($data)) . "', " . |
| | | "'" . $state . "'" . |
| | | ")"; |
| | | $app->db->query($sql); |
| | | } |
| | | |
| | | |
| | | function monitorMessagesLog() |
| | | { |
| | | global $app; |
| | | global $conf; |
| | | |
| | | /* the id of the server as int */ |
| | | $server_id = intval($conf["server_id"]); |
| | | |
| | | /** The type of the data */ |
| | | $type = 'log_messages'; |
| | | |
| | | /* There is only ONE Log-Data, so delete the old one */ |
| | | $this->_delOldRecords($type, 0); |
| | | |
| | | |
| | | /* Get the data of the log */ |
| | | $data = $this->_getLogData($type); |
| | | |
| | | // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... |
| | | $state = 'ok'; |
| | | |
| | | /* |
| | | Insert the data into the database |
| | | */ |
| | | $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . |
| | | "VALUES (". |
| | | $server_id . ", " . |
| | | "'" . $app->db->quote($type) . "', " . |
| | | time() . ", " . |
| | | "'" . $app->db->quote(serialize($data)) . "', " . |
| | | "'" . $state . "'" . |
| | | ")"; |
| | | $app->db->query($sql); |
| | | } |
| | | |
| | | function monitorFreshClamLog() |
| | | { |
| | | global $app; |
| | | global $conf; |
| | | |
| | | /* the id of the server as int */ |
| | | $server_id = intval($conf["server_id"]); |
| | | |
| | | /** The type of the data */ |
| | | $type = 'log_freshclam'; |
| | | |
| | | /* There is only ONE Log-Data, so delete the old one */ |
| | | $this->_delOldRecords($type, 0); |
| | | |
| | | |
| | | /* Get the data of the log */ |
| | | $data = $this->_getLogData($type); |
| | | |
| | | // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... |
| | | $state = 'ok'; |
| | | |
| | | /* |
| | | Insert the data into the database |
| | | */ |
| | | $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . |
| | | "VALUES (". |
| | | $server_id . ", " . |
| | | "'" . $app->db->quote($type) . "', " . |
| | | time() . ", " . |
| | | "'" . $app->db->quote(serialize($data)) . "', " . |
| | | "'" . $state . "'" . |
| | | ")"; |
| | | $app->db->query($sql); |
| | | } |
| | | |
| | | function monitorClamAvLog() |
| | | { |
| | | global $app; |
| | | global $conf; |
| | | |
| | | /* the id of the server as int */ |
| | | $server_id = intval($conf["server_id"]); |
| | | |
| | | /** The type of the data */ |
| | | $type = 'log_clamav'; |
| | | |
| | | /* There is only ONE Log-Data, so delete the old one */ |
| | | $this->_delOldRecords($type, 0); |
| | | |
| | | |
| | | /* Get the data of the log */ |
| | | $data = $this->_getLogData($type); |
| | | |
| | | // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... |
| | | $state = 'ok'; |
| | | |
| | | /* |
| | | Insert the data into the database |
| | | */ |
| | | $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . |
| | | "VALUES (". |
| | | $server_id . ", " . |
| | | "'" . $app->db->quote($type) . "', " . |
| | | time() . ", " . |
| | | "'" . $app->db->quote(serialize($data)) . "', " . |
| | | "'" . $state . "'" . |
| | | ")"; |
| | | $app->db->query($sql); |
| | | } |
| | | |
| | | function monitorIspConfigLog() |
| | | { |
| | | global $app; |
| | | global $conf; |
| | | |
| | | /* the id of the server as int */ |
| | | $server_id = intval($conf["server_id"]); |
| | | |
| | | /** The type of the data */ |
| | | $type = 'log_ispconfig'; |
| | | |
| | | /* There is only ONE Log-Data, so delete the old one */ |
| | | $this->_delOldRecords($type, 0); |
| | | |
| | | |
| | | /* Get the data of the log */ |
| | | $data = $this->_getLogData($type); |
| | | |
| | | // Todo: the state should be calculated. For example if the load is to heavy, the state is warning... |
| | | $state = 'ok'; |
| | | |
| | | /* |
| | | Insert the data into the database |
| | | */ |
| | | $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " . |
| | | "VALUES (". |
| | | $server_id . ", " . |
| | | "'" . $app->db->quote($type) . "', " . |
| | | time() . ", " . |
| | | "'" . $app->db->quote(serialize($data)) . "', " . |
| | | "'" . $state . "'" . |
| | | ")"; |
| | | $app->db->query($sql); |
| | | } |
| | | |
| | | |
| | | function _getLogData($log){ |
| | | switch($log) { |
| | | case 'log_mail': |
| | | $logfile = '/var/log/mail.log'; |
| | | break; |
| | | case 'log_mail_warn': |
| | | $logfile = '/var/log/mail.warn'; |
| | | break; |
| | | case 'log_mail_err': |
| | | $logfile = '/var/log/mail.err'; |
| | | break; |
| | | case 'log_messages': |
| | | $logfile = '/var/log/messages'; |
| | | break; |
| | | case 'log_freshclam': |
| | | $logfile = '/var/log/clamav/freshclam.log'; |
| | | break; |
| | | case 'log_clamav': |
| | | $logfile = '/var/log/clamav/clamav.log'; |
| | | break; |
| | | case 'log_ispconfig': |
| | | $logfile = '/var/log/ispconfig/ispconfig.log'; |
| | | break; |
| | | default: |
| | | $logfile = ''; |
| | | break; |
| | | } |
| | | |
| | | // Getting the logfile content |
| | | if($logfile != '') { |
| | | $logfile = escapeshellcmd($logfile); |
| | | if(stristr($logfile,';')) die('Logfile path error.'); |
| | | |
| | | $log = ''; |
| | | if(is_readable($logfile)) { |
| | | if($fd = popen("tail -n 30 $logfile", 'r')) { |
| | | while (!feof($fd)) { |
| | | $log .= fgets($fd, 4096); |
| | | $n++; |
| | | if($n > 1000) break; |
| | | } |
| | | fclose($fd); |
| | | } |
| | | } else { |
| | | $log = 'Unable to read '.$logfile; |
| | | } |
| | | } |
| | | |
| | | return $log; |
| | | } |
| | | |
| | | function _checkTcp ($host,$port) { |
| | | |