From f9421938ec6be6a023fd72b75f052af9c48ae606 Mon Sep 17 00:00:00 2001 From: Jason Boyer Date: Sun, 6 Sep 2015 12:58:49 -0400 Subject: [PATCH] LP1492793: Support Application Name Postgres Option If app_settings/database/application_name is defined, connections by that service will have the application_name postgres option set, allowing log analyzers to associate queries and services. To test: [1] Apply the patch and restart OpenSRF services. [2] Query the pg_stat_activity table in the PostgreSQL database; the application_name column should now be populated with values like 'open-ils.cstore' or 'open-ils.storage' that indicate which Evergreen service holds the database connection. Signed-off-by: Jason Boyer Signed-off-by: Galen Charlton Signed-off-by: Mike Rylander --- Open-ILS/examples/opensrf.xml.example | 7 +++++++ Open-ILS/src/c-apps/oils_sql.c | 13 ++++++++----- .../lib/OpenILS/Application/Storage/Driver/Pg.pm | 10 ++++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Open-ILS/examples/opensrf.xml.example b/Open-ILS/examples/opensrf.xml.example index 59f737a921..7b6484cbcb 100644 --- a/Open-ILS/examples/opensrf.xml.example +++ b/Open-ILS/examples/opensrf.xml.example @@ -159,6 +159,7 @@ vim:et:ts=4:sw=4: evergreen postgres postgres + open-ils.reporter Pg @@ -167,6 +168,7 @@ vim:et:ts=4:sw=4: evergreen postgres postgres + open-ils.reporter-state @@ -880,6 +882,7 @@ vim:et:ts=4:sw=4: postgres evergreen UTF-8 + open-ils.storage @@ -909,6 +912,7 @@ vim:et:ts=4:sw=4: postgres evergreen UTF-8 + open-ils.cstore @@ -943,6 +947,7 @@ vim:et:ts=4:sw=4: postgres evergreen UTF-8 + open-ils.pcrud @@ -970,6 +975,7 @@ vim:et:ts=4:sw=4: postgres evergreen UTF-8 + open-ils.qstore @@ -1055,6 +1061,7 @@ vim:et:ts=4:sw=4: postgres evergreen UTF-8 + open-ils.reporter-store diff --git a/Open-ILS/src/c-apps/oils_sql.c b/Open-ILS/src/c-apps/oils_sql.c index 8169f42d5f..bacb867553 100644 --- a/Open-ILS/src/c-apps/oils_sql.c +++ b/Open-ILS/src/c-apps/oils_sql.c @@ -167,6 +167,7 @@ dbi_conn oilsConnectDB( const char* mod_name ) { char* port = osrf_settings_host_value( "/apps/%s/app_settings/database/port", mod_name ); char* db = osrf_settings_host_value( "/apps/%s/app_settings/database/db", mod_name ); char* pw = osrf_settings_host_value( "/apps/%s/app_settings/database/pw", mod_name ); + char* pg_app = osrf_settings_host_value( "/apps/%s/app_settings/database/application_name", mod_name ); osrfLogDebug( OSRF_LOG_MARK, "Attempting to load the database driver [%s]...", driver ); dbi_conn handle = dbi_conn_new( driver ); @@ -180,17 +181,19 @@ dbi_conn oilsConnectDB( const char* mod_name ) { osrfLogInfo(OSRF_LOG_MARK, "%s connecting to database. host=%s, " "port=%s, user=%s, db=%s", mod_name, host, port, user, db ); - if( host ) dbi_conn_set_option( handle, "host", host ); - if( port ) dbi_conn_set_option_numeric( handle, "port", atoi( port )); - if( user ) dbi_conn_set_option( handle, "username", user ); - if( pw ) dbi_conn_set_option( handle, "password", pw ); - if( db ) dbi_conn_set_option( handle, "dbname", db ); + if( host ) dbi_conn_set_option( handle, "host", host ); + if( port ) dbi_conn_set_option_numeric( handle, "port", atoi( port )); + if( user ) dbi_conn_set_option( handle, "username", user ); + if( pw ) dbi_conn_set_option( handle, "password", pw ); + if( db ) dbi_conn_set_option( handle, "dbname", db ); + if( pg_app ) dbi_conn_set_option( handle, "pgsql_application_name", pg_app ); free( user ); free( host ); free( port ); free( db ); free( pw ); + free( pg_app ); if( dbi_conn_connect( handle ) < 0 ) { sleep( 1 ); diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg.pm index a3e360bc9a..3a645953a4 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg.pm @@ -71,7 +71,8 @@ "dbi:Pg:". "host=$$master{host};". "port=$$master{port};". - "dbname=$$master{db}", + "dbname=$$master{db}". + ($$master{application_name} ? ";application_name='$$master{application_name}'": ""), $$master{user}, $$master{pw}, \%attrs) @@ -80,7 +81,8 @@ "dbi:Pg:". "host=$$master{host};". "port=$$master{port};". - "dbname=$$master{db}", + "dbname=$$master{db}". + ($$master{application_name} ? ";application_name='$$master{application_name}'": ""), $$master{user}, $$master{pw}, \%attrs) } @@ -100,8 +102,8 @@ for my $db (@$_db_params) { try { - push @slave_dbs, DBI->connect("dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}",$$db{user},$$db{pw}, \%attrs) - || do { sleep(1); DBI->connect("dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}",$$db{user},$$db{pw}, \%attrs) } + push @slave_dbs, DBI->connect("dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}". ($$db{application_name} ? ";application_name='$$db{application_name}'" : ""),$$db{user},$$db{pw}, \%attrs) + || do { sleep(1); DBI->connect("dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}". ($$db{application_name} ? ";application_name='$$db{application_name}'" : ""),$$db{user},$$db{pw}, \%attrs) } || throw OpenSRF::EX::ERROR ("Couldn't connect to $$db{db}". " on $$db{host}::$$db{port}". -- 2.43.2