From 7ae9f9d8abf342ac95290de38cd1f7a03994e6f3 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Mon, 18 Jun 2007 17:26:32 -0400
Subject: [PATCH] Added monitoring module.
---
interface/web/monitor/templates/logview.htm | 5
interface/web/monitor/system.php | 398 ++++++++++++++++++++++++++++++++++++
interface/web/themes/default/style.css | 6
interface/web/monitor/templates/system.htm | 3
interface/web/monitor/logview.php | 114 ++++++++++
interface/web/monitor/lib/admin.conf.php | 2
interface/web/monitor/lib/module.conf.php | 76 ++++++
interface/web/js/scrigo.js | 15 +
8 files changed, 619 insertions(+), 0 deletions(-)
diff --git a/interface/web/js/scrigo.js b/interface/web/js/scrigo.js
index b0cba00..f72a0fd 100644
--- a/interface/web/js/scrigo.js
+++ b/interface/web/js/scrigo.js
@@ -1,5 +1,20 @@
redirect = '';
+function loadContentRefresh(pagename) {
+ var pageContentCallbackRefresh = {
+ success: function(o) {
+ document.getElementById('pageContent').innerHTML = o.responseText;
+ },
+ failure: function(o) {
+ alert('Ajax Request was not successful.');
+ }
+ }
+
+ if(document.getElementById('refreshinterval').value > 0) {
+ var pageContentObject2 = YAHOO.util.Connect.asyncRequest('GET', pagename+"&refresh="+document.getElementById('refreshinterval').value, pageContentCallbackRefresh);
+ setTimeout( "loadContentRefresh('"+pagename+"&refresh="+document.getElementById('refreshinterval').value+"')", document.getElementById('refreshinterval').value*1000 );
+ }
+}
function capp(module) {
var cappCallback = {
diff --git a/interface/web/monitor/lib/admin.conf.php b/interface/web/monitor/lib/admin.conf.php
new file mode 100644
index 0000000..a45d440
--- /dev/null
+++ b/interface/web/monitor/lib/admin.conf.php
@@ -0,0 +1,2 @@
+<?php
+?>
\ No newline at end of file
diff --git a/interface/web/monitor/lib/module.conf.php b/interface/web/monitor/lib/module.conf.php
new file mode 100644
index 0000000..23685bf
--- /dev/null
+++ b/interface/web/monitor/lib/module.conf.php
@@ -0,0 +1,76 @@
+<?php
+
+$module["name"] = "monitor";
+$module["title"] = "Monitor";
+$module["template"] = "module.tpl.htm";
+$module["startpage"] = "monitor/system.php?mod=index";
+$module["tab_width"] = '';
+
+/*
+ Logmonitoring module
+*/
+
+$items[] = array( 'title' => "Load",
+ 'target' => 'content',
+ 'link' => 'monitor/system.php?mod=load');
+
+$items[] = array( 'title' => "Harddisk",
+ 'target' => 'content',
+ 'link' => 'monitor/system.php?mod=disk');
+
+$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');
+
+$items[] = array( 'title' => "Services",
+ 'target' => 'content',
+ 'link' => 'monitor/system.php?mod=services');
+
+
+$module["nav"][] = array( 'title' => 'System',
+ 'open' => 1,
+ 'items' => $items);
+
+// aufr�umen
+unset($items);
+
+/*
+ Logmonitoring module
+*/
+
+$items[] = array( 'title' => "Mail log",
+ 'target' => 'content',
+ 'link' => 'monitor/logview.php?log=mail_log');
+
+$items[] = array( 'title' => "Mail warn",
+ 'target' => 'content',
+ 'link' => 'monitor/logview.php?log=mail_warn');
+
+$items[] = array( 'title' => "Mail err",
+ 'target' => 'content',
+ 'link' => 'monitor/logview.php?log=mail_err');
+
+$items[] = array( 'title' => "Messages",
+ 'target' => 'content',
+ 'link' => 'monitor/logview.php?log=messages');
+
+$items[] = array( 'title' => "Freshclam",
+ 'target' => 'content',
+ 'link' => 'monitor/logview.php?log=freshclam');
+
+$items[] = array( 'title' => "Clamav",
+ 'target' => 'content',
+ 'link' => 'monitor/logview.php?log=clamav');
+
+
+$module["nav"][] = array( 'title' => 'Logfiles',
+ 'open' => 1,
+ 'items' => $items);
+
+// aufr�umen
+unset($items);
+?>
\ No newline at end of file
diff --git a/interface/web/monitor/logview.php b/interface/web/monitor/logview.php
new file mode 100644
index 0000000..2630e11
--- /dev/null
+++ b/interface/web/monitor/logview.php
@@ -0,0 +1,114 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+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');
+
+// Checke Berechtigungen f�r Modul
+if(!stristr($_SESSION["s"]["user"]["modules"],'monitor')) {
+ header("Location: ../index.php");
+ exit;
+}
+
+// Loading the template
+$app->uses('tpl');
+$app->tpl->newTemplate("form.tpl.htm");
+$app->tpl->setInclude('content_tpl','templates/logview.htm');
+
+// Importing the GET values
+$refresh = intval($_GET["refresh"]);
+$logfile_id = $_GET["log"];
+
+// Creating the array with the refresh intervals
+$refresh_values = array('0' => '- No Refresh -','2' => '2','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);
+
+// Selecting the logfile
+switch($logfile_id) {
+ case 'mail_log':
+ $logfile = '/var/log/mail.log';
+ break;
+ case 'mail_warn':
+ $logfile = '/var/log/mail.warn';
+ break;
+ case 'mail_err':
+ $logfile = '/var/log/mail.err';
+ break;
+ case 'messages':
+ $logfile = '/var/log/messages';
+ break;
+ case 'freshclam':
+ $logfile = '/var/log/clamav/freshclam.log';
+ break;
+ case 'clamav':
+ $logfile = '/var/log/clamav/clamav.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;
+ }
+}
+
+$log = nl2br($log);
+
+$app->tpl->setVar("log",$log);
+$app->tpl->setVar("logfile",$logfile);
+
+
+$app->tpl_defaults();
+$app->tpl->pparse();
+?>
\ No newline at end of file
diff --git a/interface/web/monitor/system.php b/interface/web/monitor/system.php
new file mode 100644
index 0000000..43886a1
--- /dev/null
+++ b/interface/web/monitor/system.php
@@ -0,0 +1,398 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+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');
+
+// Checke Berechtigungen f�r Modul
+if(!stristr($_SESSION["s"]["user"]["modules"],'monitor')) {
+ header("Location: ../index.php");
+ exit;
+}
+
+$mod = $_GET["mod"];
+$output = '';
+
+switch($mod) {
+ case 'load':
+ $template = 'templates/system.htm';
+ $output .= show_load();
+ $title = 'System Load';
+ $description = '';
+ break;
+ case 'disk':
+ $template = 'templates/system.htm';
+ $output .= show_disk();
+ $title = 'Disk usage';
+ $description = '';
+ break;
+ case 'memusage':
+ $template = 'templates/system.htm';
+ $output .= show_memusage();
+ $title = 'Memory usage';
+ $description = '';
+ break;
+ case 'cpu':
+ $template = 'templates/system.htm';
+ $output .= show_cpu();
+ $title = 'CPU Info';
+ $description = '';
+ break;
+ case 'services':
+ $template = 'templates/system.htm';
+ $output .= show_services();
+ $title = 'Status of services';
+ $description = '';
+ break;
+ case 'index':
+ $template = 'templates/system.htm';
+ $output .= show_load();
+ $output .= ' '. show_disk();
+ $output .= ' '.show_services();
+ $title = 'System Monitor';
+ $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 show_load(){
+ global $app;
+
+ $html_out .= '<div align="left"><table width="400" border="0" cellspacing="1" cellpadding="4" bgcolor="#CCCCCC">';
+
+ $fd = popen ("uptime", "r");
+ while (!feof($fd)) {
+ $buffer .= fgets($fd, 4096);
+ }
+
+ $uptime = split(",",strrev($buffer));
+
+ $online = split(" ",strrev($uptime[4]));
+
+ $proc_uptime = shell_exec("cat /proc/uptime | cut -f1 -d' '");
+ $days = floor($proc_uptime/86400);
+ $hours = floor(($proc_uptime-$days*86400)/3600);
+ $minutes = str_pad(floor(($proc_uptime-$days*86400-$hours*3600)/60), 2, "0", STR_PAD_LEFT);
+
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$app->lng("Server Online seit").':</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$days.'d, '.$hours.':'.$minutes.'h</font></center></td>
+ </tr>';
+
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$app->lng("User Online").':</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.strrev($uptime[3]).'</font></center></td>
+ </tr>';
+
+ $ausl = split(":",strrev($uptime[2]));
+ $ausl1 = $ausl[1];
+
+
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$app->lng("System Load 1 Minute").':</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$ausl1.'</font></center></td>
+ </tr>';
+
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$app->lng("System Load 5 Minuten").':</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.strrev($uptime[1]).'</font></center></td>
+ </tr>';
+
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$app->lng("System Load 15 Minuten").':</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.strrev($uptime[0]).'</font></center></td>
+ </tr>';
+
+ $html_out .= '</table></div>';
+
+
+ return $html_out;
+}
+
+function show_disk () {
+ global $app;
+
+
+ $html_out .= '<div align="left"><table width="400" border="0" cellspacing="1" cellpadding="4" bgcolor="#CCCCCC">';
+
+ $fd = popen ("df -h", "r");
+ while (!feof($fd)) {
+ $buffer .= fgets($fd, 4096);
+ }
+
+ $df_out = split("\n",$buffer);
+ $df_num = sizeof($df_out);
+ for($i=0;$i<$df_num;$i++){
+ if(ltrim($df_out[$i]) != $df_out[$i]){
+ if(isset($df_out[($i-1)])){
+ $df_out[($i-1)] .= $df_out[$i];
+ unset($df_out[$i]);
+ }
+ }
+ }
+
+ $html_out .= '<tr>';
+ $mrow = 0;
+ foreach($df_out as $df_line) {
+ $values = preg_split ("/[\s]+/", $df_line);
+ $mln = 0;
+ $font_class = 'normal_bold';
+ if($mrow > 0) $font_class = 'normal';
+ foreach($values as $value) {
+ $align = 'left';
+ if($mln > 0 and $mln < 5) $align = 'right';
+ if($mln < 6 and $value != "") $html_out .= '<td bgcolor="#FFFFFF" class="frmText11" align="'.$align.'">'.$value.'</td>';
+ $mln++;
+ }
+ $mrow++;
+
+ $html_out .= '</tr>';
+ }
+
+
+ $html_out .= '</table></div>';
+
+
+ return $html_out;
+}
+
+
+function show_memusage ()
+ {
+ global $app;
+
+ $html_out .= '<div align="left"><table width="400" border="0" cellspacing="1" cellpadding="4" bgcolor="#CCCCCC">';
+
+ $fd = fopen ("/proc/meminfo", "r");
+ while (!feof($fd)) {
+ $buffer .= fgets($fd, 4096);
+ }
+ fclose($fd);
+
+ $meminfo = split("\n",$buffer);
+
+ foreach($meminfo as $mline){
+ if($x > 2 and trim($mline) != "") {
+
+ $mpart = split(":",$mline);
+
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$mpart[0].':</font></td>
+ <td width="30%" bgcolor="#FFFFFF" align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$mpart[1].'</font></td>
+ </tr>';
+ }
+
+ $x++;
+ }
+ $html_out .= '</table></div>';
+ return $html_out;
+}
+
+function show_cpu ()
+ {
+ global $app;
+
+ $html_out .= '<div align="left"><table width="400" border="0" cellspacing="1" cellpadding="4" bgcolor="#CCCCCC">';
+
+ $n = 0;
+ if(is_readable("/proc/cpuinfo")) {
+ if($fd = fopen ("/proc/cpuinfo", "r")) {
+ while (!feof($fd)) {
+ $buffer .= fgets($fd, 4096);
+ $n++;
+ if($n > 100) break;
+ }
+ fclose($fd);
+ }
+ }
+
+ $meminfo = split("\n",$buffer);
+
+ if(is_array($meminfo)) {
+ foreach($meminfo as $mline){
+ if(trim($mline) != "") {
+
+ $mpart = split(":",$mline);
+
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$mpart[0].':</font></td>
+ <td width="30%" bgcolor="#FFFFFF" align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">'.$mpart[1].'</font></td>
+ </tr>';
+ }
+ }
+
+ $x++;
+ }
+ $html_out .= '</table></div>';
+
+
+ return $html_out;
+ }
+
+function show_services ()
+ {
+ global $app;
+
+ $html_out .= '<div align="left"><table width="400" border="0" cellspacing="1" cellpadding="4" bgcolor="#CCCCCC">';
+
+ // Checke Webserver
+ if(_check_tcp('localhost',80)) {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#006600"><b>Online</b></font>';
+ } else {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000"><b>Offline</b></font>';
+ }
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Web-Server:</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center>'.$status.'</center></td>
+ </tr>';
+
+
+ // Checke FTP-Server
+ if(_check_ftp('localhost',21)) {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#006600"><b>Online</b></font>';
+ } else {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000"><b>Offline</b></font>';
+ }
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">FTP-Server:</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center>'.$status.'</center></td>
+ </tr>';
+
+ // Checke SMTP-Server
+ if(_check_tcp('localhost',25)) {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#006600"><b>Online</b></font>';
+ } else {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000"><b>Offline</b></font>';
+ }
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">SMTP-Server:</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center>'.$status.'</center></td>
+ </tr>';
+
+ // Checke POP3-Server
+ if(_check_tcp('localhost',110)) {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#006600"><b>Online</b></font>';
+ } else {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000"><b>Offline</b></font>';
+ }
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">POP3-Server:</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center>'.$status.'</center></td>
+ </tr>';
+
+ // Checke BIND-Server
+ if(_check_tcp('localhost',53)) {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#006600"><b>Online</b></font>';
+ } else {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000"><b>Offline</b></font>';
+ }
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">BIND-Server:</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center>'.$status.'</center></td>
+ </tr>';
+
+ // Checke MYSQL-Server
+ //if($this->_check_tcp('localhost',3306)) {
+ $status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#006600"><b>Online</b></font>';
+ //} else {
+ //$status = '<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FF0000"><b>Offline</b></font>';
+ //}
+ $html_out .= '<tr>
+ <td width="70%" bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">mySQL-Server:</font></td>
+ <td width="30%" bgcolor="#FFFFFF"><center>'.$status.'</center></td>
+ </tr>';
+
+
+ $html_out .= '</table></div>';
+
+
+ return $html_out;
+}
+
+function _check_tcp ($host,$port) {
+
+ $fp = @fsockopen ($host, $port, &$errno, &$errstr, 2);
+
+ if ($fp) {
+ return true;
+ fclose($fp);
+ } else {
+ return false;
+ fclose($fp);
+ }
+}
+
+function _check_udp ($host,$port) {
+
+ $fp = @fsockopen ('udp://'.$host, $port, &$errno, &$errstr, 2);
+
+ if ($fp) {
+ return true;
+ fclose($fp);
+ } else {
+ return false;
+ fclose($fp);
+ }
+}
+
+function _check_ftp ($host,$port){
+
+ $conn_id = @ftp_connect($host, $port);
+
+ if($conn_id){
+ @ftp_close($conn_id);
+ return true;
+ } else {
+ @ftp_close($conn_id);
+ return false;
+ }
+}
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/monitor/templates/logview.htm b/interface/web/monitor/templates/logview.htm
new file mode 100644
index 0000000..5e9fc46
--- /dev/null
+++ b/interface/web/monitor/templates/logview.htm
@@ -0,0 +1,5 @@
+<div style="margin-left:30px;margin-top:30px;"><b><tmpl_var name="logfile"></b><br /><br />
+<select name="refreshinterval" id="refreshinterval" onChange="loadContentRefresh('monitor/index.php?log=mail_log')">
+ {tmpl_var name="refresh"}
+</select><br /><br />
+<tmpl_var name="log"></div>
\ No newline at end of file
diff --git a/interface/web/monitor/templates/system.htm b/interface/web/monitor/templates/system.htm
new file mode 100644
index 0000000..52428d9
--- /dev/null
+++ b/interface/web/monitor/templates/system.htm
@@ -0,0 +1,3 @@
+<div style="margin-left:30px;margin-top:30px;"><h2><tmpl_var name="title"></h2>
+<p><tmpl_var name="description"></p>
+<tmpl_var name="output"></div>
\ No newline at end of file
diff --git a/interface/web/themes/default/style.css b/interface/web/themes/default/style.css
index 7ba641a..d83383d 100644
--- a/interface/web/themes/default/style.css
+++ b/interface/web/themes/default/style.css
@@ -285,4 +285,10 @@
background: url("../../themes/default/images/button_end.gif") no-repeat;
}
+h2 {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 16px;
+ font-weight:bold;
+}
+
--
Gitblit v1.9.1