# use strict; # TODO
use POSIX qw(strftime);
-use vars qw(%sched);
+use vars qw(%sched %schedule);
+
+# format: function name = (
+# str chanconfdefault,
+# int internaldefault,
+# bool deferred,
+# int next run, (optional)
+# )
+
+#%schedule = {
+# uptimeLoop => ("", 60, 1),
+#};
+
+sub setupSchedulersII {
+ foreach (keys %schedule) {
+ &queueTask($_, @{ $schedule{$_} });
+ }
+}
+
+sub queueTask {
+ my($codename, $chanconfdef, $intervaldef, $defer) = @_;
+ my $t = &getChanConfDefault($chanconfdef, $intervaldef);
+ my $waittime = &getRandomInt($t);
+
+ if (!defined $waittime) {
+ &WARN("interval == waittime == UNDEF for $codename.");
+ return;
+ }
+
+ my $time = $schedule{$codename}[3];
+ if (defined $time and $time > time()) {
+ &WARN("Sched for $codename already exists.");
+ return;
+ }
+
+# &VERB("Scheduling \&$codename() for ".&Time2String($waittime),3);
+
+ my $retval = $conn->schedule($waittime, sub {
+ \&$codename;
+ }, @args );
+}
sub setupSchedulers {
&VERB("Starting schedulers...",2);
&kernelLoop(2);
&wingateWriteFile(2);
&factoidCheck(2); # takes a couple of seconds on a 486. defer it
+# todo: convert to new format... or nuke altogether.
&newsFlush(1);
# todo: squeeze this into a one-liner.
### check if current size is too large.
if ( -s $file{log} > $param{'maxLogSize'}) {
- my $date = sprintf("%04d%02d%02d", (localtime)[5,4,3]);
+ my $date = sprintf("%04d%02d%02d", (gmtime)[5,4,3]);
$file{log} = $param{'logfile'} ."-". $date;
&status("cycling log file.");
my $max_time = &getChanConfDefault("seenMaxDays", 30) *60*60*24;
my $delete = 0;
- if ($param{'DBType'} =~ /^pgsql|mysql|sqlite/i) {
+ if ($param{'DBType'} =~ /^(pgsql|mysql|sqlite)/i) {
my $query;
if ($param{'DBType'} =~ /^mysql|sqlite$/i) {
}
my $sth = $dbh->prepare($query);
- $sth->execute;
-
- while (my @row = $sth->fetchrow_array) {
- my ($nick,$time) = @row;
-
- &dbDel("seen",{"nick"=>$nick});
- $delete++;
- }
- $sth->finish;
- } elsif ($param{'DBType'} =~ /^dbm/i) {
- my $time = time();
+ if ($sth->execute) {
+ while (my @row = $sth->fetchrow_array) {
+ my ($nick,$time) = @row;
- foreach (keys %seen) {
- my $delta_time = $time - &dbGet("seen", "time", "nick", $_);
- next unless ($delta_time > $max_time);
-
- &DEBUG("seenFlushOld: ".&Time2String($delta_time) );
- delete $seen{$_};
- $delete++;
+ &sqlDelete("seen", { nick => $nick } );
+ $delete++;
+ }
+ $sth->finish;
}
} else {
- &FIXME("seenFlushOld: for PG/NO-DB.");
+ &FIXME("seenFlushOld: for bad DBType:" . $param{'DBType'} . ".");
}
&VERB("SEEN deleted $delete seen entries.",2);
}
if ($delete or $duser) {
- &News::writeNews();
&status("NewsFlush: deleted: $delete news entries; $duser user cache.");
}
}
$stats{'new'} = 0;
$stats{'old'} = 0;
- if ($param{'DBType'} =~ /^(mysql|pgsql|sqlite|dbm)$/i) {
+ if ($param{'DBType'} =~ /^(mysql|pgsql|sqlite)$/i) {
foreach $nick (keys %seencache) {
- my $retval = &dbReplace("seen", "nick", (
- "nick" => lc $seencache{$nick}{'nick'},
- "time" => $seencache{$nick}{'time'},
- "host" => $seencache{$nick}{'host'},
- "channel" => $seencache{$nick}{'chan'},
- "message" => $seencache{$nick}{'msg'},
- ) );
+ my $retval = &sqlReplace("seen", {
+ nick => lc $seencache{$nick}{'nick'},
+ time => $seencache{$nick}{'time'},
+ host => $seencache{$nick}{'host'},
+ channel => $seencache{$nick}{'chan'},
+ message => $seencache{$nick}{'msg'},
+ } );
+
delete $seencache{$nick};
$flushed++;
}
delete $cache{connect};
} else {
&status("IRCTEST: possible lost in space; checking. ".
- scalar(localtime) );
+ scalar(gmtime) );
&msg($ident, "TEST");
$cache{connect} = time();
}
# compress logs that should have been compressed.
# todo: use strftime?
- my ($day,$month,$year) = (localtime(time()))[3,4,5];
+ my ($day,$month,$year) = (gmtime(time()))[3,4,5];
my $date = sprintf("%04d%02d%02d",$year+1900,$month+1,$day);
if (!opendir(DIR,"$bot_log_dir")) {
}
sub uptimeLoop {
- return unless &IsChanConf("uptime");
+ return if (!defined &uptimeWriteFile);
+# return unless &IsChanConf("uptime");
if (@_) {
&ScheduleThis(60, "uptimeLoop");
return if ($_[0] eq "2"); # defer.
}
- my $time = strftime("%H:%M", localtime(time()) );
+ my $time = strftime("%H:%M", gmtime(time()) );
my $c;
foreach (keys %channels) {