Merge branch 'nigiri'
[irspy-moved-to-github.git] / lib / ZOOM / IRSpy / Utils.pm
index b1d2331..dfe4e99 100644 (file)
@@ -20,7 +20,9 @@ our @EXPORT_OK = qw(utf8param
                    irspy_identifier2target
                    modify_xml_document
                    bib1_access_point
-                   render_record);
+                   render_record
+                   calc_reliability_string
+                   calc_reliability_stats);
 
 use XML::LibXML;
 use XML::LibXML::XPathContext;
@@ -275,6 +277,11 @@ sub _irspy_identifier2target {
 }
 
 
+# Modifies the XML document for which $xc is an XPath context by
+# inserting or replacing the values specified in the hash %$data.  The
+# keys are fieldnames, which are looked up in the register
+# $fieldsByKey to determine, among other things, what their XPath is.
+
 sub modify_xml_document {
     my($xc, $fieldsByKey, $data) = @_;
 
@@ -772,4 +779,26 @@ sub render_record {
 }
 
 
+sub calc_reliability_string {
+    my($xc) = @_;
+
+    my($nok, $nall, $percent) = calc_reliability_stats($xc);
+    return "[untested]" if $nall == 0;
+    return "$nok/$nall = " . $percent . "%";
+}
+
+
+sub calc_reliability_stats {
+    my($xc) = @_;
+
+    my @allpings = $xc->findnodes("i:status/i:probe");
+    my $nall = @allpings;
+    return (0, 0, 0) if $nall == 0;
+    my @okpings = $xc->findnodes('i:status/i:probe[@ok = "1"]');
+    my $nok = @okpings;
+    my $percent = int(100*$nok/$nall);
+    return ($nok, $nall, $percent);
+}
+
+
 1;