Initial commit

This commit is contained in:
2025-08-21 22:20:54 +02:00
commit cc0902f789
5 changed files with 428 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
#!/usr/bin/env python3
from cmk.agent_based.v2 import AgentSection, CheckPlugin, Service, Result, State, Metric, check_levels
def parse_asterisk(string_table):
parsed = {}
for line in string_table:
parsed[line[0]] = {"state": line[1], "chanAvail": line[2], "chanUsed": line[3]}
return parsed
def discover_asterisk(section):
for group in section:
yield Service(item=group)
def check_asterisk(item, section):
if(item not in section):
return
thisData = section[item]
if(thisData["chanAvail"] == "inf"):
thisData["mChanAvail"] = 999999
thisData["chanFree"] = "inf"
thisData["chanUsagePerc"] = 0.0
else:
thisData["chanUsagePerc"] = 100.0 * int(thisData["chanUsed"]) / int(thisData["chanAvail"])
normExplainState = f"State: {thisData['state'].replace('_', ' ')}"
chanExplainState = f"Channels Available: {thisData['chanAvail']} Channels Used: {thisData['chanUsed']}"
if(thisData["state"] == "Unavailable"):
yield Result(state=State.CRIT, summary="Endpoint is unavailable")
else:
yield Result(state=State.OK, summary=normExplainState)
yield from check_levels(
thisData["chanUsagePerc"],
levels_upper = ("fixed", (90.0, 80.0)),
label = "Used channels",
render_func=lambda v: str(v) + "%",
# notice_only = True,
)
if(int(thisData["chanUsed"]) == thisData["mChanAvail"]):
yield Result(state=State.CRIT, summary="Endpoint is saturated " + chanExplainState)
else:
yield Result(state=State.OK, summary=chanExplainState)
agent_section_asterisk = AgentSection(
name = "asterisk_endpoints",
parse_function = parse_asterisk,
)
check_plugin_asterisk = CheckPlugin(
name = "asterisk_endpoints",
service_name = "Asterisk Endpoint %s",
discovery_function = discover_asterisk,
check_function = check_asterisk,
)