[Koha-cvs] CVS: koha/z3950 processz3950queue,1.2,1.3

Paul POULAIN tipaul at users.sourceforge.net
Tue Apr 29 10:10:17 CEST 2003


Update of /cvsroot/koha/koha/z3950
In directory sc8-pr-cvs1:/tmp/cvs-serv10602/z3950

Modified Files:
	processz3950queue 
Log Message:
z3950 support is coming...
* adding a syntax column in z3950 table = this column will say wether the z3950 must be called with PerferedRecordsyntax => USMARC or PerferedRecordsyntax => UNIMARC. I tried some french UNIMARC z3950 servers, and some only send USMARC, some only UNIMARC, some can answer with both.
Note this is a 1st draft. More to follow (today ? I hope).


Index: processz3950queue
===================================================================
RCS file: /cvsroot/koha/koha/z3950/processz3950queue,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** processz3950queue	22 Apr 2003 12:22:52 -0000	1.2
--- processz3950queue	29 Apr 2003 08:09:42 -0000	1.3
***************
*** 5,9 ****
  use C4::Context;
  use DBI;
! #use strict;
  use C4::Biblio;
  use C4::Output;
--- 5,9 ----
  use C4::Context;
  use DBI;
! use strict;
  use C4::Biblio;
  use C4::Output;
***************
*** 20,24 ****
      }
      # Get real apacheuser from koha.conf or reparsing httpd.conf
!     my $apacheuser='www-data';
      my $uid=0;
      unless ($uid = (getpwnam($apacheuser))[2]) {
--- 20,24 ----
      }
      # Get real apacheuser from koha.conf or reparsing httpd.conf
!     my $apacheuser='paul';
      my $uid=0;
      unless ($uid = (getpwnam($apacheuser))[2]) {
***************
*** 28,33 ****
      $<=$uid;
  }
- 
- 
  my $dbh = C4::Context->dbh;
  
--- 28,31 ----
***************
*** 53,58 ****
  	if ((time-$lastrun)>5) {
  		print "starting loop\n";
! 		if ($checkqueue) {
! 			print "checkqueue=1\n";
  			$checkqueue=0;
  			my $sth=$dbh->prepare("select id,term,type,servers from z3950queue order by id");
--- 51,55 ----
  	if ((time-$lastrun)>5) {
  		print "starting loop\n";
! 		if ($checkqueue) { # everytime a SIG{HUP} is recieved
  			$checkqueue=0;
  			my $sth=$dbh->prepare("select id,term,type,servers from z3950queue order by id");
***************
*** 61,65 ****
  				if ($forkcounter<12) {
  					my $now=time();
! 					$stk=$dbh->prepare("select id,server,startdate,enddate,numrecords,active from z3950results where queryid=$id");
  					($stk->execute) || (next);
  					my %serverdone;
--- 58,62 ----
  				if ($forkcounter<12) {
  					my $now=time();
! 					my $stk=$dbh->prepare("select id,server,startdate,enddate,numrecords,active from z3950results where queryid=$id");
  					($stk->execute) || (next);
  					my %serverdone;
***************
*** 92,99 ****
  					}
  					$term='"'.$term.'"';
! 					$query="\@attr $attr $term";
  					my $totalrecords=0;
  					my $serverinfo;
  					my $stillprocessing=0;
  					foreach $serverinfo (split(/\s+/, $servers)) {
  						(next) if ($serverdone{$serverinfo} == 1);
--- 89,97 ----
  					}
  					$term='"'.$term.'"';
! 					my $query="\@attr $attr $term";
  					my $totalrecords=0;
  					my $serverinfo;
  					my $stillprocessing=0;
+ 					my $globalname;
  					foreach $serverinfo (split(/\s+/, $servers)) {
  						(next) if ($serverdone{$serverinfo} == 1);
***************
*** 102,110 ****
  							$forkcounter++;
  						} else {
- 							#$sth->finish;
- 							#$sti->finish;
- 							#$dbh->disconnect;
  							my $dbi = C4::Context->dbh;
  							my ($name, $server, $database, $user, $password) = split(/\//, $serverinfo, 5);
  							$server=~/(.*)\:(\d+)/;
  							my $servername=$1;
--- 100,106 ----
  							$forkcounter++;
  						} else {
  							my $dbi = C4::Context->dbh;
  							my ($name, $server, $database, $user, $password) = split(/\//, $serverinfo, 5);
+ 							$globalname=$name;
  							$server=~/(.*)\:(\d+)/;
  							my $servername=$1;
***************
*** 118,129 ****
  								$stj->execute;
  								($resultsid) = $stj->fetchrow;
  							} else {
  								my $stj=$dbi->prepare("select id from z3950results where server=$q_serverinfo and queryid=$id");
  								$stj->execute;
  								($resultsid) = $stj->fetchrow;
  								unless ($resultsid) {
! 									my $stj=$dbi->prepare("insert into z3950results (server, queryid, startdate) values ($q_serverinfo, $id, $now)");
  									$stj->execute;
  									$resultsid=$dbi->{'mysql_insertid'};
  								}
  							}
--- 114,128 ----
  								$stj->execute;
  								($resultsid) = $stj->fetchrow;
+ 								$stj->finish;
  							} else {
  								my $stj=$dbi->prepare("select id from z3950results where server=$q_serverinfo and queryid=$id");
  								$stj->execute;
  								($resultsid) = $stj->fetchrow;
+ 								$stj->finish;
  								unless ($resultsid) {
! 									$stj=$dbi->prepare("insert into z3950results (server, queryid, startdate) values ($q_serverinfo, $id, $now)");
  									$stj->execute;
  									$resultsid=$dbi->{'mysql_insertid'};
+ 									$stj->finish;
  								}
  							}
***************
*** 149,162 ****
  							}
  							if ($noconnection || $error) {
  							} else {
! 								eval { $conn->option(preferredRecordSyntax => Net::Z3950::RecordSyntax::USMARC);};
! 								if ($@) {
! 									print "ERROR: $@\n";
! 								} else {
! 									print "Q: $query\n";
  									my $rs=$conn->search($query);
! 									pe();
  									my $numresults=$rs->size();
! 									pe();
  									my $i;
  									my $result='';
--- 148,162 ----
  							}
  							if ($noconnection || $error) {
+ 								warn "no connection at $globalname ";
  							} else {
!  								eval { $conn->option(preferredRecordSyntax => Net::Z3950::RecordSyntax::USMARC);};
!  								if ($@) {
!  									print "$globalname ERROR: $@\n";
!  								} else {
!  									print "Q: $query\n";
  									my $rs=$conn->search($query);
!  									pe();
  									my $numresults=$rs->size();
!  									pe();
  									my $i;
  									my $result='';
***************
*** 164,169 ****
  									for ($i=1; $i<=(($numresults<80) ? ($numresults) : (80)); $i++) {
  										my $rec=$rs->record($i);
! 										my $marcdata=$rec->rawdata();
  										$result.=$marcdata;
  									}
  									my $scantimerend=time();
--- 164,172 ----
  									for ($i=1; $i<=(($numresults<80) ? ($numresults) : (80)); $i++) {
  										my $rec=$rs->record($i);
! 										my $marcdata=$rec->render();
! 										my $marcrecord = MARC::File::USMARC::decode($rec->render());
! 										warn "$globalname ==> ".$marcrecord->as_formatted();
  										$result.=$marcdata;
+ 										my ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported) = ImportBreeding($marcdata,1,"Z3950-$globalname");
  									}
  									my $scantimerend=time();
***************
*** 173,186 ****
  									if ($elapsed) {
  										my $speed=int($numresults/$elapsed*100)/100;
! 										print "  SPEED: $speed  $server done $numrecords\n";
  									}
- 
  									my $q_result=$dbi->quote($result);
  									($q_result) || ($q_result='""');
  									$now=time();
! 									my $task="update z3950results set numrecords=$numresults,numdownloaded=$numrecords,highestseen=0,results=$q_result,enddate=$now where id=$resultsid";
! 									my $stj=$dbi->prepare($task);
! 									$stj->execute;
! 									ImportBreeding($q_result,1,"Z3950");
  									my $counter=0;
  									while ($counter<60 && $numrecords<$numresults) {
--- 176,193 ----
  									if ($elapsed) {
  										my $speed=int($numresults/$elapsed*100)/100;
! 										print "$globalname   SPEED: $speed  $server done $numrecords\n";
  									}
  									my $q_result=$dbi->quote($result);
  									($q_result) || ($q_result='""');
  									$now=time();
! 									if ($numresults >0) {
! 										my $task="update z3950results set numrecords=$numresults,numdownloaded=$numrecords,highestseen=0,results=$q_result,enddate=$now where id=$resultsid";
! 										my $stj=$dbi->prepare($task);
! 										$stj->execute;
! 									} else { # no results...
! 										my $task="update z3950results set numrecords=$numresults,numdownloaded=$numrecords,highestseen=0,results='',enddate=$now where id=$resultsid";
! 										my $stj=$dbi->prepare($task);
! 										$stj->execute;
! 									}
  									my $counter=0;
  									while ($counter<60 && $numrecords<$numresults) {
***************
*** 215,219 ****
  										sleep 5;
  									}
! 								}
  							}
  							# FIXME - There's already a $stj in this scope
--- 222,226 ----
  										sleep 5;
  									}
!  								}
  							}
  							# FIXME - There's already a $stj in this scope
***************
*** 224,228 ****
  							exit;
  sub pe {
! 	return 0;
  	my $code=$conn->errcode();
  	my $msg=$conn->errmsg();
--- 231,235 ----
  							exit;
  sub pe {
! #   	return 0;
  	my $code=$conn->errcode();
  	my $msg=$conn->errmsg();
***************
*** 233,238 ****
  ADDTL: $ai
  EOF
! 							return 0;
! 							}
  						}
  					}
--- 240,245 ----
  ADDTL: $ai
  EOF
! 	return 0;
! }
  						}
  					}
***************
*** 252,285 ****
  }
  
- # sub getrecord {
- #     my $server=shift;
- #     my $base=shift;
- #     my $query=shift;
- #     my $auth=shift;
- #     my $id=shift;
- #     open  (M, "|yaz-client -m yaz-$id.mrc >>yaz.out 2>>yaz.err");
- #     select M;
- #     $|=1;
- #     select STDOUT;
- #     ($auth) && ($auth="authentication $auth\n");
- #     print M << "EOF";
- # $auth\open $server
- # base $base
- # setnames
- # $query
- # s
- # s
- # s
- # s
- # s
- # s
- # s
- # s
- # s
- # s
- # quit
- # EOF
- #     close M;
- # }
  sub reap {
      $forkcounter--;
--- 259,262 ----





More information about the Koha-cvs mailing list