From a89eb2fde33d052a815767f17111a05a2b763e24 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Sat, 14 Feb 2009 10:58:32 -0500
Subject: [PATCH] Fixed moving of site when the client is changed.

---
 server/mods-available/monitor_core_module.inc.php |  142 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 120 insertions(+), 22 deletions(-)

diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php
index cbd2417..5633539 100644
--- a/server/mods-available/monitor_core_module.inc.php
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -113,6 +113,7 @@
         $this->monitorMailWarnLog();
         $this->monitorMailErrLog();
         $this->monitorMessagesLog();
+        $this->monitorISPCCronLog();
         $this->monitorFreshClamLog();
         $this->monitorClamAvLog();
         $this->monitorIspConfigLog();
@@ -120,6 +121,7 @@
         $this->monitorMailQueue();
         $this->monitorRaid();
         $this->monitorRkHunter();
+		$this->monitorFail2ban();
         $this->monitorSysLog();
     }
 
@@ -190,8 +192,8 @@
         /** The state of the disk-usage */
         $state = 'ok';
 
-        /** Fetch the data into a array */
-        $dfData = shell_exec("df");
+        /** Fetch the data of ALL devices into a array (needed for monitoring!)*/
+        $dfData = shell_exec("df -hT");
 
         // split into array
         $df = explode("\n", $dfData);
@@ -207,11 +209,12 @@
                  */
                 $s = preg_split ("/[\s]+/", $df[$i]);
                 $data[$i]['fs'] = $s[0];
-                $data[$i]['size'] = $s[1];
-                $data[$i]['used'] = $s[2];
-                $data[$i]['available'] = $s[3];
-                $data[$i]['percent'] = $s[4];
-                $data[$i]['mounted'] = $s[5];
+                $data[$i]['type'] = $s[1];
+                $data[$i]['size'] = $s[2];
+                $data[$i]['used'] = $s[3];
+                $data[$i]['available'] = $s[4];
+                $data[$i]['percent'] = $s[5];
+                $data[$i]['mounted'] = $s[6];
                 /*
                  * calculate the state
                  */
@@ -261,7 +264,7 @@
         $memInfo = explode("\n", $miData);
 
         foreach($memInfo as $line){
-            $part = split(":", $line);
+            $part = preg_split("/:/", $line);
             $key = trim($part[0]);
             $tmp = explode(" ", trim($part[1]));
             $value = 0;
@@ -311,7 +314,7 @@
         $cpuInfo = explode("\n", $cpuData);
 
         foreach($cpuInfo as $line){
-            $part = split(":", $line);
+            $part = preg_split("/:/", $line);
             $key = trim($part[0]);
             $value = trim($part[1]);
             $data[$key] = $value;
@@ -746,6 +749,58 @@
         $this->_delOldRecords($type, 0, 2);
     }
 
+    function monitorFail2ban(){
+        global $app;
+        global $conf;
+
+        /* the id of the server as int */
+        $server_id = intval($conf["server_id"]);
+
+        /** The type of the data */
+        $type = 'log_fail2ban';
+
+        /* This monitoring is only available if fail2ban is installed */
+        $location = shell_exec('which fail2ban-client');
+        if($location != ''){
+			/*  Get the data of the log */
+			$data = $this->_getLogData($type);
+
+            /*
+             * At this moment, there is no state (maybe later)
+             */
+            $state = 'no_state';
+        }
+        else {
+            /*
+             * fail2ban is not installed, so there is no data and no state
+             *
+             * no_state, NOT unknown, because "unknown" is shown as state
+             * inside the GUI. no_state is hidden.
+             *
+             * We have to write NO DATA inside the DB, because the GUI
+             * could not know, if there is any dat, or not...
+             */
+            $state = 'no_state';
+            $data = '';
+        }
+
+        /*
+         * Insert the data into the database
+         */
+        $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
+            "VALUES (".
+        $server_id . ", " .
+            "'" . $app->dbmaster->quote($type) . "', " .
+        time() . ", " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
+            "'" . $state . "'" .
+            ")";
+        $app->dbmaster->query($sql);
+
+        /* The new data is written, now we can delete the old one */
+        $this->_delOldRecords($type, 10);
+    }
+
     function monitorSysLog(){
         global $app;
         global $conf;
@@ -756,19 +811,19 @@
         /** The type of the data */
         $type = 'sys_log';
 
-	/*
-	 * is there any warning or error for this server?
-	 */
-	$state = 'ok';
+		/*
+		 * is there any warning or error for this server?
+		 */
+		$state = 'ok';
         $dbData = $app->dbmaster->queryAllRecords("SELECT loglevel FROM sys_log WHERE server_id = " . $server_id . " AND loglevel > 0");
-	if (is_array($dbData)) {
-	    foreach($dbData as $item){
-		if ($item['loglevel'] == 1) $state = $this->_setState($state, 'warning');
-		if ($item['loglevel'] == 2) $state = $this->_setState($state, 'error');
-	    }
-	}
+		if (is_array($dbData)) {
+		    foreach($dbData as $item){
+			if ($item['loglevel'] == 1) $state = $this->_setState($state, 'warning');
+			if ($item['loglevel'] == 2) $state = $this->_setState($state, 'error');
+		    }
+		}
 
-	/** There is no monitor-data because the data is in the sys_log table */
+		/** There is no monitor-data because the data is in the sys_log table */
         $data['output']= '';
 
         /*
@@ -788,7 +843,7 @@
         $this->_delOldRecords($type, 10);
     }
 
-function monitorMailLog()
+	function monitorMailLog()
     {
         global $app;
         global $conf;
@@ -937,6 +992,43 @@
         $this->_delOldRecords($type, 10);
     }
 
+    function monitorISPCCronLog()
+    {
+        global $app;
+        global $conf;
+
+        /* the id of the server as int */
+        $server_id = intval($conf["server_id"]);
+
+        /** The type of the data */
+        $type = 'log_ispc_cron';
+
+        /* Get the data of the log */
+        $data = $this->_getLogData($type);
+
+        /*
+         * actually this info has no state.
+         * maybe someone knows better...???...
+         */
+        $state = 'no_state';
+
+        /*
+        Insert the data into the database
+        */
+        $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
+            "VALUES (".
+        $server_id . ", " .
+            "'" . $app->dbmaster->quote($type) . "', " .
+        time() . ", " .
+            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
+            "'" . $state . "'" .
+            ")";
+        $app->dbmaster->query($sql);
+
+        /* The new data is written, now we can delete the old one */
+        $this->_delOldRecords($type, 10);
+    }
+    
     function monitorFreshClamLog()
     {
         global $app;
@@ -1092,11 +1184,17 @@
             case 'log_messages':
                 $logfile = '/var/log/messages';
                 break;
+            case 'log_ispc_cron':
+                $logfile = '/var/log/ispconfig/cron.log';
+                break;
             case 'log_freshclam':
                 $logfile = '/var/log/clamav/freshclam.log';
                 break;
             case 'log_clamav':
                 $logfile = '/var/log/clamav/clamav.log';
+                break;
+            case 'log_fail2ban':
+                $logfile = '/var/log/fail2ban.log';
                 break;
             case 'log_ispconfig':
                 $logfile = '/var/log/ispconfig/ispconfig.log';
@@ -1263,4 +1361,4 @@
 
 } // end class
 
-?>
\ No newline at end of file
+?>

--
Gitblit v1.9.1