[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/$_");
+}