From 66c3bc24f069a2854bdf1eeebb6dcb51f6ef0afb Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Wed, 28 Oct 2009 14:30:28 -0400
Subject: [PATCH] Implemented: FS#757 - Add "custom" option to transports

---
 server/cron_daily.php |  123 ++++++++++++++++++++++++++++++++--------
 1 files changed, 97 insertions(+), 26 deletions(-)

diff --git a/server/cron_daily.php b/server/cron_daily.php
index 7aa6af2..80f4158 100644
--- a/server/cron_daily.php
+++ b/server/cron_daily.php
@@ -48,13 +48,13 @@
 $sql = "SELECT mailuser_id,maildir FROM mail_user WHERE server_id = ".$conf["server_id"];
 $records = $app->db->queryAllRecords($sql);
 foreach($records as $rec) {
-	if(@is_file($rec["maildir"].'.ispconfig_mailsize')) {
+	if(@is_file($rec["maildir"].'/ispconfig_mailsize')) {
 		
 		// rename file
-		rename($rec["maildir"].'.ispconfig_mailsize',$rec["maildir"].'.ispconfig_mailsize_save');
+		rename($rec["maildir"].'/ispconfig_mailsize',$rec["maildir"].'/ispconfig_mailsize_save');
 		
 		// Read the file
-		$lines = file($rec["maildir"].'.ispconfig_mailsize_save');
+		$lines = file($rec["maildir"].'/ispconfig_mailsize_save');
 		$mail_traffic = 0;
 		foreach($lines as $line) {
 			$mail_traffic += intval($line);
@@ -62,13 +62,13 @@
 		unset($lines);
 		
 		// Delete backup file
-		if(@is_file($rec["maildir"].'.ispconfig_mailsize_save')) unlink($rec["maildir"].'.ispconfig_mailsize_save');
+		if(@is_file($rec["maildir"].'/ispconfig_mailsize_save')) unlink($rec["maildir"].'/ispconfig_mailsize_save');
 		
 		// Save the traffic stats in the sql database
 		$tstamp = date("Y-m");
 		
 		$sql = "SELECT * FROM mail_traffic WHERE month = '$tstamp' AND mailuser_id = ".$rec["mailuser_id"];
-		$tr = $app->db->queryOneRecord($sql);
+		$tr = $app->dbmaster->queryOneRecord($sql);
 		
 		$mail_traffic += $tr["traffic"];
 		if($tr["traffic_id"] > 0) {
@@ -76,7 +76,7 @@
 		} else {
 			$sql = "INSERT INTO mail_traffic (month,mailuser_id,traffic) VALUES ('$tstamp',".$rec["mailuser_id"].",$mail_traffic)";
 		}
-		$app->db->query($sql);
+		$app->dbmaster->query($sql);
 		echo $sql;
 		
 	}
@@ -87,20 +87,63 @@
 // Create webalizer statistics
 #######################################################################################################
 
+function setConfigVar( $filename, $varName, $varValue ) {
+	if($lines = @file($filename)) {
+		$out = '';
+		$found = 0;
+		foreach($lines as $line) {
+			list($key, $value) = split("[\t= ]+", $line, 2);
+			if($key == $varName) {
+				$out .= $varName." ".$varValue."\n";
+				$found = 1;
+			} else {
+				$out .= $line;
+			}
+		}
+		if($found == 0) {
+			//* add \n if the last line does not end with \n or \r
+			if(substr($out,-1) != "\n" && substr($out,-1) != "\r") $out .= "\n";
+			//* add the new line at the end of the file
+			if($append == 1) $out .= $varName." ".$varValue."\n";
+		}
+
+		file_put_contents($filename,$out);
+	}
+}
+
 
 $sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE server_id = ".$conf["server_id"];
 $records = $app->db->queryAllRecords($sql);
+
 foreach($records as $rec) {
-	$yesterday = date("mdY",time() - 86400);
+	$yesterday = date("Ymd",time() - 86400);
 	$logfile = escapeshellcmd($rec["document_root"].'/log/'.$yesterday.'-access.log');
-	if(@is_file($logfile)) {
-		$domain = escapeshellcmd($rec["domain"]);
-		$statsdir = escapeshellcmd($rec["document_root"].'/web/stats');
-		$webalizer = '/usr/bin/webalizer';
-		$webalizer_conf = '/etc/webalizer/webalizer.conf';
-		if(!@is_dir($statsdir)) mkdir($statsdir);
-		exec("$webalizer -c $webalizer_conf -n $domain -s $domain -r $domain -q -T -o $statsdir $logfile");
+	if(!@is_file($logfile)) {
+		$logfile = escapeshellcmd($rec["document_root"].'/log/'.$yesterday.'-access.log.gz');
+	if(!@is_file($logfile)) {
+		continue;
 	}
+}
+
+$domain = escapeshellcmd($rec["domain"]);
+$statsdir = escapeshellcmd($rec["document_root"].'/web/stats');
+$webalizer = '/usr/bin/webalizer';
+$webalizer_conf_main = '/etc/webalizer/webalizer.conf';
+$webalizer_conf = escapeshellcmd($rec["document_root"].'/log/webalizer.conf');
+
+if(!@is_file($webalizer_conf)) {
+	exec("cp $webalizer_conf_main $webalizer_conf");
+}
+
+if(@is_file($webalizer_conf)) {
+	setConfigVar($webalizer_conf, 'Incremental', 'yes');
+	setConfigVar($webalizer_conf, 'IncrementalName', $statsdir.'/webalizer.current');
+	setConfigVar($webalizer_conf, 'HistoryName', $statsdir.'/webalizer.hist');
+}
+
+
+if(!@is_dir($statsdir)) mkdir($statsdir);
+	exec("$webalizer -c $webalizer_conf -n $domain -s $domain -r $domain -q -T -p -o $statsdir $logfile");
 }
 
 #######################################################################################################
@@ -110,34 +153,62 @@
 $sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE server_id = ".$conf["server_id"];
 $records = $app->db->queryAllRecords($sql);
 foreach($records as $rec) {
-	$yesterday = date("mdY",time() - 86400);
+	$yesterday = date("Ymd",time() - 86400);
 	$logfile = escapeshellcmd($rec["document_root"].'/log/'.$yesterday.'-access.log');
 	if(@is_file($logfile)) {
 		// Compress yesterdays logfile
 		exec("gzip -c $logfile > $logfile.gz");
+		unlink($logfile);
 	}
 	
 	// delete logfiles after 30 days
-	$month_ago = date("mdY",time() - 86400 * 30);
-	$logfile = escapeshellcmd($rec["document_root"].'/log/'.$yesterday.'-access.log.gz');
+	$month_ago = date("Ymd",time() - 86400 * 30);
+	$logfile = escapeshellcmd($rec["document_root"].'/log/'.$month_ago.'-access.log.gz');
 	if(@is_file($logfile)) {
 		unlink($logfile);
 	}
 }
 
 #######################################################################################################
-// Cleanup logs in database
+// Cleanup logs in master database (only the "master-server")
 #######################################################################################################
-//* Keep 7 days in sys_log
-$tstamp = time() - (60*60*24*7);
-$sql = "DELETE FROM sys_log WHERE tstamp < $tstamp AND server_id = ".$conf["server_id"];
-$app->db->query($sql);
 
-//* Keep 7 days in sys_datalog
-$tstamp = time() - (60*60*24*7);
-$sql = "DELETE FROM sys_datalog WHERE tstamp < $tstamp AND server_id = ".$conf["server_id"];
-$app->db->query($sql);
+if ($app->dbmaster == $app->db) {
+	/** 7 days */
+	$tstamp = time() - (60*60*24*7);
 
+	/*
+	 *  Keep 7 days in sys_log
+	 * (we can delete the old items, because if they are OK, they don't interrest anymore
+	 * if they are NOT ok, the server will try to process them in 1 minute and so the
+	 * error appears again after 1 minute. So it is no problem to delete the old one!
+	 */
+	$sql = "DELETE FROM sys_log WHERE tstamp < $tstamp AND server_id != 0";
+	$app->dbmaster->query($sql);
+
+	/*
+	 * The sys_datalog is more difficult.
+	 * 1) We have to keet ALL entries with
+	 *    server_id=0, because they depend on ALL servers (even if they are not
+	 *    actually in the system (and will be insered in 3 days or so).
+	 * 2) We have to keey ALL entries which are not actually precessed by the
+	 *    server never mind how old they are!
+	 */
+
+	/* First we need all servers and the last sys_datalog-id they processed */
+	$sql = "SELECT server_id, updated FROM server ORDER BY server_id";
+	$records = $app->dbmaster->queryAllRecords($sql);
+
+	/* Then delete server by server */
+	foreach($records as $server) {
+		$sql = "DELETE FROM sys_datalog WHERE tstamp < " . $tstamp .
+			" AND server_id != 0 " . // to be more secure!
+			" AND server_id = " . intval($server['server_id']) .
+			" AND datalog_id < " . intval($server['updated']);
+//		echo $sql . "\n";
+		$app->dbmaster->query($sql);
+	}
+}
 
 die("finished.\n");
 ?>
\ No newline at end of file

--
Gitblit v1.9.1