version 1.25, 2001/03/27 19:11:12
|
version 1.34, 2001/04/16 18:51:22
|
Line 19 require "find.pl";
|
Line 19 require "find.pl";
|
sub wanted { |
sub wanted { |
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && |
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && |
-f _ && |
-f _ && |
/^.*\.meta$/ && |
/^.*\.meta$/ && !/^.+\.\d+\.[^\.]+\.meta$/ && |
push(@metalist,"$dir/$_"); |
push(@metalist,"$dir/$_"); |
} |
} |
|
|
|
|
$childmaxattempts=10; |
$childmaxattempts=10; |
$run =0;#running counter to generate the query-id |
$run =0;#running counter to generate the query-id |
|
|
Line 39 while ($configline=<CONFIG>) {
|
Line 38 while ($configline=<CONFIG>) {
|
} |
} |
close(CONFIG); |
close(CONFIG); |
|
|
|
# ------------------------------------- Make sure that database can be accessed |
|
{ |
|
my $dbh; |
|
unless ( |
|
$dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar{'lonSqlAccess'},{ RaiseError =>0,PrintError=>0}) |
|
) { |
|
print "Cannot connect to database!\n"; |
|
exit; |
|
} |
|
else { |
|
$dbh->disconnect; |
|
} |
|
} |
|
|
# --------------------------------------------- Check if other instance running |
# --------------------------------------------- Check if other instance running |
|
|
my $pidfile="$perlvar{'lonDaemons'}/logs/lonsql.pid"; |
my $pidfile="$perlvar{'lonDaemons'}/logs/lonsql.pid"; |
Line 60 while ($configline=<CONFIG>) {
|
Line 73 while ($configline=<CONFIG>) {
|
chomp($ip); |
chomp($ip); |
|
|
$hostip{$ip}=$id; |
$hostip{$ip}=$id; |
|
|
if ($id eq $perlvar{'lonHostID'}) { $thisserver=$name; } |
if ($id eq $perlvar{'lonHostID'}) { $thisserver=$name; } |
|
|
$PREFORK++; |
$PREFORK++; |
Line 191 sub make_new_child {
|
Line 203 sub make_new_child {
|
#open database handle |
#open database handle |
# making dbh global to avoid garbage collector |
# making dbh global to avoid garbage collector |
unless ( |
unless ( |
$dbh = DBI->connect("DBI:mysql:loncapa","www","123",{ RaiseError =>0,PrintError=>0}) |
$dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar{'lonSqlAccess'},{ RaiseError =>0,PrintError=>0}) |
) { |
) { |
my $st=120+int(rand(240)); |
sleep(10+int(rand(20))); |
&logthis("<font color=blue>WARNING: Couldn't connect to database ($st secs): $@</font>"); |
&logthis("<font color=blue>WARNING: Couldn't connect to database ($st secs): $@</font>"); |
print "database handle error\n"; |
print "database handle error\n"; |
sleep($st); |
|
exit; |
exit; |
|
|
}; |
}; |
Line 233 sub make_new_child {
|
Line 244 sub make_new_child {
|
my $result; |
my $result; |
my @files; |
my @files; |
my $subsetflag=0; |
my $subsetflag=0; |
unless ($sth->execute()) |
if ($query) { |
{ |
unless ($sth->execute()) |
&logthis("<font color=blue>WARNING: Could not retrieve from database: $@</font>"); |
{ |
$result=""; |
&logthis("<font color=blue>WARNING: Could not retrieve from database: $@</font>"); |
} |
$result=""; |
else { |
} |
my $r1=$sth->fetchall_arrayref; |
else { |
my @r2; |
my $r1=$sth->fetchall_arrayref; |
map {my $a=$_; |
my @r2; |
my @b=map {escape($_)} @$a; |
map {my $a=$_; |
push @files,@{$a}[3]; |
my @b=map {escape($_)} @$a; |
push @r2,join(",", @b) |
push @files,@{$a}[3]; |
} (@$r1); |
push @r2,join(",", @b) |
$result=join("&",@r2); |
} (@$r1); |
|
$result=join("&",@r2); |
|
} |
} |
} |
|
|
# do custom metadata searching here and build into result |
# do custom metadata searching here and build into result |
if ($custom) { |
if ($custom or $customshow) { |
&logthis("am going to do custom query for $custom"); |
&logthis("am going to do custom query for $custom"); |
if (@files) { |
if ($query) { |
@metalist=map {$perlvar{'lonDocRoot'}.$_.'.meta'} @files; |
@metalist=map {$perlvar{'lonDocRoot'}.$_.'.meta'} @files; |
} |
} |
else { |
else { |
@metalist=(); pop @metalist; |
@metalist=(); pop @metalist; |
&find("$perlvar{'lonDocRoot'}/res"); |
opendir(RESOURCES,"$perlvar{'lonDocRoot'}/res/$perlvar{'lonDefDomain'}"); |
|
my @homeusers=grep |
|
{&ishome("$perlvar{'lonDocRoot'}/res/$perlvar{'lonDefDomain'}/$_")} |
|
grep {!/^\.\.?$/} readdir(RESOURCES); |
|
closedir RESOURCES; |
|
foreach my $user (@homeusers) { |
|
&find("$perlvar{'lonDocRoot'}/res/$perlvar{'lonDefDomain'}/$user"); |
|
} |
} |
} |
# &logthis("FILELIST:" . join(":::",@metalist)); |
# &logthis("FILELIST:" . join(":::",@metalist)); |
# if file is indicated in sql database and |
# if file is indicated in sql database and |
Line 266 sub make_new_child {
|
Line 285 sub make_new_child {
|
# if file is indicated in sql database and is |
# if file is indicated in sql database and is |
# part of query result list, then do the pattern match. |
# part of query result list, then do the pattern match. |
my $customresult=''; |
my $customresult=''; |
|
my @r2; |
foreach my $m (@metalist) { |
foreach my $m (@metalist) { |
my $fh=IO::File->new($m); |
my $fh=IO::File->new($m); |
my @lines=<$fh>; |
my @lines=<$fh>; |
Line 278 sub make_new_child {
|
Line 298 sub make_new_child {
|
$stuff=~s/\n?\<$f[^\>]*\>.*?<\/$f[^\>]*\>\n?//; |
$stuff=~s/\n?\<$f[^\>]*\>.*?<\/$f[^\>]*\>\n?//; |
} |
} |
my $m2=$m; my $docroot=$perlvar{'lonDocRoot'}; |
my $m2=$m; my $docroot=$perlvar{'lonDocRoot'}; |
$m2=~s/^$docroot//; $m2=~s/\.meta$//; |
$m2=~s/^$docroot//; |
|
$m2=~s/\.meta$//; |
|
unless ($query) { |
|
my $q2="select * from metadata where url like '$m2'"; |
|
my $sth = $dbh->prepare($q2); |
|
$sth->execute(); |
|
my $r1=$sth->fetchall_arrayref; |
|
map {my $a=$_; |
|
my @b=map {escape($_)} @$a; |
|
push @files,@{$a}[3]; |
|
push @r2,join(",", @b) |
|
} (@$r1); |
|
} |
# &logthis("found: $stuff"); |
# &logthis("found: $stuff"); |
$customresult.='&custom='.escape($m2).','.escape($stuff); |
$customresult.='&custom='.escape($m2).','.escape($stuff); |
} |
} |
} |
} |
|
$result=join("&",@r2) unless $query; |
$result.=$customresult; |
$result.=$customresult; |
} |
} |
# reply with result |
# reply with result |
Line 337 sub reply {
|
Line 370 sub reply {
|
} |
} |
} else { |
} else { |
$answer='self_reply'; |
$answer='self_reply'; |
|
$answer=subreply($cmd,$server); |
} |
} |
return $answer; |
return $answer; |
} |
} |
Line 356 sub unescape {
|
Line 390 sub unescape {
|
$str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; |
$str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; |
return $str; |
return $str; |
} |
} |
|
|
|
# --------------------------------------- Is this the home server of an author? |
|
# (copied from lond, modification of the return value) |
|
sub ishome { |
|
my $author=shift; |
|
$author=~s/\/home\/httpd\/html\/res\/([^\/]*)\/([^\/]*).*/$1\/$2/; |
|
my ($udom,$uname)=split(/\//,$author); |
|
my $proname=propath($udom,$uname); |
|
if (-e $proname) { |
|
return 1; |
|
} else { |
|
return 0; |
|
} |
|
} |
|
|
|
# -------------------------------------------- Return path to profile directory |
|
# (copied from lond) |
|
sub propath { |
|
my ($udom,$uname)=@_; |
|
$udom=~s/\W//g; |
|
$uname=~s/\W//g; |
|
my $subdir=$uname.'__'; |
|
$subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; |
|
my $proname="$perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; |
|
return $proname; |
|
} |