X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fcore.pl;h=e3118e968c392931c393ff03a9ca965cb968d984;hb=b0ed64e5f19d957102c6e73fc79b06801c1a4ecc;hp=a7ba007a4e60fb0eb48abd7d9e16816c9995a528;hpb=0fbfef3c124ae0abe85dbf5eb4625520f0772487;p=infobot.git diff --git a/src/core.pl b/src/core.pl index a7ba007..e3118e9 100644 --- a/src/core.pl +++ b/src/core.pl @@ -7,7 +7,7 @@ use strict; -# dynamic scalar. MUST BE REDUCED IN SIZE!!! +# scalar. MUST BE REDUCED IN SIZE!!! ### TODO: reorder. use vars qw( $bot_misc_dir $bot_pid $bot_base_dir $bot_src_dir @@ -26,11 +26,11 @@ use vars qw( $running ); -# dynamic hash. +# array. use vars qw(@joinchan @ircServers @wingateBad @wingateNow @wingateCache ); -### dynamic hash. MUST BE REDUCED IN SIZE!!! +### hash. MUST BE REDUCED IN SIZE!!! # use vars qw(%count %netsplit %netsplitservers %flood %dcc %orig %nuh %talkWho %seen %floodwarn %param %dbh %ircPort @@ -49,7 +49,7 @@ $SIG{'__WARN__'} = 'doWarn'; $last{buflen} = 0; $last{say} = ""; $last{msg} = ""; -$userHandle = "default"; +$userHandle = "_default"; $wingaterun = time(); $firsttime = 1; $utime_userfile = 0; @@ -72,7 +72,7 @@ $notcount = 0; ### if ( -d "CVS" ) { use POSIX qw(strftime); - $bot_release = strftime("cvs (%Y%m%d)", localtime( (stat("CVS"))[9] ) ); + $bot_release = strftime("cvs (%Y%m%d)", gmtime( (stat("CVS"))[9] ) ); } else { $bot_release = "1.0.10 (2001xxxx)"; } @@ -100,18 +100,24 @@ sub doExit { &status("--- Start of quit."); $ident ||= "blootbot"; # lame hack. - &closeDCC(); + &status("Memory Usage: $memusage kB"); + &closePID(); &closeStats(); - &seenFlush(); - &quit($param{'quitMsg'}) if (&whatInterface() =~ /IRC/); + # shutdown IRC and related components. + if (&whatInterface() =~ /IRC/) { + &closeDCC(); + &seenFlush(); + &quit($param{'quitMsg'}); + } &writeUserFile(); &writeChanFile(); - &uptimeWriteFile() if (&ChanConfList("uptime")); + &uptimeWriteFile() if (&IsChanConf("uptime")); &News::writeNews() if (&ChanConfList("news")); &closeDB(); &closeSHM($shm); &dumpallvars() if (&IsParam("dumpvarsAtExit")); + &symdumpAll() if (&IsParam("symdumpAtExit")); &closeLog(); &closeSQLDebug() if (&IsParam("SQLDebug")); @@ -205,6 +211,13 @@ sub IsChanConf { return 0; } + # should we use IsParam() externally where needed or hack it in + # here just in case? fix it later. + if (&IsParam($param)) { + &DEBUG("ICC: found '$param' option in main config file."); + return 1; + } + $chan ||= "_default"; my $old = $chan; @@ -277,7 +290,7 @@ sub getChanConf { my($param,$c) = @_; if (!defined $param) { - &WARN("param == NULL."); + &WARN("gCC: param == NULL."); return 0; } @@ -302,6 +315,29 @@ sub getChanConf { return $chanconf{"_default"}{$param}; } +sub getChanConfDefault { + my($what, $default, $chan) = @_; + + $chan ||= "_default"; + + if (exists $param{$what}) { + if (!exists $cache{config}{$what}) { + &status("conf: backward-compat: found param{$what} ($param{$what}) for $chan instead."); + $cache{config}{$what} = 1; + } + + return $param{$what}; + } + my $val = &getChanConf($what, $chan); + return $val if (defined $val); + + $param{$what} = $default; + &status("conf: $chan auto-setting param{$what} = $default"); + $cache{config}{$what} = 1; + return $default; +} + + ##### # Usage: &findChanConf($param); # About: Retrieve value for 'param' value from any chan. @@ -319,7 +355,6 @@ sub findChanConf { foreach (keys %{ $chanconf{$c} }) { next unless (/^$param$/); - &DEBUG("chanconf{$c}{$_} ..."); return $chanconf{$c}{$_}; } } @@ -330,19 +365,19 @@ sub findChanConf { sub showProc { my ($prefix) = $_[0] || ""; - if (!open(IN, "/proc/$$/status")) { - &ERROR("cannot open '/proc/$$/status'."); - return; - } - if ($^O eq "linux") { + if (!open(IN, "/proc/$$/status")) { + &ERROR("cannot open '/proc/$$/status'."); + return; + } + while () { $memusage = $1 if (/^VmSize:\s+(\d+) kB/); } close IN; } elsif ($^O eq "netbsd") { - $memusage = (stat "/proc/$$/mem")[7]/1024; + $memusage = int( (stat "/proc/$$/mem")[7]/1024 ); } elsif ($^O =~ /^(free|open)bsd$/) { my @info = split /\s+/, `/bin/ps -l -p $$`; @@ -366,7 +401,7 @@ sub showProc { } else { # delta < 0. $delta = -$delta; # never knew RSS could decrease, probably Size can't? - $str = "MEM:$prefix decreased by $delta kB. YES YES YES"; + $str = "MEM:$prefix decreased by $delta kB."; } &status($str); @@ -383,13 +418,6 @@ sub setup { &openLog(); # write, append. &status("--- Started logging."); - foreach ("debian") { - my $dir = "$bot_base_dir/$_/"; - next if ( -d $dir); - &status("Making dir $_"); - mkdir $dir, 0755; - } - # read. &loadLang($bot_data_dir. "/blootbot.lang"); &loadIRCServers(); @@ -399,7 +427,8 @@ sub setup { $shm = &openSHM(); &openSQLDebug() if (&IsParam("SQLDebug")); - &openDB($param{'DBName'}, $param{'SQLUser'}, $param{'SQLPass'}); + &openDB($param{'DBName'}, $param{'DBType'}, $param{'SQLUser'}, + $param{'SQLPass'}); &checkTables(); &status("Setup: ". &countKeys("factoids") ." factoids."); @@ -421,7 +450,7 @@ sub setupConfig { $param{'VERBOSITY'} = 1; &loadConfig($bot_config_dir."/blootbot.config"); - foreach ("ircNick", "ircUser", "ircName", "DBType", "tempDir") { + foreach ( qw(ircNick ircUser ircName DBType tempDir) ) { next if &IsParam($_); &ERROR("Parameter $_ has not been defined."); exit 1; @@ -438,7 +467,7 @@ sub setupConfig { if (! -d $param{tempDir}) { &status("making $param{tempDir}..."); - system("mkdir $param{tempDir}"); + mkdir $param{tempDir}, 0755; } # static scalar variables. @@ -483,8 +512,10 @@ sub restart { &status("--- $sig called."); ### crappy bug in Net::IRC? - if (!$conn->connected and time - $msgtime > 900) { - &status("reconnecting because of uncaught disconnect \@ ".scalar(localtime) ); + my $delta = time() - $msgtime; + &DEBUG("restart: dtime = $delta"); + if (!$conn->connected or time() - $msgtime > 900) { + &status("reconnecting because of uncaught disconnect \@ ".scalar(gmtime) ); ### $irc->start; &clearIRCVars(); $conn->connect();