Diff for /loncom/auth/lonauth.pm between versions 1.105 and 1.109

version 1.105, 2010/07/17 20:02:02 version 1.109, 2010/08/25 16:34:32
Line 40  use Apache::lonmenu(); Line 40  use Apache::lonmenu();
 use Apache::createaccount;  use Apache::createaccount;
 use Fcntl qw(:flock);  use Fcntl qw(:flock);
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::File ();
 use HTML::Entities;  use HTML::Entities;
     
 # ------------------------------------------------------------ Successful login  # ------------------------------------------------------------ Successful login
Line 408  sub handler { Line 409  sub handler {
     if ($r->dir_config("lonBalancer") eq 'yes') {      if ($r->dir_config("lonBalancer") eq 'yes') {
  &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef,   &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef,
  \%form);   \%form);
         my ($otherserver) = &choose_server($form{'udom'});          my ($otherserver) = &Apache::lonnet::choose_server($form{'udom'});
  $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);   $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver.'&origurl='.$firsturl);
     } else {      } else {
  &success($r,$form{'uname'},$form{'udom'},$authhost,$firsturl,undef,  # ------------------------------------------------------- Do the load balancing
  \%form);  
   # ---------------------------------------------------------- Determine own load
           my $loadlim = $r->dir_config('lonLoadLim');
           my $loadavg;
           {
               my $loadfile=Apache::File->new('/proc/loadavg');
               $loadavg=<$loadfile>;
           }
           $loadavg =~ s/\s.*//g;
           my $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim);
           my $userloadpercent=&Apache::lonnet::userload();
   
   # ---------------------------------------------------------- Are we overloaded?
           if ((($userloadpercent>100.0)||($loadpercent>100.0))) {
               my $unloaded=Apache::lonnet::spareserver($loadpercent,$userloadpercent,1,$form{'udom'});
               if ($unloaded) {
                   &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',
                            undef,\%form);
                   $r->internal_redirect('/adm/switchserver?otherserver='.$unloaded.'&origurl='.$firsturl);
               }
           }
           &success($r,$form{'uname'},$form{'udom'},$authhost,$firsturl,undef,
                    \%form);
     }      }
     return OK;      return OK;
 }  }
Line 421  sub check_can_host { Line 444  sub check_can_host {
     my ($r,$form,$authhost,$domdesc) = @_;      my ($r,$form,$authhost,$domdesc) = @_;
     return unless (ref($form) eq 'HASH');      return unless (ref($form) eq 'HASH');
     my $canhost = 1;      my $canhost = 1;
     my @machinedoms = &Apache::lonnet::current_machine_domains();      my $lonhost = $r->dir_config('lonHostID');
     my $udom = $form->{'udom'};      my $udom = $form->{'udom'};
     unless (grep(/^\Q$udom\E/,@machinedoms)) {      my @intdoms;
         my $defdom = &Apache::lonnet::default_login_domain();      my $internet_names = &Apache::lonnet::get_internet_names($lonhost);
         my %defdomdefaults = &Apache::lonnet::get_domain_defaults($defdom);      if (ref($internet_names) eq 'ARRAY') {
           @intdoms = @{$internet_names};
       }
       my $uprimary_id = &Apache::lonnet::domain($udom,'primary');
       my $uint_dom = &Apache::lonnet::internet_dom($uprimary_id);
       unless ($uint_dom ne '' && grep(/^\Q$uint_dom\E$/,@intdoms)) {
           my $machine_dom = &Apache::lonnet::host_domain($lonhost);
           my $hostname = &Apache::lonnet::hostname($lonhost);
           my $serverhomeID = &Apache::lonnet::get_server_homeID($hostname);
           my $serverhomedom = &Apache::lonnet::host_domain($serverhomeID);
           my %defdomdefaults = &Apache::lonnet::get_domain_defaults($serverhomedom);
         my %udomdefaults = &Apache::lonnet::get_domain_defaults($udom);          my %udomdefaults = &Apache::lonnet::get_domain_defaults($udom);
         my $loncaparev;          my $loncaparev;
         if ($authhost eq 'no_account_on_host') {          if ($authhost eq 'no_account_on_host') {
             $loncaparev = &Apache::lonnet::get_server_loncaparev($defdom);              $loncaparev = &Apache::lonnet::get_server_loncaparev($machine_dom);
         } else {          } else {
             $loncaparev = &Apache::lonnet::get_server_loncaparev($defdom,$authhost);              $loncaparev = &Apache::lonnet::get_server_loncaparev($machine_dom,$lonhost);
         }          }
         $canhost = &Apache::lonnet::can_host_session($udom,$defdom,$loncaparev,$udomdefaults{'remotesessions'},$defdomdefaults{'hostedsessions'});          $canhost = &Apache::lonnet::can_host_session($udom,$lonhost,$loncaparev,
                                                        $udomdefaults{'remotesessions'},
                                                        $defdomdefaults{'hostedsessions'});
     }      }
     unless ($canhost) {      unless ($canhost) {
         if ($authhost eq 'no_account_on_host') {          if ($authhost eq 'no_account_on_host') {
             my ($login_host,$hostname) = &choose_server($udom);              my ($login_host,$hostname) = &Apache::lonnet::choose_server($udom);
             &Apache::loncommon::content_type($r,'text/html');              &Apache::loncommon::content_type($r,'text/html');
             $r->send_http_header;              $r->send_http_header;
             if ($login_host ne '') {              if ($login_host ne '') {
Line 461  sub check_can_host { Line 496  sub check_can_host {
         } else {          } else {
             &success($r,$form->{'uname'},$udom,$authhost,'noredirect',undef,              &success($r,$form->{'uname'},$udom,$authhost,'noredirect',undef,
                      $form);                       $form);
             my ($otherserver) = &choose_server($udom);              my ($otherserver) = &Apache::lonnet::choose_server($udom);
             $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);              $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);
         }          }
     }      }
 }  }
   
 sub choose_server {  
     my ($udom) = @_;  
     my %domconfhash = &Apache::loncommon::get_domainconf($udom);  
     my %servers = &Apache::lonnet::get_servers($udom);  
     my $lowest_load = 30000;  
     my ($login_host,$hostname);  
     foreach my $lonhost (keys(%servers)) {  
         my $loginvia = $domconfhash{$udom.'.login.loginvia_'.$lonhost};  
         if ($loginvia eq '') {  
             ($login_host, $lowest_load) =  
             &Apache::lonnet::compare_server_load($lonhost, $login_host, $lowest_load);  
         }  
     }  
     if ($login_host ne '') {  
         $hostname = $servers{$login_host};  
     }  
     return ($login_host,$hostname);  
 }  
   
 1;  1;
 __END__  __END__
   

Removed from v.1.105  
changed lines
  Added in v.1.109


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>