postgres.chart.py: Fix superuser bug.
Resolve issue raised in #2520 that led to non superuser instances attempting to execute queries that require superuser privs.
Facetoe committed
Jul 30, 2017 at 23:47 UTC
eae6659e8a5e585a6f7f9a41c1b82ed963e4a287
1 file changed
+6
-16
python.d/postgres.chart.py
+6
-16
@@ -244,10 +244,10 @@ class Service(SimpleService):
244
self.database_poll = configuration.pop('database_poll', None)
245
self.configuration = configuration
246
self.connection = False
247
- self.is_superuser = False
247
self.data = dict()
248
self.locks_zeroed = dict()
249
self.databases = list()
250
+ self.queries = QUERY_STATS.copy()
251
252
def _connect(self):
253
params = dict(user='postgres',
@@ -294,12 +294,12 @@ class Service(SimpleService):
294
295
def add_additional_queries_(self, is_superuser):
296
if self.index_stats:
297
- QUERY_STATS[QUERIES['INDEX_STATS']] = METRICS['INDEX_STATS']
297
+ self.queries[QUERIES['INDEX_STATS']] = METRICS['INDEX_STATS']
298
if self.table_stats:
299
- QUERY_STATS[QUERIES['TABLE_STATS']] = METRICS['TABLE_STATS']
299
+ self.queries[QUERIES['TABLE_STATS']] = METRICS['TABLE_STATS']
300
if is_superuser:
301
- QUERY_STATS[QUERIES['BGWRITER']] = METRICS['BGWRITER']
302
- QUERY_STATS[QUERIES['ARCHIVE']] = METRICS['ARCHIVE']
301
+ self.queries[QUERIES['BGWRITER']] = METRICS['BGWRITER']
302
+ self.queries[QUERIES['ARCHIVE']] = METRICS['ARCHIVE']
303
304
def create_dynamic_charts_(self):
305
@@ -318,7 +318,7 @@ class Service(SimpleService):
318
cursor = self.connection.cursor(cursor_factory=DictCursor)
319
try:
320
self.data.update(self.locks_zeroed)
321
- for query, metrics in QUERY_STATS.items():
321
+ for query, metrics in self.queries.items():
322
self.query_stats_(cursor, query, metrics)
323
324
except OperationalError:
@@ -398,13 +398,3 @@ def add_database_stat_chart_(order, definitions, name, database_name):
398
definitions[chart_name] = {
399
'options': [name, title + ': ' + database_name, units, 'db ' + database_name, context, chart_type],
400
'lines': create_lines(database_name, chart_template['lines'])}
401
-
402
-
403
-#
404
-# def add_replication_stats(self, cursor):
405
-# cursor.execute(REPLICATION)
406
-# temp = cursor.fetchall()
407
-# for row in temp:
408
-# self.add_gauge_value('Replication/%s' % row.get('client_addr', 'Unknown'),
409
-# 'byte_lag',
410
-# int(row.get('byte_lag', 0)))