--- loncom/lonnet/perl/lonnet.pm 2002/09/16 19:42:10 1.282 +++ loncom/lonnet/perl/lonnet.pm 2002/09/17 19:45:11 1.284 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.282 2002/09/16 19:42:10 albertel Exp $ +# $Id: lonnet.pm,v 1.284 2002/09/17 19:45:11 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -348,12 +348,35 @@ sub delenv { return 'ok'; } +# ------------------------------------------ Fight off request when overloaded + +sub overloaderror { + my ($r,$checkserver)=@_; + unless ($checkserver) { $checkserver=$perlvar{'lonHostID'}; } + my $loadavg; + if ($checkserver eq $perlvar{'lonHostID'}) { + my $loadfile=Apache::File->new('/proc/loadavg'); + $loadavg=<$loadfile>; + $loadavg =~ s/\s.*//g; + } else { + $loadavg=&reply('load',$checkserver); + } + my $overload=$loadavg-$perlvar{'lonLoadLim'}; + if ($overload>0) { + $r->err_headers_out->{'Retry-After'}=$overload*30; + $r->log_error('Overload of '.$overload.' on '.$checkserver); + return 413; + } + return ''; +} + # ------------------------------ Find server with least workload from spare.tab sub spareserver { + my $loadpercent = shift; my $tryserver; my $spareserver=''; - my $lowestserver=100; + my $lowestserver=$loadpercent; foreach $tryserver (keys %spareid) { my $answer=reply('load',$tryserver); if (($answer =~ /\d/) && ($answer<$lowestserver)) { @@ -3307,7 +3330,7 @@ BEGIN { while (my $configline=<$config>) { chomp($configline); - if (($configline) && ($configline ne $perlvar{'lonHostID'})) { + if ($configline) { $spareid{$configline}=1; } }