@@ -18,16 +18,24 @@ class PgHealth(Plugin):
1818 query_uptime = """
1919 SELECT ceil(extract(epoch FROM pg_postmaster_start_time()));
2020 """
21+ query_version = """
22+ SELECT div(setting::int, 10000) || '.' || mod(setting::int, 10000)
23+ FROM pg_catalog.pg_settings WHERE name = 'server_version_num';
24+ """
25+
2126 key_ping = "pgsql.ping{0}"
2227 key_uptime = "pgsql.uptime{0}"
2328 key_cache = "pgsql.cache{0}"
29+ key_version = "pgsql.version{0}"
2430
2531 def run (self , zbx ):
2632 start_time = time .time ()
2733 Pooler .query (self .query_health )
2834 zbx .send (self .key_ping .format ("[]" ), (time .time () - start_time ) * 1000 )
2935 result = Pooler .query (self .query_uptime )
3036 zbx .send (self .key_uptime .format ("[]" ), int (result [0 ][0 ]))
37+ result = Pooler .query (self .query_version )
38+ zbx .send (self .key_version .format ("[]" ), result [0 ][0 ])
3139
3240 def items (self , template , dashboard = False ):
3341 result = ""
@@ -56,6 +64,12 @@ def items(self, template, dashboard=False):
5664 "value_type" : value_type ,
5765 "delay" : delay ,
5866 "units" : Plugin .UNITS .unixtime
67+ }) + template .item ({
68+ "name" : "PostgreSQL: server version" ,
69+ "key" : self .right_type (self .key_version ),
70+ "value_type" : Plugin .VALUE_TYPE .text ,
71+ "delay" : delay ,
72+ "units" : Plugin .UNITS .none
5973 })
6074 if not dashboard :
6175 return result
@@ -96,5 +110,6 @@ def triggers(self, template, dashboard=False):
96110
97111 def keys_and_queries (self , template_zabbix ):
98112 result = ["{0}[*],$2 $1 -c \" {1}\" " .format (self .key_ping .format ("" ), self .query_health ),
99- "{0}[*],$2 $1 -c \" {1}\" " .format (self .key_uptime .format ("" ), self .query_uptime )]
113+ "{0}[*],$2 $1 -c \" {1}\" " .format (self .key_uptime .format ("" ), self .query_uptime ),
114+ "{0}[*],$2 $1 -c \" {1}\" " .format (self .key_version .format ("" ), self .query_version )]
100115 return template_zabbix .key_and_query (result )
0 commit comments