X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=Prune.php;h=2ed9ea3debe6eef8dd18b24740658236b7477962;hp=da83a4287edc6d5067ffc110dc2d95fa287ebe36;hb=refs%2Fheads%2Fwip_alan_T6343_generic_progress_bar_delete;hpb=74314f448cbd642e76146292d707851796ec6d5a diff --git a/Prune.php b/Prune.php index da83a428..2ed9ea3d 100644 --- a/Prune.php +++ b/Prune.php @@ -25,27 +25,22 @@ 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.. - $f = DB_DataObject::Factory('reader_article'); - $f->query(" - DELETE FROM Events where - event_when < NOW() - INTERVAL 6 MONTH - AND - action IN ('RELOAD', 'LOGIN') - LIMIT 100000 - "); + // prune irrelivant stuff.. + $this->prune((int)$opts['months']); @@ -54,13 +49,71 @@ class Pman_Core_Prune extends Pman function prune($inM) { // 40 seconds ? to delete 100K records.. - DB_DataObject::debugLevel(1); - $f = DB_DataObject::Factory('reader_article'); + // DB_DataObject::debugLevel(1); + /* + $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(" + DELETE FROM Events where + event_when < NOW() - INTERVAL 1 MONTH + AND + 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"; + + + + // pruning is for our press project - so we do not clean up dependant tables at present.. if (function_exists('posix_getpwuid')) {