Update unifi_controller.py

This commit is contained in:
Thorsten Spille 2024-09-18 18:28:05 +02:00 committed by GitHub
parent f3646613fd
commit 64895fa1e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3,7 +3,7 @@
# #
## MIT License ## MIT License
## ##
## Copyright (c) 2021 Bash Club ## Copyright (c) 2024 Bash Club
## ##
## Permission is hereby granted, free of charge, to any person obtaining a copy ## Permission is hereby granted, free of charge, to any person obtaining a copy
## of this software and associated documentation files (the "Software"), to deal ## of this software and associated documentation files (the "Software"), to deal
@ -120,7 +120,7 @@ def check_unifi_controller(item,section):
state=State.OK, state=State.OK,
summary=f"Version: {section.cloudkey_version}" summary=f"Version: {section.cloudkey_version}"
) )
if int(section.cloudkey_update_available) > 0: if _safe_int(section.cloudkey_update_available) > 0:
yield Result( yield Result(
state=State.WARN, state=State.WARN,
notice=_("Update available") notice=_("Update available")
@ -270,7 +270,6 @@ register.inventory_plugin(
def discovery_unifi_device(section): def discovery_unifi_device(section):
yield Service(item="Device Status") yield Service(item="Device Status")
yield Service(item="Unifi Device") yield Service(item="Unifi Device")
yield Service(item="Unifi Device 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")
@ -316,14 +315,6 @@ 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 == "Unifi Device 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,
@ -415,7 +406,7 @@ register.inventory_plugin(
############ DEVICEPORT ########### ############ DEVICEPORT ###########
@dataclass @dataclass
class unifi_interface(interfaces.Interface): class unifi_interface(interfaces.InterfaceWithCounters):
jumbo : bool = False jumbo : bool = False
satisfaction : int = 0 satisfaction : int = 0
poe_enable : bool = False poe_enable : bool = False
@ -430,8 +421,6 @@ class unifi_interface(interfaces.Interface):
ip_address : Optional[str] = None ip_address : Optional[str] = None
portconf : Optional[str] = None portconf : Optional[str] = None
def __post_init__(self) -> None:
self.finalize()
def _convert_unifi_counters_if(section: Section) -> interfaces.Section: def _convert_unifi_counters_if(section: Section) -> interfaces.Section:
## 10|port_idx|10 ## 10|port_idx|10
@ -488,25 +477,29 @@ def _convert_unifi_counters_if(section: Section) -> interfaces.Section:
return [ return [
unifi_interface( unifi_interface(
index=str(netif.port_idx), attributes=interfaces.Attributes(
descr=netif.name, index=str(netif.port_idx),
alias=netif.name, descr=netif.name,
type='6', alias=netif.name,
speed=_safe_int(netif.speed)*1000000, type='6',
oper_status=netif.oper_status, speed=_safe_int(netif.speed)*1000000,
admin_status=netif.admin_status, oper_status=netif.oper_status,
in_octets=_safe_int(netif.rx_bytes), admin_status=netif.admin_status,
in_ucast=_safe_int(netif.rx_packets), ),
in_mcast=_safe_int(netif.rx_multicast), counters=interfaces.Counters(
in_bcast=_safe_int(netif.rx_broadcast), in_octets=_safe_int(netif.rx_bytes),
in_discards=_safe_int(netif.rx_dropped), in_ucast=_safe_int(netif.rx_packets),
in_errors=_safe_int(netif.rx_errors), in_mcast=_safe_int(netif.rx_multicast),
out_octets=_safe_int(netif.tx_bytes), in_bcast=_safe_int(netif.rx_broadcast),
out_ucast=_safe_int(netif.tx_packets), in_disc=_safe_int(netif.rx_dropped),
out_mcast=_safe_int(netif.tx_multicast), in_err=_safe_int(netif.rx_errors),
out_bcast=_safe_int(netif.tx_broadcast), out_octets=_safe_int(netif.tx_bytes),
out_discards=_safe_int(netif.tx_dropped), out_ucast=_safe_int(netif.tx_packets),
out_errors=_safe_int(netif.tx_errors), out_mcast=_safe_int(netif.tx_multicast),
out_bcast=_safe_int(netif.tx_broadcast),
out_disc=_safe_int(netif.tx_dropped),
out_err=_safe_int(netif.tx_errors),
),
jumbo=True if netif.jumbo == "1" else False, jumbo=True if netif.jumbo == "1" else False,
satisfaction=_safe_int(netif.satisfaction) if netif.satisfaction and netif.oper_status == "1" else 0, satisfaction=_safe_int(netif.satisfaction) if netif.satisfaction and netif.oper_status == "1" else 0,
poe_enable=True if netif.poe_enable == "1" else False, poe_enable=True if netif.poe_enable == "1" else False,
@ -540,7 +533,7 @@ def check_unifi_network_port_if( ##fixme parsed_section_name
section: Section, section: Section,
) -> CheckResult: ) -> CheckResult:
_converted_ifs = _convert_unifi_counters_if(section) _converted_ifs = _convert_unifi_counters_if(section)
iface = next(filter(lambda x: _safe_int(item,-1) == _safe_int(x.index) or item == x.alias,_converted_ifs),None) ## fix Service Discovery appearance alias/descr iface = next(filter(lambda x: _safe_int(item,-1) == _safe_int(x.attributes.index) or item == x.attributes.alias,_converted_ifs),None) ## fix Service Discovery appearance alias/descr
yield from interfaces.check_multiple_interfaces( yield from interfaces.check_multiple_interfaces(
item, item,
params, params,
@ -673,41 +666,42 @@ def discovery_unifi_ssids(section):
def check_unifi_ssids(item,section): def check_unifi_ssids(item,section):
ssid = section.get(item) ssid = section.get(item)
_channels = ",".join(list(filter(lambda x: _safe_int(x) > 0,[ssid.ng_channel,ssid.na_channel]))) if ssid:
yield Result( _channels = ",".join(list(filter(lambda x: _safe_int(x) > 0,[ssid.ng_channel,ssid.na_channel])))
state=State.OK,
summary=f"Channels: {_channels}"
)
if (_safe_int(ssid.ng_is_guest) + _safe_int(ssid.na_is_guest)) > 0:
yield Result( yield Result(
state=State.OK, state=State.OK,
summary="Guest" summary=f"Channels: {_channels}"
) )
_satisfaction = max(0,min(_safe_int(ssid.ng_satisfaction),_safe_int(ssid.na_satisfaction))) if (_safe_int(ssid.ng_is_guest) + _safe_int(ssid.na_is_guest)) > 0:
yield Result( yield Result(
state=State.OK, state=State.OK,
summary=f"Satisfaction: {_satisfaction}" summary="Guest"
) )
_num_sta = _safe_int(ssid.na_num_sta) + _safe_int(ssid.ng_num_sta) _satisfaction = max(0,min(_safe_int(ssid.ng_satisfaction),_safe_int(ssid.na_satisfaction)))
if _num_sta > 0:
yield Result( yield Result(
state=State.OK, state=State.OK,
summary=f"User: {_num_sta}" summary=f"Satisfaction: {_satisfaction}"
) )
yield Metric("satisfaction",max(0,_satisfaction)) _num_sta = _safe_int(ssid.na_num_sta) + _safe_int(ssid.ng_num_sta)
yield Metric("wlan_24Ghz_num_user",_safe_int(ssid.ng_num_sta) ) if _num_sta > 0:
yield Metric("wlan_5Ghz_num_user",_safe_int(ssid.na_num_sta) ) yield Result(
state=State.OK,
yield Metric("na_avg_client_signal",_safe_int(ssid.na_avg_client_signal)) summary=f"User: {_num_sta}"
yield Metric("ng_avg_client_signal",_safe_int(ssid.ng_avg_client_signal)) )
yield Metric("satisfaction",max(0,_satisfaction))
yield Metric("wlan_24Ghz_num_user",_safe_int(ssid.ng_num_sta) )
yield Metric("wlan_5Ghz_num_user",_safe_int(ssid.na_num_sta) )
yield Metric("na_tcp_packet_loss",_safe_int(ssid.na_tcp_packet_loss)) yield Metric("na_avg_client_signal",_safe_int(ssid.na_avg_client_signal))
yield Metric("ng_tcp_packet_loss",_safe_int(ssid.ng_tcp_packet_loss)) yield Metric("ng_avg_client_signal",_safe_int(ssid.ng_avg_client_signal))
yield Metric("na_wifi_retries",_safe_int(ssid.na_wifi_retries)) yield Metric("na_tcp_packet_loss",_safe_int(ssid.na_tcp_packet_loss))
yield Metric("ng_wifi_retries",_safe_int(ssid.ng_wifi_retries)) yield Metric("ng_tcp_packet_loss",_safe_int(ssid.ng_tcp_packet_loss))
yield Metric("na_wifi_latency",_safe_int(ssid.na_wifi_latency))
yield Metric("ng_wifi_latency",_safe_int(ssid.ng_wifi_latency)) yield Metric("na_wifi_retries",_safe_int(ssid.na_wifi_retries))
yield Metric("ng_wifi_retries",_safe_int(ssid.ng_wifi_retries))
yield Metric("na_wifi_latency",_safe_int(ssid.na_wifi_latency))
yield Metric("ng_wifi_latency",_safe_int(ssid.ng_wifi_latency))
@ -732,26 +726,27 @@ def discovery_unifi_ssidlist(section):
def check_unifi_ssidlist(item,section): def check_unifi_ssidlist(item,section):
ssid = section.get(item) ssid = section.get(item)
yield Result( if ssid:
state=State.OK, yield Result(
summary=f"Channels: {ssid.channels}" state=State.OK,
) summary=f"Channels: {ssid.channels}"
yield Result( )
state=State.OK, yield Result(
summary=f"User: {ssid.num_sta}" state=State.OK,
) summary=f"User: {ssid.num_sta}"
yield Metric("wlan_24Ghz_num_user",_safe_int(ssid.ng_num_sta) ) )
yield Metric("wlan_5Ghz_num_user",_safe_int(ssid.na_num_sta) ) yield Metric("wlan_24Ghz_num_user",_safe_int(ssid.ng_num_sta) )
yield Metric("na_avg_client_signal",_safe_int(ssid.na_avg_client_signal)) yield Metric("wlan_5Ghz_num_user",_safe_int(ssid.na_num_sta) )
yield Metric("ng_avg_client_signal",_safe_int(ssid.ng_avg_client_signal)) yield Metric("na_avg_client_signal",_safe_int(ssid.na_avg_client_signal))
yield Metric("ng_avg_client_signal",_safe_int(ssid.ng_avg_client_signal))
yield Metric("na_tcp_packet_loss",_safe_int(ssid.na_tcp_packet_loss))
yield Metric("ng_tcp_packet_loss",_safe_int(ssid.ng_tcp_packet_loss))
yield Metric("na_tcp_packet_loss",_safe_int(ssid.na_tcp_packet_loss)) yield Metric("na_wifi_retries",_safe_int(ssid.na_wifi_retries))
yield Metric("ng_tcp_packet_loss",_safe_int(ssid.ng_tcp_packet_loss)) yield Metric("ng_wifi_retries",_safe_int(ssid.ng_wifi_retries))
yield Metric("na_wifi_latency",_safe_int(ssid.na_wifi_latency))
yield Metric("na_wifi_retries",_safe_int(ssid.na_wifi_retries)) yield Metric("ng_wifi_latency",_safe_int(ssid.ng_wifi_latency))
yield Metric("ng_wifi_retries",_safe_int(ssid.ng_wifi_retries))
yield Metric("na_wifi_latency",_safe_int(ssid.na_wifi_latency))
yield Metric("ng_wifi_latency",_safe_int(ssid.ng_wifi_latency))
register.agent_section( register.agent_section(
name = 'unifi_ssid_list', name = 'unifi_ssid_list',
@ -766,5 +761,3 @@ register.check_plugin(
) )