Initial commit
This commit is contained in:
56
agent_based/asterisk_endpoints.py
Normal file
56
agent_based/asterisk_endpoints.py
Normal 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,
|
||||
)
|
||||
Reference in New Issue
Block a user