@@ -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