[LON-CAPA-cvs] cvs: loncom(version_2_11_X) / loncron

raeburn raeburn at source.lon-capa.org
Sun Jul 7 11:47:40 EDT 2019


raeburn		Sun Jul  7 15:47:40 2019 EDT

  Modified files:              (Branch: version_2_11_X)
    /loncom	loncron 
  Log:
  - For 2.11
    - Backport 1.117
  
  
Index: loncom/loncron
diff -u loncom/loncron:1.103.2.2 loncom/loncron:1.103.2.3
--- loncom/loncron:1.103.2.2	Sun Feb 10 03:02:10 2019
+++ loncom/loncron	Sun Jul  7 15:47:40 2019
@@ -2,7 +2,7 @@
 
 # Housekeeping program, started by cron, loncontrol and loncron.pl
 #
-# $Id: loncron,v 1.103.2.2 2019/02/10 03:02:10 raeburn Exp $
+# $Id: loncron,v 1.103.2.3 2019/07/07 15:47:40 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -41,6 +41,7 @@
 use IO::Socket;
 use HTML::Entities;
 use Getopt::Long;
+use File::Copy;
 #globals
 use vars qw (%perlvar %simplestatus $errors $warnings $notices $totalcount);
 
@@ -824,6 +825,94 @@
     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 send_mail {
     my $defdom = $perlvar{'lonDefDomain'};
     my $origmail = $perlvar{'lonAdmEMail'};
@@ -1012,6 +1101,7 @@
         &write_loncaparevs();
         &write_serverhomeIDs();
 	&write_checksums();
+        &write_hostips();
 	if ($totalcount>200 && !$noemail) { &send_mail(); }
     }
 }




More information about the LON-CAPA-cvs mailing list