From e265dcb466a11353dc5ebe0818670da316a49721 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Sun, 14 Dec 2008 09:43:58 -0500
Subject: [PATCH] Fixed a bug in the jobqueue - viewer Fixed a bug in deleting old record from the syslog and the sys_datalog
---
server/cron_daily.php | 45 ++++++++++++++++++++++++++++++++++++---------
1 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/server/cron_daily.php b/server/cron_daily.php
index 1d615da..3c85c84 100644
--- a/server/cron_daily.php
+++ b/server/cron_daily.php
@@ -126,18 +126,45 @@
}
#######################################################################################################
-// 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 != 0";
-$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 != 0";
-$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