From 9dc975982e5ce2eeb7ca9f32bb77e8d65ed1d8fa Mon Sep 17 00:00:00 2001 From: "Buhleier, Leon" Date: Fri, 24 Apr 2026 10:19:06 +0200 Subject: [PATCH 1/2] Added service label cmk/mssql_recovery_type for mssql backup services --- cmk/plugins/mssql/agent_based/backup.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/cmk/plugins/mssql/agent_based/backup.py b/cmk/plugins/mssql/agent_based/backup.py index 0f4fbf940f6..037afbe0c29 100644 --- a/cmk/plugins/mssql/agent_based/backup.py +++ b/cmk/plugins/mssql/agent_based/backup.py @@ -20,6 +20,7 @@ Service, State, StringTable, + ServiceLabel ) # <<>> @@ -61,6 +62,7 @@ class Backup(NamedTuple): Section = Mapping[str, Sequence[Backup]] +SectionDatabases = dict[str, dict[str, str]] _MAP_BACKUP_TYPES = { @@ -131,15 +133,26 @@ def parse_mssql_backup(string_table: StringTable) -> Section: ) -def discover_mssql_backup(params: Mapping[str, Any], section: Section) -> DiscoveryResult: +def discover_mssql_backup(params: Mapping[str, Any], section_mssql_backup: Section | None, section_mssql_databases: SectionDatabases | None) -> DiscoveryResult: if params["mode"] != "summary": return - for db_name in section: - yield Service(item=db_name) + for db_name in section_mssql_backup: + try: + yield Service( + item=db_name, + labels=[ + ServiceLabel( + name="cmk/mssql_recovery_type", + value=section_mssql_databases.get(db_name.split('MSSQL_')[1]).get("Recovery"), + ) + ] + ) + except Exception: + yield Service(item=db_name) -def check_mssql_backup(item: str, params: Mapping[str, Any], section: Section) -> CheckResult: - data = section.get(item) +def check_mssql_backup(item: str, params: Mapping[str, Any], section_mssql_backup: Section | None, section_mssql_databases: SectionDatabases | None) -> CheckResult: + data = section_mssql_backup.get(item) if data is None: # Assume general connection problem to the database, which is reported # by the "X Instance" service and skip this check. @@ -184,6 +197,7 @@ def check_mssql_backup(item: str, params: Mapping[str, Any], section: Section) - check_plugin_mssql_backup = CheckPlugin( name="mssql_backup", + sections=["mssql_backup", "mssql_databases"], service_name="MSSQL %s Backup", discovery_function=discover_mssql_backup, discovery_ruleset_name="discovery_mssql_backup", From 5016ee53e8e16c4f12505a4abf375466e0706404 Mon Sep 17 00:00:00 2001 From: lbuhleie Date: Fri, 24 Apr 2026 12:09:40 +0200 Subject: [PATCH 2/2] Fixed formatting --- cmk/plugins/mssql/agent_based/backup.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/cmk/plugins/mssql/agent_based/backup.py b/cmk/plugins/mssql/agent_based/backup.py index 037afbe0c29..6525c96e52b 100644 --- a/cmk/plugins/mssql/agent_based/backup.py +++ b/cmk/plugins/mssql/agent_based/backup.py @@ -18,9 +18,9 @@ render, Result, Service, + ServiceLabel, State, StringTable, - ServiceLabel ) # <<>> @@ -133,7 +133,11 @@ def parse_mssql_backup(string_table: StringTable) -> Section: ) -def discover_mssql_backup(params: Mapping[str, Any], section_mssql_backup: Section | None, section_mssql_databases: SectionDatabases | None) -> DiscoveryResult: +def discover_mssql_backup( + params: Mapping[str, Any], + section_mssql_backup: Section | None, + section_mssql_databases: SectionDatabases | None, +) -> DiscoveryResult: if params["mode"] != "summary": return for db_name in section_mssql_backup: @@ -143,15 +147,22 @@ def discover_mssql_backup(params: Mapping[str, Any], section_mssql_backup: Secti labels=[ ServiceLabel( name="cmk/mssql_recovery_type", - value=section_mssql_databases.get(db_name.split('MSSQL_')[1]).get("Recovery"), + value=section_mssql_databases.get(db_name.split("MSSQL_")[1]).get( + "Recovery" + ), ) - ] + ], ) except Exception: yield Service(item=db_name) -def check_mssql_backup(item: str, params: Mapping[str, Any], section_mssql_backup: Section | None, section_mssql_databases: SectionDatabases | None) -> CheckResult: +def check_mssql_backup( + item: str, + params: Mapping[str, Any], + section_mssql_backup: Section | None, + section_mssql_databases: SectionDatabases | None, +) -> CheckResult: data = section_mssql_backup.get(item) if data is None: # Assume general connection problem to the database, which is reported