From 6c764d7e2944262ef10cc86828cfb69c7c837704 Mon Sep 17 00:00:00 2001 From: tonnesen Date: Fri, 2 Nov 2001 21:40:01 +0000 Subject: [PATCH] Daemon to process the queue of pending Z39.50 searches. I still need to come up with a way for this process to get launched. Looks like Koha might need its first init script. :) --- acqui.simple/processz3950queue | 102 +++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100755 acqui.simple/processz3950queue diff --git a/acqui.simple/processz3950queue b/acqui.simple/processz3950queue new file mode 100755 index 0000000000..51b3feabb7 --- /dev/null +++ b/acqui.simple/processz3950queue @@ -0,0 +1,102 @@ +#!/usr/bin/perl +use C4::Database; +use DBI; +#use strict; +use C4::Acquisitions; +use C4::Output; +my $dbh=C4Connect; + + + +while (1) { + my $sth=$dbh->prepare("select id,term,type,servers from z3950queue where + isnull(done) || done=-1"); + $sth->execute; + while (my ($id, $term, $type, $servers) = $sth->fetchrow) { + my $now=time(); + my $sti=$dbh->prepare("update z3950queue set done=-1,startdate=$now where id=$id"); + $sti->execute; + my $attr=''; + if ($type eq 'isbn') { + $attr='1=7'; + } elsif ($type eq 'title') { + $attr='1=4'; + } elsif ($type eq 'lccn') { + $attr='1=9'; + } + $term='"'.$term.'"'; + $query="f \@attr $attr $term"; + my $totalrecords=0; + my $serverinfo; + foreach $serverinfo (split(/\s+/, $servers)) { + my ($name, $server, $database, $auth) = split(/\//, $serverinfo, 4); + ($auth eq '/') && ($auth=''); + print "Processing $type=$term at $name $server $database $auth\n"; + $now=time(); + my $q_serverinfo=$dbh->quote($serverinfo); + my $sti=$dbh->prepare("insert into z3950results (server, queryid, startdate) values ($q_serverinfo, $id, $now)"); + $sti->execute; + my $resultsid=$dbh->{'mysql_insertid'}; + getrecord($server, $database, $query, $auth); + my $result=`cat yaz.mrc`; + unlink ('yaz.mrc'); + my $splitchar=chr(29); + my @records=split(/$splitchar/, $result); + my $numrecords=$#records+1; + $totalrecords+=$numrecords; + my $q_result=$dbh->quote($result); + ($q_result) || ($q_result='""'); + $now=time(); + $sti=$dbh->prepare("update z3950results set numrecords=$numrecords,results=$q_result,enddate=$now where id=$resultsid"); + $sti->execute; + } + $sti=$dbh->prepare("update z3950queue set done=1,numrecords=$totalrecords,enddate=$now where id=$id"); + $sti->execute; + } + sleep 15; +} + +sub getrecord { + my $server=shift; + my $base=shift; + my $query=shift; + my $auth=shift; + open (M, "|yaz-client -m yaz.mrc >>yaz.out 2>>yaz.err"); + select M; + $|=1; + select STDOUT; + ($auth) && ($auth="authentication $auth\n"); + print << "EOF"; +$auth\open $server +base $base +$query +s +s +s +s +s +s +s +s +s +s +quit +EOF + print M << "EOF"; +$auth\open $server +base $base +$query +s +s +s +s +s +s +s +s +s +s +quit +EOF + close M; +} -- 2.39.5