[LON-CAPA-cvs] cvs: loncom / LondConnection.pm

foxr lon-capa-cvs@mail.lon-capa.org
Tue, 28 Oct 2003 10:47:44 -0000


foxr		Tue Oct 28 05:47:44 2003 EDT

  Modified files:              
    /loncom	LondConnection.pm 
  Log:
  Start building support for LondConnection.pm to be used by LonManage.
  - Separate the configuration read from initialization:
    o Read if not read on first new using ReadConfig
    o Read if explicityl requeste by client doing LondConnection::ReadConfig
  - Incorporate LONCAPA::Configuration textually so that LondConnection
    can be used outside of the LonCAPA environment (e.g. in lonManage).
   
  
  
Index: loncom/LondConnection.pm
diff -u loncom/LondConnection.pm:1.13 loncom/LondConnection.pm:1.14
--- loncom/LondConnection.pm:1.13	Mon Oct 27 05:09:37 2003
+++ loncom/LondConnection.pm	Tue Oct 28 05:47:44 2003
@@ -1,7 +1,7 @@
 #   This module defines and implements a class that represents
 #   a connection to a lond daemon.
 #
-# $Id: LondConnection.pm,v 1.13 2003/10/27 10:09:37 foxr Exp $
+# $Id: LondConnection.pm,v 1.14 2003/10/28 10:47:44 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -25,6 +25,7 @@
 #
 # http://www.lon-capa.org/
 #
+
 package LondConnection;
 
 use strict;
@@ -35,8 +36,7 @@
 use Fcntl;
 use POSIX;
 use Crypt::IDEA;
-use LONCAPA::Configuration;
-use LONCAPA::HashIterator;
+
 
 
 
@@ -45,23 +45,29 @@
 my %hostshash;
 my %perlvar;
 
+#
+#   The config read is done in this way to support the read of
+#   the non-default configuration file in the
+#   event we are being used outside of loncapa.
+#
+
+my $ConfigRead = 0;
+
 #   Read the configuration file for apache to get the perl
 #   variable set.
 
 sub ReadConfig {
-    my $perlvarref = LONCAPA::Configuration::read_conf('loncapa.conf');
+    my $perlvarref = read_conf('loncapa.conf');
     %perlvar    = %{$perlvarref};
-    my $hoststab   = 
-	LONCAPA::Configuration::read_hosts(
-					   "$perlvar{'lonTabDir'}/hosts.tab") || 
-					   die "Can't read host table!!";
+    my $hoststab   = read_hosts(
+				"$perlvar{'lonTabDir'}/hosts.tab") || 
+				die "Can't read host table!!";
     %hostshash  = %{$hoststab};
     
     close(CONFIG);
 }
 
 
-ReadConfig;			# Make sure it gets read on init.
 
 sub Debug {
     my $level   = shift;
@@ -110,6 +116,7 @@
 }
 
 
+
 =pod
 
 =head2 new
@@ -132,6 +139,11 @@
     my $class    = shift;	# class name.
     my $Hostname = shift;	# Name of host to connect to.
     my $Port     = shift;	# Port to connect 
+
+    if (!$ConfigRead) {
+	ReadConfig();
+	$ConfigRead = 1;
+    }
     &Debug(4,$class."::new( ".$Hostname.",".$Port.")\n");
 
     # The host must map to an entry in the hosts table:
@@ -710,6 +722,85 @@
 
     return HashIterator->new(\%hostshash);    
 }
+
+###########################################################
+#
+#  The following is an unashamed kludge that is here to
+# allow LondConnection to be used outside of the
+# loncapa environment (e.g. by lonManage).
+# 
+#   This is a textual inclusion of pieces of the
+#   Configuration.pm module.
+#
+
+
+my $confdir='/etc/httpd/conf/';
+
+# ------------------- Subroutine read_conf: read LON-CAPA server configuration.
+# This subroutine reads PerlSetVar values out of specified web server
+# configuration files.
+sub read_conf
+  {
+    my (@conf_files)=@_;
+    my %perlvar;
+    foreach my $filename (@conf_files,'loncapa_apache.conf')
+      {
+	open(CONFIG,'<'.$confdir.$filename) or
+	    die("Can't read $confdir$filename");
+	while (my $configline=<CONFIG>)
+	  {
+	    if ($configline =~ /^[^\#]*PerlSetVar/)
+	      {
+		my ($unused,$varname,$varvalue)=split(/\s+/,$configline);
+		chomp($varvalue);
+		$perlvar{$varname}=$varvalue;
+	      }
+	  }
+	close(CONFIG);
+      }
+    my $perlvarref=\%perlvar;
+    return ($perlvarref);
+  }
+
+#---------------------- Subroutine read_hosts: Read a LON-CAPA hosts.tab
+# formatted configuration file.
+#
+my $RequiredCount = 5;		# Required item count in hosts.tab.
+my $DefaultMaxCon = 5;		# Default value for maximum connections.
+my $DefaultIdle   = 1000;       # Default connection idle time in seconds.
+my $DefaultMinCon = 0;          # Default value for minimum connections.
+
+sub read_hosts {
+    my $Filename = shift;
+    my %HostsTab;
+    
+    open(CONFIG,'<'.$Filename) or die("Can't read $Filename");
+    while (my $line = <CONFIG>) {
+	if (!($line =~ /^\s*\#/)) {
+	    my @items = split(/:/, $line);
+	    if(scalar @items >= $RequiredCount) {
+		if (scalar @items == $RequiredCount) { # Only required items:
+		    $items[$RequiredCount] = $DefaultMaxCon;
+		}
+		if(scalar @items == $RequiredCount + 1) { # up through maxcon.
+		    $items[$RequiredCount+1] = $DefaultIdle;
+		}
+		if(scalar @items == $RequiredCount + 2) { # up through idle.
+		    $items[$RequiredCount+2] = $DefaultMinCon;
+		}
+		{
+		    my @list = @items; # probably not needed but I'm unsure of 
+		    # about the scope of item so...
+		    $HostsTab{$list[0]} = \@list; 
+		}
+	    }
+	}
+    }
+    close(CONFIG);
+    my $hostref = \%HostsTab;
+    return ($hostref);
+}
+
 
 1;