Skip to content

Commit 6c8386f

Browse files
committed
feature: added Server Mode metric and trigger
1 parent a2d7341 commit 6c8386f

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

mamonsu/plugins/pgsql/instance.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ class Instance(Plugin):
6969
Plugin.UNITS.none, Plugin.DELTA.simple_change)
7070
]
7171

72+
key_server_mode = "pgsql.server_mode"
73+
query_server_mode = """
74+
SELECT CASE WHEN pg_is_in_recovery() THEN 'STANDBY'
75+
ELSE 'MASTER'
76+
END;
77+
"""
78+
7279
def run(self, zbx):
7380
all_items = self.Items
7481
if Pooler.server_version_greater("12.0"):
@@ -82,7 +89,9 @@ def run(self, zbx):
8289
for key, value in enumerate(result[0]):
8390
zbx_key, value = "pgsql.{0}".format(all_items[key][1]), int(value)
8491
zbx.send(zbx_key, value, all_items[key][5], only_positive_speed=True)
85-
del columns, result
92+
result_server_mode = Pooler.query(self.query_server_mode)[0][0]
93+
zbx.send(self.key_server_mode, result_server_mode)
94+
del columns, result, result_server_mode
8695

8796
def items(self, template, dashboard=False):
8897
result = ""
@@ -101,6 +110,14 @@ def items(self, template, dashboard=False):
101110
"delay": self.plugin_config("interval"),
102111
"delta": delta
103112
})
113+
result += template.item({
114+
"key": self.key_server_mode,
115+
"name": "PostgreSQL server mode",
116+
"value_type": self.VALUE_TYPE.text,
117+
"units": self.UNITS.none,
118+
"delay": self.plugin_config("interval"),
119+
"delta": Plugin.DELTA.as_is
120+
})
104121
if not dashboard:
105122
return result
106123
else:
@@ -166,6 +183,13 @@ def graphs(self, template, dashboard=False):
166183
"position": 4}
167184
}]
168185

186+
def triggers(self, template, dashboard=False):
187+
return template.trigger({
188+
"name": "PostgreSQL server mode changed on {HOSTNAME} to {ITEM.LASTVALUE}",
189+
"expression": "{#TEMPLATE:" + self.key_server_mode + ".last()}>" + self.plugin_config(
190+
"max_xid_age")
191+
})
192+
169193
def keys_and_queries(self, template_zabbix):
170194
result = []
171195
if LooseVersion(self.VersionPG) < LooseVersion("12"):
@@ -177,4 +201,5 @@ def keys_and_queries(self, template_zabbix):
177201
keys = item[1].split("[")
178202
result.append("{0}[*],$2 $1 -c \"{1}\"".format("{0}{1}.{2}".format(self.key, keys[0], keys[1][:-1]),
179203
self.query_agent.format(format(item[0]))))
204+
result.append("{0}[*],$2 $1 -c \"{1}\"".format(self.key_server_mode, self.query_server_mode))
180205
return template_zabbix.key_and_query(result)

0 commit comments

Comments
 (0)