Skip to content

Commit e2cc7ff

Browse files
committed
fix: fixed extension monitoring without mamonsu user
1 parent 6a1235d commit e2cc7ff

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

mamonsu/plugins/pgsql/driver/pool.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class Pool(object):
3232
"select sum(1) * (current_setting('block_size')::int8) as size, "
3333
" sum(case when usagecount > 1 then 1 else 0 end) * (current_setting('block_size')::int8) as twice_used, "
3434
" sum(case isdirty when true then 1 else 0 end) * (current_setting('block_size')::int8) as dirty "
35-
" from mamonsu.pg_buffercache",
35+
" from {0}.pg_buffercache",
3636
'select size, twice_used, dirty from mamonsu.buffer_cache()'
3737
),
3838
'wal_lag_lsn': (
@@ -56,6 +56,7 @@ def __init__(self, params=None):
5656
'server_version': {'storage': {}},
5757
'bootstrap': {'storage': {}, 'counter': 0, 'cache': 10, 'version': False},
5858
'recovery': {'storage': {}, 'counter': 0, 'cache': 10},
59+
'extension_schema': {'pg_buffercache': {}},
5960
'pgpro': {'storage': {}},
6061
'pgproee': {'storage': {}}
6162
}
@@ -167,6 +168,16 @@ def extension_installed(self, ext, db=None):
167168
'where extname = \'{0}\''.format(ext), db)
168169
return (int(result[0][0])) == 1
169170

171+
def extension_schema(self, extension, db=None):
172+
db = self._normalize_db(db)
173+
if db in self._cache['extension_schema'][extension]:
174+
return self._cache['extension_schema'][extension][db]
175+
self._cache['extension_schema'][extension][db] = self.query(
176+
"select n.nspname from pg_extension e "
177+
"join pg_namespace n "
178+
"on e.extnamespace = n.oid where e.extname = '{0}'".format(extension), db)[0][0]
179+
return self._cache['extension_schema'][extension][db]
180+
170181
def databases(self):
171182
result, databases = self.query(
172183
'select datname from '
@@ -176,24 +187,25 @@ def databases(self):
176187
databases.append(row[0])
177188
return databases
178189

179-
def fill_query_params(self, query, params):
180-
if params:
181-
return query.format(*params)
182-
else:
183-
return query
190+
def fill_query_params(self, query, params, extension=None, db=None):
191+
if not params:
192+
params = []
193+
if extension:
194+
params.append(self.extension_schema(extension, db))
195+
return query.format(*params)
184196

185-
def get_sql(self, typ, args=None, db=None):
197+
def get_sql(self, typ, args=None, extension=None, db=None):
186198
db = self._normalize_db(db)
187199
if typ not in self.SQL:
188200
raise LookupError("Unknown SQL type: '{0}'".format(typ))
189201
result = self.SQL[typ]
190202
if self.is_bootstraped(db):
191-
return self.fill_query_params(result[1], args)
203+
return self.fill_query_params(result[1], args, extension, db)
192204
else:
193-
return self.fill_query_params(result[0], args)
205+
return self.fill_query_params(result[0], args, extension, db)
194206

195-
def run_sql_type(self, typ, args=None, db=None):
196-
return self.query(self.get_sql(typ, args, db), db)
207+
def run_sql_type(self, typ, args=None, extension=None, db=None):
208+
return self.query(self.get_sql(typ, args, extension, db), db)
197209

198210
def _normalize_db(self, db=None):
199211
if db is None:

mamonsu/plugins/pgsql/pg_buffercache.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
class PgBufferCache(Plugin):
99
AgentPluginType = 'pg'
1010
key = 'pgsql.buffers{0}'
11-
query_agent_size = "select sum(1) * (current_setting('block_size')::int8) as size from mamonsu.pg_buffercache;"
11+
query_agent_size = "select sum(1) * (current_setting('block_size')::int8) as size from {0}.pg_buffercache;"
1212
# for zabbix
1313
query_agent_twice_used = "select " \
1414
"sum(case when usagecount > 1 then 1 else 0 end) * (current_setting('block_size')::int8) as twice_used " \
15-
"from mamonsu.pg_buffercache;" # for zabbix
15+
"from {0}.pg_buffercache;" # for zabbix
1616
query_agent_dirty = "select " \
1717
"sum(case isdirty when true then 1 else 0 end) * (current_setting('block_size')::int8) as dirty " \
18-
"from mamonsu.pg_buffercache;" # for zabbix
18+
"from {0}.pg_buffercache;" # for zabbix
1919
query = [query_agent_size, query_agent_twice_used, query_agent_dirty]
2020
Items = [
2121
# key, name, color
@@ -27,7 +27,7 @@ class PgBufferCache(Plugin):
2727
def run(self, zbx):
2828
if not self.extension_installed('pg_buffercache'):
2929
return
30-
result = Pooler.run_sql_type('buffer_cache')[0]
30+
result = Pooler.run_sql_type('buffer_cache', extension='pg_buffercache')[0]
3131
for i, value in enumerate(result):
3232
zbx.send('pgsql.buffers[{0}]'.format(self.Items[i][0]), value)
3333

@@ -65,5 +65,5 @@ def keys_and_queries(self, template_zabbix):
6565
result = []
6666
for i, item in enumerate(self.Items):
6767
result.append('{0}[*],$2 $1 -c "{1}"'.format(self.key.format('.' + item[0]),
68-
self.query[i].format(item[0])))
68+
self.query[i].format(self.extension_schema(extension='pg_buffercache'))))
6969
return template_zabbix.key_and_query(result)

mamonsu/plugins/pgsql/plugin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ def check(self, extension):
3434

3535
return self._ext_installed
3636

37+
def extension_schema(self, extension, db=None):
38+
return Pooler.extension_schema(extension, db)
39+
3740
def disable_and_exit_if_extension_is_not_installed(self, ext, db=None):
3841
if not self.extension_installed(ext, db=db, silent=True):
3942
self.disable()

0 commit comments

Comments
 (0)