version 1.48, 2004/05/11 20:19:46
|
version 1.56, 2005/02/09 20:41:29
|
Line 36 use LONCAPA::Configuration;
|
Line 36 use LONCAPA::Configuration;
|
use IO::File; |
use IO::File; |
use IO::Socket; |
use IO::Socket; |
use HTML::Entities; |
use HTML::Entities; |
|
use Getopt::Long; |
#globals |
#globals |
use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount); |
use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount); |
|
|
Line 76 ENDERROUT
|
Line 77 ENDERROUT
|
} |
} |
|
|
sub start_daemon { |
sub start_daemon { |
my ($fh,$daemon,$pidfile) = @_; |
my ($fh,$daemon,$pidfile,$args) = @_; |
my $progname=$daemon; |
my $progname=$daemon; |
if ($daemon eq 'lonc' && $ARGV[0] eq 'new') { |
if ($daemon eq 'lonc' && $args eq 'new') { |
$progname='loncnew'; |
$progname='loncnew'; |
print "new "; |
print "new "; |
} |
} |
system("$perlvar{'lonDaemons'}/$progname 2>>$perlvar{'lonDaemons'}/logs/${daemon}_errors"); |
my $error_fname="$perlvar{'lonDaemons'}/logs/${daemon}_errors"; |
|
my $size=(stat($error_fname))[7]; |
|
if ($size>40000) { |
|
&log($fh,"<p>Rotating error logs ...</p>"); |
|
rename("$error_fname.2","$error_fname.3"); |
|
rename("$error_fname.1","$error_fname.2"); |
|
rename("$error_fname","$error_fname.1"); |
|
} |
|
system("$perlvar{'lonDaemons'}/$progname 2>$perlvar{'lonDaemons'}/logs/${daemon}_errors"); |
sleep 2; |
sleep 2; |
if (-e $pidfile) { |
if (-e $pidfile) { |
&log($fh,"<p>Seems like it started ...</p>"); |
&log($fh,"<p>Seems like it started ...</p>"); |
Line 102 sub start_daemon {
|
Line 111 sub start_daemon {
|
} |
} |
|
|
sub checkon_daemon { |
sub checkon_daemon { |
my ($fh,$daemon,$maxsize,$sendusr1)=@_; |
my ($fh,$daemon,$maxsize,$sendusr1,$args)=@_; |
|
|
&log($fh,'<hr /><a name="'.$daemon.'" /><h2>'.$daemon.'</h2><h3>Log</h3><p style="white-space: pre;"><tt>'); |
&log($fh,'<hr /><a name="'.$daemon.'" /><h2>'.$daemon.'</h2><h3>Log</h3><p style="white-space: pre;"><tt>'); |
printf("%-10s ",$daemon); |
printf("%-10s ",$daemon); |
Line 151 sub checkon_daemon {
|
Line 160 sub checkon_daemon {
|
'</font><br>'); |
'</font><br>'); |
&log($fh,"<h3>$daemon not running, trying to start</h3>"); |
&log($fh,"<h3>$daemon not running, trying to start</h3>"); |
|
|
if (&start_daemon($fh,$daemon,$pidfile)) { |
if (&start_daemon($fh,$daemon,$pidfile,$args)) { |
&log($fh,"<h3>$daemon at pid $daemonpid responding</h3>"); |
&log($fh,"<h3>$daemon at pid $daemonpid responding</h3>"); |
$simplestatus{$daemon}='restarted'; |
$simplestatus{$daemon}='restarted'; |
print "started\n"; |
print "started\n"; |
Line 160 sub checkon_daemon {
|
Line 169 sub checkon_daemon {
|
&log($fh,"<h3>$daemon at pid $daemonpid not responding</h3>"); |
&log($fh,"<h3>$daemon at pid $daemonpid not responding</h3>"); |
&log($fh,"<p>Give it one more try ...</p>"); |
&log($fh,"<p>Give it one more try ...</p>"); |
print " "; |
print " "; |
if (&start_daemon($fh,$daemon,$pidfile)) { |
if (&start_daemon($fh,$daemon,$pidfile,$args)) { |
&log($fh,"<h3>$daemon at pid $daemonpid responding</h3>"); |
&log($fh,"<h3>$daemon at pid $daemonpid responding</h3>"); |
$simplestatus{$daemon}='restarted'; |
$simplestatus{$daemon}='restarted'; |
print "started\n"; |
print "started\n"; |
Line 251 sub log_machine_info {
|
Line 260 sub log_machine_info {
|
&log($fh,"<pre>"); |
&log($fh,"<pre>"); |
my $psproc=0; |
my $psproc=0; |
|
|
open (PSH,"ps -aux --cols 140 |"); |
open (PSH,"ps aux --cols 140 |"); |
while (my $line=<PSH>) { |
while (my $line=<PSH>) { |
&log($fh,&encode_entities($line,'<>&"')); |
&log($fh,&encode_entities($line,'<>&"')); |
$psproc++; |
$psproc++; |
Line 450 sub test_connections {
|
Line 459 sub test_connections {
|
&log($fh,'<hr /><a name="connections" /><h2>Connections</h2>'); |
&log($fh,'<hr /><a name="connections" /><h2>Connections</h2>'); |
print "testing connections\n"; |
print "testing connections\n"; |
&log($fh,"<table border='2'>"); |
&log($fh,"<table border='2'>"); |
|
my ($good,$bad)=(0,0); |
foreach my $tryserver (sort(keys(%{$hostname}))) { |
foreach my $tryserver (sort(keys(%{$hostname}))) { |
print("."); |
print("."); |
my $result; |
my $result; |
my $answer=reply("pong",$tryserver); |
my $answer=reply("ping",$tryserver); |
if ($answer eq "$tryserver:$perlvar{'lonHostID'}") { |
if ($answer eq "$tryserver:$perlvar{'lonHostID'}") { |
$result="<b>ok</b>"; |
$result="<b>ok</b>"; |
|
$good++; |
} else { |
} else { |
$result=$answer; |
$result=$answer; |
$warnings++; |
$warnings++; |
if ($answer eq 'con_lost') { $warnings++; } |
if ($answer eq 'con_lost') { |
|
$bad++; |
|
$warnings++; |
|
} else { |
|
$good++; #self connection |
|
} |
} |
} |
if ($answer =~ /con_lost/) { print(" $tryserver down\n"); } |
if ($answer =~ /con_lost/) { print(" $tryserver down\n"); } |
&log($fh,"<tr><td>$tryserver</td><td>$result</td></tr>\n"); |
&log($fh,"<tr><td>$tryserver</td><td>$result</td></tr>\n"); |
} |
} |
&log($fh,"</table>"); |
&log($fh,"</table>"); |
|
print "\n$good good, $bad bad connections\n"; |
&errout($fh); |
&errout($fh); |
} |
} |
|
|
Line 538 sub log_simplestatus {
|
Line 554 sub log_simplestatus {
|
sub send_mail { |
sub send_mail { |
print "sending mail\n"; |
print "sending mail\n"; |
my $emailto="$perlvar{'lonAdmEMail'}"; |
my $emailto="$perlvar{'lonAdmEMail'}"; |
if ($totalcount>1000) { |
if ($totalcount>2500) { |
$emailto.=",$perlvar{'lonSysEMail'}"; |
$emailto.=",$perlvar{'lonSysEMail'}"; |
} |
} |
my $subj="LON: $perlvar{'lonHostID'} E:$errors W:$warnings N:$notices"; |
my $subj="LON: $perlvar{'lonHostID'} E:$errors W:$warnings N:$notices"; |
system("metasend -b -t $emailto -s '$subj' -f $statusdir/index.html -m text/html"); |
|
|
my $result=system("metasend -b -t $emailto -s '$subj' -f $statusdir/index.html -m text/html >& /dev/null"); |
|
if ($result != 0) { |
|
$result=system("mail -s '$subj' $emailto < $statusdir/index.html"); |
|
} |
|
} |
|
|
|
sub usage { |
|
print(<<USAGE); |
|
loncron - housekeeping program that checks up on various parts of Lon-CAPA |
|
|
|
Options: |
|
--help Display help |
|
--oldlonc When starting the lonc daemon use 'lonc' not 'loncnew' |
|
--noemail Do not send the status email |
|
--justcheckconnections Only check the current status of the lonc/d |
|
connections, do not send emails do not |
|
check if the daemons are running, do not |
|
generate lon-status |
|
--justcheckdaemons Only check that all of the Lon-CAPA daemons are |
|
running, do not send emails do not |
|
check the lonc/d connections, do not |
|
generate lon-status |
|
|
|
USAGE |
} |
} |
|
|
# ================================================================ Main Program |
# ================================================================ Main Program |
sub main () { |
sub main () { |
|
my ($oldlonc,$help,$justcheckdaemons,$noemail,$justcheckconnections); |
|
&GetOptions("help" => \$help, |
|
"oldlonc" => \$oldlonc, |
|
"justcheckdaemons" => \$justcheckdaemons, |
|
"noemail" => \$noemail, |
|
"justcheckconnections" => \$justcheckconnections |
|
); |
|
if ($help) { &usage(); return; } |
# --------------------------------- Read loncapa_apache.conf and loncapa.conf |
# --------------------------------- Read loncapa_apache.conf and loncapa.conf |
my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf'); |
my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf'); |
%perlvar=%{$perlvarref}; |
%perlvar=%{$perlvarref}; |
Line 584 sub main () {
|
Line 632 sub main () {
|
|
|
my (%hostname,%hostdom,%hostrole,%spareid); |
my (%hostname,%hostdom,%hostrole,%spareid); |
while (my $configline=<$config>) { |
while (my $configline=<$config>) { |
next if ($configline =~ /^(\#|\s*$)/); |
next if ($configline =~ /^(\#|\s*\$)/); |
my ($id,$domain,$role,$name,$ip,$domdescr)=split(/:/,$configline); |
my ($id,$domain,$role,$name)=split(/:/,$configline); |
if ($id && $domain && $role && $name && $ip) { |
if ($id && $domain && $role && $name) { |
|
$name=~s/\s//g; |
$hostname{$id}=$name; |
$hostname{$id}=$name; |
$hostdom{$id}=$domain; |
$hostdom{$id}=$domain; |
$hostrole{$id}=$role; |
$hostrole{$id}=$role; |
Line 611 sub main () {
|
Line 660 sub main () {
|
$warnings=0; |
$warnings=0; |
$notices=0; |
$notices=0; |
|
|
my $fh=&start_logging(\%hostdom,\%hostrole,\%hostname,\%spareid); |
|
|
|
&log_machine_info($fh); |
|
&clean_tmp($fh); |
|
&clean_lonIDs($fh); |
|
&check_httpd_logs($fh); |
|
&rotate_lonnet_logs($fh); |
|
&checkon_daemon($fh,'lonsql',200000); |
|
&checkon_daemon($fh,'lond',40000,1); |
|
&checkon_daemon($fh,'lonc',40000,1); |
|
&checkon_daemon($fh,'lonhttpd',40000); |
|
|
|
&test_connections($fh,\%hostname); |
|
&check_delayed_msg($fh); |
|
|
|
&finish_logging($fh); |
|
&log_simplestatus(); |
|
|
|
if ($totalcount>200) { &send_mail(); } |
my $fh; |
|
if (!$justcheckdaemons && !$justcheckconnections) { |
|
$fh=&start_logging(\%hostdom,\%hostrole,\%hostname,\%spareid); |
|
|
|
&log_machine_info($fh); |
|
&clean_tmp($fh); |
|
&clean_lonIDs($fh); |
|
&check_httpd_logs($fh); |
|
&rotate_lonnet_logs($fh); |
|
} |
|
if (!$justcheckconnections) { |
|
&checkon_daemon($fh,'lonsql',200000); |
|
&checkon_daemon($fh,'lond',40000,1); |
|
my $args='new'; |
|
if ($oldlonc) { $args = ''; } |
|
&checkon_daemon($fh,'lonc',40000,1,$args); |
|
&checkon_daemon($fh,'lonhttpd',40000); |
|
} |
|
if (!$justcheckdaemons) { |
|
&test_connections($fh,\%hostname); |
|
} |
|
if (!$justcheckdaemons && !$justcheckconnections) { |
|
&check_delayed_msg($fh); |
|
&finish_logging($fh); |
|
&log_simplestatus(); |
|
|
|
if ($totalcount>200 && !$noemail) { &send_mail(); } |
|
} |
} |
} |
|
|
&main(); |
&main(); |