version 1.107, 2018/08/07 17:12:09
|
version 1.113, 2018/11/06 15:37:42
|
Line 113 sub checkon_daemon {
|
Line 113 sub checkon_daemon {
|
my $result; |
my $result; |
&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("%-15s ",$daemon); |
printf("%-15s ",$daemon); |
if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){ |
if ($fh) { |
open (DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/$daemon.log|"); |
if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){ |
while (my $line=<DFH>) { |
if (open(DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/$daemon.log|")) { |
&log($fh,"$line"); |
while (my $line=<DFH>) { |
if ($line=~/INFO/) { $notices++; } |
&log($fh,"$line"); |
if ($line=~/WARNING/) { $notices++; } |
if ($line=~/INFO/) { $notices++; } |
if ($line=~/CRITICAL/) { $warnings++; } |
if ($line=~/WARNING/) { $notices++; } |
}; |
if ($line=~/CRITICAL/) { $warnings++; } |
close (DFH); |
} |
|
close (DFH); |
|
} |
|
} |
|
&log($fh,"</tt></p>"); |
} |
} |
&log($fh,"</tt></p>"); |
|
|
|
my $pidfile="$perlvar{'lonDaemons'}/logs/$daemon.pid"; |
my $pidfile="$perlvar{'lonDaemons'}/logs/$daemon.pid"; |
|
|
Line 169 sub checkon_daemon {
|
Line 172 sub checkon_daemon {
|
&clean_lonc_childpids(); |
&clean_lonc_childpids(); |
} |
} |
&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,$args)) { |
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'; |
Line 194 sub checkon_daemon {
|
Line 197 sub checkon_daemon {
|
&log($fh,"<p>Unable to start $daemon</p>"); |
&log($fh,"<p>Unable to start $daemon</p>"); |
} |
} |
} |
} |
|
if ($fh) { |
if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){ |
if (-e "$perlvar{'lonDaemons'}/logs/$daemon.log"){ |
&log($fh,"<p><pre>"); |
&log($fh,"<p><pre>"); |
open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/$daemon.log|"); |
if (open(DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/$daemon.log|")) { |
while (my $line=<DFH>) { |
while (my $line=<DFH>) { |
&log($fh,"$line"); |
&log($fh,"$line"); |
if ($line=~/WARNING/) { $notices++; } |
if ($line=~/WARNING/) { $notices++; } |
if ($line=~/CRITICAL/) { $notices++; } |
if ($line=~/CRITICAL/) { $notices++; } |
}; |
} |
close (DFH); |
close (DFH); |
&log($fh,"</pre></p>"); |
} |
|
&log($fh,"</pre></p>"); |
|
} |
} |
} |
} |
} |
|
|
Line 708 sub check_delayed_msg {
|
Line 713 sub check_delayed_msg {
|
} |
} |
|
|
sub finish_logging { |
sub finish_logging { |
my ($fh)=@_; |
my ($fh,%weights)=@_; |
&log($fh,"<a name='errcount' />\n"); |
&log($fh,"<a name='errcount' />\n"); |
$totalcount=$notices+4*$warnings+100*$errors; |
$totalcount=($weights{'N'}*$notices)+($weights{'W'}*$warnings)+($weights{'E'}*$errors); |
&errout($fh); |
&errout($fh); |
&log($fh,"<h1>Total Error Count: $totalcount</h1>"); |
&log($fh,"<h1>Total Error Count: $totalcount</h1>"); |
my $now=time; |
my $now=time; |
Line 856 sub clean_lonc_childpids {
|
Line 861 sub clean_lonc_childpids {
|
} |
} |
|
|
sub write_connection_config { |
sub write_connection_config { |
my ($isprimary,$domconf,$url,%connectssl,%changes); |
my ($domconf,%connectssl,%changes); |
my $primaryLibServer = &Apache::lonnet::domain($perlvar{'lonDefDomain'},'primary'); |
$domconf = &get_domain_config(); |
if ($primaryLibServer eq $perlvar{'lonHostID'}) { |
|
$isprimary = 1; |
|
} elsif ($primaryLibServer ne '') { |
|
my $protocol = $Apache::lonnet::protocol{$primaryLibServer}; |
|
my $hostname = &Apache::lonnet::hostname($primaryLibServer); |
|
unless ($protocol eq 'https') { |
|
$protocol = 'http'; |
|
} |
|
$url = $protocol.'://'.$hostname.'/cgi-bin/listdomconfig.pl'; |
|
} |
|
my $domconf = &get_domain_config($perlvar{'lonDefDomain'},$primaryLibServer,$isprimary, |
|
$url); |
|
if (ref($domconf) eq 'HASH') { |
if (ref($domconf) eq 'HASH') { |
if (ref($domconf->{'ssl'}) eq 'HASH') { |
if (ref($domconf->{'ssl'}) eq 'HASH') { |
foreach my $connect ('connto','connfrom') { |
foreach my $connect ('connto','connfrom') { |
Line 922 sub write_connection_config {
|
Line 915 sub write_connection_config {
|
} |
} |
|
|
sub get_domain_config { |
sub get_domain_config { |
my ($dom,$primlibserv,$isprimary,$url) = @_; |
my ($dom,$primlibserv,$isprimary,$url,%confhash); |
my %confhash; |
$dom = $perlvar{'lonDefDomain'}; |
|
$primlibserv = &Apache::lonnet::domain($dom,'primary'); |
|
if ($primlibserv eq $perlvar{'lonHostID'}) { |
|
$isprimary = 1; |
|
} elsif ($primlibserv ne '') { |
|
my $protocol = $Apache::lonnet::protocol{$primlibserv}; |
|
my $hostname = &Apache::lonnet::hostname($primlibserv); |
|
unless ($protocol eq 'https') { |
|
$protocol = 'http'; |
|
} |
|
$url = $protocol.'://'.$hostname.'/cgi-bin/listdomconfig.pl'; |
|
} |
if ($isprimary) { |
if ($isprimary) { |
my $lonusersdir = $perlvar{'lonUsersDir'}; |
my $lonusersdir = $perlvar{'lonUsersDir'}; |
my $fname = $lonusersdir.'/'.$dom.'/configuration.db'; |
my $fname = $lonusersdir.'/'.$dom.'/configuration.db'; |
Line 1028 sub update_revocation_list {
|
Line 1032 sub update_revocation_list {
|
} |
} |
|
|
sub reset_nosslverify_pids { |
sub reset_nosslverify_pids { |
my (%sslrem) = @_; |
my ($fh,%sslrem) = @_; |
&checkon_daemon($fh,'lond',40000,'USR2'); |
&checkon_daemon($fh,'lond',40000,'USR2'); |
my $loncpidfile="$perlvar{'lonDaemons'}/logs/lonc.pid"; |
my $loncpidfile="$perlvar{'lonDaemons'}/logs/lonc.pid"; |
my $loncppid; |
my $loncppid; |
Line 1057 sub reset_nosslverify_pids {
|
Line 1061 sub reset_nosslverify_pids {
|
if ($sslrem{$host}) { |
if ($sslrem{$host}) { |
if (ref($pids_by_host{$host}) eq 'HASH') { |
if (ref($pids_by_host{$host}) eq 'HASH') { |
if (ref($pids_by_host{$host}{'insecure'}) eq 'HASH') { |
if (ref($pids_by_host{$host}{'insecure'}) eq 'HASH') { |
if (keys($pids_by_host{$host}{'insecure'})) { |
if (keys(%{$pids_by_host{$host}{'insecure'}})) { |
foreach my $pid (keys($pids_by_host{$host}{'insecure'})) { |
foreach my $pid (keys(%{$pids_by_host{$host}{'insecure'}})) { |
if (open(PIPE,"ps -o ppid= -p $pid |")) { |
if (open(PIPE,"ps -o ppid= -p $pid |")) { |
my $ppid = <PIPE>; |
my $ppid = <PIPE>; |
chomp($ppid); |
chomp($ppid); |
Line 1083 sub reset_nosslverify_pids {
|
Line 1087 sub reset_nosslverify_pids {
|
} |
} |
|
|
sub send_mail { |
sub send_mail { |
|
my ($sysmail,$reportstatus) = @_; |
my $defdom = $perlvar{'lonDefDomain'}; |
my $defdom = $perlvar{'lonDefDomain'}; |
my $origmail = $perlvar{'lonAdmEMail'}; |
my $origmail = $perlvar{'lonAdmEMail'}; |
my $emailto = &Apache::loncommon::build_recipient_list(undef, |
my $emailto = &Apache::loncommon::build_recipient_list(undef, |
'lonstatusmail',$defdom,$origmail); |
'lonstatusmail',$defdom,$origmail); |
if ($totalcount>2500) { |
if (($totalcount>$sysmail) && ($reportstatus)) { |
$emailto.=",$perlvar{'lonSysEMail'}"; |
$emailto.=",$perlvar{'lonSysEMail'}"; |
} |
} |
my $from; |
my $from; |
Line 1171 sub main () {
|
Line 1176 sub main () {
|
chop $hostname; |
chop $hostname; |
$hostname=~s/[^\w\.]//g; # make sure is safe to pass through shell |
$hostname=~s/[^\w\.]//g; # make sure is safe to pass through shell |
my $subj="LON: Unconfigured machine $hostname"; |
my $subj="LON: Unconfigured machine $hostname"; |
system("echo 'Unconfigured machine $hostname.' |\ |
system("echo 'Unconfigured machine $hostname.' |". |
mailto $emailto -s '$subj' > /dev/null"); |
" mail -s '$subj' $emailto > /dev/null"); |
exit 1; |
exit 1; |
} |
} |
|
|
Line 1182 sub main () {
|
Line 1187 sub main () {
|
print("User ID mismatch. This program must be run as user 'www'.\n"); |
print("User ID mismatch. This program must be run as user 'www'.\n"); |
my $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}"; |
my $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}"; |
my $subj="LON: $perlvar{'lonHostID'} User ID mismatch"; |
my $subj="LON: $perlvar{'lonHostID'} User ID mismatch"; |
system("echo 'User ID mismatch. loncron must be run as user www.' |\ |
system("echo 'User ID mismatch. loncron must be run as user www.' |". |
mailto $emailto -s '$subj' > /dev/null"); |
" mail -s '$subj' $emailto > /dev/null"); |
exit 1; |
exit 1; |
} |
} |
|
|
Line 1274 sub main () {
|
Line 1279 sub main () {
|
&write_serverhomeIDs(); |
&write_serverhomeIDs(); |
&write_checksums(); |
&write_checksums(); |
my %sslrem = &clean_nosslverify($fh); |
my %sslrem = &clean_nosslverify($fh); |
&finish_logging($fh); |
|
my %conchgs = &write_connection_config(); |
my %conchgs = &write_connection_config(); |
my %hosttypechgs = &write_hosttypes(); |
my %hosttypechgs = &write_hosttypes(); |
my $hadcrlchg = &update_revocation_list(); |
my $hadcrlchg = &update_revocation_list(); |
if ((keys(%{$conchgs}) > 0) || (keys(%hosttypechgs) > 0) || |
if ((keys(%conchgs) > 0) || (keys(%hosttypechgs) > 0) || |
$hadcrlchg || (keys(%sslrem) > 0)) { |
$hadcrlchg || (keys(%sslrem) > 0)) { |
&checkon_daemon($fh,'lond',40000,'USR2'); |
&checkon_daemon($fh,'lond',40000,'USR2'); |
&reset_nosslverify_pids(%sslrem); |
&reset_nosslverify_pids($fh,%sslrem); |
|
} |
|
my $domconf = &get_domain_config(); |
|
my ($defaults,$names) = &Apache::loncommon::lon_status_items(); |
|
my (%weights,$threshold); |
|
foreach my $type ('E','W','N') { |
|
$weights{$type} = $defaults->{$type}; |
|
} |
|
my $threshold = $defaults->{'threshold'}; |
|
my $sysmail = $defaults->{'sysmail'}; |
|
my $reportstatus = 1; |
|
if (ref($domconf->{'contacts'}) eq 'HASH') { |
|
if ($domconf->{'contacts'}{'reportstatus'} == 0) { |
|
$reportstatus = 0; |
|
} |
|
if (ref($domconf->{'contacts'}{'lonstatus'}) eq 'HASH') { |
|
if (ref($domconf->{'contacts'}{'lonstatus'}{weights}) eq 'HASH') { |
|
foreach my $type ('E','W','N') { |
|
if (exists($domconf->{'contacts'}{'lonstatus'}{weights}{$type})) { |
|
$weights{$type} = $domconf->{'contacts'}{'lonstatus'}{weights}{$type}; |
|
} |
|
} |
|
} |
|
} |
|
if (exists($domconf->{'contacts'}{'lonstatus'}{'threshold'})) { |
|
$threshold = $domconf->{'contacts'}{'lonstatus'}{'threshold'}; |
|
} |
|
if (exists($domconf->{'contacts'}{'lonstatus'}{'sysmail'})) { |
|
$sysmail = $domconf->{'contacts'}{'lonstatus'}{'sysmail'}; |
|
} |
} |
} |
if ($totalcount>200 && !$noemail) { &send_mail(); } |
&finish_logging($fh,%weights); |
|
if ($totalcount>$threshold && !$noemail) { &send_mail($sysmail,$reportstatus); } |
} |
} |
} |
} |
|
|