From: miker Date: Thu, 12 Mar 2009 01:13:42 +0000 (+0000) Subject: teach clark how to use a separate state_store db connection for recording report... X-Git-Tag: sprint4-merge-nov22~10545 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=ffb745b956ac0c0e3ff9aa6037851f5e14216d6e;p=working%2FEvergreen.git teach clark how to use a separate state_store db connection for recording report metadata git-svn-id: svn://svn.open-ils.org/ILS/trunk@12488 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/examples/opensrf.xml.example b/Open-ILS/examples/opensrf.xml.example index 2fb162e89b..7ef6f87efb 100644 --- a/Open-ILS/examples/opensrf.xml.example +++ b/Open-ILS/examples/opensrf.xml.example @@ -108,6 +108,14 @@ vim:et:ts=4:sw=4: postgres postgres + + Pg + localhost + 5432 + evergreen + postgres + postgres + LOCALSTATEDIR/web/reporter diff --git a/Open-ILS/src/reporter/clark-kent.pl b/Open-ILS/src/reporter/clark-kent.pl index 55715ef3aa..8e686fb086 100755 --- a/Open-ILS/src/reporter/clark-kent.pl +++ b/Open-ILS/src/reporter/clark-kent.pl @@ -45,20 +45,38 @@ if (-e $lockfile) { OpenSRF::System->bootstrap_client( config_file => $config ); -# XXX Get this stuff from the settings server +my (%data_db, %state_db); + my $sc = OpenSRF::Utils::SettingsClient->new; -my $db_driver = $sc->config_value( reporter => setup => database => 'driver' ); -my $db_host = $sc->config_value( reporter => setup => database => 'host' ); -my $db_port = $sc->config_value( reporter => setup => database => 'port' ); -my $db_name = $sc->config_value( reporter => setup => database => 'db' ); -if (!$db_name) { - $db_name = $sc->config_value( reporter => setup => database => 'name' ); - print STDERR "WARN: is a deprecated setting for database name. For future compatibility, you should use instead." if $db_name; + +$data_db{db_driver} = $sc->config_value( reporter => setup => database => 'driver' ); +$data_db{db_host} = $sc->config_value( reporter => setup => database => 'host' ); +$data_db{db_port} = $sc->config_value( reporter => setup => database => 'port' ); +$data_db{db_name} = $sc->config_value( reporter => setup => database => 'db' ); +if (!$data_db{db_name}) { + $data_db{db_name} = $sc->config_value( reporter => setup => database => 'name' ); + print STDERR "WARN: is a deprecated setting for database name. For future compatibility, you should use instead." if $data_db{db_name}; } -my $db_user = $sc->config_value( reporter => setup => database => 'user' ); -my $db_pw = $sc->config_value( reporter => setup => database => 'pw' ); +$data_db{db_user} = $sc->config_value( reporter => setup => database => 'user' ); +$data_db{db_pw} = $sc->config_value( reporter => setup => database => 'pw' ); + + + +# Fetch the optional state database connection info +$state_db{db_driver} = $sc->config_value( reporter => setup => state_store => 'driver' ) || $data_db{db_driver}; +$state_db{db_host} = $sc->config_value( reporter => setup => state_store => 'host' ) || $data_db{db_host}; +$state_db{db_port} = $sc->config_value( reporter => setup => state_store => 'port' ) || $data_db{db_port}; +$state_db{db_name} = $sc->config_value( reporter => setup => state_store => 'db' ); +if (!$state_db{db_name}) { + $state_db{db_name} = $sc->config_value( reporter => setup => state_store => 'name' ) || $data_db{db_name}; +} +$state_db{db_user} = $sc->config_value( reporter => setup => state_store => 'user' ) || $data_db{db_user}; +$state_db{db_pw} = $sc->config_value( reporter => setup => state_store => 'pw' ) || $data_db{db_pw}; + -die "Unable to retrieve database connection information from the settings server" unless ($db_driver && $db_host && $db_port && $db_name && $db_user); +die "Unable to retrieve database connection information from the settings server" + unless ($state_db{db_driver} && $state_db{db_host} && $state_db{db_port} && $state_db{db_name} && $state_db{db_user} && + $data_db{db_driver} && $data_db{db_host} && $data_db{db_port} && $data_db{db_name} && $data_db{db_user}); my $email_server = $sc->config_value( email_notify => 'smtp_server' ); my $email_sender = $sc->config_value( email_notify => 'sender_address' ); @@ -69,7 +87,8 @@ my $output_base = $sc->config_value( reporter => setup => files => 'output_base' my $base_uri = $sc->config_value( reporter => setup => 'base_uri' ); -my $dsn = "dbi:" . $db_driver . ":dbname=" . $db_name .';host=' . $db_host . ';port=' . $db_port; +my $state_dsn = "dbi:" . $state_db{db_driver} . ":dbname=" . $state_db{db_name} .';host=' . $state_db{db_host} . ';port=' . $state_db{db_port}; +my $data_dsn = "dbi:" . $data_db{db_driver} . ":dbname=" . $data_db{db_name} .';host=' . $data_db{db_host} . ';port=' . $data_db{db_port}; my ($dbh,$running,$sth,@reports,$run, $current_time); @@ -83,7 +102,7 @@ if ($daemon) { DAEMON: -$dbh = DBI->connect($dsn,$db_user,$db_pw, {AutoCommit => 1, pg_enable_utf8 => 1, RaiseError => 1}); +$dbh = DBI->connect($state_dsn,$state_db{db_user},$state_db{db_pw}, {AutoCommit => 1, pg_enable_utf8 => 1, RaiseError => 1}); $current_time = DateTime->from_epoch( epoch => time() )->strftime('%FT%T%z'); @@ -156,17 +175,18 @@ for my $r ( @reports ) { # This is the child (runner) process; daemonize("Clark Kent reporting: $r->{report}->{name}"); - $dbh = DBI->connect($dsn,$db_user,$db_pw, {AutoCommit => 1, pg_enable_utf8 => 1, RaiseError => 1}); + my $state_dbh = DBI->connect($state_dsn,$state_db{db_user},$state_db{db_pw}, {AutoCommit => 1, pg_enable_utf8 => 1, RaiseError => 1}); + my $data_dbh = DBI->connect($data_dsn,$data_db{db_user},$data_db{db_pw}, {AutoCommit => 1, pg_enable_utf8 => 1, RaiseError => 1}); try { - $dbh->do(<<' SQL',{}, $r->{id}); + $state_dbh->do(<<' SQL',{}, $r->{id}); UPDATE reporter.schedule SET start_time = now() WHERE id = ?; SQL $logger->debug('Report SQL: ' . $r->{resultset}->toSQL); - $sth = $dbh->prepare($r->{resultset}->toSQL); + $sth = $data_dbh->prepare($r->{resultset}->toSQL); $sth->execute; $r->{data} = $sth->fetchall_arrayref; @@ -210,7 +230,7 @@ for my $r ( @reports ) { build_html("$output_dir/report-data.html", $r); - $dbh->begin_work; + $state_dbh->begin_work; if ($r->{report}->{recur} ) { my $sql = <<' SQL'; @@ -229,7 +249,7 @@ for my $r ( @reports ) { VALUES ( ?, ?, ?, ?::TIMESTAMPTZ + ?, ?, ?, ?, ?, ?, ?, ? ); SQL - $dbh->do( + $state_dbh->do( $sql, {}, $r->{report}->{id}, @@ -247,15 +267,15 @@ for my $r ( @reports ) { ); } - $dbh->do(<<' SQL',{}, $r->{id}); + $state_dbh->do(<<' SQL',{}, $r->{id}); UPDATE reporter.schedule SET complete_time = now() WHERE id = ?; SQL - $dbh->commit; + $state_dbh->commit; - my $new_r = $dbh->selectrow_hashref(<<" SQL", {}, $r->{id}); + my $new_r = $state_dbh->selectrow_hashref(<<" SQL", {}, $r->{id}); SELECT * FROM reporter.schedule WHERE id = ?; SQL @@ -269,10 +289,10 @@ for my $r ( @reports ) { } otherwise { my $e = shift; $r->{error_text} = ''.$e; - if (!$dbh->{AutoCommit}) { - $dbh->rollback; + if (!$state_dbh->{AutoCommit}) { + $state_dbh->rollback; } - $dbh->do(<<' SQL',{}, $e, $r->{id}); + $state_dbh->do(<<' SQL',{}, $e, $r->{id}); UPDATE reporter.schedule SET error_text = ?, complete_time = now(), @@ -280,7 +300,7 @@ for my $r ( @reports ) { WHERE id = ?; SQL - my $new_r = $dbh->selectrow_hashref(<<" SQL", {}, $r->{id}); + my $new_r = $state_dbh->selectrow_hashref(<<" SQL", {}, $r->{id}); SELECT * FROM reporter.schedule WHERE id = ?; SQL @@ -293,7 +313,8 @@ for my $r ( @reports ) { }; - $dbh->disconnect; + $state_dbh->disconnect; + $data_dbh->disconnect; exit; # leave the child }