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(); |