File:  [LON-CAPA] / loncom / loncron
Revision 1.3: download - view: text, annotated - select for diffs
Tue Feb 8 17:34:24 2000 UTC (24 years, 4 months ago) by www
Branches: MAIN
CVS tags: HEAD
Put in additional sleep so that children do not die before reaper in place
(lonc)
Marked up logs
Put in report for after the lonc/lond start into loncron

    1: #!/usr/bin/perl
    2: 
    3: # The LearningOnline Network
    4: # Housekeeping program, started by cron
    5: #
    6: # (TCP networking package
    7: # 6/1/99,6/2,6/10,6/11,6/12,6/14,6/26,6/28,6/29,6/30,
    8: # 7/1,7/2,7/9,7/10,7/12 Gerd Kortemeyer)
    9: #
   10: # 7/14,7/15,7/19,7/21,7/22,11/18,
   11: # 2/8 Gerd Kortemeyer
   12: 
   13: use IO::File;
   14: use IO::Socket;
   15: 
   16: # -------------------------------------------------- Non-critical communication
   17: sub reply {
   18:     my ($cmd,$server)=@_;
   19:     my $peerfile="$perlvar{'lonSockDir'}/$server";
   20:     my $client=IO::Socket::UNIX->new(Peer    =>"$peerfile",
   21:                                      Type    => SOCK_STREAM,
   22:                                      Timeout => 10)
   23:        or return "con_lost";
   24:     print $client "$cmd\n";
   25:     my $answer=<$client>;
   26:     chomp($answer);
   27:     if (!$answer) { $answer="con_lost"; }
   28:     return $answer;
   29: }
   30: 
   31: # --------------------------------------------------------- Output error status
   32: 
   33: sub errout {
   34:    my $fh=shift;
   35:    print $fh (<<ENDERROUT);
   36:      <p><table border=2 bgcolor="#CCCCCC">
   37:      <tr><td>Notices</td><td>$notices</td></tr>
   38:      <tr><td>Warnings</td><td>$warnings</td></tr>
   39:      <tr><td>Errors</td><td>$errors</td></tr>
   40:      </table><p><a href="#top">Top</a><p>
   41: ENDERROUT
   42: }
   43: 
   44: # ================================================================ Main Program
   45: 
   46: 
   47: # ------------------------------------------------------------ Read access.conf
   48: {
   49:     my $config=IO::File->new("/etc/httpd/conf/access.conf");
   50: 
   51:     while (my $configline=<$config>) {
   52:         if ($configline =~ /PerlSetVar/) {
   53: 	   my ($dummy,$varname,$varvalue)=split(/\s+/,$configline);
   54:            $perlvar{$varname}=$varvalue;
   55:         }
   56:     }
   57: }
   58: 
   59: # ------------------------------------------------------------- Read hosts file
   60: {
   61:     my $config=IO::File->new("$perlvar{'lonTabDir'}/hosts.tab");
   62: 
   63:     while (my $configline=<$config>) {
   64:        my ($id,$domain,$role,$name,$ip)=split(/:/,$configline);
   65:        $hostname{$id}=$name;
   66:        $hostdom{$id}=$domain;
   67:        $hostrole{$id}=$role;
   68:        $hostip{$id}=$ip;
   69:        if (($role eq 'library') && ($id ne $perlvar{'lonHostID'})) {
   70: 	   $libserv{$id}=$name;
   71:        }
   72:     }
   73: }
   74: 
   75: # ------------------------------------------------------ Read spare server file
   76: {
   77:     my $config=IO::File->new("$perlvar{'lonTabDir'}/spare.tab");
   78: 
   79:     while (my $configline=<$config>) {
   80:        chomp($configline);
   81:        if (($configline) && ($configline ne $perlvar{'lonHostID'})) {
   82:           $spareid{$configline}=1;
   83:        }
   84:     }
   85: }
   86: 
   87: # ---------------------------------------------------------------- Start report
   88: 
   89: $statusdir="/home/httpd/html/lon-status";
   90: 
   91: $errors=0;
   92: $warnings=0;
   93: $notices=0;
   94: 
   95: $now=time;
   96: $date=localtime($now);
   97: 
   98: {
   99: my $fh=IO::File->new(">$statusdir/newstatus.html");
  100: 
  101: print $fh (<<ENDHEADERS);
  102: <html>
  103: <head>
  104: <title>LON Status Report $perlvar{'lonHostID'}</title>
  105: </head>
  106: <body bgcolor="#AAAAAA">
  107: <a name="top">
  108: <h1>LON Status Report $perlvar{'lonHostID'}</h1>
  109: <h2>$date ($now)</h2>
  110: <ol>
  111: <li><a href="#configuration">Configuration</a>
  112: <li><a href="#machine">Machine Information</a>
  113: <li><a href="#httpd">httpd</a>
  114: <li><a href="#lond">lond</a>
  115: <li><a href="#lonc">lonc</a>
  116: <li><a href="#lonnet">lonnet</a>
  117: <li><a href="#connections">Connections</a>
  118: <li><a href="#delayed">Delayed Messages</a>
  119: <li><a href="#errcount">Error Count</a>
  120: </ol>
  121: <hr>
  122: <a name="configuration">
  123: <h2>Configuration</h2>
  124: <h3>PerlVars</h3>
  125: <table border=2>
  126: ENDHEADERS
  127: 
  128: foreach $varname (keys %perlvar) {
  129:     print $fh "<tr><td>$varname</td><td>$perlvar{$varname}</td></tr>\n";
  130: }
  131: print $fh "</table><h3>Hosts</h3><table border=2>";
  132: foreach $id (keys %hostname) {
  133: print $fh 
  134:     "<tr><td>$id</td><td>$hostdom{$id}</td><td>$hostrole{$id}</td>";
  135: print $fh "<td>$hostname{$id}</td><td>$hostip{$id}</td></tr>\n";
  136: }
  137: print $fh "</table><h3>Spare Hosts</h3><ol>";
  138: foreach $id (keys %spareid) {
  139:     print $fh "<li>$id\n";
  140: }
  141: 
  142: print $fh "</ol>\n";
  143: 
  144: # --------------------------------------------------------------------- Machine
  145: 
  146: print $fh '<hr><a name="machine"><h2>Machine Information</h2>';
  147: print $fh "<h3>loadavg</h3>";
  148: 
  149: open (LOADAVGH,"/proc/loadavg");
  150: $loadavg=<LOADAVGH>;
  151: close (LOADAVGH);
  152: 
  153: print $fh "<tt>$loadavg</tt>";
  154: 
  155: @parts=split(/\s+/,$loadavg);
  156: if ($parts[1]>3.0) {
  157:     $errors++;
  158: } elsif ($parts[1]>2.0) {
  159:     $warnings++;
  160: } elsif ($parts[1]>1.0) {
  161:     $notices++;
  162: }
  163: 
  164: print $fh "<h3>df</h3>";
  165: print $fh "<pre>";
  166: 
  167: open (DFH,"df|");
  168: while ($line=<DFH>) { 
  169:    print $fh "$line"; 
  170:    @parts=split(/\s+/,$line);
  171:    $usage=$parts[4];
  172:    $usage=~s/\W//g;
  173:    if ($usage>90) { 
  174:       $errors++; 
  175:    } elsif ($usage>80) {
  176:       $warnings++;
  177:    } elsif ($usage>60) {
  178:       $notices++;
  179:    }
  180:    if ($usage>95) { $errors++; }
  181: }
  182: close (DFH);
  183: print $fh "</pre>";
  184: &errout($fh);
  185: # ----------------------------------------------------------------------- httpd
  186: 
  187: print $fh '<hr><a name="httpd"><h2>httpd</h2><h3>Access Log</h3><pre>';
  188: 
  189: open (DFH,"tail -n40 /etc/httpd/logs/access_log|");
  190: while ($line=<DFH>) { print $fh "$line" };
  191: close (DFH);
  192: 
  193: print $fh "</pre><h3>Error Log</h3><pre>";
  194: 
  195: open (DFH,"tail -n50 /etc/httpd/logs/error_log|");
  196: while ($line=<DFH>) { 
  197:    print $fh "$line";
  198:    if ($line=~/\[error\]/) { $notices++; } 
  199: };
  200: close (DFH);
  201: print $fh "</pre>";
  202: &errout($fh);
  203: # ------------------------------------------------------------------------ lond
  204: 
  205: print $fh '<hr><a name="lond"><h2>lond</h2><h3>Log</h3><pre>';
  206: 
  207: if (-e "$perlvar{'lonDaemons'}/logs/lond.log"){
  208: open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lond.log|");
  209: while ($line=<DFH>) { 
  210:    print $fh "$line";
  211:    if ($line=~/INFO/) { $notices++; }
  212:    if ($line=~/WARNING/) { $warnings++; }
  213:    if ($line=~/CRITICAL/) { $errors++; }
  214: };
  215: close (DFH);
  216: }
  217: print $fh "</pre>";
  218: 
  219: my $londfile="$perlvar{'lonDaemons'}/logs/lond.pid";
  220: 
  221: if (-e $londfile) {
  222:    my $lfh=IO::File->new("$londfile");
  223:    my $londpid=<$lfh>;
  224:    chomp($londpid);
  225:    if (kill 0 => $londpid) {
  226:       print $fh "<h3>lond at pid $londpid responding</h3>";
  227:    } else {
  228:       $errors++; $errors++;
  229:       print $fh "<h3>lond at pid $londpid not responding</h3>";
  230:    }
  231: } else {
  232:    $errors++;
  233:    print $fh "<h3>lond not running, trying to start</h3>";
  234:    system("$perlvar{'lonDaemons'}/lond");
  235:    sleep 120;
  236:    if (-e $londfile) {
  237:        print $fh "Seems like it started ...<p>";
  238:        my $lfh=IO::File->new("$londfile");
  239:        my $londpid=<$lfh>;
  240:        chomp($londpid);
  241:        sleep 30;
  242:        if (kill 0 => $londpid) {
  243:           print $fh "<h3>lond at pid $londpid responding</h3>";
  244:        } else {
  245:           $errors++; $errors++;
  246:           print $fh "<h3>lond at pid $londpid not responding</h3>";
  247:           print $fh "Give it one more try ...<p>";
  248:           system("$perlvar{'lonDaemons'}/lond");
  249:           sleep 120;
  250:        }
  251:    } else {
  252:        print $fh "Seems like that did not work!<p>";
  253:        $errors++;
  254:    }
  255:    if (-e "$perlvar{'lonDaemons'}/logs/lond.log"){
  256:     print $fh "<p><pre>";
  257:     open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lond.log|");
  258:     while ($line=<DFH>) { 
  259:       print $fh "$line";
  260:       if ($line=~/INFO/) { $notices++; }
  261:       if ($line=~/WARNING/) { $warnings++; }
  262:       if ($line=~/CRITICAL/) { $errors++; }
  263:     };
  264:     close (DFH);
  265:     print $fh "</pre>";
  266:    }
  267: }
  268: 
  269: $fname="$perlvar{'lonDaemons'}/logs/lond.log";
  270: 
  271:                           my ($dev,$ino,$mode,$nlink,
  272:                               $uid,$gid,$rdev,$size,
  273:                               $atime,$mtime,$ctime,
  274:                               $blksize,$blocks)=stat($fname);
  275: 
  276: if ($size>40000) {
  277:     print $fh "Rotating logs ...<p>";
  278:     rename("$fname.2","$fname.3");
  279:     rename("$fname.1","$fname.2");
  280:     rename("$fname","$fname.1");
  281: }
  282: 
  283: &errout($fh);
  284: # ------------------------------------------------------------------------ lonc
  285: 
  286: print $fh '<hr><a name="lonc"><h2>lonc</h2><h3>Log</h3><pre>';
  287: 
  288: if (-e "$perlvar{'lonDaemons'}/logs/lonc.log"){
  289: open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonc.log|");
  290: while ($line=<DFH>) { 
  291:    print $fh "$line";
  292:    if ($line=~/INFO/) { $notices++; }
  293:    if ($line=~/WARNING/) { $warnings++; }
  294:    if ($line=~/CRITICAL/) { $errors++; }
  295: };
  296: close (DFH);
  297: }
  298: print $fh "</pre>";
  299: 
  300: my $loncfile="$perlvar{'lonDaemons'}/logs/lonc.pid";
  301: 
  302: if (-e $loncfile) {
  303:    my $lfh=IO::File->new("$loncfile");
  304:    my $loncpid=<$lfh>;
  305:    chomp($loncpid);
  306:    if (kill 0 => $loncpid) {
  307:       print $fh "<h3>lonc at pid $loncpid responding, sending USR1</h3>";
  308:       kill USR1 => $loncpid;
  309:    } else {
  310:       $errors++; $errors++;
  311:       print $fh "<h3>lonc at pid $loncpid not responding</h3>";
  312:    }
  313: } else {
  314:    $errors++;
  315:    print $fh "<h3>lonc not running, trying to start</h3>";
  316:    system("$perlvar{'lonDaemons'}/lonc");
  317:    sleep 120;
  318:    if (-e $loncfile) {
  319:        print $fh "Seems like it started ...<p>";
  320:        my $lfh=IO::File->new("$loncfile");
  321:        my $loncpid=<$lfh>;
  322:        chomp($loncpid);
  323:        sleep 30;
  324:        if (kill 0 => $loncpid) {
  325:           print $fh "<h3>lonc at pid $loncpid responding</h3>";
  326:        } else {
  327:           $errors++; $errors++;
  328:           print $fh "<h3>lonc at pid $loncpid not responding</h3>";
  329:           print $fh "Give it one more try ...<p>";
  330:           system("$perlvar{'lonDaemons'}/lonc");
  331:           sleep 120;
  332:        }
  333:    } else {
  334:        print $fh "Seems like that did not work!<p>";
  335:        $errors++;
  336:    }
  337:    if (-e "$perlvar{'lonDaemons'}/logs/lonc.log") {
  338:     print $fh "<p><pre>";
  339:     open (DFH,"tail -n100 $perlvar{'lonDaemons'}/logs/lonc.log|");
  340:     while ($line=<DFH>) { 
  341:       print $fh "$line";
  342:       if ($line=~/INFO/) { $notices++; }
  343:       if ($line=~/WARNING/) { $warnings++; }
  344:       if ($line=~/CRITICAL/) { $errors++; }
  345:     };
  346:     close (DFH);
  347:     print $fh "</pre>";
  348:    }
  349: }
  350: 
  351: $fname="$perlvar{'lonDaemons'}/logs/lonc.log";
  352: 
  353:                           my ($dev,$ino,$mode,$nlink,
  354:                               $uid,$gid,$rdev,$size,
  355:                               $atime,$mtime,$ctime,
  356:                               $blksize,$blocks)=stat($fname);
  357: 
  358: if ($size>40000) {
  359:     print $fh "Rotating logs ...<p>";
  360:     rename("$fname.2","$fname.3");
  361:     rename("$fname.1","$fname.2");
  362:     rename("$fname","$fname.1");
  363: }
  364: 
  365:    
  366: &errout($fh);
  367: # ---------------------------------------------------------------------- lonnet
  368: 
  369: print $fh '<hr><a name="lonnet"><h2>lonnet</h2><h3>Temp Log</h3><pre>';
  370: if (-e "$perlvar{'lonDaemons'}/logs/lonnet.log"){
  371: open (DFH,"tail -n50 $perlvar{'lonDaemons'}/logs/lonnet.log|");
  372: while ($line=<DFH>) { 
  373:     print $fh "$line";
  374: };
  375: close (DFH);
  376: }
  377: print $fh "</pre><h3>Perm Log</h3>";
  378: 
  379: if (-e "$perlvar{'lonDaemons'}/logs/lonnet.perm.log") {
  380:     open(DFH,"tail -n10 $perlvar{'lonDaemons'}/logs/lonnet.perm.log|");
  381: while ($line=<DFH>) { 
  382:    print $fh "$line";
  383: };
  384: close (DFH);
  385: } else { print $fh "No perm log\n" }
  386: 
  387: $fname="$perlvar{'lonDaemons'}/logs/lonnet.log";
  388: 
  389:                           my ($dev,$ino,$mode,$nlink,
  390:                               $uid,$gid,$rdev,$size,
  391:                               $atime,$mtime,$ctime,
  392:                               $blksize,$blocks)=stat($fname);
  393: 
  394: if ($size>40000) {
  395:     print $fh "Rotating logs ...<p>";
  396:     rename("$fname.2","$fname.3");
  397:     rename("$fname.1","$fname.2");
  398:     rename("$fname","$fname.1");
  399: }
  400: 
  401: print $fh "</pre>";
  402: &errout($fh);
  403: # ----------------------------------------------------------------- Connections
  404: 
  405: print $fh '<hr><a name="connections"><h2>Connections</h2>';
  406: 
  407: print $fh "<table border=2>";
  408: foreach $tryserver (keys %hostname) {
  409: 
  410:     $answer=reply("pong",$tryserver);
  411:     if ($answer eq "$tryserver:$perlvar{'lonHostID'}") {
  412: 	$result="<b>ok</b>";
  413:     } else {
  414:         $result=$answer;
  415:         $warnings++;
  416:         if ($answer eq 'con_lost') { $warnings++; }
  417:     }
  418:     print $fh "<tr><td>$tryserver</td><td>$result</td></tr>\n";
  419: 
  420: }
  421: print $fh "</table>";
  422: 
  423: &errout($fh);
  424: # ------------------------------------------------------------ Delayed messages
  425: 
  426: print $fh '<hr><a name="delayed"><h2>Delayed Messages</h2>';
  427: 
  428: print $fh '<h3>Scanning Permanent Log</h3>';
  429: 
  430: $unsend=0;
  431: {
  432:     my $dfh=IO::File->new("$perlvar{'lonDaemons'}/logs/lonnet.perm.log");
  433:     while ($line=<$dfh>) {
  434: 	($time,$sdf,$dserv,$dcmd)=split(/:/,$line);
  435:         if ($sdf eq 'F') { 
  436: 	    $local=localtime($time);
  437:             print "<b>Failed: $time, $dserv, $dcmd</b><br>";
  438:             $warnings++;
  439:         }
  440:         if ($sdf eq 'S') { $unsend--; }
  441:         if ($sdf eq 'D') { $unsend++; }
  442:     }
  443: }
  444: print $fh "Total unsend messages: <b>$unsend</b><p>\n";
  445: $warnings=$warnings+5*$unsend;
  446: 
  447: print $fh "<h3>Outgoing Buffer</h3>";
  448: 
  449: open (DFH,"ls -lF $perlvar{'lonSockDir'}/delayed|");
  450: while ($line=<DFH>) { 
  451:     print $fh "$line<br>";
  452: };
  453: close (DFH);
  454: 
  455: # ------------------------------------------------------------------------- End
  456: print $fh "<a name=errcount>\n";
  457: $totalcount=$notices+4*$warnings+100*$errors;
  458: &errout($fh);
  459: print $fh "<h1>Total Error Count: $totalcount</h1>";
  460: $now=time;
  461: $date=localtime($now);
  462: print $fh "<hr>$date ($now)</body></html>\n";
  463: 
  464: }
  465: 
  466: rename ("$statusdir/newstatus.html","$statusdir/index.html");
  467: 
  468: if ($totalcount>200) {
  469:    $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
  470:    $subj="LON: $perlvar{'lonHostID'} E:$errors W:$warnings N:$notices"; 
  471:    system(
  472:  "metasend -b -t $emailto -s '$subj' -f $statusdir/index.html -m text/html");
  473: }
  474: 1;
  475: 
  476: 
  477: 
  478: 
  479: 
  480: 
  481: 
  482: 

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.