#!/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 " |