-
Notifications
You must be signed in to change notification settings - Fork 1
/
session-cleanup.pl
executable file
·163 lines (131 loc) · 4.67 KB
/
session-cleanup.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/usr/bin/perl
#####################################################################
#
# session-cleanup.pl
#
# Loeschung alter Sessions
#
# Dieses File ist (C) 2003-2016 Oliver Flimm <flimm@openbib.org>
#
# Dieses Programm ist freie Software. Sie koennen es unter
# den Bedingungen der GNU General Public License, wie von der
# Free Software Foundation herausgegeben, weitergeben und/oder
# modifizieren, entweder unter Version 2 der Lizenz oder (wenn
# Sie es wuenschen) jeder spaeteren Version.
#
# Die Veroeffentlichung dieses Programms erfolgt in der
# Hoffnung, dass es Ihnen von Nutzen sein wird, aber OHNE JEDE
# GEWAEHRLEISTUNG - sogar ohne die implizite Gewaehrleistung
# der MARKTREIFE oder der EIGNUNG FUER EINEN BESTIMMTEN ZWECK.
# Details finden Sie in der GNU General Public License.
#
# Sie sollten eine Kopie der GNU General Public License zusammen
# mit diesem Programm erhalten haben. Falls nicht, schreiben Sie
# an die Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
# MA 02139, USA.
#
#####################################################################
#####################################################################
# Einladen der benoetigten Perl-Module
#####################################################################
use strict;
use warnings;
use Getopt::Long;
use Date::Manip;
use DBI;
use Log::Log4perl qw(get_logger :levels);
use OpenBib::Config;
use OpenBib::Session;
use OpenBib::User;
our ($help,$logfile,$loglevel,$limit,$from,$to);
&GetOptions(
"help" => \$help,
"loglevel=s" => \$loglevel,
"logfile=s" => \$logfile,
"limit=s" => \$limit,
"from=s" => \$from,
"to=s" => \$to,
);
if ($help){
print_help();
}
$loglevel=($loglevel)?$loglevel:"INFO";
$logfile=($logfile)?$logfile:"/var/log/openbib/session-cleanup.log";
my $log4Perl_config = << "L4PCONF";
log4perl.rootLogger=$loglevel, LOGFILE, Screen
log4perl.appender.LOGFILE=Log::Log4perl::Appender::File
log4perl.appender.LOGFILE.filename=$logfile
log4perl.appender.LOGFILE.mode=append
log4perl.appender.LOGFILE.layout=Log::Log4perl::Layout::PatternLayout
log4perl.appender.LOGFILE.layout.ConversionPattern=%d [%c]: %m%n
log4perl.appender.Screen=Log::Dispatch::Screen
log4perl.appender.Screen.layout=Log::Log4perl::Layout::PatternLayout
log4perl.appender.Screen.layout.ConversionPattern=%d [%c]: %m%n
L4PCONF
Log::Log4perl::init(\$log4Perl_config);
# Log4perl logger erzeugen
my $logger = get_logger();
my $config = OpenBib::Config->new;
my $session = OpenBib::Session->new;
#####################################################################
# Verbindung zur SQL-Datenbank herstellen
my $thistimedate = Date::Manip::ParseDate("now");
my $expiretimedate = Date::Manip::DateCalc($thistimedate,"-24hours");
$expiretimedate = Date::Manip::UnixDate($expiretimedate,"%Y-%m-%d %H:%M:%S");
my $where_ref = {
};
my $options_ref = {
group_by => ['id','createtime'],
order_by => ['createtime asc'],
};
if ($limit){
$options_ref->{rows} = $limit;
}
if ($from && $to){
$where_ref = {
-and => [
createtime => { '<' => $to },
createtime => { '>' => $from },
],
};
}
else {
$where_ref = {
createtime => { '<' => $expiretimedate },
};
}
my $open_sessions = $session->get_schema->resultset('Sessioninfo')->search(
$where_ref,
$options_ref,
);
my $count = 1;
foreach my $sessioninfo ($open_sessions->all){
my $sessionID = $sessioninfo->sessionid;
my $createtime = $sessioninfo->createtime;
my $viewname = $sessioninfo->viewname;
# last if ($count == 10);
$logger->info("Purging SessionID $sessionID from $createtime");
my $session = new OpenBib::Session({sessionID => $sessionID, view => $viewname });
$session->clear_data();
# Zwischengespeicherte Benutzerinformationen loeschen
my $user = new OpenBib::User();
my $userid = $user->get_userid_of_session($sessionID);
if ($userid){
$user->clear_cached_userdata($userid);
}
if ($count % 10000 == 0){
$logger->error("Purged $count sessions");
}
$count++;
}
sub print_help {
print "session-cleanup.pl - Schliessen abgelaufener Sessions und Uebertragung in Statistik-DB\n\n";
print "Optionen: \n";
print " -help : Diese Informationsseite\n";
print " --loglevel=DEBUG : Loglevel [DEBUG|INFO|ERROR]\n";
print " --logfile=... : Log-Datei\n";
print " --limit=... : Maximale Zahl an zu schliessenden Sessions\n";
print " --from=... : Von Datum (Format: yyyy-mm-dd hh:mm:ss), nur zusammen mit --to\n";
print " --to=... : Bis Datum (Format: yyyy-mm-dd hh:mm:ss), nur zusammen mit --from\n";
exit;
}