vogelor
2008-12-14 e265dcb466a11353dc5ebe0818670da316a49721
Fixed a bug in the jobqueue - viewer
Fixed a bug in deleting old record from the syslog and the sys_datalog
2 files modified
47 ■■■■ changed files
interface/web/monitor/datalog_list.php 2 ●●● patch | view | raw | blame | history
server/cron_daily.php 45 ●●●● patch | view | raw | blame | history
interface/web/monitor/datalog_list.php
@@ -50,7 +50,7 @@
$sql = '(';
foreach($servers as $s) {
    $sql .= " (datalog_id > ".$s['updated']." AND server_id = ".$s['server_id'].") AND ";
    $sql .= " (datalog_id > ".$s['updated']." AND server_id = ".$s['server_id'].") OR ";
}
$sql = substr($sql,0,-4);
$sql .= ')';
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");
?>