summaryrefslogtreecommitdiffstats
path: root/python.d/postgres.chart.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--python.d/postgres.chart.py33
1 files changed, 24 insertions, 9 deletions
diff --git a/python.d/postgres.chart.py b/python.d/postgres.chart.py
index b17565e9d..ef69a9c77 100644
--- a/python.d/postgres.chart.py
+++ b/python.d/postgres.chart.py
@@ -13,11 +13,11 @@ try:
except ImportError:
PSYCOPG2 = False
-from base import SimpleService
+from bases.FrameworkServices.SimpleService import SimpleService
# default module values
update_every = 1
-priority = 90000
+priority = 60000
retries = 60
METRICS = dict(
@@ -62,7 +62,7 @@ SELECT
CAST(COALESCE(SUM(CAST(archive_file ~ $r$\.ready$$r$ as INT)), 0) AS INT) AS ready_count,
CAST(COALESCE(SUM(CAST(archive_file ~ $r$\.done$$r$ AS INT)), 0) AS INT) AS done_count
FROM
- pg_catalog.pg_ls_dir('pg_xlog/archive_status') AS archive_files (archive_file);
+ pg_catalog.pg_ls_dir('{0}/archive_status') AS archive_files (archive_file);
""",
BACKENDS="""
SELECT
@@ -125,7 +125,11 @@ AND NOT datname ~* '^template\d+';
""",
IF_SUPERUSER="""
SELECT current_setting('is_superuser') = 'on' AS is_superuser;
- """)
+ """,
+ DETECT_SERVER_VERSION="""
+SHOW server_version_num;
+ """
+)
QUERY_STATS = {
@@ -221,7 +225,7 @@ CHARTS = {
class Service(SimpleService):
def __init__(self, configuration=None, name=None):
- super(self.__class__, self).__init__(configuration=configuration, name=name)
+ SimpleService.__init__(self, configuration=configuration, name=name)
self.order = ORDER[:]
self.definitions = deepcopy(CHARTS)
self.table_stats = configuration.pop('table_stats', False)
@@ -229,6 +233,7 @@ class Service(SimpleService):
self.database_poll = configuration.pop('database_poll', None)
self.configuration = configuration
self.connection = False
+ self.server_version = None
self.data = dict()
self.locks_zeroed = dict()
self.databases = list()
@@ -257,17 +262,20 @@ class Service(SimpleService):
return False
result, error = self._connect()
if not result:
- conf = dict([(k, (lambda k, v: v if k != 'password' else '*****')(k, v)) for k, v in self.configuration.items()])
+ conf = dict((k, (lambda k, v: v if k != 'password' else '*****')(k, v))
+ for k, v in self.configuration.items())
self.error('Failed to connect to %s. Error: %s' % (str(conf), error))
return False
try:
cursor = self.connection.cursor()
self.databases = discover_databases_(cursor, QUERIES['FIND_DATABASES'])
is_superuser = check_if_superuser_(cursor, QUERIES['IF_SUPERUSER'])
+ self.server_version = detect_server_version(cursor, QUERIES['DETECT_SERVER_VERSION'])
cursor.close()
- if (self.database_poll and isinstance(self.database_poll, str)):
- self.databases = [dbase for dbase in self.databases if dbase in self.database_poll.split()] or self.databases
+ if self.database_poll and isinstance(self.database_poll, str):
+ self.databases = [dbase for dbase in self.databases if dbase in self.database_poll.split()]\
+ or self.databases
self.locks_zeroed = populate_lock_types(self.databases)
self.add_additional_queries_(is_superuser)
@@ -284,7 +292,11 @@ class Service(SimpleService):
self.queries[QUERIES['TABLE_STATS']] = METRICS['TABLE_STATS']
if is_superuser:
self.queries[QUERIES['BGWRITER']] = METRICS['BGWRITER']
- self.queries[QUERIES['ARCHIVE']] = METRICS['ARCHIVE']
+ if self.server_version >= 100000:
+ wal_dir_name = 'pg_wal'
+ else:
+ wal_dir_name = 'pg_xlog'
+ self.queries[QUERIES['ARCHIVE'].format(wal_dir_name)] = METRICS['ARCHIVE']
def create_dynamic_charts_(self):
@@ -340,6 +352,9 @@ def check_if_superuser_(cursor, query):
cursor.execute(query)
return cursor.fetchone()[0]
+def detect_server_version(cursor, query):
+ cursor.execute(query)
+ return int(cursor.fetchone()[0])
def populate_lock_types(databases):
result = dict()