#!/usr/bin/perl
# gps-maintain.pl Database maintenance script for gps
# (C) Michael Moritz <mimo/at/restoel.net>
#
# 0.3 2004-09-14 included patch by Xin LI <delphij/at/msn.com>:
# replaced hardcoded dbname 'greylist' with
# value from config
# 0.2 2004-07-06 added age only functionality [mimo]
use Fcntl;
use DBI;
use Sys::Syslog qw(:DEFAULT setlogsock);
#
# Usage: gps-maintain.pl [-v]
#
sub usage {
print "Usage: ".$0." [-v] [-delete] [-eq|-lt count] -age seconds configfile\n";
}
sub read_config {
my $fn = shift;
my $User_Preferences;
open(CONFIG, $fn) or die "can't open $fn: $!";
while (<CONFIG>) {
chomp; # no newline
s/#.*//; # no comments
s/^\s+//; # no leading white
s/\s+$//; # no trailing white
next unless length; # anything left?
my ($var, $value) = split(/\s*=\s*/, $_, 2);
$User_Preferences->{$var} = $value;
}
close(CONFIG);
return $User_Preferences;
}
my $configfile = "";
my $equals = "";
my $lessthan = "";
my $age = 0;
my $delete = 0;
while ($option = shift(@ARGV)) {
if ($option eq "-v") {
$verbose = 1;
} else {
if( $option eq "-eq") {
$equals = shift(@ARGV);
} else {
if( $option eq "-lt" ) {
$lessthan = shift(@ARGV);
} else {
if( $option eq "-age" ) {
$age = shift(@ARGV);
} else {
if( $option eq "-delete" ) {
$delete = 1;
} else {
if( $configfile eq "" ) {
$configfile = $option;
} else {
print STDERR "Invalid option: %s.",$option;
&usage();
exit 1;
}
}
}
}
}
}
}
if(($configfile eq "")
|| ($age == 0) ) {
&usage();
exit 1;
}
# put together the sql params
my $uts = time() - $age;
my $count = "";
if( $lessthan ne "") {
$count = "< $lessthan";
} else {
if( $equals ne "") {
$count = "= $equals";
} else {
# usage();
# exit(-1);
$count = "";
}
}
my $sqlString = "";
if($count) {
$sqlString = "WHERE uts < ".$uts." AND count ".$count;
} else {
$sqlString = "WHERE uts < ".$uts;
}
if($verbose) {
print STDOUT "will use: ".$sqlString."\n";
}
my $hash_ref = &read_config($configfile);
#print "the keys... ", sort keys %$hash_ref, "...\n";
if($verbose) {
while ( my ($key, $value) = each(%$hash_ref) ) {
print "$key => $value\n";
}
}
my $dbh = DBI->connect('DBI:'.$hash_ref->{dbtype}.':'.$hash_ref->{db_dbname},
$hash_ref->{db_username},
$hash_ref->{db_password} )
or die "Couldn't connect to database: " . DBI->errstr;
if($verbose) {
print STDOUT "Connected to DB\n";
}
# begin
#last minute
if( $verbose ) { # if verbose we show the entries to be deleted
print STDOUT "mysql: 'SELECT * FROM Triplets ".$sqlString."\n";
my $sth = $dbh->prepare('SELECT * FROM Triplets '.$sqlString)
or die "Couldn't prepare statement: " . $dbh->errstr;
$sth->execute() # Execute
or die "Couldn't execute statement: " . $sth->errstr;
my $count = 1;
while (@data = $sth->fetchrow_array()) {
print $count.': ';
my $i = 0;
while($i < 5) {
print $data[$i].", ";
$i++;
}
$count++;
print "\n";
}
$sth->finish;
}
if( $delete == 1 ) {
my $arows = $dbh->do('DELETE FROM Triplets '.$sqlString)
or die "Couldn't do statement: " . $dbh->errstr;
print STDOUT 'Deleted '.$arows." rows \n";
}
# end
if($verbose) {
print STDOUT "Disconnecting from DB\n";
}
$dbh->disconnect;
syntax highlighted by Code2HTML, v. 0.9.1