X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=Prune.php;h=2ed9ea3debe6eef8dd18b24740658236b7477962;hp=a63daac81318f11aad91c534c54bff314ede95eb;hb=refs%2Fheads%2Fwip_alan_T6343_generic_progress_bar_delete;hpb=48e0efff035d62208c066b65da9585fc207fed24 diff --git a/Prune.php b/Prune.php index a63daac8..2ed9ea3d 100644 --- a/Prune.php +++ b/Prune.php @@ -25,19 +25,21 @@ class Pman_Core_Prune extends Pman var $cli = false; function getAuth() { + + $ff = HTML_FlexyFramework::get(); if (!empty($ff->cli)) { $this->cli = true; return true; } -// return true;// for test only + + // return true;// for test only return false; } - function get($m="", $opts) + function get($m="", $opts=array()) { - - // prune irrelivant stuff.. + // prune irrelivant stuff.. @@ -48,15 +50,18 @@ class Pman_Core_Prune extends Pman { // 40 seconds ? to delete 100K records.. // DB_DataObject::debugLevel(1); - $f = DB_DataObject::Factory('reader_article'); + /* + $f = DB_DataObject::Factory('Events'); $f->query(" DELETE FROM Events where event_when < NOW() - INTERVAL {$inM} MONTH + AND + action != 'NOTIFY' LIMIT 100000 "); - + */ // notificication events occur alot - so we should trash them more frequently.. - $f = DB_DataObject::Factory('reader_article'); + /* $f = DB_DataObject::Factory('reader_article'); $f->query(" DELETE FROM Events where event_when < NOW() - INTERVAL 1 MONTH @@ -64,9 +69,48 @@ class Pman_Core_Prune extends Pman action IN ('NOTIFY') LIMIT 100000 "); - + */ // rather than deleting them all, it's probably best to just delete notify events that occured to often. // eg. when we tried to deliver multiple times without success... + /* + * + SELECT on_id, on_table, min(id) as min_id, max(id) as max_id, count(*) as mm FROM Events + WHERE action = 'NOTIFY' and event_when < NOW() - INTERVAL 1 WEEK GROUP BY on_id, on_table HAVING mm > 2 ORDER BY mm desc; + */ + + //DB_DataObject::debugLevel(1); + $f = DB_DataObject::Factory('Events'); + $before = $f->count(); + + $f = DB_DataObject::Factory('Events'); + $f->selectAdd(); + $f->selectAdd("on_id, on_table, min(id) as min_id, max(id) as max_id, count(*) as mm"); + $f->whereAdd("action = 'NOTIFY' and event_when < NOW() - INTERVAL 1 WEEK"); + $f->groupBy('on_id, on_table'); + $f->having("mm > 2"); + $f->orderBy('mm desc') ; + $f->limit(10000); + $ar = $f->fetchAll(); + + foreach($ar as $f) { + $q = DB_DataObject::Factory('Events'); + $q->query("DELETE FROM Events where + action = 'NOTIFY' + AND + on_id = {$f->on_id} + AND + on_table = '{$q->escape($f->on_table)}' + AND + id > {$f->min_id} -- allow the first one to stay.... + AND + id <= {$f->max_id} + "); + } + + $f = DB_DataObject::Factory('Events'); + $after = $f->count(); + echo "DELETED : " . ($before - $after) . " records\n"; +