10 my $sth=$dbh->prepare("update z3950results set active=0");
20 if ((time-$lastrun)>5) {
21 my $sth=$dbh->prepare("select id,term,type,servers from z3950queue order by id");
23 while (my ($id, $term, $type, $servers) = $sth->fetchrow) {
24 if ($forkcounter<12) {
26 $stk=$dbh->prepare("select id,server,startdate,enddate,numrecords,active from z3950results where queryid=$id");
27 ($stk->execute) || (next);
30 my $sti=$dbh->prepare("update z3950queue set done=-1,startdate=$now where id=$id");
33 while (my ($r_id, $r_server,$r_startdate,$r_enddate,$r_numrecords,$active) = $stk->fetchrow) {
35 $serverdone{$r_server}=1;
37 $serverdone{$r_server}=1;
39 $serverdone{$r_server}=-1;
45 if ($type eq 'isbn') {
47 } elsif ($type eq 'title') {
49 } elsif ($type eq 'author') {
51 } elsif ($type eq 'lccn') {
53 } elsif ($type eq 'keyword') {
57 $query="\@attr $attr $term";
60 my $stillprocessing=0;
61 foreach $serverinfo (split(/\s+/, $servers)) {
62 (next) if ($serverdone{$serverinfo} == 1);
63 my $stillprocessing=1;
71 my ($name, $server, $database, $user, $password) = split(/\//, $serverinfo, 5);
72 $server=~/(.*)\:(\d+)/;
75 print "Processing $type=$term at $name $server $database (".($forkcounter+1)." forks)\n";
77 my $q_serverinfo=$dbi->quote($serverinfo);
79 if ($serverdone{$serverinfo}==-1) {
80 my $stj=$dbi->prepare("select id from z3950results where server=$q_serverinfo and queryid=$id");
82 ($resultsid) = $stj->fetchrow;
84 my $stj=$dbi->prepare("select id from z3950results where server=$q_serverinfo and queryid=$id");
86 ($resultsid) = $stj->fetchrow;
88 my $stj=$dbi->prepare("insert into z3950results (server, queryid, startdate) values ($q_serverinfo, $id, $now)");
90 $resultsid=$dbi->{'mysql_insertid'};
93 my $stj=$dbh->prepare("update z3950results set active=1 where id=$resultsid");
99 eval { $conn= new Net::Z3950::Connection($servername, $port, databaseName => $database, user => $user, password => $password); };
106 eval { $conn= new Net::Z3950::Connection($servername, $port, databaseName => $database); };
113 if ($noconnection || $error) {
116 my $rs=$conn->search($query);
118 eval { $rs->option(preferredRecordSyntax => Net::Z3950::RecordSyntax::USMARC);};
123 my $numresults=$rs->size();
127 my $scantimerstart=time();
128 for ($i=1; $i<=(($numresults<80) ? ($numresults) : (80)); $i++) {
129 my $rec=$rs->record($i);
130 my $marcdata=$rec->rawdata();
133 my $scantimerend=time();
135 ($numresults<80) ? ($numrecords=$numresults) : ($numrecords=80);
136 my $elapsed=$scantimerend-$scantimerstart;
138 my $speed=int($numresults/$elapsed*100)/100;
139 print " SPEED: $speed $server done $numrecords\n";
142 my $q_result=$dbi->quote($result);
143 ($q_result) || ($q_result='""');
145 my $task="update z3950results set numrecords=$numresults,numdownloaded=$numrecords,highestseen=0,results=$q_result,enddate=$now where id=$resultsid";
146 my $stj=$dbi->prepare($task);
149 while ($counter<60 && $numrecords<$numresults) {
151 my $stj=$dbi->prepare("select highestseen from z3950results where id=$resultsid");
153 my ($highestseen) = $stj->fetchrow;
154 if ($highestseen>($numrecords-30)) {
156 print " $server rescanning\n";
157 my $scantimerstart=time();
158 for ($i=$numrecords+1; $i<=(($numresults<($numrecords+40)) ? ($numresults) : ($numrecords+40)); $i++) {
159 my $rec=$rs->record($i);
160 my $marcdata=$rec->rawdata();
163 my $scantimerend=time();
164 ($numresults<$numrecords+40) ? ($numrecords=$numresults) : ($numrecords=$numrecords+40);
165 my $elapsed=$scantimerend-$scantimerstart;
167 my $speed=int($numresults/$elapsed*100)/100;
168 print " SPEED: $speed $server done $numrecords\n";
171 my $q_result=$dbi->quote($result);
172 ($q_result) || ($q_result='""');
174 my $task="update z3950results set numdownloaded=$numrecords,results=$q_result where id=$resultsid";
175 my $stj=$dbi->prepare($task);
182 my $stj=$dbi->prepare("update z3950results set active=0 where id=$resultsid");
186 print " $server done.\n";
190 my $code=$conn->errcode();
191 my $msg=$conn->errmsg();
192 my $ai=$conn->addinfo();
199 # if ($msg =~/not yet available/) {
205 } unless ($stillprocessing) {
206 #my $sti=$dbh->prepare("select enddate from z3950queue where id=$id");
208 #my ($enddate) = $sti->fetchrow;
211 # $sti=$dbh->prepare("update z3950queue set done=1,numrecords=$totalrecords,enddate=$now where id=$id");
216 # my $q_serverinfo=$dbh->quote($serverinfo);
217 # my $stj=$dbh->prepare("insert into z3950results (server, queryid, startdate) values ($q_serverinfo, $id, 0)");
232 open (M, "|yaz-client -m yaz-$id.mrc >>yaz.out 2>>yaz.err");
236 ($auth) && ($auth="authentication $auth\n");