mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-04-13 09:42:01 +00:00
89 lines
2.6 KiB
Python
Executable file
89 lines
2.6 KiB
Python
Executable file
#!/srv/newsblur/venv/newsblur/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Based on a plugin by BjØrn Ruberg.
|
|
|
|
Plugin to monitor PostgreSQL query rate; returns the number of
|
|
sequential scans initiated, rows returned by sequential reads,
|
|
index scans initiated, rows returned by index scans, inserts,
|
|
updates, and deletes.
|
|
|
|
Find out more at
|
|
http://www.postgresql.org/docs/8.2/interactive/monitoring-stats.html
|
|
(should work with PostgreSQL 7.x and 8.x)
|
|
"""
|
|
|
|
from vendor.munin.postgres import MuninPostgresPlugin
|
|
|
|
class MuninPostgresQueriesPlugin(MuninPostgresPlugin):
|
|
dbname_in_args = True
|
|
args = "--base 1000"
|
|
vlabel = "Queries per ${graph_period}"
|
|
info = "Shows number of select, insert, update and delete queries"
|
|
|
|
field_types = (
|
|
('sel_seq', dict(
|
|
label = "s_selects",
|
|
info = "Sequential selects on all tables",
|
|
column = "seq_scan",
|
|
)),
|
|
('sel_seq_rows', dict(
|
|
label = "s_select rows",
|
|
info = "Rows returned from sequential selects",
|
|
column = "seq_tup_read",
|
|
)),
|
|
('sel_idx', dict(
|
|
label = "i_selects",
|
|
info = "Sequential selects on all indexes",
|
|
column = "idx_scan",
|
|
)),
|
|
('sel_idx_rows', dict(
|
|
label = "i_select rows",
|
|
info = "Rows returned from index selects",
|
|
column = "idx_tup_fetch",
|
|
)),
|
|
('inserts', dict(
|
|
label = "inserts",
|
|
info = "Rows inserted on all tables",
|
|
column = "n_tup_ins",
|
|
)),
|
|
('updates', dict(
|
|
label = "updates",
|
|
info = "Rows updated on all tables",
|
|
column = "n_tup_upd",
|
|
)),
|
|
('deletes', dict(
|
|
label = "deletes",
|
|
info = "Rows deleted on all tables",
|
|
column = "n_tup_del",
|
|
)),
|
|
)
|
|
|
|
@property
|
|
def title(self):
|
|
return "Postgres queries on %s" % self.dbname
|
|
|
|
@property
|
|
def fields(self):
|
|
return [
|
|
(k, dict(
|
|
label = v['label'],
|
|
info = v['label'],
|
|
type = "DERIVE",
|
|
min = "0",
|
|
)) for k, v in self.field_types]
|
|
|
|
def execute(self):
|
|
c = self.cursor()
|
|
keys = [(k, v['column']) for k, v in self.field_types]
|
|
query = "SELECT %s FROM pg_stat_all_tables" % ",".join('SUM("%s")' % col for key, col in keys)
|
|
c.execute(query)
|
|
row = c.fetchone()
|
|
values = {}
|
|
for k, v in zip(keys, row):
|
|
values[k[0]] = v
|
|
return values
|
|
|
|
if __name__ == "__main__":
|
|
MuninPostgresQueriesPlugin().run()
|