2025-04-12 15:21:46 +02:00

87 lines
2.9 KiB
Python

#!/usr/bin/env python3
# pylint: disable=missing-module-docstring, unused-argument, missing-function-docstring
from pprint import pprint
from cmk.utils import debug
# import necessary elements from API version 2
from cmk.agent_based.v2 import (
AgentSection,
CheckPlugin,
Service,
Result,
State,
)
def parse_hal9002_status(string_table):
"""the parse function"""
parsed_data = {}
# we only expect one line with four entries
line = string_table[0]
parsed_data["status"] = line[0]
parsed_data["version"] = line[1]
parsed_data["username"] = line[2]
parsed_data["ipaddress"] = line[3]
return parsed_data
def discover_hal9002_status(section):
"""the discover function"""
yield Service()
def check_hal9002_status(params, section):
"""the check function"""
if debug.enabled():
pprint(section)
# print(params["state_if_update_is_available"])
status = section["status"]
version = section["version"]
username = section["username"]
ipaddress = section["ipaddress"]
# check what status is reported and set state accordingly
if status == "ok":
state = State.OK
elif status == "update available":
state = params["state_if_update_is_available"]
elif status == "storage down":
state = State.CRIT
else:
state = State.UNKNOWN
summary = f'Status is "{status}", Version is "{version}"'
details = f'User/IP used for access is "{username}/{ipaddress}"'
# no metrics, just a simple service
yield Result(state=state, summary=summary, details=details)
# create the new agent section, must begin with "agent_section_"
# and must be an instance of "AgentSection"
agent_section_hal9002_status = AgentSection(
# "name" must exactly match the section name within the agent output
name="hal9002_status",
# define the parse function, name is arbitrary, a good choice is to choose
# "parse_" as prefix and append the section name
parse_function=parse_hal9002_status,
)
# create the new check plugin, must begin with "check_plugin_"
# and must be an instance of "CheckPlugin"
check_plugin_hal9002_status = CheckPlugin(
# "name" should be the same as the corresponding section within the agent output
name="hal9002_status",
service_name="HAL9002 Status",
# define the discovery function, name is arbitrary, a good choice is to choose
# "discover_" as prefix and append the section name
discovery_function=discover_hal9002_status,
# define the check function, name is arbitrary, a good choice is to choose
# "check_" as prefix and append the section name
check_function=check_hal9002_status,
# define the default parameters
check_default_parameters={"state_if_update_is_available": State.WARN},
# connect to the ruleset where parameters can be defined
# must match the name of the ruleset exactly
check_ruleset_name="hal9002_status",
)