X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=lib%2FZOOM%2FIRSpy.pm;h=49e79326a05806200547da8e392d856d963cfa4f;hb=040239e61daad5036e47adfdc86fd9c6901c29e1;hp=de2c56163ba51af55b3a2013d6020bf264e0b0f1;hpb=a71cc3bc7959020502c5a2ba0fe907cd7afaab6c;p=irspy-moved-to-github.git diff --git a/lib/ZOOM/IRSpy.pm b/lib/ZOOM/IRSpy.pm index de2c561..49e7932 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 { @@ -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) = @_; @@ -533,7 +556,9 @@ sub check { $conn->option(current_test_address => $nextaddr); my $tname = $node->name(); if ($this->should_skip_test($tname)) { - warn "skipping test '$tname' due to rule"; + $conn->log("irspy_test", + "skipping test '$nextaddr' = $tname due to rule"); + $nskipped += 1; goto NEXT_TEST; } @@ -639,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++; }