[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;