[LON-CAPA-cvs] cvs: loncom /metadata_database searchcat.pl
www
lon-capa-cvs@mail.lon-capa.org
Wed, 24 Dec 2003 19:58:37 -0000
www Wed Dec 24 14:58:37 2003 EDT
Modified files:
/loncom/metadata_database searchcat.pl
Log:
Saving my work. Dynamic metadata now correctly generated, needs to be
put into database
Index: loncom/metadata_database/searchcat.pl
diff -u loncom/metadata_database/searchcat.pl:1.44 loncom/metadata_database/searchcat.pl:1.45
--- loncom/metadata_database/searchcat.pl:1.44 Tue Dec 23 10:47:26 2003
+++ loncom/metadata_database/searchcat.pl Wed Dec 24 14:58:37 2003
@@ -2,7 +2,7 @@
# The LearningOnline Network
# searchcat.pl "Search Catalog" batch script
#
-# $Id: searchcat.pl,v 1.44 2003/12/23 15:47:26 www Exp $
+# $Id: searchcat.pl,v 1.45 2003/12/24 19:58:37 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -65,6 +65,8 @@
=cut
+use strict;
+
use lib '/home/httpd/lib/perl/';
use LONCAPA::Configuration;
@@ -74,11 +76,14 @@
use GDBM_File;
use POSIX qw(strftime mktime);
+require "find.pl";
+
my @metalist;
-$simplestatus='';
+my $simplestatus='';
my %countext=();
+# ----------------------------------------------------- write out simple status
sub writesimple {
open(SMP,'>/home/httpd/html/lon-status/mysql.txt');
print SMP $simplestatus."\n";
@@ -94,6 +99,7 @@
close(RSMP);
}
+# -------------------------------------- counts files with different extensions
sub count {
my $file=shift;
$file=~/\.(\w+)$/;
@@ -120,7 +126,6 @@
return $str;
}
-
# ------------------------------------------- Code to evaluate dynamic metadata
sub dynamicmeta {
@@ -129,8 +134,9 @@
my %returnhash=();
my ($adomain,$aauthor)=($url=~/^(\w+)\/(\w+)\//);
my $prodir=&propath($adomain,$aauthor);
+
# Get metadata except counts
- if (tie(%evaldata,'GDBM_File',
+ if (tie(my %evaldata,'GDBM_File',
$prodir.'/nohist_resevaldata.db',&GDBM_READER(),0640)) {
my %sum=();
my %cnt=();
@@ -155,65 +161,56 @@
$regexp=~s/(\W)/\\$1/g;
$regexp='___'.$regexp.'___([a-z]+)$';
while (my ($esckey,$value)=each %evaldata) {
- $key=&unescape($esckey);
+ my $key=&unescape($esckey);
if ($key=~/$regexp/) {
- my ($item,$purl,$cat)=split(/___/,$_);
+ my ($item,$purl,$cat)=split(/___/,$key);
if (defined($cnt{$cat})) { $cnt{$cat}++; } else { $cnt{$cat}=1; }
unless ($listitems{$cat} eq 'app') {
if (defined($sum{$cat})) {
- $sum{$cat}+=$evaldata{$_};
+ $sum{$cat}+=$evaldata{$esckey};
$concat{$cat}.=','.$item;
} else {
- $sum{$cat}=$evaldata{$_};
+ $sum{$cat}=$evaldata{$esckey};
$concat{$cat}=$item;
}
} else {
if (defined($sum{$cat})) {
- if ($evaldata{$_}) {
- $sum{$cat}.='<hr>'.$evaldata{$_};
+ if ($evaldata{$esckey}=~/\w/) {
+ $sum{$cat}.='<hr>'.$evaldata{$esckey};
}
} else {
- $sum{$cat}=''.$evaldata{$_};
+ $sum{$cat}=''.$evaldata{$esckey};
}
}
}
}
untie(%evaldata);
- }
-# construct the return hash for non-count data
- my %returnhash=();
- while ($_=each(%cnt)) {
- if ($listitems{$_} eq 'avg') {
- $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0;
- } elsif ($listitems{$_} eq 'cnt') {
- $returnhash{$_}=$cnt{$_};
- } else {
- $returnhash{$_}=$sum{$_};
+# transfer gathered data to returnhash, calculate averages where applicable
+ while (my $cat=each(%cnt)) {
+ if ($listitems{$cat} eq 'avg') {
+ $returnhash{$cat}=int(($sum{$cat}/$cnt{$cat})*100.0+0.5)/100.0;
+ } elsif ($listitems{$cat} eq 'cnt') {
+ $returnhash{$cat}=$cnt{$cat};
+ } else {
+ $returnhash{$cat}=$sum{$cat};
+ }
+ $returnhash{$cat.'_list'}=$concat{$cat};
}
- $returnhash{$_.'_list'}=$concat{$_};
}
# get count
- if (tie(%evaldata,'GDBM_File',
+ if (tie(my %evaldata,'GDBM_File',
$prodir.'/nohist_accesscount.db',&GDBM_READER(),0640)) {
- if (! exists($evaldata{$uri})) {
+ my $escurl=&escape($url);
+ if (! exists($evaldata{$escurl})) {
$returnhash{'count'}='Not Available';
} else {
- $returnhash{'count'}=$evaldata{$uri};
+ $returnhash{'count'}=$evaldata{$escurl};
}
untie %evaldata;
}
return %returnhash;
}
-# ----------------- Code to enable 'find' subroutine listing of the .meta files
-require "find.pl";
-sub wanted {
- (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
- -f _ &&
- /^.*\.meta$/ && !/^.+\.\d+\.[^\.]+\.meta$/ &&
- push(@metalist,"$dir/$_");
-}
-
# --------------- Read loncapa_apache.conf and loncapa.conf and get variables
my $perlvarref=LONCAPA::Configuration::read_conf('loncapa.conf');
my %perlvar=%{$perlvarref};
@@ -227,8 +224,8 @@
my $wwwid=getpwnam('www');
if ($wwwid!=$<) {
- $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
- $subj="LON: $perlvar{'lonHostID'} User ID mismatch";
+ my $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
+ my $subj="LON: $perlvar{'lonHostID'} User ID mismatch";
system("echo 'User ID mismatch. searchcat.pl must be run as user www.' |\
mailto $emailto -s '$subj' > /dev/null");
exit 1;
@@ -313,9 +310,9 @@
my $ref=&metadata($m);
my $m2='/res/'.&declutter($m);
$m2=~s/\.meta$//;
- &dynamicmeta($m2);
if ($ref->{'obsolete'}) { print LOG "obsolete\n"; next; }
if ($ref->{'copyright'} eq 'private') { print LOG "private\n"; next; }
+ &dynamicmeta($m2);
&count($m2);
$delete_sth->execute($m2);
$insert_sth->execute($ref->{'title'},
@@ -473,3 +470,13 @@
return $timestamp;
}
+# ----------------- Code to enable 'find' subroutine listing of the .meta files
+
+no strict "vars";
+
+sub wanted {
+ (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
+ -f _ &&
+ /^.*\.meta$/ && !/^.+\.\d+\.[^\.]+\.meta$/ &&
+ push(@metalist,"$dir/$_");
+}