File:  [LON-CAPA] / loncom / loncron
Revision 1.38: download - view: text, annotated - select for diffs
Mon Apr 7 18:19:23 2003 UTC (21 years, 2 months ago) by albertel
Branches: MAIN
CVS tags: version_0_99_1, version_0_99_0, conference_2003, HEAD
- allow for larger log files, as things have gotten more noisy

#!/usr/bin/perl

# The LearningOnline Network
# Housekeeping program, started by cron
#
# (TCP networking package
# 6/1/99,6/2,6/10,6/11,6/12,6/14,6/26,6/28,6/29,6/30,
# 7/1,7/2,7/9,7/10,7/12 Gerd Kortemeyer)
#
# 7/14,7/15,7/19,7/21,7/22,11/18,
# 2/8 Gerd Kortemeyer
# 12/23 Gerd Kortemeyer
# YEAR=2001
# 09/04,09/06,11/26 Gerd Kortemeyer

$|=1;

use lib '/home/httpd/lib/perl/';
use LONCAPA::Configuration;

use IO::File;
use IO::Socket;

# -------------------------------------------------- Non-critical communication
sub reply {
    my ($cmd,$server)=@_;
    my $peerfile="$perlvar{'lonSockDir'}/$server";
    my $client=IO::Socket::UNIX->new(Peer    =>"$peerfile",
                                     Type    => SOCK_STREAM,
                                     Timeout => 10)
       or return "con_lost";
    print $client "$cmd\n";
    my $answer=<$client>;
    chomp($answer);
    if (!$answer) { $answer="con_lost"; }
    return $answer;
}

# --------------------------------------------------------- Output error status

sub errout {
   my $fh=shift;
   print $fh (<<ENDERROUT);
     <p><table border=2 bgcolor="#CCCCCC">
     <tr><td>Notices</td><td>$notices</td></tr>
     <tr><td>Warnings</td><td>$warnings</td></tr>
     <tr><td>Errors</td><td>$errors</td></tr>
     </table><p><a href="#top">Top</a><p>
ENDERROUT
}

# ================================================================ Main Program

# --------------------------------- Read loncapa_apache.conf and loncapa.conf
my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf');
%perlvar=%{$perlvarref};
undef $perlvarref;
delete $perlvar{'lonReceipt'}; # remove since sensitive and not needed
delete $perlvar{'lonSqlAccess'}; # remove since sensitive and not needed

# --------------------------------------- Make sure that LON-CAPA is configured
# I only test for one thing here (lonHostID).  This is just a safeguard.
if ('{[[[[lonHostID]]]]}' eq $perlvar{'lonHostID'}) {
   print("Unconfigured machine.\n");
   $emailto=$perlvar{'lonSysEMail'};
   $hostname=`/bin/hostname`;
   chop $hostname;
   $hostname=~s/[^\w\.]//g; # make sure is safe to pass through shell
   $subj="LON: Unconfigured machine $hostname";
   system("echo 'Unconfigured machine $hostname.' |\
 mailto $emailto -s '$subj' > /dev/null");
    exit 1;
}

# ----------------------------- Make sure this process is running from user=www
my $wwwid=getpwnam('www');
if ($wwwid!=$<) {
   print("User ID mismatch.  This program must be run as user 'www'\n");
   $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
   $subj="LON: $perlvar{'lonHostID'} User ID mismatch";
   system("echo 'User ID mismatch.  loncron must be run as user www.' |\
 mailto $emailto -s '$subj' > /dev/null");
   exit 1;
}

# ------------------------------------------------------------- Read hosts file
{
    my $config=IO::File->new("$perlvar{'lonTabDir'}/hosts.tab");

    while (my $configline=<$config>) {
	my ($id,$domain,$role,$name,$ip,$domdescr)=split(/:/,$configline);
	if ($id && $domain && $role && $name && $ip) {
	    $hostname{$id}=$name;
	    $hostdom{$id}=$domain;
	    $hostip{$id}=$ip;
	    $hostrole{$id}=$role;
	    if ($domdescr) { $domaindescription{$domain}=$domdescr; }
	    if (($role eq 'library') && ($id ne $perlvar{'lonHostID'})) {
		$libserv{$id}=$name;
	    }
	} else {
	    if ($configline) {
#		&logthis("Skipping hosts.tab line -$configline-");
	    }
	}
    }
}

# ------------------------------------------------------ Read spare server file
{
    my $config=IO::File->new("$perlvar{'lonTabDir'}/spare.tab");

    while (my $configline=<$config>) {
       chomp($configline);
       if (($configline) && ($configline ne $perlvar{'lonHostID'})) {
          $spareid{$configline}=1;
       }
    }
}

# ---------------------------------------------------------------- Start report

$statusdir="/home/httpd/html/lon-status";

$errors=0;
$warnings=0;
$notices=0;

$now=time;
$date=localtime($now);

{
my $fh=IO::File->new(">$statusdir/newstatus.html");

print $fh (<<ENDHEADERS);
<html>
<head>
<title>LON Status Report $perlvar{'lonHostID'}</title>
</head>
<body bgcolor="#AAAAAA">
<a name="top">
<h1>LON Status Report $perlvar{'lonHostID'}</h1>
<h2>$date ($now)</h2>
<ol>
<li><a href="#configuration">Configuration</a>
<li><a href="#machine">Machine Information</a>
<li><a href="#tmp">Temporary Files</a>
<li><a href="#tokens">Session Tokens</a>
<li><a href="#httpd">httpd</a>
<li><a href="#lonsql">lonsql</a>
<li><a href="#lond">lond</a>
<li><a href="#lonc">lonc</a>
<li><a href="#lonhttpd">lonhttpd</a>
<li><a href="#lonnet">lonnet</a>
<li><a href="#connections">Connections</a>
<li><a href="#delayed">Delayed Messages</a>
<li><a href="#errcount">Error Count</a>
</ol>
<hr>
<a name="configuration">
<h2>Configuration</h2>
<h3>PerlVars</h3>
<table border=2>
ENDHEADERS

foreach $varname (sort(keys(%perlvar))) {
    print $fh "<tr><td>$varname</td><td>$perlvar{$varname}</td></tr>\n";
}
print $fh "</table><h3>Hosts</h3><table border=2>";
foreach $id (sort(keys(%hostname))) {
    print $fh 
	"<tr><td>$id</td><td>$hostdom{$id}</td><td>$hostrole{$id}</td>";
    print $fh "<td>$hostname{$id}</td><td>$hostip{$id}</td></tr>\n";
}
print $fh "</table><h3>Spare Hosts</h3><ol>";
foreach $id (sort(keys(%spareid))) {
    print $fh "<li>$id\n";
}

print $fh "</ol>\n";

# --------------------------------------------------------------------- Machine

print $fh '<hr><a name="machine"><h2>Machine Information</h2>';
print $fh "<h3>loadavg</h3>";

open (LOADAVGH,"/proc/loadavg");
$loadavg=<LOADAVGH>;
close (LOADAVGH);

print $fh "<tt>$loadavg</tt>";

@parts=split(/\s+/,$loadavg);
if ($parts[1]>4.0) {
    $errors++;
} elsif ($parts[1]>2.0) {
    $warnings++;
} elsif ($parts[1]>1.0) {
    $notices++;
}

print $fh "<h3>df</h3>";
print $fh "<pre>";

open (DFH,"df|");
while ($line=<DFH>) { 
   print $fh "$line"; 
   @parts=split(/\s+/,$line);
   $usage=$parts[4];
   $usage=~s/\W//g;
   if ($usage>90) { 
      $warnings++;
      $notices++; 
   } elsif ($usage>80) {
      $warnings++;
   } elsif ($usage>60) {
      $notices++;
   }
   if ($usage>95) { $warnings++; $warnings++ }
}
close (DFH);
print $fh "</pre>";


print $fh "<h3>ps</h3>";
print $fh "<pre>";
$psproc=0;

open (PSH,"ps -aux|");
while ($line=<PSH>) { 
   print $fh "$line"; 
   $psproc++;
}
close (PSH);
print $fh "</pre>";

if ($psproc>200) { $notices++; }
if ($psproc>250) { $notices++; }

&errout($fh);

# --------------------------------------------------------------- clean out tmp
print $fh '<hr><a name="tmp"><h2>Temporary Files</h2>';
$cleaned=0;
$old=0;
while ($fname=<$perlvar{'lonDaemons'}/tmp/*>) {
                          my ($dev,$ino,$mode,$nlink,
                              $uid,$gid,$rdev,$size,
                              $atime,$mtime,$ctime,
                              $blksize,$blocks)=stat($fname);
                          $now=time;
                          $since=$now-$mtime;
                          if ($since>$perlvar{'lonExpire'}) {
                              $line='';
                              if (open(PROBE,$fname)) {
				  $line=<PROBE>;
                                  close(PROBE);
			      }
			      unless ($line=~/^CHECKOUTTOKEN\&/) {
                                 $cleaned++;
                                 unlink("$fname");
			      } else {
				  if ($since>365*$perlvar{'lonExpire'}) {
                                     $cleaned++;
                                     unlink("$fname");
				 } else { $old++; }
                              }
                          }
    
}
print $fh "Cleaned up ".$cleaned." files (".$old." old checkout tokens).";

# ------------------------------------------------------------ clean out lonIDs
print $fh '<hr><a name="tokens"><h2>Session Tokens</h2>';
$cleaned=0;
$active=0;
while ($fname=<$perlvar{'lonIDsDir'}/*>) {
                          my ($dev,$ino,$mode,$nlink,
                              $uid,$gid,$rdev,$size,
                              $atime,$mtime,$ctime,
                              $blksize,$blocks)=stat($fname);
                          $now=time;
                          $since=$now-$mtime;
                          if ($since>$perlvar{'lonExpire'}) {
                              $cleaned++;
                              print $fh "Unlinking $fname<br>";
                              unlink("$fname");
                          } else {
                              $active++;
                          }
    
}
print $fh "<p>Cleaned up ".$cleaned." stale session token(s).";
print $fh "<h3>$active open session(s)</h3>";

# ----------------------------------------------------------------------- httpd

print $fh '<hr><a name="httpd"><h2>httpd</h2><h3>Access Log</h3><pre>';

open (DFH,"tail -n25 /etc/httpd/logs/access_log|");
while ($line=<DFH>) { print $fh "$line" };
close (DFH);

print $fh "</pre><h3>Error Log</h3><pre>";

open (DFH,"tail -n25 /etc/httpd/logs/error_log|");
while ($line=<DFH>) { 
   print $fh "$line";
   if ($line=~/\[error\]/) { $notices++; } 
};
close (DFH);
print $fh "</pre>";
&errout($fh);


# ---------------------------------------------------------------------- lonsql

my $restartflag=1;
if ($perlvar{'lonRole'} eq "library") {

    print $fh '<hr><a name="lonsql"><h2>lonsql</h2><h3>Log</h3><pre>';
    print "lonsql\n";
    if (-e "$perlvar{'lonDaemons'}/logs/lonsql.log"){
	open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonsql.log|");
	while ($line=<DFH>) { 
	    print $fh "$line";
	    if ($line=~/INFO/) { $notices++; }
	    if ($line=~/WARNING/) { $notices++; }
	    if ($line=~/CRITICAL/) { $warnings++; }
	};
	close (DFH);
    }
    print $fh "</pre>";
    
    my $lonsqlfile="$perlvar{'lonDaemons'}/logs/lonsql.pid";
 
    $restartflag=1;
   
    if (-e $lonsqlfile) {
	my $lfh=IO::File->new("$lonsqlfile");
	my $lonsqlpid=<$lfh>;
	chomp($lonsqlpid);
	if (kill 0 => $lonsqlpid) {
	    print $fh "<h3>lonsql at pid $lonsqlpid responding</h3>";
	    $restartflag=0;
	} else {
	    $errors++; $errors++;
	    print $fh "<h3>lonsql at pid $lonsqlpid not responding</h3>";
		$restartflag=1;
	print $fh 
	    "<h3>Decided to clean up stale .pid file and restart lonsql</h3>";
	}
    }
    if ($restartflag==1) {
	$errors++;
	         print $fh '<br><font color="red">Killall lonsql: '.
                    system('killall lonsql').' - ';
                    sleep 2;
                    print $fh unlink($lonsqlfile).' - '.
                              system('killall -9 lonsql').
                    '</font><br>';
	print $fh "<h3>lonsql not running, trying to start</h3>";
	system(
 "$perlvar{'lonDaemons'}/lonsql 2>>$perlvar{'lonDaemons'}/logs/lonsql_errors");
	sleep 2;
	if (-e $lonsqlfile) {
	    print $fh "Seems like it started ...<p>";
	    my $lfh=IO::File->new("$lonsqlfile");
	    my $lonsqlpid=<$lfh>;
	    chomp($lonsqlpid);
	    sleep 2;
	    if (kill 0 => $lonsqlpid) {
		print $fh "<h3>lonsql at pid $lonsqlpid responding</h3>";
	    } else {
		$errors++; $errors++;
		print $fh "<h3>lonsql at pid $lonsqlpid not responding</h3>";
		print $fh "Give it one more try ...<p>";
		system(
 "$perlvar{'lonDaemons'}/lonsql 2>>$perlvar{'lonDaemons'}/logs/lonsql_errors");
		sleep 2;
	    }
	} else {
	    print $fh "Seems like that did not work!<p>";
	    $errors++;
	}
	if (-e "$perlvar{'lonDaemons'}/logs/lonsql.log"){
	    print $fh "<p><pre>";
	    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonsql.log|");
	    while ($line=<DFH>) { 
		print $fh "$line";
		if ($line=~/WARNING/) { $notices++; }
		if ($line=~/CRITICAL/) { $notices++; }
	    };
	    close (DFH);
	    print $fh "</pre>";
	}
    }

    $fname="$perlvar{'lonDaemons'}/logs/lonsql.log";

    my ($dev,$ino,$mode,$nlink,
	$uid,$gid,$rdev,$size,
	$atime,$mtime,$ctime,
	$blksize,$blocks)=stat($fname);

    if ($size>200000) {
	print $fh "Rotating logs ...<p>";
	rename("$fname.2","$fname.3");
	rename("$fname.1","$fname.2");
	rename("$fname","$fname.1");
    }

    &errout($fh);
}
# ------------------------------------------------------------------------ lond

print $fh '<hr><a name="lond"><h2>lond</h2><h3>Log</h3><pre>';
print "lond\n";

if (-e "$perlvar{'lonDaemons'}/logs/lond.log"){
open (DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/lond.log|");
while ($line=<DFH>) { 
   print $fh "$line";
   if ($line=~/INFO/) { $notices++; }
   if ($line=~/WARNING/) { $notices++; }
   if ($line=~/CRITICAL/) { $warnings++; }
};
close (DFH);
}
print $fh "</pre>";

my $londfile="$perlvar{'lonDaemons'}/logs/lond.pid";

$restartflag=1;
if (-e $londfile) {    
   my $lfh=IO::File->new("$londfile");
   my $londpid=<$lfh>;
   chomp($londpid);
   if (kill 0 => $londpid) {
      print $fh "<h3>lond at pid $londpid responding, sending USR1</h3>";
      kill USR1 => $londpid;
      $restartflag=0;
   } else {
      $errors++;
      print $fh "<h3>lond at pid $londpid not responding</h3>";
      $restartflag=1;
      print $fh 
	  "<h3>Decided to clean up stale .pid file and restart lond</h3>";
   }
} 
if ($restartflag==1) {
   $errors++;
	  print $fh '<br><font color="red">Killall lond: '.
                    system('killall lond').' - ';
          sleep 2;
          print $fh unlink($londfile).' - '.system('killall -9 lond').
                    '</font><br>';
   print $fh "<h3>lond not running, trying to start</h3>";
   system(
     "$perlvar{'lonDaemons'}/lond 2>>$perlvar{'lonDaemons'}/logs/lond_errors");
   sleep 2;
   if (-e $londfile) {
       print $fh "Seems like it started ...<p>";
       my $lfh=IO::File->new("$londfile");
       my $londpid=<$lfh>;
       chomp($londpid);
       sleep 2;
       if (kill 0 => $londpid) {
          print $fh "<h3>lond at pid $londpid responding</h3>";
       } else {
          $errors++; $errors++;
          print $fh "<h3>lond at pid $londpid not responding</h3>";
          print $fh "Give it one more try ...<p>";
	  system(
 "$perlvar{'lonDaemons'}/lond 2>>$perlvar{'lonDaemons'}/logs/lond_errors");
          sleep 2;
       }
   } else {
       print $fh "Seems like that did not work!<p>";
       $errors++;
   }
   if (-e "$perlvar{'lonDaemons'}/logs/lond.log"){
    print $fh "<p><pre>";
    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lond.log|");
    while ($line=<DFH>) { 
      print $fh "$line";
      if ($line=~/WARNING/) { $notices++; }
      if ($line=~/CRITICAL/) { $notices++; }
    };
    close (DFH);
    print $fh "</pre>";
   }
}

$fname="$perlvar{'lonDaemons'}/logs/lond.log";

                          my ($dev,$ino,$mode,$nlink,
                              $uid,$gid,$rdev,$size,
                              $atime,$mtime,$ctime,
                              $blksize,$blocks)=stat($fname);

if ($size>40000) {
    print $fh "Rotating logs ...<p>";
    rename("$fname.2","$fname.3");
    rename("$fname.1","$fname.2");
    rename("$fname","$fname.1");
}

&errout($fh);
# ------------------------------------------------------------------------ lonc

print $fh '<hr><a name="lonc"><h2>lonc</h2><h3>Log</h3><pre>';
print "lonc\n";

if (-e "$perlvar{'lonDaemons'}/logs/lonc.log"){
open (DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/lonc.log|");
while ($line=<DFH>) { 
   print $fh "$line";
   if ($line=~/INFO/) { $notices++; }
   if ($line=~/WARNING/) { $notices++; }
   if ($line=~/CRITICAL/) { $warnings++; }
};
close (DFH);
}
print $fh "</pre>";

my $loncfile="$perlvar{'lonDaemons'}/logs/lonc.pid";

$restartflag=1;
if (-e $loncfile) {
   my $lfh=IO::File->new("$loncfile");
   my $loncpid=<$lfh>;
   chomp($loncpid);
   if (kill 0 => $loncpid) {
      print $fh "<h3>lonc at pid $loncpid responding, sending USR1</h3>";
      kill USR1 => $loncpid;
      $restartflag=0;
   } else {
      $errors++;
      print $fh "<h3>lonc at pid $loncpid not responding</h3>";
      # Solution: kill parent and children processes, remove .pid and restart
	  $restartflag=1;
      print $fh 
	  "<h3>Decided to clean up stale .pid file and restart lonc</h3>";
   }
} 
if ($restartflag==1) {
   $errors++;
	  print $fh '<br><font color="red">Killall lonc: '.
	            system('killall lonc').' - ';
          sleep 2;
          print $fh unlink($loncfile).' - '.system('killall -9 lonc').
                    '</font><br>';
   print $fh "<h3>lonc not running, trying to start</h3>";
	system(
 "$perlvar{'lonDaemons'}/lonc 2>>$perlvar{'lonDaemons'}/logs/lonc_errors");
   sleep 2;
   if (-e $loncfile) {
       print $fh "Seems like it started ...<p>";
       my $lfh=IO::File->new("$loncfile");
       my $loncpid=<$lfh>;
       chomp($loncpid);
       sleep 2;
       if (kill 0 => $loncpid) {
          print $fh "<h3>lonc at pid $loncpid responding</h3>";
       } else {
          $errors++; $errors++;
          print $fh "<h3>lonc at pid $loncpid not responding</h3>";
          print $fh "Give it one more try ...<p>";
 	  system(
 "$perlvar{'lonDaemons'}/lonc 2>>$perlvar{'lonDaemons'}/logs/lonc_errors");
          sleep 2;
       }
   } else {
       print $fh "Seems like that did not work!<p>";
       $errors++;
   }
   if (-e "$perlvar{'lonDaemons'}/logs/lonc.log") {
    print $fh "<p><pre>";
    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonc.log|");
    while ($line=<DFH>) { 
      print $fh "$line";
      if ($line=~/WARNING/) { $notices++; }
      if ($line=~/CRITICAL/) { $notices++; }
    };
    close (DFH);
    print $fh "</pre>";
   }
}

$fname="$perlvar{'lonDaemons'}/logs/lonc.log";

                          my ($dev,$ino,$mode,$nlink,
                              $uid,$gid,$rdev,$size,
                              $atime,$mtime,$ctime,
                              $blksize,$blocks)=stat($fname);

if ($size>40000) {
    print $fh "Rotating logs ...<p>";
    rename("$fname.2","$fname.3");
    rename("$fname.1","$fname.2");
    rename("$fname","$fname.1");
}

   
&errout($fh);
# -------------------------------------------------------------------- lonhttpd

print $fh '<hr><a name="lonhttpd"><h2>lonhttpd</h2><h3>Log</h3><pre>';
print "lonhttpd\n";

if (-e "$perlvar{'lonDaemons'}/logs/lonhttpd.log"){
open (DFH,"tail -n25 $perlvar{'lonDaemons'}/logs/lonhttpd.log|");
while ($line=<DFH>) { 
   print $fh "$line";
   if ($line=~/INFO/) { $notices++; }
   if ($line=~/WARNING/) { $notices++; }
   if ($line=~/CRITICAL/) { $warnings++; }
};
close (DFH);
}
print $fh "</pre>";

my $lonhttpdfile="$perlvar{'lonDaemons'}/logs/lonhttpd.pid";

$restartflag=1;
if (-e $lonhttpdfile) {
   my $lfh=IO::File->new("$lonhttpdfile");
   my $lonhttpdpid=<$lfh>;
   chomp($lonhttpdpid);
   if (kill 0 => $lonhttpdpid) {
      print $fh "<h3>lonhttpd at pid $lonhttpdpid responding</h3>";
      $restartflag=0;
   } else {
      $errors++;
      print $fh "<h3>lonhttpd at pid $lonhttpdpid not responding</h3>";
      # Solution: kill parent and children processes, remove .pid and restart
	  $restartflag=1;
      print $fh 
	  "<h3>Decided to clean up stale .pid file and restart lonhttpd</h3>";
   }
} 
if ($restartflag==1) {
   $errors++;
	  print $fh '<br><font color="red">Killall lonhttpd: '.
	            system('killall lonhttpd').' - ';
          sleep 2;
          print $fh unlink($lonhttpdfile).' - '.system('killall -9 lonhttpd').
                    '</font><br>';
   print $fh "<h3>lonhttpd not running, trying to start</h3>";
	system(
 "$perlvar{'lonDaemons'}/lonhttpd 2>>$perlvar{'lonDaemons'}/logs/lonhttpd_errors");
   sleep 2;
   if (-e $lonhttpdfile) {
       print $fh "Seems like it started ...<p>";
       my $lfh=IO::File->new("$lonhttpdfile");
       my $lonhttpdpid=<$lfh>;
       chomp($lonhttpdpid);
       sleep 2;
       if (kill 0 => $lonhttpdpid) {
          print $fh "<h3>lonhttpd at pid $lonhttpdpid responding</h3>";
       } else {
          $errors++; $errors++;
          print $fh "<h3>lonhttpd at pid $lonhttpdpid not responding</h3>";
          print $fh "Give it one more try ...<p>";
 	  system(
 "$perlvar{'lonDaemons'}/lonhttpd 2>>$perlvar{'lonDaemons'}/logs/lonhttpd_errors");
          sleep 2;
       }
   } else {
       print $fh "Seems like that did not work!<p>";
       $errors++;
   }
   if (-e "$perlvar{'lonDaemons'}/logs/lonhttpd.log") {
    print $fh "<p><pre>";
    open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonhttpd.log|");
    while ($line=<DFH>) { 
      print $fh "$line";
      if ($line=~/WARNING/) { $notices++; }
      if ($line=~/CRITICAL/) { $notices++; }
    };
    close (DFH);
    print $fh "</pre>";
   }
}

$fname="$perlvar{'lonDaemons'}/logs/lonhttpd.log";

                          my ($dev,$ino,$mode,$nlink,
                              $uid,$gid,$rdev,$size,
                              $atime,$mtime,$ctime,
                              $blksize,$blocks)=stat($fname);

if ($size>40000) {
    print $fh "Rotating logs ...<p>";
    rename("$fname.2","$fname.3");
    rename("$fname.1","$fname.2");
    rename("$fname","$fname.1");
}

   
&errout($fh);
# ---------------------------------------------------------------------- lonnet

print $fh '<hr><a name="lonnet"><h2>lonnet</h2><h3>Temp Log</h3><pre>';
print "lonnet\n";
if (-e "$perlvar{'lonDaemons'}/logs/lonnet.log"){
open (DFH,"tail -n50 $perlvar{'lonDaemons'}/logs/lonnet.log|");
while ($line=<DFH>) { 
    print $fh "$line";
};
close (DFH);
}
print $fh "</pre><h3>Perm Log</h3><pre>";

if (-e "$perlvar{'lonDaemons'}/logs/lonnet.perm.log") {
    open(DFH,"tail -n10 $perlvar{'lonDaemons'}/logs/lonnet.perm.log|");
while ($line=<DFH>) { 
   print $fh "$line";
};
close (DFH);
} else { print $fh "No perm log\n" }

$fname="$perlvar{'lonDaemons'}/logs/lonnet.log";

                          my ($dev,$ino,$mode,$nlink,
                              $uid,$gid,$rdev,$size,
                              $atime,$mtime,$ctime,
                              $blksize,$blocks)=stat($fname);

if ($size>40000) {
    print $fh "Rotating logs ...<p>";
    rename("$fname.2","$fname.3");
    rename("$fname.1","$fname.2");
    rename("$fname","$fname.1");
}

print $fh "</pre>";
&errout($fh);
# ----------------------------------------------------------------- Connections

print $fh '<hr><a name="connections"><h2>Connections</h2>';

print $fh "<table border=2>";
foreach $tryserver (sort(keys(%hostname))) {

    $answer=reply("pong",$tryserver);
    if ($answer eq "$tryserver:$perlvar{'lonHostID'}") {
	$result="<b>ok</b>";
    } else {
        $result=$answer;
        $warnings++;
        if ($answer eq 'con_lost') { $warnings++; }
    }
    print $fh "<tr><td>$tryserver</td><td>$result</td></tr>\n";

}
print $fh "</table>";

&errout($fh);
# ------------------------------------------------------------ Delayed messages

print $fh '<hr><a name="delayed"><h2>Delayed Messages</h2>';
print "buffers\n";

print $fh '<h3>Scanning Permanent Log</h3>';

$unsend=0;
{
    my $dfh=IO::File->new("$perlvar{'lonDaemons'}/logs/lonnet.perm.log");
    while ($line=<$dfh>) {
	($time,$sdf,$dserv,$dcmd)=split(/:/,$line);
        if ($sdf eq 'F') { 
	    $local=localtime($time);
            print "<b>Failed: $time, $dserv, $dcmd</b><br>";
            $warnings++;
        }
        if ($sdf eq 'S') { $unsend--; }
        if ($sdf eq 'D') { $unsend++; }
    }
}
print $fh "Total unsend messages: <b>$unsend</b><p>\n";
$warnings=$warnings+5*$unsend;

print $fh "<h3>Outgoing Buffer</h3>";

open (DFH,"ls -lF $perlvar{'lonSockDir'}/delayed|");
while ($line=<DFH>) { 
    print $fh "$line<br>";
};
close (DFH);

# ------------------------------------------------------------------------- End
print $fh "<a name=errcount>\n";
$totalcount=$notices+4*$warnings+100*$errors;
&errout($fh);
print $fh "<h1>Total Error Count: $totalcount</h1>";
$now=time;
$date=localtime($now);
print $fh "<hr>$date ($now)</body></html>\n";
print "writing done\n";
}

rename ("$statusdir/newstatus.html","$statusdir/index.html");

if ($totalcount>200) {
   print "mailing\n";
   $emailto="$perlvar{'lonAdmEMail'}";
   if ($totalcount>600) {
      $emailto.=",$perlvar{'lonSysEMail'}";
   }
   $subj="LON: $perlvar{'lonHostID'} E:$errors W:$warnings N:$notices"; 
   system(
 "metasend -b -t $emailto -s '$subj' -f $statusdir/index.html -m text/html");
}
1;









FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.