@@ -69,6 +69,13 @@ class Instance(Plugin):
69
69
Plugin .UNITS .none , Plugin .DELTA .simple_change )
70
70
]
71
71
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
+
72
79
def run (self , zbx ):
73
80
all_items = self .Items
74
81
if Pooler .server_version_greater ("12.0" ):
@@ -82,7 +89,9 @@ def run(self, zbx):
82
89
for key , value in enumerate (result [0 ]):
83
90
zbx_key , value = "pgsql.{0}" .format (all_items [key ][1 ]), int (value )
84
91
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
86
95
87
96
def items (self , template , dashboard = False ):
88
97
result = ""
@@ -101,6 +110,14 @@ def items(self, template, dashboard=False):
101
110
"delay" : self .plugin_config ("interval" ),
102
111
"delta" : delta
103
112
})
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
+ })
104
121
if not dashboard :
105
122
return result
106
123
else :
@@ -166,6 +183,13 @@ def graphs(self, template, dashboard=False):
166
183
"position" : 4 }
167
184
}]
168
185
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
+
169
193
def keys_and_queries (self , template_zabbix ):
170
194
result = []
171
195
if LooseVersion (self .VersionPG ) < LooseVersion ("12" ):
@@ -177,4 +201,5 @@ def keys_and_queries(self, template_zabbix):
177
201
keys = item [1 ].split ("[" )
178
202
result .append ("{0}[*],$2 $1 -c \" {1}\" " .format ("{0}{1}.{2}" .format (self .key , keys [0 ], keys [1 ][:- 1 ]),
179
203
self .query_agent .format (format (item [0 ]))))
204
+ result .append ("{0}[*],$2 $1 -c \" {1}\" " .format (self .key_server_mode , self .query_server_mode ))
180
205
return template_zabbix .key_and_query (result )
0 commit comments