#!/usr/bin/perl $|=1; # The LearningOnline Network with CAPA # Cluster Status # # $Id: clusterstatus.pl,v 1.14 2003/08/01 19:20:26 www Exp $ use lib '/home/httpd/lib/perl/'; use LONCAPA::Configuration; use LWP::UserAgent(); use HTTP::Headers; use IO::File; my %host=(); my $oneday=60*60*24; my %connectionstatus=(); my %perlvar=(); my $mode; my $concount=0; sub select_form { my ($def,$name,%hash) = @_; my $selectform = ""; return $selectform; } sub key { my ($local,$url)=@_; my $key=$local.'_'.$url; $key=~s/\W/\_/gs; return $key; } sub hidden { my ($name,$value)=@_; print "\n"; } sub request { my ($local,$url,$cachetime)=@_; $cachetime*=(0.5+rand); my $key=&key($local,$url); my $reply=''; if ($FORM{$key.'_time'}) { if ((time-$FORM{$key.'_time'})<$cachetime) { $reply=$FORM{$key}; &hidden($key.'_time',$FORM{$key.'_time'}); &hidden($key.'_fromcache',1); } } unless ($reply) { unless ($hostname{$local}) { $reply='local_unknown'; } else { my $ua=new LWP::UserAgent(timeout => 10); my $request=new HTTP::Request('GET', "http://".$hostname{$local}.$url); $request->authorization_basic('lonadm','litelite'); my $response=$ua->request($request); unless ($response->is_success) { $reply='local_error'; } else { $reply=$response->content; chomp($reply); } } &hidden($key.'_time',time); } &hidden($key,$reply); return $reply; } # ============================================= Are local and remote connected? sub connected { my ($local,$remote)=@_; $local=~s/\W//g; $remote=~s/\W//g; unless ($hostname{$remote}) { return 'remote_unknown'; } my $url='/cgi-bin/ping.pl?'.$remote; # # Slowly phase this in: if not cached, only do 5 percent of the cases, # but always do the first five. # unless ($FORM{&key($local,$url)}) { unless (($concount<=5) || (rand>0.95)) { return 'not_yet'; } else { $concount++; } } # # Actually do the query # &statuslist($local,'connecting '.$remote); my $reply=&request($local,$url,3600); $reply=(split("\n",$reply))[0]; $reply=~s/\W//g; if ($reply ne $remote) { return $reply; } return 'ok'; } # ============================================================ Get a reply hash sub replyhash { my %returnhash=(); foreach (split(/\&/,&request(@_))) { my ($name,$value)=split(/\=/,$_); if ($name) { unless ($value) { $value=''; } $returnhash{$name}=$value; } } return %returnhash; } # ================================================================ Link to host sub otherwindow { my ($local,$url,$label)=@_; return " $label "; } sub login { my $local=shift; print &otherwindow($local,'/adm/login?domain='.$perlvar{'lonDefDomain'}, 'Login'); } sub runloncron { my $local=shift; print &otherwindow($local,'/cgi-bin/loncron.pl','Run loncron'); } sub loncron { my $local=shift; print &otherwindow($local,'/lon-status','loncron'); } sub lonc { my $local=shift; print &otherwindow($local,'/lon-status/loncstatus.txt','lonc'); } sub lond { my $local=shift; print &otherwindow($local,'/lon-status/londstatus.txt','lond'); } sub users { my $local=shift; print &otherwindow($local,'/cgi-bin/userstatus.pl','Users'); } sub versions { my $local=shift; print &otherwindow($local,'/cgi-bin/lonversions.pl','Versions'); } sub server { my $local=shift; print &otherwindow($local,'/server-status','Server Status'); } # ========================================================= Produce a green bar sub bar { my $parm=shift; my $number=int($parm+0.5); print "
"; for (my $i=0;$i<$number;$i++) { print "+"; } print " |
$local $hostdom{$local} ($hostname{$local}; $hostrole{$local})
$domaindescription{$hostdom{$local}} |
ENDHEADER &login($local);&server($local);&users($local);&versions($local); &loncron($local);&lond($local);&lonc($local);&runloncron($local); print " |
$trouble |
";
# load
if (($host{$local.'_load_doomed'}>0.5) || ($mode eq 'load_doomed')) {
print " Load: ".$host{$local.'_load'} } # users if (($host{$local.'_users_doomed'}>10) || ($mode eq 'users_doomed')) { print " Active Users: ".$host{$local.'_users'} } # checkrpms if ($host{$local.'_checkrpms'}) { print " RPMs: ".$host{$local.'_checkrpms'} } # mysql if ($host{$local.'_mysql'}) { print " MySQL Database: ".$host{$local.'_mysql'} } # connections if ($host{$local.'_notconnected'}) { print " Not connected: "; foreach (split(/ /,$host{$local.'_notconnected'})) { if ($_) { print " $_"; } } } # errors if ($host{$local.'_errors'}) { print " loncron errors: ".$host{$local.'_errors'}; } print " |
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.