[LON-CAPA-cvs] cvs: loncom / lonc
www
lon-capa-cvs@mail.lon-capa.org
Tue, 19 Feb 2002 21:12:22 -0000
www Tue Feb 19 16:12:22 2002 EDT
Modified files:
/loncom lonc
Log:
Testing - skip servers that do not ping.
Index: loncom/lonc
diff -u loncom/lonc:1.25 loncom/lonc:1.26
--- loncom/lonc:1.25 Wed Feb 6 09:15:37 2002
+++ loncom/lonc Tue Feb 19 16:12:22 2002
@@ -5,7 +5,7 @@
# provides persistent TCP connections to the other servers in the network
# through multiplexed domain sockets
#
-# $Id: lonc,v 1.25 2002/02/06 14:15:37 albertel Exp $
+# $Id: lonc,v 1.26 2002/02/19 21:12:22 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,6 +43,8 @@
# 01/10/01 Scott Harrison
# 03/14/01,03/15,06/12,11/26,11/27,11/28 Gerd Kortemeyer
# 12/20 Scott Harrison
+# YEAR=2002
+# 2/19/02
#
# based on nonforker from Perl Cookbook
# - server who multiplexes without forking
@@ -55,6 +57,8 @@
use Fcntl;
use Tie::RefHash;
use Crypt::IDEA;
+use Net::Ping;
+use LWP::UserAgent();
my $status='';
my $lastlog='';
@@ -72,9 +76,47 @@
$childmaxattempts=5;
+# -------------------------------------- Routines to see if other box available
+
+sub online {
+ my $host=shift;
+ my $p=Net::Ping->new("tcp",10);
+ my $online=$p->ping("$host");
+ $p->close();
+ undef ($p);
+ return $online;
+}
+
+sub connected {
+ my ($local,$remote)=@_;
+ $local=~s/\W//g;
+ $remote=~s/\W//g;
+
+ unless ($hostname{$local}) { return 'local_unknown'; }
+ unless ($hostname{$remote}) { return 'remote_unknown'; }
+
+ unless (&online($hostname{$local})) { return 'local_offline'; }
+
+ my $ua=new LWP::UserAgent;
+
+ my $request=new HTTP::Request('GET',
+ "http://".$hostname{$local}.'/cgi-bin/ping.pl?'.$remote);
+
+ my $response=$ua->request($request);
+
+ unless ($response->is_success) { return 'local_error'; }
+
+ my $reply=$response->content;
+ $reply=(split("\n",$reply))[0];
+ $reply=~s/\W//g;
+ if ($reply ne $remote) { return $reply; }
+ return 'ok';
+}
+
+
# -------------------------------- Set signal handlers to record abnormal exits
-$SIG{'QUIT'}=\&catchexception;
+$SIG{QUIT}=\&catchexception;
$SIG{__DIE__}=\&catchexception;
# ------------------------------------ Read httpd access.conf and get variables
@@ -298,7 +340,9 @@
&status("Forking ...");
foreach $thisserver (keys %hostip) {
- make_new_child($thisserver);
+ if (&online($hostname{$thisserver})) {
+ make_new_child($thisserver);
+ }
}
&logthis("Done starting initial servers");
@@ -317,13 +361,19 @@
&status("Woke up");
foreach $thisserver (keys %hostip) {
if (!$childpid{$thisserver}) {
- if ($childatt{$thisserver}<$childmaxattempts) {
+ if (($childatt{$thisserver}<$childmaxattempts) &&
+ (&online($hostname{$thisserver}))) {
$childatt{$thisserver}++;
&logthis(
"<font color=yellow>INFO: Trying to reconnect for $thisserver "
."($childatt{$thisserver} of $childmaxattempts attempts)</font>");
make_new_child($thisserver);
- }
+ } else {
+ &logthis(
+ "<font color=yellow>INFO: Skipping $thisserver "
+ ."($childatt{$thisserver} of $childmaxattempts attempts)</font>");
+ }
+
}
}
}