[Koha-patches] [PATCH 1/2] [SIGNED-OFF] Enhancement 5074 (Adding possibility to cleanup_database.pl to purge only older sessions) [UPDATED for master]
Galen Charlton
gmcharlt at gmail.com
Thu Oct 28 15:05:20 CEST 2010
From: Marcel de Rooy <M.de.Rooy at rijksmuseum.nl>
Currently, the misc/cronjobs script cleanup_database truncates the session table (deleting all records, including active sessions).
With an additional parameter sessdays, this behavior could be changed or (perhaps better) extended. If the parameter sessdays is passed along with a number of days, the script only deletes older session records. This is accomplished by examining the values of lasttime, atime or ctime in the record.
So, calling the script like:
./cleanup_database.pl -v -sessions -sessdays 7
will only delete sessions records older than 7 days. The "old style" call
./cleanup_database.pl -v -sessions
still works too and truncates the table as before.
Signed-off-by: Galen Charlton <gmcharlt at gmail.com>
---
misc/cronjobs/cleanup_database.pl | 45 ++++++++++++++++++++++++++++++++++--
1 files changed, 42 insertions(+), 3 deletions(-)
diff --git a/misc/cronjobs/cleanup_database.pl b/misc/cronjobs/cleanup_database.pl
index f811b24..7d5bcd1 100755
--- a/misc/cronjobs/cleanup_database.pl
+++ b/misc/cronjobs/cleanup_database.pl
@@ -37,12 +37,13 @@ use Getopt::Long;
sub usage {
print STDERR <<USAGE;
-Usage: $0 [-h|--help] [--sessions] [-v|--verbose] [--zebraqueue DAYS]
+Usage: $0 [-h|--help] [--sessions] [--sessdays DAYS] [-v|--verbose] [--zebraqueue DAYS]
[-m|--mail]
-h --help prints this help message, and exits, ignoring all
other options
--sessions purge the sessions table. If you use this while users
are logged into Koha, they will have to reconnect.
+ --sessdays DAYS purge only sessions older than DAYS days (use together with sessions parameter).
-v --verbose will cause the script to give you a bit more information
about the run.
--zebraqueue DAYS purge completed entries from the zebraqueue from
@@ -52,11 +53,12 @@ USAGE
exit $_[0];
}
-my ($help, $sessions, $verbose, $zebraqueue_days, $mail);
+my ($help, $sessions, $sess_days, $verbose, $zebraqueue_days, $mail);
GetOptions(
'h|help' => \$help,
'sessions' => \$sessions,
+ 'sessdays:i' => \$sess_days,
'v|verbose' => \$verbose,
'm|mail' => \$mail,
'zebraqueue:i' => \$zebraqueue_days,
@@ -77,7 +79,7 @@ my $sth;
my $sth2;
my $count;
-if ($sessions) {
+if ($sessions && !$sess_days) { #old behavior
if ($verbose){
print "Session purge triggered.\n";
$sth = $dbh->prepare("SELECT COUNT(*) FROM sessions");
@@ -91,6 +93,15 @@ if ($sessions) {
print "Done with session purge.\n";
}
}
+elsif($sessions && $sess_days>0) { #new behavior with number of days old
+ if ($verbose){
+ print "Session purge triggered with days>$sess_days.\n";
+ }
+ RemoveOldSessions();
+ if ($verbose){
+ print "Done with session purge with days>$sess_days.\n";
+ }
+}
if ($zebraqueue_days){
$count = 0;
@@ -122,3 +133,31 @@ if ($mail) {
print "Done with purging the mail queue.\n" if ($verbose);
}
exit(0);
+
+sub RemoveOldSessions {
+ my ($id, $a_session, $limit, $lasttime);
+ $limit= time() - 24*3600*$sess_days;
+
+ $sth= $dbh->prepare("SELECT id, a_session FROM sessions");
+ $sth->execute or die $dbh->errstr;
+ $sth->bind_columns(\$id, \$a_session);
+ $sth2 = $dbh->prepare("DELETE FROM sessions WHERE id=?");
+ $count=0;
+
+ while ($sth->fetch) {
+ $lasttime=0;
+ if($a_session =~ /lasttime:\s+(\d+)/) {
+ $lasttime= $1;
+ }
+ elsif($a_session =~ /(ATIME|CTIME):\s+(\d+)/ ) {
+ $lasttime= $2;
+ }
+ if($lasttime && $lasttime < $limit) {
+ $sth2->execute($id) or die $dbh->errstr;
+ $count++;
+ }
+ }
+ if ($verbose){
+ print "$count sessions were deleted.\n";
+ }
+}
--
1.7.0
More information about the Koha-patches
mailing list