#!/usr/bin/perl # gps-maintain.pl Database maintenance script for gps # (C) Michael Moritz # # 0.3 2004-09-14 included patch by Xin LI : # 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 () { 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;