--- loncom/cgi/clusterstatus.pl 2002/02/18 23:45:23 1.1 +++ loncom/cgi/clusterstatus.pl 2002/11/18 15:11:41 1.5 @@ -5,11 +5,27 @@ $|=1; # (Versions # (Running loncron # 09/06/01 Gerd Kortemeyer) -# 02/18/02 Gerd Kortemeyer) -# +# 02/18/02,02/19/02 Gerd Kortemeyer) +# 5/11/2002 Scott Harrison + +use lib '/home/httpd/lib/perl/'; +use LONCAPA::Configuration; + use LWP::UserAgent(); use HTTP::Headers; use IO::File; +use Net::Ping; + +sub online { + my $host=shift; + return 1; +# ping is broken + my $p=Net::Ping->new("tcp",10); + my $online=$p->ping("$host"); + $p->close(); + undef ($p); + return $online; +} sub connected { my ($local,$remote)=@_; @@ -19,6 +35,8 @@ sub connected { unless ($hostname{$local}) { return 'local_unknown'; } unless ($hostname{$remote}) { return 'remote_unknown'; } + unless (&online($hostname{$local})) { return 'local_offline'; } + my $ua=new LWP::UserAgent; my $request=new HTTP::Request('GET', @@ -26,7 +44,7 @@ sub connected { my $response=$ua->request($request); - unless ($response->is_success) { return 'local_offline'; } + unless ($response->is_success) { return 'local_error'; } my $reply=$response->content; $reply=(split("\n",$reply))[0]; @@ -38,37 +56,102 @@ sub connected { print "Content-type: text/html\n\n". "\n"; -# ------------------------------------------------------------ Read access.conf -{ - my $config=IO::File->new("/etc/httpd/conf/access.conf"); - - while (my $configline=<$config>) { - if ($configline =~ /PerlSetVar/) { - my ($dummy,$varname,$varvalue)=split(/\s+/,$configline); - $perlvar{$varname}=$varvalue; - } - } - delete $perlvar{'lonReceipt'}; # remove since sensitive and not needed - delete $perlvar{'lonSqlAccess'}; # remove since sensitive and not needed -} +# -------------------- Read loncapa.conf (and by default, loncapa_apache.conf). +my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf'); +my %perlvar=%{$perlvarref}; +undef $perlvarref; # remove since sensitive and not needed +delete $perlvar{'lonReceipt'}; # remove since sensitive and not needed +delete $perlvar{'lonSqlAccess'}; # remove since sensitive and not needed # ------------------------------------------------------------- Read hosts file { my $config=IO::File->new("$perlvar{'lonTabDir'}/hosts.tab"); + $total=0; while (my $configline=<$config>) { my ($id,$domain,$role,$name,$ip)=split(/:/,$configline); $hostname{$id}=$name; $hostdom{$id}=$domain; $hostrole{$id}=$role; $hostip{$id}=$ip; + $total++; if (($role eq 'library') && ($id ne $perlvar{'lonHostID'})) { $libserv{$id}=$name; } } } -print "

Cluster Status

\n"; -print &connected('gerdl1','msul1'); - +print +"

Cluster Status

"; +print "Please be patient while building cluster status ...

\n"; +$table=''; + +$table.="". +""; +foreach $remote (sort keys %hostname) { + $table.="$remote"; +} +$table.=""; +foreach $local (sort keys %hostname) { + print "Checking $local "; + $table.="$local
". + $hostrole{$local}.' '.$hostdom{$local}.'
'. + "". + $hostname{$local}."
". + "New Report". + ""; + if (&online($hostname{$local})) { + foreach $remote (sort keys %hostname) { + $status=&connected($local,$remote); + if ($status eq 'ok') { + $table.="
". + "lonc"; + if (&online($hostname{$remote})) { + $table.=" lond". + ""; + } else { + $table.=' offline'; + } + + } + } + } else { + print "offline"; + $table.='
'; + } + $table.="\n"; + print "
\n"; +} +$table.="
From (local)To (remote)
Offline
"; +print $table; print "";