From b7489f78bfe6d641ba597ee65e87700084d39854 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Sun, 02 Nov 2008 15:45:25 -0500
Subject: [PATCH] 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)
---
/dev/null | 19 -
interface/web/monitor/templates/show_log.htm | 19 +
install/sql/ispconfig3.sql | 2
interface/web/monitor/templates/show_data.htm | 0
server/mods-available/monitor_core_module.inc.php | 317 ++++++++++++++++++++
interface/web/themes/default/templates/sidenav.tpl.htm | 20 +
interface/web/monitor/lib/module.conf.php | 82 ++++-
interface/web/monitor/show_data.php | 302 ++++++++++++++++++++
interface/web/monitor/show_log.php | 116 +++++++
9 files changed, 829 insertions(+), 48 deletions(-)
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index efa2462..a6136d5 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1074,7 +1074,7 @@
`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;
diff --git a/interface/web/monitor/lib/module.conf.php b/interface/web/monitor/lib/module.conf.php
index f49ee79..259e349 100644
--- a/interface/web/monitor/lib/module.conf.php
+++ b/interface/web/monitor/lib/module.conf.php
@@ -1,42 +1,84 @@
<?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
@@ -44,31 +86,31 @@
$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',
diff --git a/interface/web/monitor/logview.php b/interface/web/monitor/logview.php
deleted file mode 100644
index a6e2a29..0000000
--- a/interface/web/monitor/logview.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?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');
-
-//* 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/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;
- case '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;
- }
-}
-
-$log = nl2br($log);
-
-$app->tpl->setVar("log",$log);
-$app->tpl->setVar("logfile",$logfile);
-$app->tpl->setVar("logfile_id",$logfile_id);
-
-
-$app->tpl_defaults();
-$app->tpl->pparse();
-?>
\ No newline at end of file
diff --git a/interface/web/monitor/show_data.php b/interface/web/monitor/show_data.php
new file mode 100644
index 0000000..a280bc1
--- /dev/null
+++ b/interface/web/monitor/show_data.php
@@ -0,0 +1,302 @@
+<?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;
+}
+?>
\ No newline at end of file
diff --git a/interface/web/monitor/show_log.php b/interface/web/monitor/show_log.php
new file mode 100644
index 0000000..a64c786
--- /dev/null
+++ b/interface/web/monitor/show_log.php
@@ -0,0 +1,116 @@
+<?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();
+?>
\ No newline at end of file
diff --git a/interface/web/monitor/system.php b/interface/web/monitor/system.php
deleted file mode 100644
index 1d5c70a..0000000
--- a/interface/web/monitor/system.php
+++ /dev/null
@@ -1,392 +0,0 @@
-<?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');
-
-//* Check permissions for module
-$app->auth->check_module_permissions('monitor');
-
-$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 .= '<table id="system_load">';
-
- $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>'.$app->lng("Server online since").':</td>
- <td>'.$days.'d, '.$hours.':'.$minutes.'h</center></td>
- </tr>';
-
- $html_out .= '<tr>
- <td>'.$app->lng("Users online").':</td>
- <td>'.strrev($uptime[3]).'</td>
- </tr>';
-
- $ausl = split(":",strrev($uptime[2]));
- $ausl1 = $ausl[1];
-
-
- $html_out .= '<tr>
- <td>'.$app->lng("System load 1 minute").':</td>
- <td>'.$ausl1.'</td>
- </tr>';
-
- $html_out .= '<tr>
- <td>'.$app->lng("System load 5 minutes").':</td>
- <td>'.strrev($uptime[1]).'</td>
- </tr>';
-
- $html_out .= '<tr>
- <td>'.$app->lng("System load 15 minutes").':</td>
- <td>'.strrev($uptime[0]).'</td>
- </tr>';
-
- $html_out .= '</table>';
-
-
- return $html_out;
-}
-
-function show_disk () {
- global $app;
-
-
- $html_out .= '<table id="system_disk">';
-
- $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;
- foreach($values as $value) {
- $align = 'left';
- if($mln < 6 and $value != "") $html_out .= '<td>'.$value.'</td>';
- $mln++;
- }
- $mrow++;
-
- $html_out .= '</tr>';
- }
-
-
- $html_out .= '</table>';
-
-
- return $html_out;
-}
-
-
-function show_memusage ()
- {
- global $app;
-
- $html_out .= '<table id="system_memusage">';
-
- $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>'.$mpart[0].':</td>
- <td>'.$mpart[1].'</td>
- </tr>';
- }
-
- $x++;
- }
- $html_out .= '</table>';
- return $html_out;
-}
-
-function show_cpu ()
- {
- global $app;
-
- $html_out .= '<table id="system_cpu">';
-
- $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>'.$mpart[0].':</td>
- <td>'.$mpart[1].'</td>
- </tr>';
- }
- }
-
- $x++;
- }
- $html_out .= '</table></div>';
-
-
- return $html_out;
- }
-
-function show_services ()
- {
- global $app;
-
- $html_out .= '<table id="system_services">';
-
- // Checke Webserver
- if(_check_tcp('localhost',80)) {
- $status = '<span class="online">Online</span>';
- } else {
- $status = '<span class="offline">Offline</span>';
- }
- $html_out .= '<tr>
- <td>Web-Server:</td>
- <td>'.$status.'</td>
- </tr>';
-
-
- // Checke FTP-Server
- if(_check_ftp('localhost',21)) {
- $status = '<span class="online">Online</span>';
- } else {
- $status = '<span class="offline">Offline</span>';
- }
- $html_out .= '<tr>
- <td>FTP-Server:</td>
- <td>'.$status.'</td>
- </tr>';
-
- // Checke SMTP-Server
- if(_check_tcp('localhost',25)) {
- $status = '<span class="online">Online</span>';
- } else {
- $status = '<span class="offline">Offline</span>';
- }
- $html_out .= '<tr>
- <td>SMTP-Server:</td>
- <td>'.$status.'</td>
- </tr>';
-
- // Checke POP3-Server
- if(_check_tcp('localhost',110)) {
- $status = '<span class="online">Online</span>';
- } else {
- $status = '<span class="offline">Offline</span>';
- }
- $html_out .= '<tr>
- <td>POP3-Server:</td>
- <td>'.$status.'</td>
- </tr>';
-
- // Checke BIND-Server
- if(_check_tcp('localhost',53)) {
- $status = '<span class="online">Online</span>';
- } else {
- $status = '<span class="offline">Offline</span>';
- }
- $html_out .= '<tr>
- <td>DNS-Server:</td>
- <td>'.$status.'</td>
- </tr>';
-
- // Checke MYSQL-Server
- //if($this->_check_tcp('localhost',3306)) {
- $status = '<span class="online">Online</span>';
- //} else {
- //$status = '<span class="offline">Offline</span>';
- //}
- $html_out .= '<tr>
- <td>mySQL-Server:</td>
- <td>'.$status.'</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
deleted file mode 100644
index 2700709..0000000
--- a/interface/web/monitor/templates/logview.htm
+++ /dev/null
@@ -1,19 +0,0 @@
-<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/logview.php?log={tmpl_var name="logfile_id"}')">{tmpl_var name="refresh"}</select>
- </div>
- </fieldset>
- </div>
-
- <div class="pnl_formarea">
- <fieldset><legend><tmpl_var name="logfile"></legend>
- <div class="codeview"><tmpl_var name="log"></div>
- </fieldset>
- </div>
-
-</div>
diff --git a/interface/web/monitor/templates/system.htm b/interface/web/monitor/templates/show_data.htm
similarity index 100%
rename from interface/web/monitor/templates/system.htm
rename to interface/web/monitor/templates/show_data.htm
diff --git a/interface/web/monitor/templates/show_log.htm b/interface/web/monitor/templates/show_log.htm
new file mode 100644
index 0000000..7453310
--- /dev/null
+++ b/interface/web/monitor/templates/show_log.htm
@@ -0,0 +1,19 @@
+<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>
diff --git a/interface/web/themes/default/templates/sidenav.tpl.htm b/interface/web/themes/default/templates/sidenav.tpl.htm
index 5795055..4626d36 100644
--- a/interface/web/themes/default/templates/sidenav.tpl.htm
+++ b/interface/web/themes/default/templates/sidenav.tpl.htm
@@ -1,8 +1,24 @@
<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>
diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php
index ceed3ce..dd5443b 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -103,6 +103,13 @@
$this->monitorMemUsage();
$this->monitorCpu();
$this->monitorServices();
+ $this->monitorMailLog();
+ $this->monitorMailWarnLog();
+ $this->monitorMailErrLog();
+ $this->monitorMessagesLog();
+ $this->monitorFreshClamLog();
+ $this->monitorClamAvLog();
+ $this->monitorIspConfigLog();
}
function monitorServer(){
@@ -314,41 +321,42 @@
/* 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 {
@@ -372,7 +380,304 @@
$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) {
--
Gitblit v1.9.1