--- loncom/lond	2003/03/28 20:40:52	1.123
+++ loncom/lond	2003/07/14 13:43:42	1.132
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.123 2003/03/28 20:40:52 www Exp $
+# $Id: lond,v 1.132 2003/07/14 13:43:42 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -57,7 +57,7 @@ use LONCAPA::Configuration;
 
 use IO::Socket;
 use IO::File;
-use Apache::File;
+#use Apache::File;
 use Symbol;
 use POSIX;
 use Crypt::IDEA;
@@ -73,7 +73,7 @@ my $DEBUG = 0;		       # Non zero to ena
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.123 $'; #' stupid emacs
+my $VERSION='$Revision: 1.132 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid;
 my $currentdomainid;
@@ -276,11 +276,11 @@ sub checkchildren {
             alarm(300);
 	    &logthis('Child '.$_.' did not respond');
 	    kill 9 => $_;
-	    $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
-	    $subj="LON: $currenthostid killed lond process $_";
-	    my $result=`echo 'Killed lond process $_.' | mailto $emailto -s '$subj' > /dev/null`;
-	    $execdir=$perlvar{'lonDaemons'};
-	    $result=`/bin/cp $execdir/logs/lond.log $execdir/logs/lond.log.$_`;
+	    #$emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
+	    #$subj="LON: $currenthostid killed lond process $_";
+	    #my $result=`echo 'Killed lond process $_.' | mailto $emailto -s '$subj' > /dev/null`;
+	    #$execdir=$perlvar{'lonDaemons'};
+	    #$result=`/bin/cp $execdir/logs/lond.log $execdir/logs/lond.log.$_`;
 	    alarm(0);
 	  }
         }
@@ -375,13 +375,6 @@ sub reconlonc {
         if (kill 0 => $loncpid) {
 	    &logthis("lonc at pid $loncpid responding, sending USR1");
             kill USR1 => $loncpid;
-            sleep 5;
-            if (-e "$peerfile") { return; }
-            &logthis("$peerfile still not there, give it another try");
-            sleep 10;
-            if (-e "$peerfile") { return; }
-            &logthis(
- "<font color=blue>WARNING: $peerfile still not there, giving up</font>");
         } else {
 	    &logthis(
               "<font color=red>CRITICAL: "
@@ -543,6 +536,8 @@ sub make_new_child {
     } else {
         # Child can *not* return from this subroutine.
         $SIG{INT} = 'DEFAULT';      # make SIGINT kill us as it did before
+        $SIG{CHLD} = 'DEFAULT'; #make this default so that pwauth returns 
+                                #don't get intercepted
         $SIG{USR1}= \&logstatus;
         $SIG{ALRM}= \&timeout;
         $lastlog='Forked ';
@@ -670,8 +665,12 @@ sub make_new_child {
                           $loadavg=<$loadfile>;
                        }
                        $loadavg =~ s/\s.*//g;
-                       my $loadpercent=100*$loadavg/$perlvar{'lonLoadLim'};
+		       my $loadpercent=100*$loadavg/$perlvar{'lonLoadLim'};
 		       print $client "$loadpercent\n";
+# -------------------------------------------------------------------- userload
+		   } elsif ($userinput =~ /^userload/) {
+		       my $userloadpercent=&userload();
+		       print $client "$userloadpercent\n";
 # ----------------------------------------------------------------- currentauth
 		   } elsif ($userinput =~ /^currentauth/) {
 		     if ($wasenc==1) {
@@ -827,7 +826,7 @@ sub make_new_child {
 			     if ($pwdcorrect) {
 				 my $execdir=$perlvar{'lonDaemons'};
 				 &Debug("Opening lcpasswd pipeline");
-				 my $pf = IO::File->new("|$execdir/lcpasswd > /home/www/lcpasswd.log");
+				 my $pf = IO::File->new("|$execdir/lcpasswd > $perlvar{'lonDaemons'}/logs/lcpasswd.log");
 				 print $pf "$uname\n$npass\n$npass\n";
 				 close $pf;
 				 my $err = $?;
@@ -1843,18 +1842,19 @@ sub getchat {
 	@entries=map { $_.':'.$hash{$_} } sort keys %hash;
 	untie %hash;
     }
+    my @participants=();
     $cutoff=time-60;
     if (tie(%hash,'GDBM_File',"$proname/nohist_inchatroom.db",
-	    &GDBM_READER(),0640)) {
-	$hash{$uname.':'.$undom}=time;
+	    &GDBM_WRCREAT(),0640)) {
+        $hash{$uname.':'.$udom}=time;
         foreach (sort keys %hash) {
 	    if ($hash{$_}>$cutoff) {
-		$entries[$#entries+1]='active_participant:'.$_;
+		$participants[$#participants+1]='active_participant:'.$_;
             }
         }
         untie %hash;
     }
-    return @entries;
+    return (@participants,@entries);
 }
 
 sub chatadd {
@@ -2026,7 +2026,7 @@ sub make_passwd_file {
 	    {
 		&Debug("Executing external: ".$execpath);
 		&Debug("user  = ".$uname.", Password =". $npass);
-		my $se = IO::File->new("|$execpath > /home/www/lcuseradd.log");
+		my $se = IO::File->new("|$execpath > $perlvar{'lonDaemons'}/logs/lcuseradd.log");
 		print $se "$uname\n";
 		print $se "$npass\n";
 		print $se "$npass\n";
@@ -2071,6 +2071,29 @@ sub version {
     return "version:$VERSION";
 }
 
+#There is a copy of this in lonnet.pm
+sub userload {
+    my $numusers=0;
+    {
+	opendir(LONIDS,$perlvar{'lonIDsDir'});
+	my $filename;
+	my $curtime=time;
+	while ($filename=readdir(LONIDS)) {
+	    if ($filename eq '.' || $filename eq '..') {next;}
+	    my ($atime)=(stat($perlvar{'lonIDsDir'}.'/'.$filename))[8];
+	    if ($curtime-$atime < 3600) { $numusers++; }
+	}
+	closedir(LONIDS);
+    }
+    my $userloadpercent=0;
+    my $maxuserload=$perlvar{'lonUserLoadLim'};
+    if ($maxuserload) {
+	$userloadpercent=100*$numusers/$maxuserload;
+    }
+    $userloadpercent=sprintf("%.2f",$userloadpercent);
+    return $userloadpercent;
+}
+
 # ----------------------------------- POD (plain old documentation, CPAN style)
 
 =head1 NAME