--- loncom/cgi/clusterstatus.pl 2003/07/30 21:20:16 1.8 +++ loncom/cgi/clusterstatus.pl 2008/11/29 00:57:09 1.25 @@ -1,23 +1,87 @@ #!/usr/bin/perl $|=1; -# The LearningOnline Network with CAPA -# Cluster Status -# (Versions -# (Running loncron -# 09/06/01 Gerd Kortemeyer) -# 02/18/02,02/19/02 Gerd Kortemeyer) +# Generates a html page showing various status reports about the domain or cluster +# $Id: clusterstatus.pl,v 1.25 2008/11/29 00:57:09 raeburn Exp $ +# +# Copyright Michigan State University Board of Trustees +# +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). +# +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# + +use strict; use lib '/home/httpd/lib/perl/'; +use Apache::lonnet; +use Apache::lonlocal; use LONCAPA::Configuration; - +use LONCAPA::loncgi; use LWP::UserAgent(); use HTTP::Headers; use IO::File; +my $perlvar=&LONCAPA::Configuration::read_conf('loncapa.conf'); + my %host=(); my $oneday=60*60*24; my %connectionstatus=(); +my %perlvar=(); + +my $mode; +my $concount=0; +my $fromcache; + +my %domaininfo = &Apache::lonnet::domain_info(); +my %allhostname = &Apache::lonnet::all_hostnames(); +my (%hostname,%hostip); +my %hostdom = &Apache::lonnet::all_host_domain(); +my %iphost = &Apache::lonnet::get_iphost(); +my %libserv= &Apache::lonnet::all_library(); + +foreach my $ip (keys(%iphost)) { + $hostip{$iphost{$ip}} = $ip; +} + +my $maxusers=0; +my $maxload=0; +my $totalusers=0; + +my %FORM=(); + +my $stat_total=0; +my $stat_notyet=0; +my $stat_fromcache=0; + +sub select_form { + my ($def,$name,%hash) = @_; + my $selectform = ""; + return $selectform; +} + sub key { my ($local,$url)=@_; @@ -28,40 +92,48 @@ sub key { sub hidden { my ($name,$value)=@_; - print "\n"; + print("\n"); } sub request { my ($local,$url,$cachetime)=@_; + $cachetime*=(0.5+rand); my $key=&key($local,$url); my $reply=''; + $stat_total++; +# if fromcache flag is set, only return cached values + if ($fromcache) { + if ($FORM{$key.'_time'}) { + $stat_fromcache++; + return $FORM{$key}; + } else { + $stat_notyet++; + return 'not_yet'; + } + } +# normal mode, refresh when expired or not yet present if ($FORM{$key.'_time'}) { if ((time-$FORM{$key.'_time'})<$cachetime) { $reply=$FORM{$key}; &hidden($key.'_time',$FORM{$key.'_time'}); - &hidden($key.'_fromcache',1); + $stat_fromcache++; } } unless ($reply) { - unless ($hostname{$local}) { - $reply='local_unknown'; - } else { - + if ($hostname{$local}) { my $ua=new LWP::UserAgent(timeout => 20); - my $request=new HTTP::Request('GET', "http://".$hostname{$local}.$url); - $request->authorization_basic('lonadm','litelite'); - my $response=$ua->request($request); - - unless ($response->is_success) { + if ($response->is_success) { + $reply=$response->content; + chomp($reply); + } else { $reply='local_error'; - } else { - $reply=$response->content; - chomp($reply); } - } + } else { + $reply='local_unknown'; + } &hidden($key.'_time',time); } &hidden($key,$reply); @@ -77,16 +149,23 @@ sub connected { unless ($hostname{$remote}) { return 'remote_unknown'; } my $url='/cgi-bin/ping.pl?'.$remote; # -# Slowly phase this in: if not cached, only do 10 percent of the cases +# 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 (rand>0.9) { return 'not_yet'; } + unless (($concount<=5) || (rand>0.95)) { + $stat_total++; + $stat_notyet++; + return 'not_yet'; + } else { + $concount++; + } } # # Actually do the query # &statuslist($local,'connecting '.$remote); - my $reply=&request($local,$url,1800); + my $reply=&request($local,$url,3600); $reply=(split("\n",$reply))[0]; $reply=~s/\W//g; if ($reply ne $remote) { return $reply; } @@ -106,132 +185,286 @@ sub replyhash { return %returnhash; } -# ========================================================== Show server status +# ================================================================ Link to host sub otherwindow { my ($local,$url,$label)=@_; return - "$label"; + " $label "; } -sub serverstatus { +sub login { my $local=shift; - print "\n