From 180fa31d14a9150a84e9cf458b93f618e996a2ae Mon Sep 17 00:00:00 2001 From: James Campbell Date: Tue, 3 Jun 2025 01:58:44 -0400 Subject: [PATCH] Add latest version metric * Add a special handler for latest version info * Add initial latest version items/triggers to the Zabbix template --- src/pgmon.py | 12 +++++ zabbix_templates/pgmon_templates.yaml | 65 +++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/src/pgmon.py b/src/pgmon.py index 0ce43b5..97c6b79 100755 --- a/src/pgmon.py +++ b/src/pgmon.py @@ -699,6 +699,18 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): if metric_name == "agent_version": self._reply(200, VERSION) return + elif metric_name == "latest_version_info": + try: + get_latest_version() + self._reply( + 200, + json.dumps( + {"latest": latest_version, "supported": 1 if release_supported else 0} + ), + ) + except LatestVersionCheckError as e: + log.error("Failed to retrieve latest version information: {}".format(e)) + self._reply(503, "Failed to retrieve latest version info") # Note: parse_qs returns the values as a list. Since we always expect # single values, just grab the first from each. diff --git a/zabbix_templates/pgmon_templates.yaml b/zabbix_templates/pgmon_templates.yaml index 681ea81..283cd31 100644 --- a/zabbix_templates/pgmon_templates.yaml +++ b/zabbix_templates/pgmon_templates.yaml @@ -11,6 +11,39 @@ zabbix_export: groups: - name: 'My Templates' items: + - uuid: de1fa757395440118026f4c7a7c4ebbe + name: 'PostgreSQL latest supported version' + type: DEPENDENT + key: pgmon.release.latest + delay: '0' + preprocessing: + - type: JSONPATH + parameters: + - $.latest + master_item: + key: 'pgmon[latest_version_info]' + tags: + - tag: Application + value: PostgreSQL + - uuid: e1a003317bc043908ee0803704a6e1d0 + name: 'PostgreSQL release support status' + type: DEPENDENT + key: pgmon.release.supported + delay: '0' + preprocessing: + - type: JSONPATH + parameters: + - $.supported + master_item: + key: 'pgmon[latest_version_info]' + tags: + - tag: Application + value: PostgreSQL + triggers: + - uuid: 88eac74402d64e7cb853e8cb505b1939 + expression: 'last(/PostgreSQL by pgmon/pgmon.release.supported)<>1' + name: 'PostgreSQL major release is lo longer supported' + priority: INFO - uuid: 763920af8da84db8a9a2667d9653cb21 name: 'PostgreSQL Agent Version' type: HTTP_AGENT @@ -24,6 +57,19 @@ zabbix_export: tags: - tag: Application value: PostgreSQL + - uuid: d890e395fbbc4f2bacbd50e7321fcb9f + name: 'PostgreSQL latest version info' + type: HTTP_AGENT + key: 'pgmon[latest_version_info]' + delay: 12h + history: '0' + value_type: TEXT + trends: '0' + description: 'Information about the latest PostgreSQL version in the current series' + url: 'http://localhost:{$AGENT_PORT}/version' + tags: + - tag: Application + value: PostgreSQL - uuid: 8706eccb7edc4fa394f552fc31f401a9 name: 'Max Frozen XID Age' type: HTTP_AGENT @@ -1017,3 +1063,22 @@ zabbix_export: - type: STRING name: reference value: XSCMZ + triggers: + - uuid: 94ce93c828aa46b4bd4f3732fc7090c6 + expression: 'last(/PostgreSQL by pgmon/pgmon.release.latest) - last(/PostgreSQL by pgmon/pgmon[version]) >= 1' + name: 'PostgreSQL is at least 1 version behind' + priority: INFO + dependencies: + - name: 'PostgreSQL is at least 2 version behind' + expression: 'last(/PostgreSQL by pgmon/pgmon.release.latest) - last(/PostgreSQL by pgmon/pgmon[version]) >= 2' + - uuid: 2701bcd1223c4ee787f3eca30288e6c6 + expression: 'last(/PostgreSQL by pgmon/pgmon.release.latest) - last(/PostgreSQL by pgmon/pgmon[version]) >= 2' + name: 'PostgreSQL is at least 2 version behind' + priority: INFO + dependencies: + - name: 'PostgreSQL is at least 3 version behind' + expression: 'last(/PostgreSQL by pgmon/pgmon.release.latest) - last(/PostgreSQL by pgmon/pgmon[version]) >= 3' + - uuid: 3c9adbe8b6f84b3788c6a3e513075df5 + expression: 'last(/PostgreSQL by pgmon/pgmon.release.latest) - last(/PostgreSQL by pgmon/pgmon[version]) >= 3' + name: 'PostgreSQL is at least 3 version behind' + priority: INFO