# HG changeset patch # User heiko # Date 1167825416 0 # Node ID 7062e28b526b65ebd52e649f098152d15bad3920 # Parent 57fb725ce549a9ff1b2ae2700df40ddb06b47855 purge option diff -r 57fb725ce549 -r 7062e28b526b debian/cron.daily --- a/debian/cron.daily Wed Jan 03 10:18:24 2007 +0000 +++ b/debian/cron.daily Wed Jan 03 11:56:56 2007 +0000 @@ -1,2 +1,3 @@ #! /bin/bash exigrey --clean 3 '*' +exigrey --purge 5 '*' diff -r 57fb725ce549 -r 7062e28b526b exigrey.pl --- a/exigrey.pl Wed Jan 03 10:18:24 2007 +0000 +++ b/exigrey.pl Wed Jan 03 11:56:56 2007 +0000 @@ -10,6 +10,7 @@ !ME! --list [db] # list all items !ME! --stat [db ...] # print short statistic !ME! --clean [days [db ...]] # remove items not used since days + !ME! --purge [days [db ...]] # remove items older than days !ME! --dbs [glob] # list dbm files in default directory Defaults: delay: !$DEFAULT{delay}! @@ -37,6 +38,7 @@ my $opt_insert; my $opt_help; my $opt_clean; +my $opt_purge; my $opt_dbs; sub getDBs($); @@ -49,6 +51,7 @@ "insert!" => \$opt_insert, "stats!" => \$opt_stats, "clean!" => \$opt_clean, + "purge!" => \$opt_purge, "dbs!" => \$opt_dbs, "help!" => \$opt_help, ) or die ME.": Bad usage, try ".ME." --help.\n"; @@ -79,13 +82,14 @@ my %h; my $db = connectDB(\%h, $_); - my ($seen, $returned, $oldest); - $oldest = time(); + my ($seen, $returned, $oldest_c, $oldest_u); + $oldest_c = $oldest_u = time(); iterate(%h, sub { my ($item, $v0, $v1, $dv) = @_; ++$seen; ++$returned if $dv; - $oldest = $v0 if $v0 < $oldest; + $oldest_c = $v0 if $v0 < $oldest_c; + $oldest_u = $v1 if $v1 < $oldest_u; }); $_ = <<__; @@ -93,7 +97,8 @@ db: $db (ls: %.1f MB / du: %.1f MB) total: $seen not returned: %d (%d%%) - oldest: %.1f days (%s) +oldest (created): %.1f days (%s) + oldest (used): %.1f days (%s) __ printf $_, scalar(localtime), @@ -101,31 +106,39 @@ ((stat $db)[12]*512)/(1024*1024), $seen - $returned, int(100 * ($seen-$returned)/$seen), - ((time - $oldest) / 86400), scalar(localtime $oldest); + ((time - $oldest_c) / 86400), scalar(localtime $oldest_c), + ((time - $oldest_u) / 86400), scalar(localtime $oldest_u); print "\n" if @ARGV; } exit 0; } - if ($opt_clean) { + if ($opt_clean or $opt_purge) { + my $cut = time() - (86400 * (@ARGV ? shift : 7)); + @ARGV = ($DEFAULT{db}) unless @ARGV; @ARGV = getDBs($ARGV[0]) if $ARGV[0] =~ /[\*\?]/; + foreach (@ARGV ? @ARGV : $DEFAULT{db}) { my %h; my $tmp = tmpfile(); my $db = connectDB(\%h, $_); iterate(%h, sub { my ($item, $v0, $v1, $dv) = @_; - print $tmp $item if $v1 <= $cut; + my $rv = defined $opt_purge ? \$v0 : \$v1; + print $tmp "$item\0" if $$rv <= $cut; }); seek($tmp, 0, 0) or die "Can't seek tmpfile"; + + $/ = "\0"; delete $h{$_} while <$tmp>; + print "$. items deleted from $db\n"; + close($tmp); - print "$. items deleted from $db\n"; } exit 0; }