mirror of
https://github.com/bashclub/check-unifi-controller.git
synced 2025-07-04 15:19:09 +02:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
a38a85ef4d | |||
7c039651c2 | |||
1573ea24c2 |
@ -115,7 +115,6 @@ def check_unifi_controller(item,section):
|
|||||||
state=State.WARN,
|
state=State.WARN,
|
||||||
notice=_("Update available")
|
notice=_("Update available")
|
||||||
)
|
)
|
||||||
yield Metric("uptime",int(section.uptime))
|
|
||||||
if item == "Cloudkey":
|
if item == "Cloudkey":
|
||||||
yield Result(
|
yield Result(
|
||||||
state=State.OK,
|
state=State.OK,
|
||||||
@ -158,7 +157,7 @@ def discovery_unifi_sites(section):
|
|||||||
for _item in section.values():
|
for _item in section.values():
|
||||||
yield Service(item=f"{_item.desc}")
|
yield Service(item=f"{_item.desc}")
|
||||||
|
|
||||||
def check_unifi_sites(item,section):
|
def check_unifi_sites(item,params,section):
|
||||||
site = next(filter(lambda x: x.desc == item,section.values()))
|
site = next(filter(lambda x: x.desc == item,section.values()))
|
||||||
yield Metric("satisfaction",max(0,_safe_int(site.satisfaction)))
|
yield Metric("satisfaction",max(0,_safe_int(site.satisfaction)))
|
||||||
|
|
||||||
@ -169,7 +168,8 @@ def check_unifi_sites(item,section):
|
|||||||
#yield Metric("if_in_bps",_safe_int(site.lan_rx_bytes_r)*8)
|
#yield Metric("if_in_bps",_safe_int(site.lan_rx_bytes_r)*8)
|
||||||
yield Metric("if_out_octets",_safe_int(site.lan_tx_bytes_r))
|
yield Metric("if_out_octets",_safe_int(site.lan_tx_bytes_r))
|
||||||
#yield Metric("if_out_bps",_safe_int(site.lan_tx_bytes_r)*8)
|
#yield Metric("if_out_bps",_safe_int(site.lan_tx_bytes_r)*8)
|
||||||
|
yield Metric("lan_active_sw",_safe_int(site.lan_num_sw))
|
||||||
|
yield Metric("lan_total_sw",_safe_int(site.lan_num_adopted))
|
||||||
yield Result(
|
yield Result(
|
||||||
state=_unifi_status2state(site.lan_status),
|
state=_unifi_status2state(site.lan_status),
|
||||||
summary=f"LAN: {site.lan_num_sw}/{site.lan_num_adopted} Switch ({site.lan_status})"
|
summary=f"LAN: {site.lan_num_sw}/{site.lan_num_adopted} Switch ({site.lan_status})"
|
||||||
@ -185,6 +185,8 @@ def check_unifi_sites(item,section):
|
|||||||
yield Metric("wlan_iot_sta",_safe_int(site.wlan_num_iot))
|
yield Metric("wlan_iot_sta",_safe_int(site.wlan_num_iot))
|
||||||
yield Metric("wlan_if_in_octets",_safe_int(site.wlan_rx_bytes_r))
|
yield Metric("wlan_if_in_octets",_safe_int(site.wlan_rx_bytes_r))
|
||||||
yield Metric("wlan_if_out_octets",_safe_int(site.wlan_tx_bytes_r))
|
yield Metric("wlan_if_out_octets",_safe_int(site.wlan_tx_bytes_r))
|
||||||
|
yield Metric("wlan_active_ap",_safe_int(site.wlan_num_ap))
|
||||||
|
yield Metric("wlan_total_ap",_safe_int(site.wlan_num_adopted))
|
||||||
yield Result(
|
yield Result(
|
||||||
state=_unifi_status2state(site.wlan_status),
|
state=_unifi_status2state(site.wlan_status),
|
||||||
summary=f"WLAN: {site.wlan_num_ap}/{site.wlan_num_adopted} AP ({site.wlan_status})"
|
summary=f"WLAN: {site.wlan_num_ap}/{site.wlan_num_adopted} AP ({site.wlan_status})"
|
||||||
@ -208,8 +210,14 @@ def check_unifi_sites(item,section):
|
|||||||
state=_unifi_status2state(site.vpn_status),
|
state=_unifi_status2state(site.vpn_status),
|
||||||
notice=f"WWW Status: {site.vpn_status}"
|
notice=f"WWW Status: {site.vpn_status}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if params.get("ignore_alarms"):
|
||||||
|
_alarmstate = State.OK
|
||||||
|
else:
|
||||||
|
_alarmstate = _expect_number(site.num_new_alarms)
|
||||||
|
|
||||||
yield Result(
|
yield Result(
|
||||||
state=_expect_number(site.num_new_alarms),
|
state=_alarmstate,
|
||||||
notice=f"{site.num_new_alarms} new Alarm"
|
notice=f"{site.num_new_alarms} new Alarm"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -223,6 +231,8 @@ register.check_plugin(
|
|||||||
name='unifi_sites',
|
name='unifi_sites',
|
||||||
service_name='Site %s',
|
service_name='Site %s',
|
||||||
discovery_function=discovery_unifi_sites,
|
discovery_function=discovery_unifi_sites,
|
||||||
|
check_default_parameters={},
|
||||||
|
check_ruleset_name="unifi_sites",
|
||||||
check_function=check_unifi_sites,
|
check_function=check_unifi_sites,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -258,8 +268,8 @@ register.inventory_plugin(
|
|||||||
|
|
||||||
############ DEVICE ###########
|
############ DEVICE ###########
|
||||||
def discovery_unifi_device(section):
|
def discovery_unifi_device(section):
|
||||||
|
yield Service(item="Device Status")
|
||||||
yield Service(item="Unifi Device")
|
yield Service(item="Unifi Device")
|
||||||
yield Service(item="Uptime")
|
|
||||||
yield Service(item="Active-User")
|
yield Service(item="Active-User")
|
||||||
if section.type != "uap": # kein satisfaction bei ap .. radio/ssid haben schon
|
if section.type != "uap": # kein satisfaction bei ap .. radio/ssid haben schon
|
||||||
yield Service(item="Satisfaction")
|
yield Service(item="Satisfaction")
|
||||||
@ -271,8 +281,16 @@ def discovery_unifi_device(section):
|
|||||||
yield Service(item="Speedtest")
|
yield Service(item="Speedtest")
|
||||||
|
|
||||||
def check_unifi_device(item,section):
|
def check_unifi_device(item,section):
|
||||||
if section.state != "1":
|
_device_state = UNIFI_DEVICE_STATES.get(section.state,"unknown")
|
||||||
yield IgnoreResults(f"device not active State: {section.state}")
|
## connected OK / pending Warn / Rest Crit
|
||||||
|
_hoststatus = State.OK if section.state == "1" else State.WARN if section.state == "2" else State.CRIT
|
||||||
|
if item == "Device Status":
|
||||||
|
yield Result(
|
||||||
|
state=_hoststatus,
|
||||||
|
summary=f"Status: {_device_state}"
|
||||||
|
)
|
||||||
|
#if section.state != "1":
|
||||||
|
# yield IgnoreResults(f"device not active State: {section.state}")
|
||||||
|
|
||||||
if item == "Unifi Device":
|
if item == "Unifi Device":
|
||||||
yield Result(
|
yield Result(
|
||||||
@ -297,14 +315,7 @@ def check_unifi_device(item,section):
|
|||||||
)
|
)
|
||||||
yield Metric("user_sta",_active_user)
|
yield Metric("user_sta",_active_user)
|
||||||
yield Metric("guest_sta",_safe_int(section.guest_num_sta))
|
yield Metric("guest_sta",_safe_int(section.guest_num_sta))
|
||||||
if item == "Uptime":
|
|
||||||
_uptime = int(section.uptime) if section.uptime else -1
|
|
||||||
if _uptime > 0:
|
|
||||||
yield Result(
|
|
||||||
state=State.OK,
|
|
||||||
summary=render.timespan(_uptime)
|
|
||||||
)
|
|
||||||
yield Metric("unifi_uptime",_uptime)
|
|
||||||
if item == "Satisfaction":
|
if item == "Satisfaction":
|
||||||
yield Result(
|
yield Result(
|
||||||
state=State.OK,
|
state=State.OK,
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
## SOFTWARE.
|
## SOFTWARE.
|
||||||
|
|
||||||
###
|
###
|
||||||
__VERSION__ = 0.79
|
__VERSION__ = 0.87
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import socket
|
import socket
|
||||||
@ -353,7 +353,7 @@ class unifi_device(unifi_object):
|
|||||||
"lcm_idle_timeout_override","lcm_brightness_override","uplink_depth","mesh_sta_vap_enabled","mesh_uplink_2",
|
"lcm_idle_timeout_override","lcm_brightness_override","uplink_depth","mesh_sta_vap_enabled","mesh_uplink_2",
|
||||||
"lcm_tracker_enabled","model_incompatible","model_in_lts","model_in_eol","country_code","wifi_caps",
|
"lcm_tracker_enabled","model_incompatible","model_in_lts","model_in_eol","country_code","wifi_caps",
|
||||||
"meshv3_peer_mac","element_peer_mac","vwireEnabled","hide_ch_width","x_authkey","x_ssh_hostkey_fingerprint",
|
"meshv3_peer_mac","element_peer_mac","vwireEnabled","hide_ch_width","x_authkey","x_ssh_hostkey_fingerprint",
|
||||||
"x_fingerprint","x_inform_authkey","op_mode"
|
"x_fingerprint","x_inform_authkey","op_mode","uptime"
|
||||||
]
|
]
|
||||||
for _k,_v in self.__dict__.items():
|
for _k,_v in self.__dict__.items():
|
||||||
if _k.startswith("_") or _k in _unwanted or type(_v) not in (str,int,float):
|
if _k.startswith("_") or _k in _unwanted or type(_v) not in (str,int,float):
|
||||||
@ -362,7 +362,10 @@ class unifi_device(unifi_object):
|
|||||||
|
|
||||||
_ret.append("<<<labels:sep(0)>>>")
|
_ret.append("<<<labels:sep(0)>>>")
|
||||||
_ret.append(f"{{\"unifi_device\":\"unifi-{self.type}\"}}")
|
_ret.append(f"{{\"unifi_device\":\"unifi-{self.type}\"}}")
|
||||||
|
_uptime = getattr(self,"uptime",None)
|
||||||
|
if _uptime:
|
||||||
|
_ret.append("<<<uptime>>>")
|
||||||
|
_ret.append(str(_uptime))
|
||||||
if self._NETWORK_PORTS:
|
if self._NETWORK_PORTS:
|
||||||
_ret += ["","<<<unifi_network_ports:sep(124)>>>"] + [str(_port) for _port in self._NETWORK_PORTS]
|
_ret += ["","<<<unifi_network_ports:sep(124)>>>"] + [str(_port) for _port in self._NETWORK_PORTS]
|
||||||
if self._NETWORK_RADIO:
|
if self._NETWORK_RADIO:
|
||||||
@ -470,11 +473,14 @@ class unifi_controller(unifi_object):
|
|||||||
|
|
||||||
_ret = []
|
_ret = []
|
||||||
for _ssid,_obj in _dict.items():
|
for _ssid,_obj in _dict.items():
|
||||||
pprint(_obj)
|
#pprint(_obj)
|
||||||
for _key in ("num_sta","ng_num_sta","na_num_sta","ng_tcp_packet_loss","na_tcp_packet_loss","ng_wifi_retries","na_wifi_retries","ng_wifi_latency","na_wifi_latency"):
|
for _key in ("num_sta","ng_num_sta","na_num_sta","ng_tcp_packet_loss","na_tcp_packet_loss","ng_wifi_retries","na_wifi_retries","ng_wifi_latency","na_wifi_latency"):
|
||||||
_ret.append("|".join([_ssid,_key,str(sum(map(lambda x: getattr(x,_key,0),_obj)))]))
|
_ret.append("|".join([_ssid,_key,str(sum(map(lambda x: getattr(x,_key,0),_obj)))]))
|
||||||
_ret.append("|".join([_ssid,"ng_avg_client_signal",str(mean(map(lambda x: getattr(x,"ng_avg_client_signal",0),filter(lambda x: x.radio == "ng",_obj))))]))
|
|
||||||
_ret.append("|".join([_ssid,"na_avg_client_signal",str(mean(map(lambda x: getattr(x,"na_avg_client_signal",0),filter(lambda x: x.radio == "na",_obj))))]))
|
_signals = list(map(lambda x: getattr(x,"ng_avg_client_signal",0),filter(lambda x: x.radio == "ng",_obj)))
|
||||||
|
_ret.append("|".join([_ssid,"ng_avg_client_signal",str(mean(_signals if _signals else [0]))]))
|
||||||
|
_signals = list(map(lambda x: getattr(x,"na_avg_client_signal",0),filter(lambda x: x.radio == "na",_obj)))
|
||||||
|
_ret.append("|".join([_ssid,"na_avg_client_signal",str(mean(_signals if _signals else [0]))]))
|
||||||
_ret.append("|".join([_ssid,"channels",",".join(
|
_ret.append("|".join([_ssid,"channels",",".join(
|
||||||
sorted(
|
sorted(
|
||||||
set(map(lambda x: str(getattr(x,"channel","0")),_obj))
|
set(map(lambda x: str(getattr(x,"channel","0")),_obj))
|
||||||
@ -588,7 +594,7 @@ class unifi_controller_api(object):
|
|||||||
def request(self,method,url=None,path=None,site=None,json=None,**kwargs):
|
def request(self,method,url=None,path=None,site=None,json=None,**kwargs):
|
||||||
if not url:
|
if not url:
|
||||||
if self.is_unifios:
|
if self.is_unifios:
|
||||||
url = f"{self.url}/proxy/network/api/"
|
url = f"{self.url}/proxy/network/api"
|
||||||
else:
|
else:
|
||||||
url = f"{self.url}/api"
|
url = f"{self.url}/api"
|
||||||
if site is not None:
|
if site is not None:
|
||||||
|
@ -121,6 +121,44 @@ graph_info["lan_user_sta_combined"] = {
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
metric_info["lan_active_sw"] = {
|
||||||
|
"title": _("Active Switches"),
|
||||||
|
"unit": "count",
|
||||||
|
"color": "13/b",
|
||||||
|
}
|
||||||
|
metric_info["lan_total_sw"] = {
|
||||||
|
"title": _("Total Switches"),
|
||||||
|
"unit": "count",
|
||||||
|
"color": "13/a",
|
||||||
|
}
|
||||||
|
|
||||||
|
graph_info["lan_active_sw_combined"] = {
|
||||||
|
"title" : _("Active Switches"),
|
||||||
|
"metrics" : [
|
||||||
|
("lan_active_sw","area"),
|
||||||
|
("lan_total_sw","line"),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
metric_info["wlan_active_ap"] = {
|
||||||
|
"title": _("Active Accesspoints"),
|
||||||
|
"unit": "count",
|
||||||
|
"color": "13/b",
|
||||||
|
}
|
||||||
|
metric_info["wlan_total_ap"] = {
|
||||||
|
"title": _("Total Accesspoints"),
|
||||||
|
"unit": "count",
|
||||||
|
"color": "13/a",
|
||||||
|
}
|
||||||
|
|
||||||
|
graph_info["wlan_active_ap_combined"] = {
|
||||||
|
"title" : _("Active Accesspoints"),
|
||||||
|
"metrics" : [
|
||||||
|
("wlan_active_ap","area"),
|
||||||
|
("wlan_total_ap","line"),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
metric_info["wlan_user_sta"] = {
|
metric_info["wlan_user_sta"] = {
|
||||||
"title": _("WLAN User"),
|
"title": _("WLAN User"),
|
||||||
"unit": "count",
|
"unit": "count",
|
||||||
|
@ -25,11 +25,13 @@
|
|||||||
from cmk.gui.i18n import _
|
from cmk.gui.i18n import _
|
||||||
from cmk.gui.plugins.wato import (
|
from cmk.gui.plugins.wato import (
|
||||||
HostRulespec,
|
HostRulespec,
|
||||||
|
CheckParameterRulespecWithItem,
|
||||||
IndividualOrStoredPassword,
|
IndividualOrStoredPassword,
|
||||||
rulespec_registry,
|
rulespec_registry,
|
||||||
)
|
)
|
||||||
from cmk.gui.valuespec import (
|
from cmk.gui.valuespec import (
|
||||||
Dictionary,
|
Dictionary,
|
||||||
|
Tuple,
|
||||||
Alternative,
|
Alternative,
|
||||||
NetworkPort,
|
NetworkPort,
|
||||||
Checkbox,
|
Checkbox,
|
||||||
@ -72,3 +74,28 @@ rulespec_registry.register(
|
|||||||
valuespec=_valuespec_special_agent_unifi_controller,
|
valuespec=_valuespec_special_agent_unifi_controller,
|
||||||
))
|
))
|
||||||
|
|
||||||
|
def _item_spec_unifi_site():
|
||||||
|
return TextAscii(
|
||||||
|
title=_("Site"),
|
||||||
|
help=_("help Site Text")
|
||||||
|
)
|
||||||
|
|
||||||
|
def _parameter_valuespec_unifi_site():
|
||||||
|
return Dictionary(
|
||||||
|
title = _("Unifi Site"),
|
||||||
|
optional_keys=[],
|
||||||
|
elements = [
|
||||||
|
('ignore_alarms', Checkbox(title=_("Ignore Site Alarms"), default_value=False)),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
rulespec_registry.register(
|
||||||
|
CheckParameterRulespecWithItem(
|
||||||
|
check_group_name = "unifi_sites",
|
||||||
|
group=RulespecGroupCheckParametersNetworking,
|
||||||
|
item_spec = _item_spec_unifi_site,
|
||||||
|
match_type = "dict",
|
||||||
|
parameter_valuespec=_parameter_valuespec_unifi_site,
|
||||||
|
title=lambda: _("Unifi Site Parameter")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
Reference in New Issue
Block a user