diff --git a/interface/web/monitor/datalog_list.php b/interface/web/monitor/datalog_list.php index 82ab334195b87f016f988ca305e5ba4a8e3444a8..3dc9f8673237982885eba077ade5167e28043cd2 100644 --- a/interface/web/monitor/datalog_list.php +++ b/interface/web/monitor/datalog_list.php @@ -50,7 +50,7 @@ $servers = $app->db->queryAllRecords("SELECT server_id, updated FROM server"); $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 .= ')'; diff --git a/server/cron_daily.php b/server/cron_daily.php index 1d615daffcdcc89c1b0e84e332fcb466f55f7a2f..3c85c84dbc07f99a02b9774bb88de6f82fc28251 100644 --- a/server/cron_daily.php +++ b/server/cron_daily.php @@ -126,18 +126,45 @@ foreach($records as $rec) { } ####################################################################################################### -// 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