Diff for /loncom/loncron between versions 1.115 and 1.119

version 1.115, 2018/11/24 16:19:09 version 1.119, 2019/07/18 18:28:40
Line 34  use lib '/home/httpd/lib/perl/'; Line 34  use lib '/home/httpd/lib/perl/';
 use LONCAPA::Configuration;  use LONCAPA::Configuration;
 use LONCAPA::Checksumming;  use LONCAPA::Checksumming;
 use LONCAPA;  use LONCAPA;
   use LONCAPA::LWPReq;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
   
Line 44  use Getopt::Long; Line 45  use Getopt::Long;
 use GDBM_File;  use GDBM_File;
 use Storable qw(thaw);  use Storable qw(thaw);
 use File::ReadBackwards;  use File::ReadBackwards;
   use File::Copy;
 #globals  #globals
 use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount);  use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount);
   
Line 565  sub clean_webDAV_sessionIDs { Line 567  sub clean_webDAV_sessionIDs {
     }      }
 }  }
   
   # ------------------------------------------------------------ clean out ltiIDs
   
   sub clean_ltiIDs {
       my ($fh)=@_;
       &log($fh,'<hr /><a name="ltisessions" /><h2>LTI Session Pointers</h2>');
       my $cleaned=0;
       my $active=0;
       if (-d $perlvar{'ltiIDsDir'}) {
           while (my $fname=<$perlvar{'ltiIDsDir'}/*>) {
               my ($dev,$ino,$mode,$nlink,
                   $uid,$gid,$rdev,$size,
                   $atime,$mtime,$ctime,
                   $blksize,$blocks)=stat($fname);
               my $now=time;
               my $since=$now-$mtime;
               if ($since>$perlvar{'lonExpire'}) {
                   $cleaned++;
                   &log($fh,"Unlinking $fname<br />");
                   unlink("$fname");
               } else {
                   $active++;
               }
           }
       }
       &log($fh,"<p>Cleaned up ".$cleaned." old LTI session pointers.</p>");
       &log($fh,"<h3>$active unexpired LTI session pointers</h3>");
   }
   
 # ----------------------------------------------------------- clean out sockets  # ----------------------------------------------------------- clean out sockets
 sub clean_sockets {  sub clean_sockets {
     my ($fh)=@_;      my ($fh)=@_;
Line 1026  sub write_checksums { Line 1056  sub write_checksums {
     return;      return;
 }  }
   
   sub write_hostips {
       my $lontabdir = $perlvar{'lonTabDir'};
       my $defdom = $perlvar{'lonDefDomain'};
       my $lonhost = $perlvar{'lonHostID'};
       my $newfile = "$lontabdir/currhostips.tab";
       my $oldfile = "$lontabdir/prevhostips.tab";
       my (%prevhosts,%currhosts,%ipchange);
       if ((-e $newfile) && (-s $newfile)) {
           move($newfile,$oldfile);
           chmod(0644,$oldfile);
           if (open(my $fh,'<',$oldfile)) {
               while (my $line=<$fh>) {
                   chomp($line);
                   if ($line =~ /^([^:]+):([\d.]+)$/) {
                       $prevhosts{$1} = $2;
                   }
               }
               close($fh);
           }
       }
       my ($ip_info,$cached) =
           &Apache::lonnet::is_cached_new('iphost','iphost');
       if (!$cached) {
           &Apache::lonnet::get_iphost();
           ($ip_info,$cached) =
           &Apache::lonnet::is_cached_new('iphost','iphost');
       }
       if (ref($ip_info) eq 'ARRAY') {
           %currhosts = %{$ip_info->[1]};
           if (open(my $fh,'>',$newfile)) {
               foreach my $key (keys(%currhosts)) {
                   print $fh "$key:$currhosts{$key}\n";
               }
               close($fh);
               chmod(0644,$newfile);
           }
       }
       if (keys(%prevhosts) && keys(%currhosts)) {
           foreach my $key (keys(%prevhosts)) {
               unless ($currhosts{$key} eq $prevhosts{$key}) {
                   $ipchange{$key} = $prevhosts{$key}.'|'.$currhosts{$key};
               }
           }
           foreach my $key (keys(%currhosts)) {
               unless ($currhosts{$key} eq $prevhosts{$key}) {
                   $ipchange{$key} = $prevhosts{$key}.' | '.$currhosts{$key};
               }
           }
       }
       if (&Apache::lonnet::domain($defdom,'primary') eq $lonhost) {
           if (keys(%ipchange)) {
               if (open(my $fh,'>>',$perlvar{'lonDaemons'}.'/logs/hostip.log')) {
                  print $fh "********************\n".localtime(time).' Changes --'."\n".
                            "Hostname | Previous IP | New IP\n".
                            "--------------------------------\n";
                  foreach my $hostname (sort(keys(%ipchange))) {
                       print $fh "$hostname | $ipchange{$hostname}\n";
                   }
                   print $fh "\n*******************\n\n";
                   close($fh);
               }
               my $emailto = &Apache::loncommon::build_recipient_list(undef,
                                      'hostipmail',$defdom);
               if ($emailto) {
                   my $subject = "LON-CAPA Hostname to IP change ($perlvar{'lonHostID'})";
                   my $chgmail = "To: $emailto\n".
                                 "Subject: $subject\n".
                                 "Content-type: text/plain\; charset=UTF-8\n".
                                 "MIME-Version: 1.0\n\n".
                                 "Host/IP changes\n".
                                 " \n".
                                 "Hostname | Previous IP | New IP\n".
                                 "--------------------------------\n";
                   foreach my $hostname (sort(keys(%ipchange))) {
                       $chgmail .= "$hostname | $ipchange{$hostname}\n";
                   }
                   $chgmail .= "\n\n";
                   if (open(my $mailh, "|/usr/lib/sendmail -oi -t -odb")) {
                       print $mailh $chgmail;
                       close($mailh);
                       print "Sending mail notification of hostname/IP changes.\n";
                   }
               }
           }
       }
       return;
   }
   
 sub clean_nosslverify {  sub clean_nosslverify {
     my ($fh) = @_;      my ($fh) = @_;
     my %unlinked;       my %unlinked; 
Line 1123  sub get_domain_config { Line 1241  sub get_domain_config {
         unless ($protocol eq 'https') {          unless ($protocol eq 'https') {
             $protocol = 'http';              $protocol = 'http';
         }          }
         $url = $protocol.'://'.$hostname.'/cgi-bin/listdomconfig.pl';          $url = $protocol.'://'.$hostname.'/cgi-bin/listdomconfig.pl?primary='.$primlibserv.'&format=raw';
     }      }
     if ($isprimary) {      if ($isprimary) {
         my $lonusersdir = $perlvar{'lonUsersDir'};          my $lonusersdir = $perlvar{'lonUsersDir'};
Line 1144  sub get_domain_config { Line 1262  sub get_domain_config {
             }              }
         }          }
     } else {      } else {
         if (open(PIPE,"wget --no-check-certificate '$url?primary=$primlibserv&format=raw' |")) {          my $request=new HTTP::Request('GET',$url);
             my $config = '';          my $response=&LONCAPA::LWPReq::makerequest($primlibserv,$request,'',\%perlvar,5);
             while (<PIPE>) {          unless ($response->is_error()) {
                 $config .= $_;              my $content = $response->content;
             }              if ($content) {
             close(PIPE);                  my @pairs=split(/\&/,$content);
             if ($config) {  
                 my @pairs=split(/\&/,$config);  
                 foreach my $item (@pairs) {                  foreach my $item (@pairs) {
                     my ($key,$value)=split(/=/,$item,2);                      my ($key,$value)=split(/=/,$item,2);
                     my $what = &LONCAPA::unescape($key);                      my $what = &LONCAPA::unescape($key);
Line 1398  Options: Line 1514  Options:
  do not send emails do not   do not send emails do not
                                 check if the daemons are running, do not                                  check if the daemons are running, do not
                                 generate lon-status                                  generate lon-status
                                 --justiptables          Only update the dynamic iptables rules for the
                                   lond port; do not send emails, do not
                                   check if the daemons are running, do not
                                   generate lon-status
 USAGE  USAGE
 }  }
   
 # ================================================================ Main Program  # ================================================================ Main Program
 sub main () {  sub main () {
     my ($help,$justcheckdaemons,$noemail,$justcheckconnections,      my ($help,$justcheckdaemons,$noemail,$justcheckconnections,
  $justreload);   $justreload,$justiptables);
     &GetOptions("help"                 => \$help,      &GetOptions("help"                 => \$help,
  "justcheckdaemons"     => \$justcheckdaemons,   "justcheckdaemons"     => \$justcheckdaemons,
  "noemail"              => \$noemail,   "noemail"              => \$noemail,
  "justcheckconnections" => \$justcheckconnections,   "justcheckconnections" => \$justcheckconnections,
  "justreload"           => \$justreload   "justreload"           => \$justreload,
                   "justiptables"         => \$justiptables
  );   );
     if ($help) { &usage(); return; }      if ($help) { &usage(); return; }
 # --------------------------------- Read loncapa_apache.conf and loncapa.conf  # --------------------------------- Read loncapa_apache.conf and loncapa.conf
Line 1460  sub main () { Line 1580  sub main () {
             }              }
         }          }
     }      }
     &Apache::lonnet::load_hosts_tab(1,$nomemcache);      if (!$justiptables) {
     &Apache::lonnet::load_domain_tab(1,$nomemcache);          &Apache::lonnet::load_hosts_tab(1,$nomemcache);
     &Apache::lonnet::get_iphost(1,$nomemcache);          &Apache::lonnet::load_domain_tab(1,$nomemcache);
           &Apache::lonnet::get_iphost(1,$nomemcache);
       }
   
 # ----------------------------------------- Force firewall update for lond port    # ----------------------------------------- Force firewall update for lond port  
   
Line 1493  sub main () { Line 1615  sub main () {
   
   
     my $fh;      my $fh;
     if (!$justcheckdaemons && !$justcheckconnections && !$justreload) {      if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) {
  $fh=&start_logging();   $fh=&start_logging();
   
  &log_machine_info($fh);   &log_machine_info($fh);
Line 1501  sub main () { Line 1623  sub main () {
  &clean_lonIDs($fh);   &clean_lonIDs($fh);
         &clean_balanceIDs($fh);          &clean_balanceIDs($fh);
         &clean_webDAV_sessionIDs($fh);          &clean_webDAV_sessionIDs($fh);
           &clean_ltiIDs($fh);
  &check_httpd_logs($fh);   &check_httpd_logs($fh);
  &rotate_lonnet_logs($fh);   &rotate_lonnet_logs($fh);
  &rotate_other_logs($fh);   &rotate_other_logs($fh);
     }      }
     if (!$justcheckconnections && !$justreload) {      if (!$justcheckconnections && !$justreload && !$justiptables) {
  &checkon_daemon($fh,'lonmemcached',40000);   &checkon_daemon($fh,'lonmemcached',40000);
  &checkon_daemon($fh,'lonsql',200000);   &checkon_daemon($fh,'lonsql',200000);
  if ( &checkon_daemon($fh,'lond',40000,'USR1') eq 'running') {   if ( &checkon_daemon($fh,'lond',40000,'USR1') eq 'running') {
Line 1526  sub main () { Line 1649  sub main () {
     if ($justcheckconnections) {      if ($justcheckconnections) {
  &test_connections($fh);   &test_connections($fh);
     }      }
     if (!$justcheckdaemons && !$justcheckconnections && !$justreload) {      if (!$justcheckdaemons && !$justcheckconnections && !$justreload && !$justiptables) {
         my $domconf = &get_domain_config();          my $domconf = &get_domain_config();
         my ($threshold,$sysmail,$reportstatus,$weightsref,$exclusionsref) =          my ($threshold,$sysmail,$reportstatus,$weightsref,$exclusionsref) =
             &get_permcount_settings($domconf);              &get_permcount_settings($domconf);
Line 1534  sub main () { Line 1657  sub main () {
         &write_loncaparevs();          &write_loncaparevs();
         &write_serverhomeIDs();          &write_serverhomeIDs();
  &write_checksums();   &write_checksums();
           &write_hostips();
         my %sslrem = &clean_nosslverify($fh);          my %sslrem = &clean_nosslverify($fh);
         my %conchgs = &write_connection_config();          my %conchgs = &write_connection_config();
         my %hosttypechgs = &write_hosttypes();          my %hosttypechgs = &write_hosttypes();

Removed from v.1.115  
changed lines
  Added in v.1.119


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