From 0d0cd9b8ad552fd83197190a9e2fab7a379446a7 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Thu, 30 Oct 2008 16:01:05 -0400
Subject: [PATCH] Added support for core-modules. Core modules are modules without DB-trigger Added new table monitor_data for the core-module monitor.

---
 install/lib/installer_base.lib.php                |    7 
 install/dist/lib/fedora.lib.php                   |    6 
 install/sql/ispconfig3.sql                        |   17 +
 server/lib/classes/modules.inc.php                |   12 
 install/dist/lib/opensuse.lib.php                 |    6 
 server/server.php                                 |   54 ++---
 server/lib/classes/plugins.inc.php                |    9 
 server/mods-available/monitor_core_module.inc.php |  421 ++++++++++++++++++++++++++++++++++++++++++++++
 8 files changed, 493 insertions(+), 39 deletions(-)

diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 2d15af9..c2f87c6 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -530,6 +530,9 @@
 				while (($file = readdir($dh)) !== false) {
 					if($file != '.' && $file != '..') {
 						if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
+						if (strpos($file, '_core_module') !== false) {
+							if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
+						}
 					}
 				}
 				closedir($dh);
@@ -542,6 +545,9 @@
 				while (($file = readdir($dh)) !== false) {
 					if($file != '.' && $file != '..') {
 						if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
+						if (strpos($file, '_core_plugin') !== false) {
+							if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
+						}
 					}
 				}
 				closedir($dh);
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 391e896..2d64357 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -555,6 +555,9 @@
 				while (($file = readdir($dh)) !== false) {
 					if($file != '.' && $file != '..') {
 						if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
+						if (strpos($file, '_core_module') !== false) {
+							if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
+						}
 					}
 				}
 				closedir($dh);
@@ -567,6 +570,9 @@
 				while (($file = readdir($dh)) !== false) {
 					if($file != '.' && $file != '..') {
 						if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
+						if (strpos($file, '_core_plugin') !== false) {
+							if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
+						}
 					}
 				}
 				closedir($dh);
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 79c7ef6..1a2fd6f 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -35,6 +35,7 @@
 	var $db;
 	public $conf;
 	public $install_ispconfig_interface = true;
+	
 
 
     public function __construct()
@@ -749,6 +750,9 @@
 				while (($file = readdir($dh)) !== false) {
 					if($file != '.' && $file != '..') {
 						if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
+						if (strpos($file, '_core_module') !== false) {
+							if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
+						}
 					}
 				}
 				closedir($dh);
@@ -761,6 +765,9 @@
 				while (($file = readdir($dh)) !== false) {
 					if($file != '.' && $file != '..') {
 						if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
+						if (strpos($file, '_core_plugin') !== false) {
+							if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
+						}
 					}
 				}
 				closedir($dh);
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 35867d7..5727fe0 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1062,6 +1062,21 @@
   `ip` varchar(12) NOT NULL,
   `times` tinyint(1) NOT NULL default '1',
   `login_time` timestamp NOT NULL default '0000-00-00 00:00:00'
-);
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+
+-- 
+-- Tabellenstruktur f�r Tabelle `monitor_data`
+-- 
+
+CREATE TABLE `monitor_data` (
+  `server_id` int(11) NOT NULL,
+  `type` varchar(255) NOT NULL,
+  `created` int(11) NOT NULL,
+  `data` mediumtext NOT NULL,
+  `state` enum('unknown','ok','warning','error') NOT NULL default 'unknown',
+  PRIMARY KEY  (`server_id`,`type`,`created`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
 
 SET FOREIGN_KEY_CHECKS = 1;
diff --git a/server/lib/classes/modules.inc.php b/server/lib/classes/modules.inc.php
index 41bc2ae..6ad967f 100644
--- a/server/lib/classes/modules.inc.php
+++ b/server/lib/classes/modules.inc.php
@@ -33,15 +33,15 @@
 	var $notification_hooks = array();
 	
 	/*
-	 This function is called to load the modules from the mods-available folder
+	 This function is called to load the modules from the mods-enabled or the mods-core folder
 	*/
-	
-	function loadModules() {
+	function loadModules($type) {
 		global $app, $conf;
 		
-		
-		
-		$modules_dir = $conf["rootpath"].$conf["fs_div"]."mods-enabled".$conf["fs_div"];
+		$subPath = 'mods-enabled';
+		if ($type == 'core') $subPath = 'mods-core';
+
+		$modules_dir = $conf["rootpath"].$conf["fs_div"].$subPath.$conf["fs_div"];
 		if (is_dir($modules_dir)) {
 			if ($dh = opendir($modules_dir)) {
 				while (($file = readdir($dh)) !== false) {
diff --git a/server/lib/classes/plugins.inc.php b/server/lib/classes/plugins.inc.php
index 63c8cb9..8d016d2 100644
--- a/server/lib/classes/plugins.inc.php
+++ b/server/lib/classes/plugins.inc.php
@@ -34,13 +34,16 @@
 	var $subscribed_events = array();
 	
 	/*
-	 This function is called to load the plugins from the plugins-available folder
+	 This function is called to load the plugins from the plugins-enabled or the plugins-core folder
 	*/
 	
-	function loadPlugins() {
+	function loadPlugins($type) {
 		global $app,$conf;
+
+		$subPath = 'plugins-enabled';
+		if ($type == 'core') $subPath = 'plugins-core';
 		
-		$plugins_dir = $conf["rootpath"].$conf["fs_div"]."plugins-enabled".$conf["fs_div"];
+		$plugins_dir = $conf["rootpath"].$conf["fs_div"].$subPath.$conf["fs_div"];
 		$tmp_plugins = array();
 		
 		if (is_dir($plugins_dir)) {
diff --git a/server/mods-available/monitor_core_module.inc.php b/server/mods-available/monitor_core_module.inc.php
new file mode 100644
index 0000000..136463c
--- /dev/null
+++ b/server/mods-available/monitor_core_module.inc.php
@@ -0,0 +1,421 @@
+<?php
+
+/*
+Copyright (c) 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.
+*/
+
+class monitor_core_module {
+	
+	/* TODO: this should be a config - var instead of a "constant" */
+	var $interval = 5; // do the monitoring every 5 minutes
+	
+	var $module_name = 'monitor_core_module';
+	var $class_name = 'monitor_core_module';
+	/* No actions at this time. maybe later... */
+	var $actions_available = array();
+	
+	/*
+	 	This function is called when the module is loaded
+	*/
+	
+	function onLoad() {
+		global $app;
+		
+		/*
+		Annonce the actions that where provided by this module, so plugins 
+		can register on them.
+		*/
+		/* none at them moment */
+		//$app->plugins->announceEvents($this->module_name,$this->actions_available);
+		
+		/*
+		As we want to get notified of any changes on several database tables,
+		we register for them.
+				
+		The following function registers the function "functionname"
+			to be executed when a record for the table "dbtable" is 
+			processed in the sys_datalog. "classname" is the name of the
+			class that contains the function functionname.
+		*/
+		/* none at them moment */
+		//$app->modules->registerTableHook('mail_access','mail_module','process');
+		
+		/*
+		Do the monitor every n minutes and write the result in the db
+		*/
+		$min = date('i');
+		if (($min % $this->interval) == 0)
+		{
+			$this->doMonitor();
+		}
+	}
+	
+	/*
+	 This function is called when a change in one of the registered tables is detected.
+	 The function then raises the events for the plugins.
+	*/
+	function process($tablename, $action, $data) {
+		//		global $app;
+		//		
+		//		switch ($tablename) {
+		//			case 'mail_access':
+		//				if($action == 'i') $app->plugins->raiseEvent('mail_access_insert',$data);
+		//				if($action == 'u') $app->plugins->raiseEvent('mail_access_update',$data);
+		//				if($action == 'd') $app->plugins->raiseEvent('mail_access_delete',$data);
+		//				break;
+		//		} // end switch
+	} // end function
+	
+	/*
+	This method is called every n minutes, when the module ist loaded.
+	The method then does a system-monitoring
+	*/
+	// TODO: what monitoring is done should be a config-var
+	function doMonitor()
+	{
+		/* Calls the single Monitoring steps */
+		$this->monitorServer();
+		$this->monitorDiskUsage();
+	}
+	
+	function monitorServer(){
+		global $app;
+		global $conf;
+		
+		/* the id of the server as int */
+		$server_id = intval($conf["server_id"]);
+		
+		/** The type of the data */
+		$type = 'server_load';	
+		
+		/* Delete Data older than 1 day */
+		$this->_delOldRecords($type, 0, 0, 1);
+		
+		/*
+		Fetch the data into a array
+		*/
+		$procUptime = shell_exec("cat /proc/uptime | cut -f1 -d' '");
+		$data['up_days'] = floor($procUptime/86400);
+		$data['up_hours'] = floor(($procUptime-$data['up_days']*86400)/3600);
+		$data['up_minutes'] = floor(($procUptime-$data['up_days']*86400-$data['up_hours']*3600)/60);
+
+		$data['uptime'] = shell_exec("uptime");
+		
+		$tmp = explode(",", $data['uptime'], 3);
+		$tmpUser = explode(" ", trim($tmp[1]));
+		$data['user_online'] = intval($tmpUser[0]);
+		
+		$loadTmp = explode(":" , trim($tmp[2]));
+		$load = explode(",",  $loadTmp[1]);
+		$data['load_1'] = floatval(trim($load[0]));
+		$data['load_5'] = floatval(trim($load[1]));
+		$data['load_15'] = floatval(trim($load[2]));
+		
+		// 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 (".
+			$conf["server_id"] . ", " .
+			"'" . $app->db->quote(serialize($type)) . "', " .
+			time() . ", " .
+			"'" . $app->db->quote(serialize($data)) . "', " .
+			"'" . $state . "'" . 
+			")";
+		$app->db->query($sql);
+	}
+	
+	function monitorDiskUsage() {
+		global $app;
+		global $conf;
+		
+		/* the id of the server as int */
+		$server_id = intval($conf["server_id"]);
+		
+		/** The type of the data */
+		$type = 'disk_usage';	
+		
+		/* Delete Data older than 10 minutes */
+		$this->_delOldRecords($type, 10);
+		
+		/*
+		Fetch the data into a array
+		*/
+		$fd = popen ("df", "r");
+		$buffer = '';
+		while (!feof($fd)) {
+			$buffer .= fgets($fd, 4096);
+		}
+		
+		// split into array
+		$df = split("\n", $buffer);
+		// ignore the first line make a array of the rest
+		for($i=1; $i <= sizeof($df); $i++){
+			if ($df[$i] != '')
+			{
+				$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];
+			}
+		}
+		
+		// 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 (".
+			$conf["server_id"] . ", " .
+			"'" . $app->db->quote(serialize($type)) . "', " .
+			time() . ", " .
+			"'" . $app->db->quote(serialize($data)) . "', " .
+			"'" . $state . "'" . 
+			")";
+		$app->db->query($sql);
+	}
+	//	
+	//	
+	//	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;
+	//		}
+	//	}
+	
+	/*
+	 Deletes Records older than n.
+	*/
+	function _delOldRecords($type, $min, $hour=0, $days=0) {
+		global $app;
+		
+		$now = time();
+		$old = $now - ($min * 60) - ($hour * 60 * 60) - ($days * 24 * 60 * 60);
+		$sql = "DELETE FROM monitor_data " .
+			"WHERE " .
+			"type =" . "'" . $app->db->quote(serialize($type)) . "' " .
+			"AND " .	
+			"created < " . $old;
+		$app->db->query($sql);
+	}
+	
+	
+} // end class
+
+?>
\ No newline at end of file
diff --git a/server/server.php b/server/server.php
index b87ea45..f0eabfc 100644
--- a/server/server.php
+++ b/server/server.php
@@ -72,42 +72,38 @@
 unset($tmp_rec);
 
 if($tmp_num_records > 0) {
-	
-	$app->log("Found $tmp_num_records changes, starting update process.",LOGLEVEL_DEBUG);
-	
+	/*
+	 There is something to do, triggert by the database -> do it!
+	*/
+	// Write the Log
+	$app->log("Found $tmp_num_records changes, starting update process.", LOGLEVEL_DEBUG);
 	// Load required base-classes
 	$app->uses('ini_parser,modules,plugins,file,services');
-	
-	
 	// Get server configuration
 	$conf["serverconfig"] = $app->ini_parser->parse_ini_string(stripslashes($server_db_record["config"]));
-
-	/*
-	 Load the modules that are im the mods-enabled folder
-	*/
-
-	$app->modules->loadModules();
-
-	/*
-	 Load the plugins that are in the plugins-enabled folder
-	*/
-
-	$app->plugins->loadPlugins();
-
-	/*
-	 Go trough the sys_datalog table and call the processing functions
-	 in the modules that are hooked on to the table actions
-	*/
+	// Load the modules that are im the mods-enabled folder
+	$app->modules->loadModules('all');
+	// Load the plugins that are in the plugins-enabled folder
+	$app->plugins->loadPlugins('all');
+	// Go trough the sys_datalog table and call the processing functions
+	// in the modules that are hooked on to the table actions
 	$app->modules->processDatalog();
-	
-	/*
-	 Restart services that need to be restarted after configuration
-	*/
+	// Restart services that need to be restarted after configuration
 	$app->services->processDelayedActions();
-	
-	
 } else {
-	$app->log('No Updated records found.',LOGLEVEL_DEBUG);
+	/*
+	 There is no trigger inside the database -> load only the core, maybe they have to do something
+	*/
+	// Write the log
+	$app->log('No Updated records found, starting only the core.', LOGLEVEL_DEBUG);
+	// Load required base-classes
+	$app->uses('ini_parser,modules,plugins,file,services');
+	// Get server configuration
+	$conf["serverconfig"] = $app->ini_parser->parse_ini_string(stripslashes($server_db_record["config"]));
+	// Load the modules that are im the mods-core folder
+	$app->modules->loadModules('core');
+	// Load the plugins that are in the plugins-core folder
+	$app->plugins->loadPlugins('core');
 }
 
 /*

--
Gitblit v1.9.1