Skip to content

Commit bf88377

Browse files
fix: updates for postgres 18
1 parent b5fb7fd commit bf88377

File tree

4 files changed

+47
-22
lines changed

4 files changed

+47
-22
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Supported platforms:
1919

2020
Supported Zabbix server versions: 4.0.44 - 6.4.13
2121

22-
Supported PostgreSQL versions: 12 - 17
22+
Supported PostgreSQL versions: 12 - 18
2323
***
2424

2525
***Table of Contents***

mamonsu/plugins/pgsql/driver/pool.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ def server_version(self, db=None):
155155
return self._cache["server_version"]["storage"][db]
156156

157157
version_string = self.query("show server_version", db)[0][0]
158+
version_string = version_string.rstrip("devel")
158159
result = bytes(
159160
version_string.split(" ")[0], "utf-8")
160161
self._cache["server_version"]["storage"][db] = "{0}".format(
@@ -248,7 +249,7 @@ def is_pgpro(self, db=None):
248249
return self._cache["pgpro"][db]
249250
try:
250251
self.query("""
251-
SELECT pgpro_version();
252+
SHOW pgpro_version;
252253
""")
253254
self._cache["pgpro"][db] = True
254255
except:
@@ -264,7 +265,7 @@ def is_pgpro_ee(self, db=None):
264265
return self._cache["pgproee"][db]
265266
try:
266267
ed = self.query("""
267-
SELECT pgpro_edition();
268+
SHOW pgpro_edition;
268269
""")[0][0]
269270
self._connections[db].log.info("pgpro_edition is {}".format(ed))
270271
self._cache["pgproee"][db] = (ed.lower() == "enterprise")

mamonsu/plugins/pgsql/statements.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@ class Statements(Plugin):
4545
"Dirty bytes/s", Plugin.UNITS.bytes_per_second, Plugin.DELTA.speed_per_second,
4646
("PostgreSQL Statements: Bytes", "9C8A4E", 0)),
4747

48-
("stat[read_time]",
49-
"(sum(blk_read_time)/float4(100))::bigint",
48+
["stat[read_time]",
49+
"(sum({0})/float4(100))::bigint",
5050
"Read IO Time", Plugin.UNITS.s, Plugin.DELTA.speed_per_second,
51-
("PostgreSQL Statements: Spent Time", "87C2B9", 0)),
52-
("stat[write_time]",
53-
"(sum(blk_write_time)/float4(100))::bigint",
51+
("PostgreSQL Statements: Spent Time", "87C2B9", 0)],
52+
["stat[write_time]",
53+
"(sum({0})/float4(100))::bigint",
5454
"Write IO Time", Plugin.UNITS.s, Plugin.DELTA.speed_per_second,
55-
("PostgreSQL Statements: Spent Time", "793F5D", 0)),
55+
("PostgreSQL Statements: Spent Time", "793F5D", 0)],
5656
["stat[other_time]",
57-
"(sum({0}-blk_read_time-blk_write_time)/float4(100))::bigint",
57+
"(sum({0}-{1})/float4(100))::bigint",
5858
"Other (mostly CPU) Time", Plugin.UNITS.s, Plugin.DELTA.speed_per_second,
5959
("PostgreSQL Statements: Spent Time", "9C8A4E", 0)]]
6060

@@ -160,7 +160,14 @@ def run(self, zbx):
160160
all_items += self.Items_pg_13
161161

162162
elif Pooler.server_version_greater("14"):
163-
self.Items[5][1] = self.Items[5][1].format("total_exec_time+total_plan_time")
163+
if Pooler.server_version_greater("17"):
164+
self.Items[3][1] = self.Items[3][1].format("shared_blk_read_time+local_blk_read_time+temp_blk_read_time")
165+
self.Items[4][1] = self.Items[4][1].format("shared_blk_write_time+local_blk_write_time+temp_blk_write_time")
166+
self.Items[5][1] = self.Items[5][1].format("total_exec_time+total_plan_time", "shared_blk_read_time-local_blk_read_time-temp_blk_read_time-shared_blk_write_time-local_blk_write_time-temp_blk_write_time")
167+
else:
168+
self.Items[3][1] = self.Items[3][1].format("blk_read_time")
169+
self.Items[4][1] = self.Items[4][1].format("blk_write_time")
170+
self.Items[5][1] = self.Items[5][1].format("total_exec_time+total_plan_time", "blk_read_time-blk_write_time")
164171
all_items += self.Items_pg_13
165172
info_view = 'pgpro_stats_info'
166173
if self.extension == "pg_stat_statements":
@@ -177,11 +184,17 @@ def run(self, zbx):
177184
zbx.send(zbx_key, value, info_items[key][4])
178185

179186
elif Pooler.server_version_greater("13"):
180-
self.Items[5][1] = self.Items[5][1].format("total_exec_time+total_plan_time")
187+
self.Items[3][1] = self.Items[3][1].format("blk_read_time")
188+
self.Items[4][1] = self.Items[4][1].format("blk_write_time")
189+
self.Items[5][1] = self.Items[5][1].format("total_exec_time+total_plan_time", "blk_read_time-blk_write_time")
190+
181191
all_items += self.Items_pg_13
182192

183193
else:
184-
self.Items[5][1] = self.Items[5][1].format("total_time")
194+
self.Items[3][1] = self.Items[3][1].format("blk_read_time")
195+
self.Items[4][1] = self.Items[4][1].format("blk_write_time")
196+
self.Items[5][1] = self.Items[5][1].format("total_time", "blk_read_time-blk_write_time")
197+
185198
columns = [x[1] for x in all_items]
186199
result = Pooler.query(self.query[self.extension + "_bootstrap"].format(
187200
columns=", ".join([x[0][x[0].find("[") + 1:x[0].find("]")] for x in all_items]),

mamonsu/plugins/pgsql/wal.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,26 @@ def run(self, zbx):
7474
result = Pooler.query("""
7575
SELECT wal_buffers_full FROM pg_stat_wal;
7676
""")
77-
zbx.send(self.key_wal_buffers_full.format("[]"), int(result[0][0]), self.DELTA_SPEED)
78-
result = Pooler.query("""
79-
SELECT wal_write_time FROM pg_stat_wal;
80-
""")
81-
zbx.send(self.key_wal_write_time.format("[]"), int(result[0][0]), self.DELTA_SPEED)
82-
result = Pooler.query("""
83-
SELECT wal_sync_time FROM pg_stat_wal;
84-
""")
85-
zbx.send(self.key_wal_sync_time.format("[]"), int(result[0][0]), self.DELTA_SPEED)
77+
if Pooler.server_version_greater("18"):
78+
zbx.send(self.key_wal_buffers_full.format("[]"), int(result[0][0]), self.DELTA_SPEED)
79+
result = Pooler.query("""
80+
SELECT SUM(write_time) AS wal_write_time FROM pg_stat_io WHERE object = 'wal';
81+
""")
82+
zbx.send(self.key_wal_write_time.format("[]"), int(result[0][0]), self.DELTA_SPEED)
83+
result = Pooler.query("""
84+
SELECT SUM(fsync_time) AS wal_sync_time FROM pg_stat_io WHERE object = 'wal';
85+
""")
86+
zbx.send(self.key_wal_sync_time.format("[]"), int(result[0][0]), self.DELTA_SPEED)
87+
else:
88+
zbx.send(self.key_wal_buffers_full.format("[]"), int(result[0][0]), self.DELTA_SPEED)
89+
result = Pooler.query("""
90+
SELECT wal_write_time FROM pg_stat_wal;
91+
""")
92+
zbx.send(self.key_wal_write_time.format("[]"), int(result[0][0]), self.DELTA_SPEED)
93+
result = Pooler.query("""
94+
SELECT wal_sync_time FROM pg_stat_wal;
95+
""")
96+
zbx.send(self.key_wal_sync_time.format("[]"), int(result[0][0]), self.DELTA_SPEED)
8697

8798
def items(self, template, dashboard=False):
8899
result = ""

0 commit comments

Comments
 (0)