diff --git a/cmk/plugins/mssql/agent_based/mssql_jobs.py b/cmk/plugins/mssql/agent_based/mssql_jobs.py index f22a34fded4..44efe2bf469 100644 --- a/cmk/plugins/mssql/agent_based/mssql_jobs.py +++ b/cmk/plugins/mssql/agent_based/mssql_jobs.py @@ -195,9 +195,11 @@ def parse_mssql_jobs(string_table: StringTable) -> Mapping[str, JobSpec]: return section -def discover_mssql_jobs(section: Mapping[str, JobSpec]) -> DiscoveryResult: - for job_name in section: - if job_name: +def discover_mssql_jobs(params: dict[str, bool], section: Mapping[str, JobSpec]) -> DiscoveryResult: + for job_name, job_specs in section.items(): + if not params.get("discover_schedule_disabled") and not job_specs.schedule_enabled: + continue + else: yield Service(item=job_name) @@ -258,4 +260,8 @@ def _calc_job_result(job_specs: JobSpec, params: Mapping[str, Any]) -> Result: "status_disabled_schedule": 0, "status_missing_jobs": 2, }, + discovery_ruleset_name="mssql_jobs_discovery", + discovery_default_parameters={ + "discover_schedule_disabled": True, + }, ) diff --git a/cmk/plugins/mssql/rulesets/mssql_jobs_discovery.py b/cmk/plugins/mssql/rulesets/mssql_jobs_discovery.py new file mode 100644 index 00000000000..c3104832011 --- /dev/null +++ b/cmk/plugins/mssql/rulesets/mssql_jobs_discovery.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# Copyright (C) 2026 Checkmk GmbH - License: GNU General Public License v2 +# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and +# conditions defined in the file COPYING, which is part of this source code package. + +from cmk.rulesets.v1 import ( + Label, + Title, +) +from cmk.rulesets.v1.form_specs import ( + BooleanChoice, + DefaultValue, + DictElement, + Dictionary, +) +from cmk.rulesets.v1.rule_specs import ( + DiscoveryParameters, + Topic, +) + + +def _parameter_form_mssql_jobs_discovery() -> Dictionary: + return Dictionary( + title=Title("MSSQL Jobs Discovery"), + elements={ + "discover_schedule_disabled": DictElement( + parameter_form=BooleanChoice( + label=Label("Discover jobs with disabled Scheduler"), + prefill=DefaultValue(True), + ), + required=True, + ), + }, + ) + + +rule_spec_mssql_jobs_discovery = DiscoveryParameters( + name="mssql_jobs_discovery", + title=Title("MSSQL Jobs Discovery"), + topic=Topic.APPLICATIONS, + parameter_form=_parameter_form_mssql_jobs_discovery, +) diff --git a/tests/unit/cmk/plugins/mssql/agent_based/test_mssql_jobs.py b/tests/unit/cmk/plugins/mssql/agent_based/test_mssql_jobs.py index 1969797d4b9..58194158353 100644 --- a/tests/unit/cmk/plugins/mssql/agent_based/test_mssql_jobs.py +++ b/tests/unit/cmk/plugins/mssql/agent_based/test_mssql_jobs.py @@ -738,10 +738,14 @@ def _make_job(*, enabled: bool, scheduled: bool) -> StringTable: ] ] +_DISCOVERY_PARAMS = {"discover_schedule_disabled": True} + def test_discover_single_instance_single_job() -> None: assert list( - discover_mssql_jobs(parse_mssql_jobs(_make_job(enabled=True, scheduled=False))) + discover_mssql_jobs( + _DISCOVERY_PARAMS, parse_mssql_jobs(_make_job(enabled=True, scheduled=False)) + ) ) == [ Service(item="teststsssss - MSSQLSERVER"), ] @@ -749,7 +753,9 @@ def test_discover_single_instance_single_job() -> None: def test_discover_single_instance_multiple_jobs() -> None: assert list( - discover_mssql_jobs(parse_mssql_jobs(_STRING_TABLE_SINGLE_INSTANCE_MULTIPLE_JOBS)) + discover_mssql_jobs( + _DISCOVERY_PARAMS, parse_mssql_jobs(_STRING_TABLE_SINGLE_INSTANCE_MULTIPLE_JOBS) + ) ) == [ Service(item="täglich 00:03 - MSSQLSERVER"), Service(item="4x Täglich Infomanagement - MSSQLSERVER"), @@ -773,7 +779,9 @@ def test_discover_single_instance_multiple_jobs() -> None: def test_discover_multiple_instances() -> None: - assert list(discover_mssql_jobs(parse_mssql_jobs(_STRING_TABLE_MULTIPLE_INSTANCES))) == [ + assert list( + discover_mssql_jobs(_DISCOVERY_PARAMS, parse_mssql_jobs(_STRING_TABLE_MULTIPLE_INSTANCES)) + ) == [ Service(item="CommandLog Cleanup - SERVICES"), Service(item="DatabaseBackup - SYSTEM_DATABASES - FULL - SERVICES"), Service(item="DatabaseBackup - USER_DATABASES - DIFF - SERVICES"), @@ -801,7 +809,7 @@ def test_discover_multiple_instances() -> None: def test_discover_error() -> None: - assert not list(discover_mssql_jobs(parse_mssql_jobs(_STRING_TABLE_ERROR))) + assert not list(discover_mssql_jobs(_DISCOVERY_PARAMS, parse_mssql_jobs(_STRING_TABLE_ERROR))) @pytest.mark.parametrize( @@ -1032,6 +1040,6 @@ def test_check_mssql_jobs_consider_if_enabled( def test_discovery_empty_job_name() -> None: - assert list(discover_mssql_jobs(parse_mssql_jobs(INFO_NO_JOB_NAME))) == [ + assert list(discover_mssql_jobs(_DISCOVERY_PARAMS, parse_mssql_jobs(INFO_NO_JOB_NAME))) == [ Service(item="{2C32E575-3C76-48E0-9E04-43BD2A15B2E1} - MSSQLSERVER"), ]