[RT17143] First go at date1 cleanup settings
authorLiam Whalen <liam.whalen@bc.libraries.coop>
Wed, 30 Sep 2015 18:26:35 +0000 (11:26 -0700)
committerLiam Whalen <liam.whalen@bc.libraries.coop>
Wed, 30 Sep 2015 18:26:35 +0000 (11:26 -0700)
This commit adds the ability to check the database for connectivity.
This will allow us to query the database for records with bad date1
values.  Once we have those record ids, we will be able use the Perl
EG code to update the MARC with new date1 values.

data_cleanup/date1/date1_cleanup.pl [new file with mode: 0644]

diff --git a/data_cleanup/date1/date1_cleanup.pl b/data_cleanup/date1/date1_cleanup.pl
new file mode 100644 (file)
index 0000000..de88edd
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+# vim:et:ts=4:
+use strict;
+use warnings;
+
+use DBI;
+use OpenSRF::Utils::Config;
+use Getopt::Long;
+use Net::Domain;
+use XML::LibXML
+use XML::LibXML::XPathContext
+
+my ($gather, $hostname, $core_config, $tmpdir) =
+    (0, Net::Domain::hostfqdn(), '/srv/openils/conf/opensrf_core.xml', '/tmp/');
+
+GetOptions(
+    'gather' => \$gather,
+    'hostname=s' => \$hostname,
+    'config_file=s' => \$core_config,
+    'tempdir=s' => \$tmpdir,
+);
+
+(my $conf_dir = $core_config) =~ s#(.*)/.*#$1#;
+OpenSRF::Utils::Config->load(config_file => $core_config);
+my $conf = OpenSRF::Utils::Config->current;
+my $settings_config = $conf->bootstrap->settings_config;
+
+my $xmlparser = XML::LibXML->new();
+my $confxml = $xmlparser->parse_file($core_config);
+my $confxpc = XML::LibXML::XPathContext->new($confxml);
+my $osrfxml = $xmlparser->parse_file($settings_config);
+
+sub check_all_database_connections {
+    print "\nChecking database connections\n";
+    # Check database connections
+    my @databases = $osrfxml->findnodes('//database');
+
+    # If we have no database connections, this is probably the OpenSRF version
+    # of opensrf.xml
+    if (!@databases) {
+        my $de = "* WARNING: There are no database connections defined in " .
+            "opensrf.xml. These are defined in services such as " .
+            "open-ils.cstore and open-ils.reporter. Please ensure that " .
+            "your opensrf_core.xml and opensrf.xml configuration files " .
+            "are based on the examples shipped with Evergreen instead of " .
+            "OpenSRF.\n";
+        $output .= $de;
+        warn $de;
+    }
+
+    foreach my $database (@databases) {
+        unless ($database->parentNode->parentNode->localname eq 'open-ils.storage') {
+            next;
+        }
+
+        my $db_name = $database->findvalue("./db");    
+        if (!$db_name) {
+            $db_name = $database->findvalue("./name");    
+        }
+        my $db_host = $database->findvalue("./host");    
+        my $db_port = $database->findvalue("./port");    
+        my $db_user = $database->findvalue("./user");    
+        my $db_pw = $database->findvalue("./pw");    
+
+        my $osrf_xpath;
+        foreach my $node ($database->findnodes("ancestor::node()")) {
+            next unless $node->nodeType == XML::LibXML::XML_ELEMENT_NODE;
+            $osrf_xpath .= "/" . $node->nodeName;
+        }
+        $output .= test_db_connect($db_name, $db_host, $db_port, $db_user, $db_pw, $osrf_xpath);
+    }
+}
+
+sub test_db_connect {
+    my ($db_name, $db_host, $db_port, $db_user, $db_pw, $osrf_xpath) = @_;
+
+    my $dsn = "dbi:Pg:dbname=$db_name;host=$db_host;port=$db_port";
+    my $de = undef;
+    my ($dbh, $encoding, $langs);
+    $dbh = DBI->connect($dsn, $db_user, $db_pw);
+
+    # Short-circuit if we didn't connect successfully
+    unless($dbh) {
+        $de = "* $osrf_xpath :: Unable to connect to database $dsn, user=$db_user, password=$db_pw\n";
+        warn "* $osrf_xpath :: Unable to connect to database $dsn, user=$db_user, password=$db_pw\n";
+        return $de;
+    }
+
+    $dbh->disconnect;
+    print "* $osrf_xpath :: Successfully connected to database $dsn\n" unless ($de);
+}