X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=blobdiff_plain;f=lib%2FZOOM%2FIRSpy.pm;h=0dc97c29d1b265f116a8cc14c25680b05b90d480;hp=96ead57a29e501296651d5066324d5ddcd50291f;hb=HEAD;hpb=d62e0cbe64ec40702f792a45c252585dae147d4c diff --git a/lib/ZOOM/IRSpy.pm b/lib/ZOOM/IRSpy.pm index 96ead57..0dc97c2 100644 --- a/lib/ZOOM/IRSpy.pm +++ b/lib/ZOOM/IRSpy.pm @@ -1,4 +1,3 @@ - package ZOOM::IRSpy; use 5.008; @@ -65,6 +64,7 @@ BEGIN { ZOOM::Log::mask_str("irspy_unhandled"); ZOOM::Log::mask_str("irspy_test"); ZOOM::Log::mask_str("irspy_task"); + ZOOM::Log::mask_str("irspy_data"); } sub new { @@ -77,7 +77,7 @@ sub new { if defined $user; my $conn = new ZOOM::Connection($dbname, 0, @options) - or die "$0: can't connection to IRSpy database 'dbname'"; + or die "$0: can't connect to IRSpy database 'dbname'"; my $xslt = new XML::LibXSLT; @@ -141,7 +141,7 @@ sub var { sub connect_to_registry { my %args = @_; - # XXX: we could also handle her: user, password, elementSetName + # XXX: we could also handle here: user, password, elementSetName my $database = $ENV{IRSpyDbName} || "localhost:8018/IR-Explain---1"; @@ -365,10 +365,13 @@ sub _rewrite_irspy_record { } -my $_reliabilityField = { +my $_specialFields = { reliability => [ reliability => 0, - "Calculated reliability of server", - "e:serverInfo/e:reliability" ], + "Calculated reliability of server", + "e:serverInfo/e:reliability" ], + udb => [ udb => 0, + "Access Name (Unique DB)", + "e:databaseInfo/i:udb" ], }; sub _rewrite_zeerex_record { @@ -377,7 +380,14 @@ sub _rewrite_zeerex_record { # Add reliability score my $xc = irspy_xpath_context($rec); my($nok, $nall, $percent) = calc_reliability_stats($xc); - modify_xml_document($xc, $_reliabilityField, { reliability => $percent }); + modify_xml_document($xc, $_specialFields, { reliability => $percent }); + + my $xpath = $_specialFields->{udb}->[3]; + my $value = $xc->findvalue($xpath); + if (!defined $oldid && (!defined $value || $value eq '')) { + # New record with no explicit UDB: generate a UDB for it. + modify_xml_document($xc, $_specialFields, { udb => _next_udb() }); + } my $p = $conn->package(); $p->option(action => "specialUpdate"); @@ -406,6 +416,19 @@ sub _rewrite_zeerex_record { } +sub _next_udb { + use IndexData::Utils::PersistentCounter; + + my $file = $ENV{IRSPY_COUNTER_FILE} + or die "no IRSPY_COUNTER_FILE in environment"; + my $counter = new IndexData::Utils::PersistentCounter($file) + or die "can't open counter file '$file': $!"; + my $val = $counter->next() + or die "can't get counter value from '$file': $!"; + return "irspy-$val"; +} + + sub _delete_record { my($conn, $id) = @_; @@ -535,6 +558,7 @@ sub check { if ($this->should_skip_test($tname)) { $conn->log("irspy_test", "skipping test '$nextaddr' = $tname due to rule"); + $nskipped += 1; goto NEXT_TEST; } @@ -640,9 +664,9 @@ sub check { my $skipcount = 0; while (defined $node->next() && length($node->next()->address()) >= length($address)) { - $conn->log("irspy_debug", "skipping from '", + $conn->log("irspy_test", "skipping from '", $node->address(), "' to '", - $node->next()->address(), "'"); + $node->next()->address(), "' (", $node->next()->name(), ")"); $node = $node->next(); $skipcount++; }