Skip to content

Commit 31a5981

Browse files
committed
Merge branch 'dev'
2 parents 0656479 + 5e1d955 commit 31a5981

File tree

18 files changed

+124
-105
lines changed

18 files changed

+124
-105
lines changed

.github/workflows/mamonsu-tests-dev.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ jobs:
3636
- docker_os: 'centos:8'
3737
pg_version: '16'
3838
zabbix_version: '6.4.13'
39+
- docker_os: 'ubuntu:24.04'
40+
pg_version: '16'
41+
zabbix_version: '6.4.13'
3942
exclude:
4043
- docker_os: 'centos:8'
4144
pg_version: '12'
@@ -77,7 +80,7 @@ jobs:
7780
echo "zabbix_address=$(hostname -I | awk '{print $1}')" >> $GITHUB_OUTPUT
7881
id: zabbix_address
7982
- name: Edit Zabbix address in agent.conf
80-
run: sed -i "s/\(address *= *\).*/\1 ${{ steps.zabbix_address.outputs.zabbix_address }}/" ${{ env.MAMONSU_PATH }}/github-actions-tests/sources/agent_3.5.7.conf
83+
run: sed -i "s/\(address *= *\).*/\1 ${{ steps.zabbix_address.outputs.zabbix_address }}/" ${{ env.MAMONSU_PATH }}/github-actions-tests/sources/agent_3.5.8.conf
8184

8285
- name: Copy test scripts to container
8386
run: docker exec $( echo "${{ matrix.docker_os }}" | sed 's/://' | sed 's/\.//' ) mkdir -p -m 755 /mamonsu/

.github/workflows/mamonsu-tests-master.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ jobs:
4242
- docker_os: 'ubuntu:20.04'
4343
pg_version: '15'
4444
zabbix_version: '6.4.13'
45+
- docker_os: 'ubuntu:24.04'
46+
pg_version: '16'
47+
zabbix_version: '6.4.13'
4548
exclude:
4649
# excludes PG 15, 16 on CentOS
4750
- docker_os: 'centos:7'
@@ -88,7 +91,7 @@ jobs:
8891
echo "zabbix_address=$(hostname -I | awk '{print $1}')" >> $GITHUB_OUTPUT
8992
id: zabbix_address
9093
- name: Edit Zabbix address in agent.conf
91-
run: sed -i "s/\(address *= *\).*/\1 ${{ steps.zabbix_address.outputs.zabbix_address }}/" ${{ env.MAMONSU_PATH }}/github-actions-tests/sources/agent_3.5.7.conf
94+
run: sed -i "s/\(address *= *\).*/\1 ${{ steps.zabbix_address.outputs.zabbix_address }}/" ${{ env.MAMONSU_PATH }}/github-actions-tests/sources/agent_3.5.8.conf
9295

9396
- name: Copy test scripts to container
9497
run: docker exec $( echo "${{ matrix.docker_os }}" | sed 's/://' | sed 's/\.//' ) mkdir -p -m 755 /mamonsu/

github-actions-tests/mamonsu_build.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ if [ "${OS%:*}" = "centos" ]; then
4141
python3 setup.py build && python3 setup.py install
4242
make rpm
4343
sudo rpm -i ./mamonsu*.rpm
44-
cat /mamonsu/github-actions-tests/sources/agent_3.5.7.conf > /etc/mamonsu/agent.conf
44+
cat /mamonsu/github-actions-tests/sources/agent_3.5.8.conf > /etc/mamonsu/agent.conf
4545
systemctl daemon-reload
4646
systemctl restart mamonsu
4747
sleep 5
@@ -64,7 +64,7 @@ elif [ "${OS%:*}" = "ubuntu" ]; then
6464
python3 setup.py build && python3 setup.py install
6565
make deb
6666
sudo dpkg -i ./mamonsu*.deb
67-
cat /mamonsu/github-actions-tests/sources/agent_3.5.7.conf > /etc/mamonsu/agent.conf
67+
cat /mamonsu/github-actions-tests/sources/agent_3.5.8.conf > /etc/mamonsu/agent.conf
6868
service mamonsu restart
6969
sleep 5
7070
echo && echo && echo "mamonsu version:"

mamonsu/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
__author__ = 'Dmitry Vasilyev'
22
__author_email__ = '[email protected]'
33
__description__ = 'Monitoring agent for PostgreSQL'
4-
__version__ = '3.5.7'
4+
__version__ = '3.5.8'
55
__licence__ = 'BSD'
66

77
__url__ = 'https://github.com/postgrespro/mamonsu'

mamonsu/plugins/pgsql/driver/pg8000/core.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from collections import defaultdict, deque
33
from datetime import datetime as Datetime
44
from decimal import Decimal
5-
from distutils.version import LooseVersion
5+
from pkg_resources import packaging
66
from hashlib import md5
77
from itertools import count, islice
88
from struct import Struct
@@ -1416,11 +1416,16 @@ def handle_PARAMETER_STATUS(self, data, ps):
14161416
pass
14171417

14181418
elif key == b"server_version":
1419-
self._server_version = LooseVersion(value.decode('ascii'))
1420-
if self._server_version < LooseVersion('8.2.0'):
1419+
# LooseVersion() from distutils was able to handle non-relevant strings
1420+
# in version (like "16.2 (Ubuntu 16.2-1.pgdg20.04+1)")
1421+
# since distutils became deprecated we need this hack hoping that
1422+
# postgres package maintainers won't come up with something more exotic
1423+
string_version = value.decode('ascii').split(' ')[0]
1424+
self._server_version = packaging.version.parse(string_version)
1425+
if self._server_version < packaging.version.parse('8.2.0'):
14211426
self._commands_with_count = (
14221427
b"INSERT", b"DELETE", b"UPDATE", b"MOVE")
1423-
elif self._server_version < LooseVersion('9.0.0'):
1428+
elif self._server_version < packaging.version.parse('9.0.0'):
14241429
self._commands_with_count = (
14251430
b"INSERT", b"DELETE", b"UPDATE", b"MOVE", b"FETCH",
14261431
b"COPY")

mamonsu/plugins/pgsql/driver/pool.py

+22-20
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from distutils.version import LooseVersion
1+
from pkg_resources import packaging
22
from .connection import Connection, ConnectionInfo
33

44

@@ -124,27 +124,29 @@ def server_version(self, db=None):
124124
db = self._normalize_db(db)
125125
if db in self._cache["server_version"]["storage"]:
126126
return self._cache["server_version"]["storage"][db]
127+
128+
version_string = self.query("show server_version", db)[0][0]
127129
result = bytes(
128-
self.query("show server_version", db)[0][0], "utf-8")
130+
version_string.split(" ")[0], "utf-8")
129131
self._cache["server_version"]["storage"][db] = "{0}".format(
130132
result.decode("ascii"))
131133
return self._cache["server_version"]["storage"][db]
132134

133135
def server_version_greater(self, version, db=None):
134136
db = self._normalize_db(db)
135-
return self.server_version(db) >= LooseVersion(version)
137+
return packaging.version.parse(self.server_version(db)) >= packaging.version.parse(version)
136138

137139
def server_version_less(self, version, db=None):
138140
db = self._normalize_db(db)
139-
return self.server_version(db) <= LooseVersion(version)
141+
return packaging.version.parse(self.server_version(db)) <= packaging.version.parse(version)
140142

141143
def bootstrap_version_greater(self, version):
142-
return str(
143-
self._cache["bootstrap"]["version"]) >= LooseVersion(version)
144+
return packaging.version.parse(
145+
str(self._cache["bootstrap"]["version"])) >= packaging.version.parse(version)
144146

145147
def bootstrap_version_less(self, version):
146-
return str(
147-
self._cache["bootstrap"]["version"]) <= LooseVersion(version)
148+
return packaging.version.parse(
149+
str(self._cache["bootstrap"]["version"])) <= packaging.version.parse(version)
148150

149151
def in_recovery(self, db=None):
150152
db = self._normalize_db(db)
@@ -166,16 +168,16 @@ def is_bootstraped(self, db=None):
166168
self._cache["bootstrap"]["counter"] = 0
167169
# TODO: изменить на нормальное название, 'config' слишком общее
168170
sql = """
169-
SELECT count(*)
170-
FROM pg_catalog.pg_class
171+
SELECT count(*)
172+
FROM pg_catalog.pg_class
171173
WHERE relname = 'config';
172174
"""
173175
result = int(self.query(sql, db)[0][0])
174176
self._cache["bootstrap"]["storage"][db] = (result == 1)
175177
if self._cache["bootstrap"]["storage"][db]:
176178
self._connections[db].log.info("Found mamonsu bootstrap")
177179
sql = """
178-
SELECT max(version)
180+
SELECT max(version)
179181
FROM mamonsu.config;
180182
"""
181183
self._cache["bootstrap"]["version"] = self.query(sql, db)[0][0]
@@ -227,8 +229,8 @@ def is_pgpro_ee(self, db=None):
227229
def extension_installed(self, ext, db=None):
228230
db = self._normalize_db(db)
229231
result = self.query("""
230-
SELECT count(*)
231-
FROM pg_catalog.pg_extension
232+
SELECT count(*)
233+
FROM pg_catalog.pg_extension
232234
WHERE lower(extname) = lower('{0}');
233235
""".format(ext), db)
234236
return (int(result[0][0])) == 1
@@ -239,9 +241,9 @@ def extension_schema(self, extension, db=None):
239241
return self._cache["extension_schema"][extension][db]
240242
try:
241243
self._cache["extension_schema"][extension][db] = self.query("""
242-
SELECT n.nspname
243-
FROM pg_extension e
244-
JOIN pg_namespace n ON e.extnamespace = n.oid
244+
SELECT n.nspname
245+
FROM pg_extension e
246+
JOIN pg_namespace n ON e.extnamespace = n.oid
245247
WHERE e.extname = '{0}'
246248
""".format(extension), db)[0][0]
247249
return self._cache["extension_schema"][extension][db]
@@ -250,7 +252,7 @@ def extension_schema(self, extension, db=None):
250252

251253
def databases(self):
252254
result, databases = self.query("""
253-
SELECT datname
255+
SELECT datname
254256
FROM pg_catalog.pg_database;
255257
"""), []
256258
for row in result:
@@ -309,13 +311,13 @@ def get_sys_param(self, param, db=None):
309311
db = self._normalize_db(db)
310312
if self.is_bootstraped() and self.bootstrap_version_greater("2.3.4"):
311313
result = self.query("""
312-
SELECT *
314+
SELECT *
313315
FROM mamonsu.get_sys_param('{0}');
314316
""".format(param))[0][0]
315317
else:
316318
result = self.query("""
317-
SELECT setting
318-
FROM pg_catalog.pg_settings
319+
SELECT setting
320+
FROM pg_catalog.pg_settings
319321
WHERE name = '{0}';
320322
""".format(param), db)[0][0]
321323
return result

mamonsu/plugins/pgsql/memory_leak_diagnostic.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55
from .pool import Pooler
66
import re
7-
from distutils.version import LooseVersion
7+
from pkg_resources import packaging
88
import mamonsu.lib.platform as platform
99
import posix
1010

@@ -91,7 +91,7 @@ def run(self, zbx):
9191
for row in Pooler.query(query=self.query):
9292
pids.append(row[0])
9393

94-
if (LooseVersion(self.os_release) < LooseVersion("4.5")
94+
if (packaging.version.parse(self.os_release) < packaging.version.parse("4.5")
9595
and not (self.os_name == "centos" and self.os_version == "7")) \
9696
or (not self.os_name and not self.os_version):
9797
for pid in pids:

mamonsu/plugins/pgsql/replication.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# -*- coding: utf-8 -*-
22

33
from mamonsu.plugins.pgsql.plugin import PgsqlPlugin as Plugin
4-
from distutils.version import LooseVersion
4+
from pkg_resources import packaging
55
from .pool import Pooler
66
from mamonsu.lib.zbx_template import ZbxTemplate
77

@@ -201,7 +201,7 @@ def discovery_rules(self, template, dashboard=False):
201201

202202
def keys_and_queries(self, template_zabbix):
203203
result = []
204-
if LooseVersion(self.VersionPG) < LooseVersion("10"):
204+
if packaging.version.parse(self.VersionPG) < packaging.version.parse("10"):
205205
result.append("{0},$2 $1 -c \"{1}\"".format("pgsql.replication_lag.sec[*]",
206206
self.query_agent_replication_lag.format(
207207
self.plugin_config("interval"), "xlog_receive_location",

mamonsu/plugins/system/linux/disk_stats.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class DiskStats(Plugin):
2323
# Track only physical devices without logical partitions
2424
OnlyPhysicalDevices = True
2525

26-
re_stat = re.compile("^(?:\s+\d+){2}\s+([\w\d]+) (.*)$")
26+
re_stat = re.compile(r"^(?:\s+\d+){2}\s+([\w\d]+) (.*)$")
2727

2828
# rd_ios rd_merges rd_sectors rd_ticks
2929
# wr_ios wr_merges wr_sectors wr_ticks
@@ -43,7 +43,7 @@ def run(self, zbx):
4343
if m is None:
4444
continue
4545
dev, val = m.group(1), m.group(2)
46-
if self.OnlyPhysicalDevices and re.search("\d+$", dev): # get drive name without digits at the end
46+
if self.OnlyPhysicalDevices and re.search(r"\d+$", dev): # get drive name without digits at the end
4747
continue
4848
val = [int(x) for x in val.split()]
4949
read_op, read_sc, write_op, write_sc, ticks = val[0], val[2], val[4], val[6], val[9]

mamonsu/plugins/system/linux/memory.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
class Memory(Plugin):
66
AgentPluginType = "sys"
77

8-
query_agent = "cat /proc/meminfo | awk '/^{0}\:/ "
9-
query_agent_used = "MemTotal=$(cat /proc/meminfo | awk '/MemTotal\:/ { print $2 }'); " \
10-
"SUM=$(cat /proc/meminfo | awk '/(MemFree|Buffers|(Swap)?Cached|Slab|PageTables)\:/ " \
8+
query_agent = r"cat /proc/meminfo | awk '/^{0}\:/ "
9+
query_agent_used = r"MemTotal=$(cat /proc/meminfo | awk '/MemTotal\:/ { print $2 }'); " \
10+
r"SUM=$(cat /proc/meminfo | awk '/(MemFree|Buffers|(Swap)?Cached|Slab|PageTables)\:/ " \
1111
"{ SUM += $2 } END {print SUM}'); echo $((($MemTotal-$SUM)*1024))"
1212
query_agent_swap = "expr `grep -Ei 'Swap(Total|Free)' /proc/meminfo | awk '{print $2 * 1024}' | paste -s -d '-' " \
1313
"| sed -E 's/-/ - /g'` "

mamonsu/plugins/system/linux/proc_stat.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class ProcStat(Plugin):
1616
# alert fork-rate
1717
ForkRate = 500
1818
# /proc/stat all cpu line
19-
re_stat = re.compile("cpu\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)")
19+
re_stat = re.compile(r"cpu\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)")
2020

2121
ProcessItems = [
2222
# key, zbx_key, name, delta, color, side

0 commit comments

Comments
 (0)