add a longer description to background tasks (this is HTML)
authorTony Cook <tony@develop-help.com>
Fri, 19 Mar 2010 06:31:51 +0000 (06:31 +0000)
committertony <tony@45cb6cf1-00bc-42d2-bb5a-07f51df49f94>
Fri, 19 Mar 2010 06:31:51 +0000 (06:31 +0000)
add bse_session_clean.pl to clean up the session table - uses low
priority deletes and limits the number of records removed at a time.

MANIFEST
schema/bse.sql
site/cgi-bin/modules/BSE/TB/BackgroundTask.pm
site/data/db/bse_background_tasks.data
site/templates/admin/back/detail.tmpl
site/util/bse_session_clean.pl [new file with mode: 0644]
site/util/mysql.str

index e3e0db8..5ab7638 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -651,6 +651,7 @@ site/util/bseaddimages.pl
 site/util/bse_back.pl
 site/util/bse_notify_files.pl
 site/util/bse_s3.pl
+site/util/bse_session_clean.pl
 site/util/bse_storage.pl
 site/util/bsexlsprod.pl
 site/util/gen.pl
index 8042751..d2a58f1 100644 (file)
@@ -1005,5 +1005,8 @@ create table bse_background_tasks (
   last_started datetime null,
 
   -- last completion time
-  last_completion datetime null
+  last_completion datetime null,
+
+  -- longer description
+  long_desc text null
 );
index 3419a25..bd0f12d 100644 (file)
@@ -6,7 +6,7 @@ use Carp qw(confess);
 use Errno qw(EPERM EACCES);
 
 sub columns {
-  return qw/id description modname binname bin_opts stoppable start_right running task_pid last_exit last_started last_completion/;
+  return qw/id description modname binname bin_opts stoppable start_right running task_pid last_exit last_started last_completion long_desc/;
 }
 
 sub table {
index ea206eb..0ac0289 100644 (file)
@@ -4,14 +4,35 @@ description: Regenerate Site
 binname: perl util/gen.pl
 bin_opts: -v
 start_right: regen_all
+long_desc: <<TEXT
+Regenerate all of the pages in your site, similar to the <b>Regenerate
+static and base pages</b> options on the main menu.
+TEXT
 
 id: bse_sync_storage
 description: Synchronize File Stores
 binname: perl util/bse_storage.pl
 bin_opts: sync -v
+long_desc: <<TEXT
+Synchronizes images and files stored with Amazon S3 or other external
+file stores.  If you aren't using external file stores, this task
+isn't useful.
+TEXT
 
 id: bse_notify_files
 description: Notify Members about new files
 binname: perl util/bse_notify_files.pl
 bin_opts: -v 2
+long_desc: <<TEXT
+Notifies members who have had new files added to their account or a
+group.
+TEXT
+
+id: bse_session_clean
+description: Web session table clean up
+binname: perl util/bse_session_clean.pl
+bin_opts: -v=3
+long_desc: <<TEXT
+Cleans up old entries from BSE's session table.
+TEXT
 
index dbbdea7..c440711 100644 (file)
   <th>Task</th>
   <td><:task description:></td>
 </tr>
+<:ifTask long_desc:>
+<tr>
+  <th>Description</th>
+  <td><:task long_desc |z:></td>
+</tr>
+<:or:><:eif:>
 <tr>
   <th>Status</th>
   <td><:ifTask_running:>Running (<:task task_pid:>)<:or:>Stopped<:eif:></td>
diff --git a/site/util/bse_session_clean.pl b/site/util/bse_session_clean.pl
new file mode 100644 (file)
index 0000000..64fc837
--- /dev/null
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use FindBin;
+use lib "$FindBin::Bin/../cgi-bin/modules";
+use BSE::API qw(bse_init bse_cfg);
+use BSE::DB;
+use Getopt::Long;
+use Time::HiRes qw(time);
+
+my $start_time = time;
+my $verbose;
+GetOptions("v:i" => \$verbose);
+!$verbose and defined $verbose and $verbose = 1;
+
+{
+  bse_init("../cgi-bin");
+  my $cfg = bse_cfg();
+
+  my $dbh = BSE::DB->single->dbh;
+
+  my $day_limit = $cfg->entry("session cleanup", "days", 30);
+  my $per_limit = $cfg->entry("session cleanup", "per", 1000);
+  my $count_limit = $cfg->entry("session cleanup", "count", 1000);
+  my $optimize = $cfg->entry("session cleanup", "optimize", 1);
+  msg(3, "Limits: $day_limit days, $per_limit records per request, $count_limit requests\n");
+
+  my $sql = <<'SQL';
+delete low_priority from sessions
+where whenChanged < date_sub(now(), interval ? day)
+limit ?
+SQL
+
+  my $sth = $dbh->prepare($sql)
+    or die "Cannot prepare sql: ", $dbh->errstr, "\n";
+
+  my $i = 0;
+  my $removed = 0;
+  while ($i++ < $count_limit) {
+    my $thistime = $sth->execute($day_limit, $per_limit)
+      or die "Could not execute delete sql: ", $dbh->errstr, "\n";
+    $thistime += 0; # clean up "0E0"
+    msg(2, "Loop $i/$count_limit: removed $thistime records\n");
+    $removed += $thistime;
+    $thistime > 0 or last;
+  }
+  msg(1, "Removed $removed records\n");
+  if ($optimize) {
+    msg(2, "Optimizing table\n");
+    $dbh->do("optimize table sessions")
+      or die "Cannot optimize table: ", $dbh->errstr, "\n";
+  }
+  msg(1, "Finished\n");
+
+  exit;
+}
+
+sub msg {
+  my ($level, $text) = @_;
+
+  if ($level <= $verbose) {
+    my $diff = time() - $start_time;
+    printf("%.2f: %s", $diff, $text);
+  }
+}
index fed2f8d..7d1b945 100644 (file)
@@ -126,6 +126,7 @@ Column task_pid;int(11);YES;NULL;
 Column last_exit;int(11);YES;NULL;
 Column last_started;datetime;YES;NULL;
 Column last_completion;datetime;YES;NULL;
+Column long_desc;text;YES;NULL;
 Index PRIMARY;1;[id]
 Table bse_file_access_log
 Column id;int(11);NO;NULL;auto_increment