X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=blobdiff_plain;f=lib%2FZOOM%2FIRSpy.pm;h=ff85deca30081982311f72aa518df10e35c9c7d4;hp=b190d62b6ffead64330b72d608e53ccb867ec54d;hb=625af60b1b44a55271071b44139ac262f6c1547c;hpb=52bd387fb223d167d52656bbe178a993ad7172a8 diff --git a/lib/ZOOM/IRSpy.pm b/lib/ZOOM/IRSpy.pm index b190d62..ff85dec 100644 --- a/lib/ZOOM/IRSpy.pm +++ b/lib/ZOOM/IRSpy.pm @@ -1,4 +1,4 @@ -# $Id: IRSpy.pm,v 1.52 2006-12-06 11:26:52 mike Exp $ +# $Id: IRSpy.pm,v 1.55 2006-12-18 15:32:32 mike Exp $ package ZOOM::IRSpy; @@ -16,6 +16,7 @@ use Net::Z3950::ZOOM 1.13; # For the ZOOM version-check only use ZOOM::IRSpy::Node; use ZOOM::IRSpy::Connection; use ZOOM::IRSpy::Record; +use ZOOM::IRSpy::Stats; use ZOOM::IRSpy::Utils qw(cql_target); our @ISA = qw(); @@ -41,7 +42,9 @@ ZOOM::IRSpy - Perl extension for discovering and analysing IR services use ZOOM::IRSpy; $spy = new ZOOM::IRSpy("target/string/for/irspy/database"); - print $spy->report_status(); + $spy->targets(@targets); + $spy->initialise(); + $res = $spy->check("Main"); =head1 DESCRIPTION @@ -72,6 +75,10 @@ sub new { or die "$0: can't connection to IRSpy database 'dbname'"; my $xslt = new XML::LibXSLT; + + $xslt->register_function($ZOOM::IRSpy::Utils::IRSPY_NS, 'strcmp', + \&ZOOM::IRSpy::Utils::xslt_strcmp); + my $libxml = new XML::LibXML; my $xsl_doc = $libxml->parse_file($irspy_to_zeerex_xsl); my $irspy_to_zeerex_style = $xslt->parse_stylesheet($xsl_doc); @@ -241,9 +248,16 @@ sub _render_record { sub _irspy_to_zeerex { my ($this, $conn) = @_; my $irspy_doc = $conn->record()->{zeerex}->ownerDocument; + #open FH, '>/tmp/irspy_orig.xml'; + #print FH $irspy_doc->toString(); + #close FH; my %params = (); my $result = $this->{irspy_to_zeerex_style}->transform($irspy_doc, %params); + #open FH, '>/tmp/irspy_transformed.xml'; + #print FH $result->toString(); + #close FH; + return $result->documentElement(); } @@ -320,6 +334,8 @@ sub check { my @conn = @{ $this->{connections} }; + my $nruns = 0; + ROUND_AND_ROUND_WE_GO: while (1) { my @copy_conn = @conn; # avoid alias problems after splice() my $nconn = scalar(@copy_conn); @@ -450,7 +466,7 @@ sub check { } } elsif ($res == ZOOM::IRSpy::Status::TEST_SKIPPED) { - $conn->log("irspy_task", "test skipped during task $task"); + $conn->log("irspy_test", "test skipped during task $task"); $conn->current_task(0); $conn->next_task(0); # I think that's all we need to do @@ -462,23 +478,39 @@ sub check { $this->log("irspy", "exiting main loop"); # Sanity checks: none of the following should ever happen + my $finished = 1; foreach my $conn (@{ $this->{connections} }) { my $test = $conn->option("current_test_address"); my $next = $this->_next_test($test); if (defined $next) { - warn "$conn (in test '$test') has queued test '$next'"; + $this->log("irspy", "$conn (in test '$test') has queued test '$next'"); + $finished = 0; } if (my $task = $conn->current_task()) { - warn "$conn still has an active task $task"; + $this->log("irspy", "$conn still has an active task $task"); + $finished = 0; } if (my $task = $conn->next_task()) { - warn "$conn still has a queued task $task"; + $this->log("irspy", "$conn still has a queued task $task"); + $finished = 0; } if (!$conn->is_idle()) { - warn "$conn still has ZOOM-C level tasks queued: see below"; + $this->log("irspy", "$conn still has ZOOM-C level tasks queued: see below"); + $finished = 0; } if (!$conn->option("rewrote_record")) { - warn "$conn did not rewrite its ZeeRex record"; + $this->log("irspy", "$conn did not rewrite its ZeeRex record"); + $finished = 0; + } + } + + # This really shouldn't be necessary, but it's belt and braces + if (!$finished) { + if (++$nruns < 10) { + $this->log("irspy", "back into main loop, ${nruns}th time"); + goto ROUND_AND_ROUND_WE_GO; + } else { + $this->log("irspy", "bailing after $nruns main-loop runs"); } }