]>
Commit | Line | Data |
---|---|---|
86674d25 TC |
1 | #!/usr/bin/perl |
2 | use strict; | |
3 | use warnings; | |
4 | use FindBin; | |
5 | use lib "$FindBin::Bin/../cgi-bin/modules"; | |
6 | use BSE::API qw(bse_init bse_cfg); | |
7 | use BSE::DB; | |
8 | use Getopt::Long; | |
9 | use Time::HiRes qw(time); | |
10 | ||
11 | my $start_time = time; | |
12 | my $verbose; | |
13 | GetOptions("v:i" => \$verbose); | |
14 | !$verbose and defined $verbose and $verbose = 1; | |
df1ad4d3 | 15 | $verbose ||= 0; |
86674d25 TC |
16 | |
17 | { | |
18 | bse_init("../cgi-bin"); | |
19 | my $cfg = bse_cfg(); | |
20 | ||
21 | my $dbh = BSE::DB->single->dbh; | |
22 | ||
23 | my $day_limit = $cfg->entry("session cleanup", "days", 30); | |
24 | my $per_limit = $cfg->entry("session cleanup", "per", 1000); | |
25 | my $count_limit = $cfg->entry("session cleanup", "count", 1000); | |
26 | my $optimize = $cfg->entry("session cleanup", "optimize", 1); | |
27 | msg(3, "Limits: $day_limit days, $per_limit records per request, $count_limit requests\n"); | |
28 | ||
29 | my $sql = <<'SQL'; | |
30 | delete low_priority from sessions | |
31 | where whenChanged < date_sub(now(), interval ? day) | |
32 | limit ? | |
33 | SQL | |
34 | ||
35 | my $sth = $dbh->prepare($sql) | |
36 | or die "Cannot prepare sql: ", $dbh->errstr, "\n"; | |
37 | ||
38 | my $i = 0; | |
39 | my $removed = 0; | |
40 | while ($i++ < $count_limit) { | |
41 | my $thistime = $sth->execute($day_limit, $per_limit) | |
42 | or die "Could not execute delete sql: ", $dbh->errstr, "\n"; | |
43 | $thistime += 0; # clean up "0E0" | |
44 | msg(2, "Loop $i/$count_limit: removed $thistime records\n"); | |
45 | $removed += $thistime; | |
46 | $thistime > 0 or last; | |
47 | } | |
48 | msg(1, "Removed $removed records\n"); | |
49 | if ($optimize) { | |
50 | msg(2, "Optimizing table\n"); | |
51 | $dbh->do("optimize table sessions") | |
52 | or die "Cannot optimize table: ", $dbh->errstr, "\n"; | |
53 | } | |
54 | msg(1, "Finished\n"); | |
55 | ||
56 | exit; | |
57 | } | |
58 | ||
59 | sub msg { | |
60 | my ($level, $text) = @_; | |
61 | ||
62 | if ($level <= $verbose) { | |
63 | my $diff = time() - $start_time; | |
64 | printf("%.2f: %s", $diff, $text); | |
65 | } | |
66 | } |