]> git.imager.perl.org - bse.git/blame - site/util/bse_session_clean.pl
wraparray documentation fixes
[bse.git] / site / util / bse_session_clean.pl
CommitLineData
86674d25
TC
1#!/usr/bin/perl
2use strict;
3use warnings;
4use FindBin;
5use lib "$FindBin::Bin/../cgi-bin/modules";
6use BSE::API qw(bse_init bse_cfg);
7use BSE::DB;
8use Getopt::Long;
9use Time::HiRes qw(time);
10
11my $start_time = time;
12my $verbose;
13GetOptions("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';
30delete low_priority from sessions
31where whenChanged < date_sub(now(), interval ? day)
32limit ?
33SQL
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
59sub msg {
60 my ($level, $text) = @_;
61
62 if ($level <= $verbose) {
63 my $diff = time() - $start_time;
64 printf("%.2f: %s", $diff, $text);
65 }
66}