From 34a51e5c79b5e3c2f30766117fa8f9208944883a Mon Sep 17 00:00:00 2001 From: Marsell Kukuljevic Date: Sun, 11 May 2025 18:49:38 +0200 Subject: [PATCH] SCO-242 - update triton_wedge plugin to CheckMK's v2 API (optional in CheckMK 2.3.0, but mandatory in 2.4.0). --- .../triton_wedge}/agent_based/triton_wedge.py | 9 ++-- .../triton_wedge/libexec}/agent_triton_wedge | 7 +-- .../triton_wedge/rulesets/triton_wedge.py | 30 +++++++++++++ .../server_side_calls/special_agent.py | 15 +++++++ .../share/check_mk/checks/agent_triton_wedge | 7 --- .../check_mk/web/plugins/wato/triton_wedge.py | 42 ------------------ wedge/triton_wedge-0.1.0.mkp | Bin 4234 -> 0 bytes wedge/triton_wedge-0.2.0.mkp | Bin 0 -> 4091 bytes 8 files changed, 53 insertions(+), 57 deletions(-) rename wedge/local/lib/{check_mk/base/plugins => python3/cmk_addons/plugins/triton_wedge}/agent_based/triton_wedge.py (84%) rename wedge/local/{share/check_mk/agents/special => lib/python3/cmk_addons/plugins/triton_wedge/libexec}/agent_triton_wedge (96%) create mode 100644 wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/rulesets/triton_wedge.py create mode 100644 wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/server_side_calls/special_agent.py delete mode 100644 wedge/local/share/check_mk/checks/agent_triton_wedge delete mode 100644 wedge/local/share/check_mk/web/plugins/wato/triton_wedge.py delete mode 100755 wedge/triton_wedge-0.1.0.mkp create mode 100755 wedge/triton_wedge-0.2.0.mkp diff --git a/wedge/local/lib/check_mk/base/plugins/agent_based/triton_wedge.py b/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/agent_based/triton_wedge.py similarity index 84% rename from wedge/local/lib/check_mk/base/plugins/agent_based/triton_wedge.py rename to wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/agent_based/triton_wedge.py index d5c966e..74c9c49 100644 --- a/wedge/local/lib/check_mk/base/plugins/agent_based/triton_wedge.py +++ b/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/agent_based/triton_wedge.py @@ -3,7 +3,7 @@ # Parses and checks external VM IPs. import json -from cmk.base.plugins.agent_based.agent_based_api.v1 import register, Result, Service, State +from cmk.agent_based.v2 import Result, Service, State, CheckPlugin, AgentSection def parse_triton_wedge(string_table): @@ -18,7 +18,7 @@ def parse_triton_wedge(string_table): return lookup -register.agent_section( +agent_section_triton_wedge = AgentSection( name="triton_wedge", parse_function=parse_triton_wedge ) @@ -51,14 +51,13 @@ def check_triton_wedge(item, params, section): yield Result(state=State.WARN, summary=summary) else: lst = ", ".join(map(lambda vm: "VM %s (%s)" % (vm["vm"], vm["ip"]), wedged_vms)) - yield Result(state=State.CRIT, summary=f"Likely wedged detected for {lst}") + yield Result(state=State.CRIT, summary=f"Likely wedge detected for {lst}") -register.check_plugin( +check_plugin_triton_wedge = CheckPlugin( name="triton_wedge", service_name="Triton Wedge CN %s", discovery_function=discover_triton_wedge, check_function=check_triton_wedge, check_default_parameters={}, - check_ruleset_name="triton_wedge", ) diff --git a/wedge/local/share/check_mk/agents/special/agent_triton_wedge b/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/libexec/agent_triton_wedge similarity index 96% rename from wedge/local/share/check_mk/agents/special/agent_triton_wedge rename to wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/libexec/agent_triton_wedge index 3d7cbb2..5da84b6 100755 --- a/wedge/local/share/check_mk/agents/special/agent_triton_wedge +++ b/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/libexec/agent_triton_wedge @@ -8,14 +8,15 @@ PORT_RANGE_END = 57128 CONNECT_RETRIES = 3 CHECK_REMOTE_PORTS = [443, 80] CONCURRENT_SCANS = 200 +NAPI_TIMEOUT = 10 # seconds import urllib.request, sys, argparse, asyncio, json, socket, errno -def get_url(url): +def get_url(url, timeout=None): request = urllib.request.Request(url) - with urllib.request.urlopen(request) as conn: + with urllib.request.urlopen(request, timeout=timeout) as conn: data = conn.read() return data @@ -24,7 +25,7 @@ def get_url(url): def query_napi(addr): url = 'http://%s/nics?nic_tag=external&belongs_to_type=zone&state=running' % addr try: - json_data = get_url(url) + json_data = get_url(url, NAPI_TIMEOUT) nics = json.loads(json_data) return nics except urllib.error.HTTPError as e: diff --git a/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/rulesets/triton_wedge.py b/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/rulesets/triton_wedge.py new file mode 100644 index 0000000..975d40b --- /dev/null +++ b/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/rulesets/triton_wedge.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +# +# GUI config page for triton_wedge. + +from cmk.rulesets.v1.form_specs.validators import LengthInRange +from cmk.rulesets.v1.form_specs import Dictionary, DictElement, String +from cmk.rulesets.v1.rule_specs import SpecialAgent, Topic, Title, Help + +def _formspec(): + return Dictionary( + title=Title("Triton Wedge Detection"), + elements={ + "instance": DictElement( + parameter_form=String( + title=Title("Hostname"), + help_text=Help("Hostname or IP of NAPI to query"), + custom_validate=(LengthInRange(min_value=1),), + ), + required=True + ) + } + ) + +rule_spec_agent_config_triton_wedge = SpecialAgent( + topic=Topic.NETWORKING, + name="triton_wedge", + title=Title("Triton Wedge Detector"), + parameter_form=_formspec, + +) diff --git a/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/server_side_calls/special_agent.py b/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/server_side_calls/special_agent.py new file mode 100644 index 0000000..2da8053 --- /dev/null +++ b/wedge/local/lib/python3/cmk_addons/plugins/triton_wedge/server_side_calls/special_agent.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + + +from cmk.server_side_calls.v1 import noop_parser, SpecialAgentConfig, SpecialAgentCommand + +def _agent_arguments(params, host_config): + yield SpecialAgentCommand(command_arguments=[params["instance"]]) + +special_agent_triton_wedge = SpecialAgentConfig( + name="triton_wedge", + parameter_parser=noop_parser, + commands_function=_agent_arguments, +) + + diff --git a/wedge/local/share/check_mk/checks/agent_triton_wedge b/wedge/local/share/check_mk/checks/agent_triton_wedge deleted file mode 100644 index 2cfe785..0000000 --- a/wedge/local/share/check_mk/checks/agent_triton_wedge +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python3 - - -def agent_triton_wedge(params, hostname, ipaddress): - return [params["instance"]] - -special_agent_info["triton_wedge"] = agent_triton_wedge diff --git a/wedge/local/share/check_mk/web/plugins/wato/triton_wedge.py b/wedge/local/share/check_mk/web/plugins/wato/triton_wedge.py deleted file mode 100644 index f734e27..0000000 --- a/wedge/local/share/check_mk/web/plugins/wato/triton_wedge.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -# -# GUI config page for triton_wedge. - -from cmk.gui.i18n import _ -from cmk.gui.plugins.wato.utils import ( - rulespec_registry, - HostRulespec, - RulespecGroupCheckParametersHardware -) -from cmk.gui.watolib.rulespecs import Rulespec -from cmk.gui.valuespec import ( - Dictionary, - Hostname, -) - - -def _valuespec_special_agents_triton_wedge(): - return Dictionary( - title=_("Triton Wedge Detection"), - help=_(""), - elements=[ - ( - "instance", - Hostname( - title=_("Hostname"), - help=_("Hostname or IP of NAPI to query"), - allow_empty=False, - ), - ), - ], - ) - - -rulespec_registry.register( - HostRulespec( - factory_default=Rulespec.FACTORY_DEFAULT_UNUSED, - name="special_agents:triton_wedge", - group=RulespecGroupCheckParametersHardware, - valuespec=_valuespec_special_agents_triton_wedge, - ) -) diff --git a/wedge/triton_wedge-0.1.0.mkp b/wedge/triton_wedge-0.1.0.mkp deleted file mode 100755 index e6bd1288a0f3e361b62428174958bb732d34d004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4234 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 diff --git a/wedge/triton_wedge-0.2.0.mkp b/wedge/triton_wedge-0.2.0.mkp new file mode 100755 index 0000000000000000000000000000000000000000..9ecd718ba79322723d940047c6d7696cd9e72638 GIT binary patch literal 4091 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 literal 0 HcmV?d00001