--- loncom/metadata_database/searchcat.pl 2005/03/11 03:25:18 1.62 +++ loncom/metadata_database/searchcat.pl 2005/03/21 20:36:11 1.63 @@ -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 strict; use DBI; use lib '/home/httpd/lib/perl/'; -use LONCAPA::Configuration; use LONCAPA::lonmetadata; use Getopt::Long; @@ -77,20 +76,19 @@ use HTML::TokeParser; 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 @@ Options: -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 $oldname = 'metadata'; 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 @@ if ($debug) { # # 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 @@ if ($dbh->err) { } # # 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 () { - 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 @@ foreach my $dom (@domains) { #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 @@ sub metadata { 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 @@ sub propath { $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 @@ sub sqltime { ## 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;