X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=blobdiff_plain;f=lib%2FZOOM%2FIRSpy.pm;h=0dc97c29d1b265f116a8cc14c25680b05b90d480;hp=bc37164c40ba707f5c354802ec32e4cec0cf7ca7;hb=HEAD;hpb=b0de35168bbb3c04f389716495fe0b2d6d12bd5b diff --git a/lib/ZOOM/IRSpy.pm b/lib/ZOOM/IRSpy.pm index bc37164..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) = @_; @@ -643,7 +666,7 @@ sub check { length($node->next()->address()) >= length($address)) { $conn->log("irspy_test", "skipping from '", $node->address(), "' to '", - $node->next()->address(), "'"); + $node->next()->address(), "' (", $node->next()->name(), ")"); $node = $node->next(); $skipcount++; }