[LON-CAPA-cvs] cvs: loncom /metadata_database searchcat.pl

matthew lon-capa-cvs@mail.lon-capa.org
Mon, 21 Mar 2005 20:36:12 -0000


matthew		Mon Mar 21 15:36:12 2005 EDT

  Modified files:              
    /loncom/metadata_database	searchcat.pl 
  Log:
  use Apache::lonnet instead of LONCAPA::LonConfiguration
  multi-domain support is now handled on the same code path as single domain support,
      obiviating the need for a command line parameter.
  No longer uses the nonexistant "mailto" command to send email about user id mismatches,,
      instead uses 'mail' to complain.
  
  
Index: loncom/metadata_database/searchcat.pl
diff -u loncom/metadata_database/searchcat.pl:1.62 loncom/metadata_database/searchcat.pl:1.63
--- loncom/metadata_database/searchcat.pl:1.62	Thu Mar 10 22:25:18 2005
+++ loncom/metadata_database/searchcat.pl	Mon Mar 21 15:36:11 2005
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # searchcat.pl "Search Catalog" batch script
 #
-# $Id: searchcat.pl,v 1.62 2005/03/11 03:25:18 matthew Exp $
+# $Id: searchcat.pl,v 1.63 2005/03/21 20:36:11 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -68,7 +68,6 @@
 
 use DBI;
 use lib '/home/httpd/lib/perl/';
-use LONCAPA::Configuration;
 use LONCAPA::lonmetadata;
 
 use Getopt::Long;
@@ -77,20 +76,19 @@
 use GDBM_File;
 use POSIX qw(strftime mktime);
 
-use Sys::Hostname;
+use Apache::lonnet();
 
 use File::Find;
 
 #
 # Set up configuration options
-my ($simulate,$oneuser,$help,$verbose,$logfile,$debug,$multidom);
+my ($simulate,$oneuser,$help,$verbose,$logfile,$debug);
 GetOptions (
             'help'     => \$help,
             'simulate' => \$simulate,
             'only=s'   => \$oneuser,
             'verbose=s'  => \$verbose,
             'debug' => \$debug,
-            'multi_domain'  => \$multidom,
             );
 
 if ($help) {
@@ -103,7 +101,6 @@
     -only=user     Only compute for the given user.  Implies -simulate   
     -verbose=val   Sets logging level, val must be a number
     -debug         Turns on debugging output
-    -multi_domain  Parse the hosts.tab file domain(s) to use.
 ENDHELP
     exit 0;
 }
@@ -126,27 +123,21 @@
 my $newname = 'newmetadata'.$$; # append pid to have unique temporary table
 
 #
-# Read loncapa_apache.conf and loncapa.conf
-my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf');
-my %perlvar=%{$perlvarref};
-undef $perlvarref;
-delete $perlvar{'lonReceipt'}; # remove since sensitive (really?) & not needed
-#
 # Only run if machine is a library server
-exit if ($perlvar{'lonRole'} ne 'library');
+exit if ($Apache::lonnet::perlvar{'lonRole'} ne 'library');
 #
 #  Make sure this process is running from user=www
 my $wwwid=getpwnam('www');
 if ($wwwid!=$<) {
-    my $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
-    my $subj="LON: $perlvar{'lonHostID'} User ID mismatch";
+    my $emailto="$Apache::lonnet::perlvar{'lonAdmEMail'},$Apache::lonnet::perlvar{'lonSysEMail'}";
+    my $subj="LON: $Apache::lonnet::perlvar{'lonHostID'} User ID mismatch";
     system("echo 'User ID mismatch. searchcat.pl must be run as user www.' |\
- mailto $emailto -s '$subj' > /dev/null");
+ mail -s '$subj' $emailto > /dev/null");
     exit 1;
 }
 #
 # Let people know we are running
-open(LOG,'>>'.$perlvar{'lonDaemons'}.'/logs/searchcat.log');
+open(LOG,'>>'.$Apache::lonnet::perlvar{'lonDaemons'}.'/logs/searchcat.log');
 &log(0,'==== Searchcat Run '.localtime()."====");
 
 
@@ -158,7 +149,7 @@
 #
 # Connect to database
 my $dbh;
-if (! ($dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar{'lonSqlAccess'},
+if (! ($dbh = DBI->connect("DBI:mysql:loncapa","www",$Apache::lonnet::perlvar{'lonSqlAccess'},
                           { RaiseError =>0,PrintError=>0}))) {
     &log(0,"Cannot connect to database!");
     die "MySQL Error: Cannot connect to database!\n";
@@ -177,37 +168,15 @@
 }
 #
 # find out which users we need to examine
-my @domains;
-if (defined($multidom)) {
-    &log(1,'====multi domain setup====');
-    # Peek into the hosts.tab and look for matches of our hostname
-    my $host = hostname();
-    &log(9,'hostname = "'.$host.'"');
-    open(HOSTFILE,$perlvar{'lonTabDir'}.'/hosts.tab') || 
-        die ("Unable to determine domain(s) of multi-domain server");
-    my %domains;
-    while (<HOSTFILE>) {
-        next if (/^\#/);
-        next if (!/:\Q$host\E/);
-        &log(9,$_);
-        $domains{(split(':',$_))[1]}++;
-    }
-    close HOSTFILE;
-    @domains = sort(keys(%domains));
-    &log(9,join(',',@domains));
-    if (! scalar(@domains)) {
-        die ("Unable to find any domains in the hosts.tab that match ".$host);
-    }
-} else {
-    push(@domains,$perlvar{'lonDefDomain'});
-}
+my @domains = sort(&Apache::lonnet::current_machine_domains());
+&log(9,'domains ="'.join('","',@domains).'"');
 
 foreach my $dom (@domains) {
     &log(9,'domain = '.$dom);
-    opendir(RESOURCES,"$perlvar{'lonDocRoot'}/res/$dom");
+    opendir(RESOURCES,"$Apache::lonnet::perlvar{'lonDocRoot'}/res/$dom");
     my @homeusers = 
         grep {
-            &ishome("$perlvar{'lonDocRoot'}/res/$dom/$_");
+            &ishome("$Apache::lonnet::perlvar{'lonDocRoot'}/res/$dom/$_");
         } grep { 
             !/^\.\.?$/;
         } readdir(RESOURCES);
@@ -229,7 +198,7 @@
               #wanted     => \&print_filename,
               #wanted     => \&log_metadata,
               wanted     => \&process_meta_file,
-             }, join('/',($perlvar{'lonDocRoot'},'res',$dom,$user)) );
+             }, join('/',($Apache::lonnet::perlvar{'lonDocRoot'},'res',$dom,$user)) );
     }
 }
 #
@@ -426,7 +395,7 @@
     if ($filename !~ /\.meta$/) { 
         $filename.='.meta';
     }
-    my $metastring=&getfile($perlvar{'lonDocRoot'}.'/res/'.$filename);
+    my $metastring=&getfile($Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'.$filename);
     return undef if (! defined($metastring));
     my $parser=HTML::TokeParser->new(\$metastring);
     my $token;
@@ -661,7 +630,7 @@
     $uname=~s/\W//g;
     my $subdir=$uname.'__';
     $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/;
-    my $proname="$perlvar{'lonUsersDir'}/$udom/$subdir/$uname";
+    my $proname="$Apache::lonnet::perlvar{'lonUsersDir'}/$udom/$subdir/$uname";
     return $proname;
 } 
 
@@ -705,7 +674,7 @@
 ##   Given a filename, returns a url for the filename.
 sub declutter {
     my $thisfn=shift;
-    $thisfn=~s/^$perlvar{'lonDocRoot'}//;
+    $thisfn=~s/^$Apache::lonnet::perlvar{'lonDocRoot'}//;
     $thisfn=~s/^\///;
     $thisfn=~s/^res\///;
     return $thisfn;