version 1.24, 2005/04/13 18:30:46
|
version 1.25, 2008/11/29 00:57:09
|
Line 1
|
Line 1
|
#!/usr/bin/perl |
#!/usr/bin/perl |
$|=1; |
$|=1; |
# Generates a html page showing various sataus reports about the cluster |
# Generates a html page showing various status reports about the domain or cluster |
# $Id$ |
# $Id$ |
# |
# |
# Copyright Michigan State University Board of Trustees |
# Copyright Michigan State University Board of Trustees |
Line 26 $|=1;
|
Line 26 $|=1;
|
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
|
|
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA::Configuration; |
|
use strict; |
use strict; |
|
|
|
use lib '/home/httpd/lib/perl/'; |
|
use Apache::lonnet; |
|
use Apache::lonlocal; |
|
use LONCAPA::Configuration; |
|
use LONCAPA::loncgi; |
use LWP::UserAgent(); |
use LWP::UserAgent(); |
use HTTP::Headers; |
use HTTP::Headers; |
use IO::File; |
use IO::File; |
|
|
|
my $perlvar=&LONCAPA::Configuration::read_conf('loncapa.conf'); |
|
|
my %host=(); |
my %host=(); |
my $oneday=60*60*24; |
my $oneday=60*60*24; |
|
|
Line 44 my $mode;
|
Line 49 my $mode;
|
my $concount=0; |
my $concount=0; |
my $fromcache; |
my $fromcache; |
|
|
my %domaindescription = (); |
my %domaininfo = &Apache::lonnet::domain_info(); |
my %domain_auth_def = (); |
my %allhostname = &Apache::lonnet::all_hostnames(); |
my %domain_auth_arg_def = (); |
my (%hostname,%hostip); |
my %domain_lang_def=(); |
my %hostdom = &Apache::lonnet::all_host_domain(); |
my %domain_city=(); |
my %iphost = &Apache::lonnet::get_iphost(); |
my %domain_longi=(); |
my %libserv= &Apache::lonnet::all_library(); |
my %domain_lati=(); |
|
|
foreach my $ip (keys(%iphost)) { |
my %hostname=(); |
$hostip{$iphost{$ip}} = $ip; |
my %hostip=(); |
} |
my %hostdom=(); |
|
my %hostrole=(); |
|
my %libserv=(); |
|
|
|
my $maxusers=0; |
my $maxusers=0; |
my $maxload=0; |
my $maxload=0; |
Line 71 my $stat_fromcache=0;
|
Line 73 my $stat_fromcache=0;
|
sub select_form { |
sub select_form { |
my ($def,$name,%hash) = @_; |
my ($def,$name,%hash) = @_; |
my $selectform = "<select name=\"$name\" size=\"1\">\n"; |
my $selectform = "<select name=\"$name\" size=\"1\">\n"; |
foreach (sort keys %hash) { |
foreach my $key (sort(keys(%hash))) { |
$selectform.="<option value=\"$_\" ". |
$selectform.="<option value=\"$key\" ". |
($_ eq $def ? 'selected' : ''). |
($key eq $def? 'selected' : ''). |
">".$hash{$_}."</option>\n"; |
">".$hash{$key}."</option>\n"; |
} |
} |
$selectform.="</select>"; |
$selectform.="</select>"; |
return $selectform; |
return $selectform; |
Line 90 sub key {
|
Line 92 sub key {
|
|
|
sub hidden { |
sub hidden { |
my ($name,$value)=@_; |
my ($name,$value)=@_; |
print "\n<input type='hidden' name='$name' value='$value' />"; |
print("\n<input type='hidden' name='$name' value='$value' />"); |
} |
} |
|
|
sub request { |
sub request { |
Line 102 sub request {
|
Line 104 sub request {
|
# if fromcache flag is set, only return cached values |
# if fromcache flag is set, only return cached values |
if ($fromcache) { |
if ($fromcache) { |
if ($FORM{$key.'_time'}) { |
if ($FORM{$key.'_time'}) { |
|
$stat_fromcache++; |
return $FORM{$key}; |
return $FORM{$key}; |
$stat_fromcache++; |
|
} else { |
} else { |
|
$stat_notyet++; |
return 'not_yet'; |
return 'not_yet'; |
$stat_notyet++; |
|
} |
} |
} |
} |
# normal mode, refresh when expired or not yet present |
# normal mode, refresh when expired or not yet present |
Line 118 sub request {
|
Line 120 sub request {
|
} |
} |
} |
} |
unless ($reply) { |
unless ($reply) { |
unless ($hostname{$local}) { |
if ($hostname{$local}) { |
$reply='local_unknown'; |
my $ua=new LWP::UserAgent(timeout => 20); |
} else { |
|
|
|
my $ua=new LWP::UserAgent(timeout => 10); |
|
|
|
my $request=new HTTP::Request('GET', |
my $request=new HTTP::Request('GET', |
"http://".$hostname{$local}.$url); |
"http://".$hostname{$local}.$url); |
$request->authorization_basic('lonadm','litelite'); |
|
|
|
my $response=$ua->request($request); |
my $response=$ua->request($request); |
|
if ($response->is_success) { |
unless ($response->is_success) { |
$reply=$response->content; |
|
chomp($reply); |
|
} else { |
$reply='local_error'; |
$reply='local_error'; |
} else { |
|
$reply=$response->content; |
|
chomp($reply); |
|
} |
} |
} |
} else { |
|
$reply='local_unknown'; |
|
} |
&hidden($key.'_time',time); |
&hidden($key.'_time',time); |
} |
} |
&hidden($key,$reply); |
&hidden($key,$reply); |
Line 198 sub otherwindow {
|
Line 195 sub otherwindow {
|
|
|
sub login { |
sub login { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/adm/login?domain='.$perlvar{'lonDefDomain'}, |
print(&otherwindow($local,'/adm/login?domain='.$perlvar{'lonDefDomain'}, |
'Login'); |
'Login')); |
} |
} |
|
|
sub runloncron { |
sub runloncron { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/cgi-bin/loncron.pl','Run loncron'); |
print(&otherwindow($local,'/cgi-bin/loncron.pl',&Apache::lonlocal::mt('Run loncron'))); |
} |
} |
|
|
sub loncron { |
sub loncron { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/lon-status','loncron'); |
print(&otherwindow($local,'/lon-status','loncron')); |
} |
} |
|
|
sub lonc { |
sub lonc { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/lon-status/loncstatus.txt','lonc'); |
print(&otherwindow($local,'/lon-status/loncstatus.txt','lonc')); |
} |
} |
|
|
sub lond { |
sub lond { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/lon-status/londstatus.txt','lond'); |
print(&otherwindow($local,'/lon-status/londstatus.txt','lond')); |
} |
} |
|
|
sub users { |
sub users { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/cgi-bin/userstatus.pl','Users'); |
print(&otherwindow($local,'/cgi-bin/userstatus.pl',&Apache::lonlocal::mt('Users'))); |
} |
} |
|
|
sub versions { |
sub versions { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/cgi-bin/lonversions.pl','Versions'); |
print(&otherwindow($local,'/cgi-bin/lonversions.pl',&Apache::lonlocal::mt('Versions'))); |
} |
} |
|
|
sub server { |
sub server { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/server-status','Server Status'); |
print(&otherwindow($local,'/server-status',&Apache::lonlocal::mt('Server Status'))); |
} |
} |
|
|
sub announcement { |
sub announcement { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/announcement.txt','Announcement'); |
print(&otherwindow($local,'/announcement.txt',&Apache::lonlocal::mt('Announcement'))); |
} |
} |
|
|
sub takeonline { |
sub takeonline { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/cgi-bin/takeonline.pl','Take online'); |
print(&otherwindow($local,'/cgi-bin/takeonline.pl',&Apache::lonlocal::mt('Take online'))); |
} |
} |
|
|
sub takeoffline { |
sub takeoffline { |
my $local=shift; |
my $local=shift; |
print &otherwindow($local,'/cgi-bin/takeoffline.pl','Take offline'); |
print(&otherwindow($local,'/cgi-bin/takeoffline.pl',&Apache::lonlocal::mt('Take offline'))); |
} |
} |
|
|
sub reroute { |
sub reroute { |
my ($local,$remote)=@_; |
my ($local,$remote)=@_; |
print &otherwindow($local,'/cgi-bin/takeoffline.pl?'. |
print(&otherwindow($local,'/cgi-bin/takeoffline.pl?'. |
$hostname{$remote}.'&'.$hostdom{$local} |
$hostname{$remote}.'&'.$hostdom{$local} |
,$remote)."\n"; |
,$remote)."\n"); |
} |
} |
|
|
sub allreroutes { |
sub allreroutes { |
my $local=shift; |
my $local=shift; |
&takeoffline($local); |
&takeoffline($local); |
print ' Reroute to: <font size="1">'; |
print(&Apache::lonlocal::mt('Reroute to:').' <font size="1">'); |
foreach my $remote (sort keys %hostname) { |
foreach my $remote (sort keys %hostname) { |
unless ($local eq $remote) { |
unless ($local eq $remote) { |
&reroute($local,$remote); |
&reroute($local,$remote); |
} |
} |
} |
} |
print '</font>'; |
print('</font>'); |
} |
} |
|
|
# ========================================================= Produce a green bar |
# ========================================================= Produce a green bar |
sub bar { |
sub bar { |
my $parm=shift; |
my $parm=shift; |
my $number=int($parm+0.5); |
my $number=int($parm+0.5); |
print "<table><tr><td bgcolor='#225522'><font color='#225522'>"; |
print('<table><tr><td bgcolor="#225522"><font color="#225522">'); |
for (my $i=0;$i<$number;$i++) { |
for (my $i=0;$i<$number;$i++) { |
print "+"; |
print "+"; |
} |
} |
print "</font></table>"; |
print("</font></table>"); |
} |
} |
|
|
# ========================================================== Show server status |
# ========================================================== Show server status |
|
|
sub serverstatus { |
sub serverstatus { |
my ($local,$trouble)=@_; |
my ($local,$trouble)=@_; |
print (<<ENDHEADER); |
my $hostrole; |
|
if (exists($libserv{$local})) { |
|
$hostrole = 'library'; |
|
} else { |
|
$hostrole = 'access'; |
|
} |
|
my %lt = &Apache::lonlocal::texthash( |
|
rero => 'Reroute:', |
|
vers => 'Version:', |
|
load => 'Load:', |
|
acti => 'Active Users:', |
|
rpms => 'RPMs', |
|
mysq => 'MySQL Database:', |
|
notc => 'Not connected', |
|
lonc => 'loncron errors', |
|
); |
|
|
|
print(<<ENDHEADER); |
<a name="$local" /> |
<a name="$local" /> |
<table width="100%" bgcolor="#225522" cellspacing="2" cellpadding="2" border="0"> |
<table width="100%" bgcolor="#225522" cellspacing="2" cellpadding="2" border="0"> |
<tr><td bgcolor="#BBDDBB"><font color="#225522" face="arial"><b> |
<tr><td bgcolor="#BBDDBB"><font color="#225522" face="arial"><b> |
$local $hostdom{$local}</b> <tt>($hostname{$local}; $hostrole{$local})</tt> |
$local $hostdom{$local}</b> <tt>($hostname{$local}); $hostrole</tt> |
<br />$domaindescription{$hostdom{$local}} |
<br />$domaininfo{$hostdom{$local}}{'description'} |
$domain_city{$hostdom{$local}} |
$domaininfo{$hostdom{$local}}{'city'} |
</font></th></tr><tr><td bgcolor="#DDDDBB"><font color="#225522"> |
</font></th></tr><tr><td bgcolor="#DDDDBB"><font color="#225522"> |
ENDHEADER |
ENDHEADER |
&login($local);&server($local);&users($local);&versions($local); |
&login($local);&server($local);&users($local);&versions($local); |
&announcement($local); |
&announcement($local); |
&loncron($local);&lond($local);&lonc($local);&runloncron($local); |
&loncron($local);&lond($local);&lonc($local);&runloncron($local); |
print "</font></td></tr>"; |
print("</font></td></tr>"); |
if ($trouble) { |
if ($trouble) { |
print ("<tr><td bgcolor='#DDBBBB'><font color='#552222' size='+2'>$trouble</font></td></tr>"); |
print("<tr><td bgcolor='#DDBBBB'><font color='#552222' size='+2'>$trouble</font></td></tr>"); |
} |
} |
print "<tr><td bgcolor='#BBBBBB'>"; |
print("<tr><td bgcolor='#BBBBBB'>"); |
# re-routing |
# re-routing |
if ($host{$local.'_reroute'}) { |
if ($host{$local.'_reroute'}) { |
print "<br />Reroute: ".$host{$local.'_reroute'}; |
print('<br />'.$lt{'rero'}.' '.$host{$local.'_reroute'}); |
&takeonline($local); |
&takeonline($local); |
} |
} |
# version |
# version |
if ($host{$local.'_version'}) { |
if ($host{$local.'_version'}) { |
print "<br />Version: ".$host{$local.'_version'} |
print('<br />'.$lt{'vers'}.' '.$host{$local.'_version'}); |
} |
} |
# load |
# load |
if (($host{$local.'_load_doomed'}>0.5) || ($mode eq 'load_doomed')) { |
if (($host{$local.'_load_doomed'}>0.5) || ($mode eq 'load_doomed')) { |
print "<br />Load: ".$host{$local.'_load'} |
print('<br />'.$lt{'load'}.' '.$host{$local.'_load'}); |
} |
} |
# users |
# users |
if (($host{$local.'_users_doomed'}>10) || ($mode eq 'users_doomed')) { |
if (($host{$local.'_users_doomed'}>10) || ($mode eq 'users_doomed')) { |
print "<br />Active Users: ".$host{$local.'_users'} |
print('<br />'.$lt{'acti'}.' '.$host{$local.'_users'}); |
} |
} |
|
|
# checkrpms |
# checkrpms |
if ($host{$local.'_checkrpms'}) { |
if ($host{$local.'_checkrpms'}) { |
print "<br />RPMs: ".$host{$local.'_checkrpms'} |
print('<br />'.$lt{'rpms'}.' '.$host{$local.'_checkrpms'}); |
} |
} |
# mysql |
# mysql |
if ($host{$local.'_mysql'}) { |
if ($host{$local.'_mysql'}) { |
print "<br />MySQL Database: ".$host{$local.'_mysql'} |
print('<br />'.$lt{'mysq'}.' '.$host{$local.'_mysql'}); |
} |
} |
# connections |
# connections |
if ($host{$local.'_notconnected'}) { |
if ($host{$local.'_notconnected'}) { |
print "<br />Not connected: "; |
print('<br />'.$lt{'notc'}.' '); |
foreach (split(/ /,$host{$local.'_notconnected'})) { |
foreach my $item (split(/ /,$host{$local.'_notconnected'})) { |
if ($_) { |
if ($item) { |
print " <a href='#$_'>$_</a>"; |
print(' <a href="#$item">'.$item.'</a>'); |
} |
} |
} |
} |
} |
} |
# errors |
# errors |
if ($host{$local.'_errors'}) { |
if ($host{$local.'_errors'}) { |
print "<br />loncron errors: ".$host{$local.'_errors'}; |
print('<br />'.$lt{'lonc'}.' '.$host{$local.'_errors'}); |
} |
} |
print "</td></tr><tr><td bgcolor='#DDDDDD'>"; |
print "</td></tr><tr><td bgcolor='#DDDDDD'>"; |
&allreroutes($local); |
&allreroutes($local); |
Line 380 sub mainloop {
|
Line 394 sub mainloop {
|
&resetvars(); |
&resetvars(); |
# ==================================================== Main Loop over all Hosts |
# ==================================================== Main Loop over all Hosts |
|
|
foreach my $local (sort keys %hostname) { |
foreach my $local (sort(keys(%hostname))) { |
$host{$local.'_unresponsive_doomed'}=0; |
$host{$local.'_unresponsive_doomed'}=0; |
# -- Check general status |
# -- Check general status |
&statuslist($local,'General'); |
&statuslist($local,'General'); |
Line 450 foreach my $local (sort keys %hostname)
|
Line 464 foreach my $local (sort keys %hostname)
|
$host{$local.'_unresponsive_doomed'}++; |
$host{$local.'_unresponsive_doomed'}++; |
} else { |
} else { |
if ((time-$mysql{'time'})>(7*$oneday)) { |
if ((time-$mysql{'time'})>(7*$oneday)) { |
if ($hostrole{$local} eq 'library') { |
if (exists($libserv{$local})) { |
$host{$local.'_mysql'}='Stale.'; |
$host{$local.'_mysql'}='Stale.'; |
$host{$local.'_mysql_doomed'}=1; |
$host{$local.'_mysql_doomed'}=1; |
} |
} |
Line 527 sub reports {
|
Line 541 sub reports {
|
my $cellcolor='#BBDDBB'; |
my $cellcolor='#BBDDBB'; |
if ($local eq $remote) { $cellcolor='#99DD99'; } |
if ($local eq $remote) { $cellcolor='#99DD99'; } |
print |
print |
'<td bgcolor="'.$cellcolor.'"><font color="#225522" face="arial"><b>ok</b></td>'; |
'<td bgcolor="'.$cellcolor.'"><font color="#225522" face="arial"><b>'.&Apache::lonlocal::mt('ok').'</b></td>'; |
} else { |
} else { |
my $cellcolor='#DDCCAA'; |
my $cellcolor='#DDCCAA'; |
if ($connectionstatus{$local.'_TO_'.$remote} eq 'local_error') { |
if ($connectionstatus{$local.'_TO_'.$remote} eq 'local_error') { |
Line 553 sub reports {
|
Line 567 sub reports {
|
# Users |
# Users |
if ($maxusers) { |
if ($maxusers) { |
my $factor=50/$maxusers; |
my $factor=50/$maxusers; |
print "<h3>Total active user(s): $totalusers</h3>". |
print '<h3>'.&Apache::lonlocal::mt('Total active user(s)').': '.$totalusers.'</h3>'. |
"<table cellspacing='3' cellpadding='3' border='0' bgcolor='#225522'>"; |
'<table cellspacing="3" cellpadding="3" border="0" bgcolor="#225522">'; |
|
|
foreach my $local (sort keys %hostname) { |
foreach my $local (sort keys %hostname) { |
if (defined($host{$local.'_users'})) { |
if (defined($host{$local.'_users'})) { |
print |
print |
'<tr><td bgcolor="#BBDDBB"><font face="arial" color="#225522" size="+1">'.$local. |
'<tr><td bgcolor="#BBDDBB"><font face="arial" color="#225522" size="+1">'.$local. |
'</font><br /><font size="-2">'. |
'</font><br /><font size="-2">'. |
$domaindescription{$hostdom{$local}}. |
$domaininfo{$hostdom{$local}}{'description'}. |
'</font></td><td bgcolor="#DDDDBB">'; |
'</font></td><td bgcolor="#DDDDBB">'; |
&users($local); |
&users($local); |
print |
print |
'</td><td bgcolor="#DDDDBB"><font face="arial" color="#225522">'. |
'</td><td bgcolor="#DDDDBB"><font face="arial" color="#225522">'. |
$host{$local.'_users'}.'</font></td><td bgcolor="#DDDDBB"'; |
$host{$local.'_users'}.'</font></td><td bgcolor="#DDDDBB"'; |
&bar($factor*$host{$local.'_users'}); |
&bar($factor*$host{$local.'_users'}); |
print "</td></tr>\n"; |
print '</td></tr>'."\n"; |
} |
} |
} |
} |
print "</table>"; |
print '</table>'; |
} else { |
} else { |
print "No active users logged in."; |
print &Apache::lonlocal::mt('No active users logged in.'); |
} |
} |
} elsif ($mode eq 'load') { |
} elsif ($mode eq 'load') { |
# Load |
# Load |
Line 587 sub reports {
|
Line 601 sub reports {
|
'<tr><td bgcolor="#BBDDBB"><font face="arial" color="#225522" size="+1">'. |
'<tr><td bgcolor="#BBDDBB"><font face="arial" color="#225522" size="+1">'. |
$local. |
$local. |
'</font><br /><font size="-2">'. |
'</font><br /><font size="-2">'. |
$domaindescription{$hostdom{$local}}. |
$Apache::lonnet::domain{$hostdom{$local}}{'description'}. |
'</font></td><td bgcolor="#DDDDBB">'; |
'</font></td><td bgcolor="#DDDDBB">'; |
&server($local); |
&server($local); |
print |
print |
Line 599 sub reports {
|
Line 613 sub reports {
|
} |
} |
print "</table>"; |
print "</table>"; |
} else { |
} else { |
print "No workload."; |
print &Apache::lonlocal::mt('No workload.'); |
} |
} |
} elsif ($mode eq 'trouble') { |
} elsif ($mode eq 'trouble') { |
my $count=0; |
my $count=0; |
foreach my $local (sort keys %hostname) { |
foreach my $local (sort keys %hostname) { |
my $trouble=''; |
my $trouble=''; |
if ($host{$local.'_unresponsive_doomed'}>3) { |
if ($host{$local.'_unresponsive_doomed'}>3) { |
$trouble='Does not respond to several queries.<br />'; |
$trouble=&Apache::lonlocal::mt('Does not respond to several queries.'). |
|
'<br />'; |
} |
} |
if ($host{$local.'_errors'}) { |
if ($host{$local.'_errors'}) { |
$trouble='Has loncron errors.<br />'; |
$trouble=&Apache::lonlocal::mt('Has loncron errors').'<br />'; |
} elsif ($host{$local.'_loncron_doomed'}>2500) { |
} elsif ($host{$local.'_loncron_doomed'}>2500) { |
$trouble='High loncron count.<br />'; |
$trouble=&Apache::lonlocal::mt('High loncron count.').'<br />'; |
} |
} |
if ($host{$local.'_load_doomed'}>5) { |
if ($host{$local.'_load_doomed'}>5) { |
$trouble='High load.<br />'; |
$trouble=&Apache::lonlocal::mt('High load.').'<br />'; |
} |
} |
if ($host{$local.'_users_doomed'}>200) { |
if ($host{$local.'_users_doomed'}>200) { |
$trouble='High user volume.<br />'; |
$trouble=&Apache::lonlocal::mt('High user volume.').'<br />'; |
} |
} |
if ($host{$local.'_mysql_doomed'}>1) { |
if ($host{$local.'_mysql_doomed'}>1) { |
$trouble='MySQL database apparently offline.<br />'; |
$trouble=&Apache::lonlocal::mt('MySQL database apparently offline.').'<br />'; |
} |
} |
if ($host{$local.'_checkrpms_doomed'}>100) { |
if ($host{$local.'_checkrpms_doomed'}>100) { |
$trouble='RPMs outdated.<br />'; |
$trouble=&Apache::lonlocal::mt('RPMs outdated.').'<br />'; |
} |
} |
if ($host{$local.'_reroute'}) { |
if ($host{$local.'_reroute'}) { |
$trouble='Rerouting<br >'; |
$trouble=&Apache::lonlocal::&mt('Rerouting').'<br >'; |
} |
} |
if ($trouble) { $count++; &serverstatus($local,$trouble); } |
if ($trouble) { $count++; &serverstatus($local,$trouble); } |
} |
} |
unless ($count) { print "No mayor trouble."; } |
unless ($count) { print &Apache::lonlocal::mt('No major trouble.'); } |
} |
} |
} |
} |
|
|
# ====================================================================== Status |
# ====================================================================== Status |
sub statuslist { |
sub statuslist { |
my ($local,$what)=@_; |
my ($local,$what)=@_; |
print |
my $displaylocal; |
"<script>document.prgstat.progress.value='Testing $local ($hostname{$local}): $what';</script>\n"; |
if (defined($local)) { |
|
$displaylocal = " $local ($hostname{$local})"; |
|
} |
|
print '<script>document.prgstat.progress.value="'. |
|
&Apache::lonlocal::mt("Testing[_1]: $what",$displaylocal).'";</script>'."\n"; |
} |
} |
|
|
# ============================================================================= |
# ============================================================================= |
Line 677 my $starttime=time;
|
Line 696 my $starttime=time;
|
|
|
# ============================================================== Determine mode |
# ============================================================== Determine mode |
|
|
my %modes=('trouble' => 'Trouble', |
my %modes= &Apache::lonlocal::texthash ( |
'users_doomed' => 'Doomed: Users', |
'trouble' => 'Trouble', |
'loncron_doomed' => 'Doomed: General (loncron)', |
'users_doomed' => 'Doomed: Users', |
'mysql_doomed' => 'Doomed: Database (mysql)', |
'loncron_doomed' => 'Doomed: General (loncron)', |
'notconnected_doomed' => 'Doomed: Connections', |
'mysql_doomed' => 'Doomed: Database (mysql)', |
'checkrpms_doomed' => 'Doomed: RPMs', |
'notconnected_doomed' => 'Doomed: Connections', |
'load_doomed' => 'Doomed: Load', |
'checkrpms_doomed' => 'Doomed: RPMs', |
'unresponsive_doomed' => 'Doomed: Status could not be determined', |
'load_doomed' => 'Doomed: Load', |
'users' => 'User Report', |
'unresponsive_doomed' => 'Doomed: Status could not be determined', |
'load' => 'Load Report', |
'users' => 'User Report', |
'connections' => 'Connections Matrix'); |
'load' => 'Load Report', |
|
'connections' => 'Connections Matrix'); |
$mode=$FORM{'mode'}; |
$mode=$FORM{'mode'}; |
unless ($modes{$mode}) { $mode='trouble'; } |
unless ($modes{$mode}) { $mode='trouble'; } |
# ================================================================ Send Headers |
# ================================================================ Send Headers |
print "Content-type: text/html\n\n". |
print("Content-type: text/html\n\n". |
"<html><body bgcolor='#FFFFFF'>\n"; |
'<html><body bgcolor="#FFFFFF">'."\n"); |
# -------------------- Read loncapa.conf (and by default, loncapa_apache.conf). |
# -------------------- Read loncapa.conf (and by default, loncapa_apache.conf). |
my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf'); |
my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf'); |
%perlvar=%{$perlvarref}; |
%perlvar=%{$perlvarref}; |
Line 701 undef $perlvarref; # remove since sensit
|
Line 720 undef $perlvarref; # remove since sensit
|
delete $perlvar{'lonReceipt'}; # remove since sensitive and not needed |
delete $perlvar{'lonReceipt'}; # remove since sensitive and not needed |
delete $perlvar{'lonSqlAccess'}; # remove since sensitive and not needed |
delete $perlvar{'lonSqlAccess'}; # remove since sensitive and not needed |
|
|
# ------------------------------------------------------------- Read hosts file |
if (!&LONCAPA::loncgi::check_cookie_and_load_env()) { |
{ |
&Apache::lonlocal::get_language_handle(); |
my $config=IO::File->new("$perlvar{'lonTabDir'}/hosts.tab"); |
print(&LONCAPA::loncgi::missing_cookie_msg()); |
|
exit; |
while (my $configline=<$config>) { |
} |
$configline=~s/#.*$//; |
|
unless ($configline=~/\w/) { next; } |
if (!&LONCAPA::loncgi::can_view('clusterstatus')) { |
my ($id,$domain,$role,$name,$ip)=split(/:/,$configline); |
&Apache::lonlocal::get_language_handle(); |
$hostname{$id}=$name; |
print &LONCAPA::loncgi::unauthorized_msg('clusterstatus'); |
$hostdom{$id}=$domain; |
exit; |
$hostrole{$id}=$role; |
} |
$hostip{$id}=$ip; |
|
if (($role eq 'library') && ($id ne $perlvar{'lonHostID'})) { |
&Apache::lonlocal::get_language_handle(); |
$libserv{$id}=$name; |
|
} |
my $scope = 'Domain'; |
} |
if ($Apache::lonnet::env{'request.role'} =~ m{^su\./}) { |
} |
%hostname = %allhostname; |
# ------------------------------------------------------------ Read domain file |
$scope = 'Cluster'; |
{ |
} else { |
my $fh=IO::File->new($perlvar{'lonTabDir'}.'/domain.tab'); |
undef(%hostname); |
if ($fh) { |
my @poss_domains = &Apache::lonnet::current_machine_domains(); |
while (<$fh>) { |
foreach my $host (keys(%allhostname)) { |
next if (/^(\#|\s*$)/); |
if (grep(/^\Q$hostdom{$host}\E$/,@poss_domains)) { |
chomp; |
$hostname{$host} = $allhostname{$host}; |
my ($domain, $domain_description, $def_auth, $def_auth_arg, |
} |
$def_lang, $city, $longi, $lati) = split(/:/,$_); |
|
$domain_auth_def{$domain}=$def_auth; |
|
$domain_auth_arg_def{$domain}=$def_auth_arg; |
|
$domaindescription{$domain}=$domain_description; |
|
$domain_lang_def{$domain}=$def_lang; |
|
$domain_city{$domain}=$city; |
|
$domain_longi{$domain}=$longi; |
|
$domain_lati{$domain}=$lati; |
|
} |
|
} |
} |
} |
} |
|
|
print "<img src='/adm/lonIcons/lonlogos.gif' align='right' /><h1>LON-CAPA Cluster Status ".localtime()."</h1>"; |
print '<img src="/adm/lonIcons/lonlogos.gif" align="right" /><h1>'.&Apache::lonlocal::mt("LON-CAPA $scope Status").' '.localtime()."</h1>"; |
print "<form name='prgstat'>\n". |
print "<form name='prgstat'>\n". |
"<input type='text' name='progress' value='Starting ...' size='100' /><br />". |
'<input type="text" name="progress" value="'."'".&Apache::lonlocal::mt('Starting ...')."'".'" size="100" /><br />'. |
"</form>\n";; |
"</form>\n"; |
print "<form name='status' method='post'>\n"; |
print "<form name='status' method='post'>\n"; |
print 'Choose next report: '.&select_form($mode,'mode',%modes).'<hr />'; |
print &Apache::lonlocal::mt('Choose next report:').' '.&select_form($mode,'mode',%modes).'<input type="submit" name="getreport" value="'.&Apache::lonlocal::mt('Go').'" /><hr />'; |
&hidden('refresh',$refresh); |
&hidden('refresh',$refresh); |
|
|
if (!$FORM{'runonetime'}) { |
if (!$FORM{'runonetime'}) { |
print |
my $lcscope = lc($scope); |
"<h3>Gathering initial cluster data</h3>This may take some time ...<br />"; |
print '<h3>'.&Apache::lonlocal::mt("Gathering initial $lcscope data").'</h3>'. |
|
&Apache::lonlocal::mt('This may take some time ..').'<br />'; |
$fromcache=0; |
$fromcache=0; |
&mainloop(); |
&mainloop(); |
&statuslist('Done initial run.'); |
&statuslist(undef,'Done initial run.'); |
&reports(); |
&reports(); |
} else { |
} else { |
$fromcache=1; |
$fromcache=1; |
&mainloop(); |
&mainloop(); |
&statuslist('Done gathering cached data'); |
&statuslist(undef,'Done gathering cached data'); |
&reports(); |
&reports(); |
$fromcache=0; |
$fromcache=0; |
&mainloop(); |
&mainloop(); |
} |
} |
&hidden('runonetime',1); |
&hidden('runonetime',1); |
print '<tt><br />Total number of queries: '.$stat_total. |
print '<tt><br />'.&Apache::lonlocal::mt('Total number of queries: [_1]',$stat_total); |
'<br />Percent complete: '. |
if ($stat_total != 0) { |
int(($stat_total-$stat_notyet)/$stat_total*100.). |
print '<br />'.&Apache::lonlocal::mt('Percent complete:').''. |
'<br />Percent from cache: '. |
int(($stat_total-$stat_notyet)/$stat_total*100.). |
int($stat_fromcache/$stat_total*100.).'</tt>'; |
'<br />'.&Apache::lonlocal::mt('Percent from cache:').' '. |
|
int($stat_fromcache/$stat_total*100.).'</tt>'; |
|
} |
|
|
# ============================================================== Close, refresh |
# ============================================================== Close, refresh |
print "</form><script>"; |
print "</form><script>"; |
Line 775 if (($refresh-$runtime)<0) {
|
Line 788 if (($refresh-$runtime)<0) {
|
print "document.status.submit();"; |
print "document.status.submit();"; |
} else { |
} else { |
my $refreshtime=int(1000*($refresh-$runtime)); |
my $refreshtime=int(1000*($refresh-$runtime)); |
|
my $refreshmsg = &Apache::lonlocal::mt('Will automatically refresh ([_1] secs refresh cycle)',$refresh); |
print "setTimeout('document.status.submit()',$refreshtime);\n". |
print "setTimeout('document.status.submit()',$refreshtime);\n". |
"document.prgstat.progress.value='Will automatically refresh ($refresh secs refresh cycle)'"; |
"document.prgstat.progress.value='$refreshmsg'"; |
} |
} |
print "</script></body></html>"; |
print "</script></body></html>"; |
exit 0; |
exit 0; |