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: <database><name> is a deprecated setting for database name. For future compatibility, you should use <database><db> 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: <database><name> is a deprecated setting for database name. For future compatibility, you should use <database><db> 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' );
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);
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');
# 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;
build_html("$output_dir/report-data.html", $r);
- $dbh->begin_work;
+ $state_dbh->begin_work;
if ($r->{report}->{recur} ) {
my $sql = <<' SQL';
VALUES ( ?, ?, ?, ?::TIMESTAMPTZ + ?, ?, ?, ?, ?, ?, ?, ? );
SQL
- $dbh->do(
+ $state_dbh->do(
$sql,
{},
$r->{report}->{id},
);
}
- $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
} 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(),
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
};
- $dbh->disconnect;
+ $state_dbh->disconnect;
+ $data_dbh->disconnect;
exit; # leave the child
}