X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=Prune.php;h=2ed9ea3debe6eef8dd18b24740658236b7477962;hp=c4642f61e7f50134aaa6c09a9b749fc07e53a110;hb=refs%2Fheads%2Fwip_alan_T6343_generic_progress_bar_delete;hpb=e804d7628a18b267b444cab3bc0596d8cd6276e0 diff --git a/Prune.php b/Prune.php index c4642f61..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,13 +50,16 @@ 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->query(" @@ -67,8 +72,16 @@ class Pman_Core_Prune extends Pman */ // 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"); @@ -76,20 +89,27 @@ class Pman_Core_Prune extends Pman $f->groupBy('on_id, on_table'); $f->having("mm > 2"); $f->orderBy('mm desc') ; - $f->limit(1000); + $f->limit(10000); $ar = $f->fetchAll(); + foreach($ar as $f) { - $f = DB_DataObject::Factory('Events'); - $f->query("DELETE FROM Events where + $q = DB_DataObject::Factory('Events'); + $q->query("DELETE FROM Events where action = 'NOTIFY' AND on_id = {$f->on_id} AND - id > {$f->min_id} AND id < {$f->max_id} + 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";