Add controller 5.11 support.
This commit is contained in:
parent
36a47f5923
commit
493a399189
|
|
@ -12,3 +12,4 @@ install:
|
||||||
- dep ensure
|
- dep ensure
|
||||||
script:
|
script:
|
||||||
- golangci-lint run --enable-all -e G402
|
- golangci-lint run --enable-all -e G402
|
||||||
|
- go test ./...
|
||||||
|
|
|
||||||
|
|
@ -54,10 +54,11 @@ type Unifi struct {
|
||||||
baseURL string
|
baseURL string
|
||||||
ErrorLog Logger
|
ErrorLog Logger
|
||||||
DebugLog Logger
|
DebugLog Logger
|
||||||
|
*server
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server is the /status endpoint from the Unifi controller.
|
// server is the /status endpoint from the Unifi controller.
|
||||||
type Server struct {
|
type server struct {
|
||||||
Up FlexBool `json:"up"`
|
Up FlexBool `json:"up"`
|
||||||
ServerVersion string `json:"server_version"`
|
ServerVersion string `json:"server_version"`
|
||||||
UUID string `json:"uuid"`
|
UUID string `json:"uuid"`
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
package unifi
|
package unifi
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
// UAP represents all the data from the Ubiquiti Controller for a Unifi Access Point.
|
// UAP represents all the data from the Ubiquiti Controller for a Unifi Access Point.
|
||||||
type UAP struct {
|
type UAP struct {
|
||||||
|
|
@ -305,142 +308,7 @@ type UAP struct {
|
||||||
UplinkMac string `json:"uplink_mac"`
|
UplinkMac string `json:"uplink_mac"`
|
||||||
UplinkRemotePort int `json:"uplink_remote_port"`
|
UplinkRemotePort int `json:"uplink_remote_port"`
|
||||||
} `json:"last_uplink"`
|
} `json:"last_uplink"`
|
||||||
Stat struct {
|
Stat *UAPStat `json:"stat"`
|
||||||
SiteID string `json:"site_id"`
|
|
||||||
O string `json:"o"`
|
|
||||||
Oid string `json:"oid"`
|
|
||||||
Ap string `json:"ap"`
|
|
||||||
Time FlexInt `json:"time"`
|
|
||||||
Datetime time.Time `json:"datetime"`
|
|
||||||
GuestWifi0RxPackets FlexInt `json:"guest-wifi0-rx_packets"`
|
|
||||||
GuestWifi1RxPackets FlexInt `json:"guest-wifi1-rx_packets"`
|
|
||||||
UserWifi1RxPackets FlexInt `json:"user-wifi1-rx_packets"`
|
|
||||||
UserWifi0RxPackets FlexInt `json:"user-wifi0-rx_packets"`
|
|
||||||
UserRxPackets FlexInt `json:"user-rx_packets"`
|
|
||||||
GuestRxPackets FlexInt `json:"guest-rx_packets"`
|
|
||||||
Wifi0RxPackets FlexInt `json:"wifi0-rx_packets"`
|
|
||||||
Wifi1RxPackets FlexInt `json:"wifi1-rx_packets"`
|
|
||||||
RxPackets FlexInt `json:"rx_packets"`
|
|
||||||
GuestWifi0RxBytes FlexInt `json:"guest-wifi0-rx_bytes"`
|
|
||||||
GuestWifi1RxBytes FlexInt `json:"guest-wifi1-rx_bytes"`
|
|
||||||
UserWifi1RxBytes FlexInt `json:"user-wifi1-rx_bytes"`
|
|
||||||
UserWifi0RxBytes FlexInt `json:"user-wifi0-rx_bytes"`
|
|
||||||
UserRxBytes FlexInt `json:"user-rx_bytes"`
|
|
||||||
GuestRxBytes FlexInt `json:"guest-rx_bytes"`
|
|
||||||
Wifi0RxBytes FlexInt `json:"wifi0-rx_bytes"`
|
|
||||||
Wifi1RxBytes FlexInt `json:"wifi1-rx_bytes"`
|
|
||||||
RxBytes FlexInt `json:"rx_bytes"`
|
|
||||||
GuestWifi0RxErrors FlexInt `json:"guest-wifi0-rx_errors"`
|
|
||||||
GuestWifi1RxErrors FlexInt `json:"guest-wifi1-rx_errors"`
|
|
||||||
UserWifi1RxErrors FlexInt `json:"user-wifi1-rx_errors"`
|
|
||||||
UserWifi0RxErrors FlexInt `json:"user-wifi0-rx_errors"`
|
|
||||||
UserRxErrors FlexInt `json:"user-rx_errors"`
|
|
||||||
GuestRxErrors FlexInt `json:"guest-rx_errors"`
|
|
||||||
Wifi0RxErrors FlexInt `json:"wifi0-rx_errors"`
|
|
||||||
Wifi1RxErrors FlexInt `json:"wifi1-rx_errors"`
|
|
||||||
RxErrors FlexInt `json:"rx_errors"`
|
|
||||||
GuestWifi0RxDropped FlexInt `json:"guest-wifi0-rx_dropped"`
|
|
||||||
GuestWifi1RxDropped FlexInt `json:"guest-wifi1-rx_dropped"`
|
|
||||||
UserWifi1RxDropped FlexInt `json:"user-wifi1-rx_dropped"`
|
|
||||||
UserWifi0RxDropped FlexInt `json:"user-wifi0-rx_dropped"`
|
|
||||||
UserRxDropped FlexInt `json:"user-rx_dropped"`
|
|
||||||
GuestRxDropped FlexInt `json:"guest-rx_dropped"`
|
|
||||||
Wifi0RxDropped FlexInt `json:"wifi0-rx_dropped"`
|
|
||||||
Wifi1RxDropped FlexInt `json:"wifi1-rx_dropped"`
|
|
||||||
RxDropped FlexInt `json:"rx_dropped"`
|
|
||||||
GuestWifi0RxCrypts FlexInt `json:"guest-wifi0-rx_crypts"`
|
|
||||||
GuestWifi1RxCrypts FlexInt `json:"guest-wifi1-rx_crypts"`
|
|
||||||
UserWifi1RxCrypts FlexInt `json:"user-wifi1-rx_crypts"`
|
|
||||||
UserWifi0RxCrypts FlexInt `json:"user-wifi0-rx_crypts"`
|
|
||||||
UserRxCrypts FlexInt `json:"user-rx_crypts"`
|
|
||||||
GuestRxCrypts FlexInt `json:"guest-rx_crypts"`
|
|
||||||
Wifi0RxCrypts FlexInt `json:"wifi0-rx_crypts"`
|
|
||||||
Wifi1RxCrypts FlexInt `json:"wifi1-rx_crypts"`
|
|
||||||
RxCrypts FlexInt `json:"rx_crypts"`
|
|
||||||
GuestWifi0RxFrags FlexInt `json:"guest-wifi0-rx_frags"`
|
|
||||||
GuestWifi1RxFrags FlexInt `json:"guest-wifi1-rx_frags"`
|
|
||||||
UserWifi1RxFrags FlexInt `json:"user-wifi1-rx_frags"`
|
|
||||||
UserWifi0RxFrags FlexInt `json:"user-wifi0-rx_frags"`
|
|
||||||
UserRxFrags FlexInt `json:"user-rx_frags"`
|
|
||||||
GuestRxFrags FlexInt `json:"guest-rx_frags"`
|
|
||||||
Wifi0RxFrags FlexInt `json:"wifi0-rx_frags"`
|
|
||||||
Wifi1RxFrags FlexInt `json:"wifi1-rx_frags"`
|
|
||||||
RxFrags FlexInt `json:"rx_frags"`
|
|
||||||
GuestWifi0TxPackets FlexInt `json:"guest-wifi0-tx_packets"`
|
|
||||||
GuestWifi1TxPackets FlexInt `json:"guest-wifi1-tx_packets"`
|
|
||||||
UserWifi1TxPackets FlexInt `json:"user-wifi1-tx_packets"`
|
|
||||||
UserWifi0TxPackets FlexInt `json:"user-wifi0-tx_packets"`
|
|
||||||
UserTxPackets FlexInt `json:"user-tx_packets"`
|
|
||||||
GuestTxPackets FlexInt `json:"guest-tx_packets"`
|
|
||||||
Wifi0TxPackets FlexInt `json:"wifi0-tx_packets"`
|
|
||||||
Wifi1TxPackets FlexInt `json:"wifi1-tx_packets"`
|
|
||||||
TxPackets FlexInt `json:"tx_packets"`
|
|
||||||
GuestWifi0TxBytes FlexInt `json:"guest-wifi0-tx_bytes"`
|
|
||||||
GuestWifi1TxBytes FlexInt `json:"guest-wifi1-tx_bytes"`
|
|
||||||
UserWifi1TxBytes FlexInt `json:"user-wifi1-tx_bytes"`
|
|
||||||
UserWifi0TxBytes FlexInt `json:"user-wifi0-tx_bytes"`
|
|
||||||
UserTxBytes FlexInt `json:"user-tx_bytes"`
|
|
||||||
GuestTxBytes FlexInt `json:"guest-tx_bytes"`
|
|
||||||
Wifi0TxBytes FlexInt `json:"wifi0-tx_bytes"`
|
|
||||||
Wifi1TxBytes FlexInt `json:"wifi1-tx_bytes"`
|
|
||||||
TxBytes FlexInt `json:"tx_bytes"`
|
|
||||||
GuestWifi0TxErrors FlexInt `json:"guest-wifi0-tx_errors"`
|
|
||||||
GuestWifi1TxErrors FlexInt `json:"guest-wifi1-tx_errors"`
|
|
||||||
UserWifi1TxErrors FlexInt `json:"user-wifi1-tx_errors"`
|
|
||||||
UserWifi0TxErrors FlexInt `json:"user-wifi0-tx_errors"`
|
|
||||||
UserTxErrors FlexInt `json:"user-tx_errors"`
|
|
||||||
GuestTxErrors FlexInt `json:"guest-tx_errors"`
|
|
||||||
Wifi0TxErrors FlexInt `json:"wifi0-tx_errors"`
|
|
||||||
Wifi1TxErrors FlexInt `json:"wifi1-tx_errors"`
|
|
||||||
TxErrors FlexInt `json:"tx_errors"`
|
|
||||||
GuestWifi0TxDropped FlexInt `json:"guest-wifi0-tx_dropped"`
|
|
||||||
GuestWifi1TxDropped FlexInt `json:"guest-wifi1-tx_dropped"`
|
|
||||||
UserWifi1TxDropped FlexInt `json:"user-wifi1-tx_dropped"`
|
|
||||||
UserWifi0TxDropped FlexInt `json:"user-wifi0-tx_dropped"`
|
|
||||||
UserTxDropped FlexInt `json:"user-tx_dropped"`
|
|
||||||
GuestTxDropped FlexInt `json:"guest-tx_dropped"`
|
|
||||||
Wifi0TxDropped FlexInt `json:"wifi0-tx_dropped"`
|
|
||||||
Wifi1TxDropped FlexInt `json:"wifi1-tx_dropped"`
|
|
||||||
TxDropped FlexInt `json:"tx_dropped"`
|
|
||||||
GuestWifi0TxRetries FlexInt `json:"guest-wifi0-tx_retries"`
|
|
||||||
GuestWifi1TxRetries FlexInt `json:"guest-wifi1-tx_retries"`
|
|
||||||
UserWifi1TxRetries FlexInt `json:"user-wifi1-tx_retries"`
|
|
||||||
UserWifi0TxRetries FlexInt `json:"user-wifi0-tx_retries"`
|
|
||||||
UserTxRetries FlexInt `json:"user-tx_retries"`
|
|
||||||
GuestTxRetries FlexInt `json:"guest-tx_retries"`
|
|
||||||
Wifi0TxRetries FlexInt `json:"wifi0-tx_retries"`
|
|
||||||
Wifi1TxRetries FlexInt `json:"wifi1-tx_retries"`
|
|
||||||
TxRetries FlexInt `json:"tx_retries"`
|
|
||||||
GuestWifi0MacFilterRejections FlexInt `json:"guest-wifi0-mac_filter_rejections"`
|
|
||||||
GuestWifi1MacFilterRejections FlexInt `json:"guest-wifi1-mac_filter_rejections"`
|
|
||||||
UserWifi1MacFilterRejections FlexInt `json:"user-wifi1-mac_filter_rejections"`
|
|
||||||
UserWifi0MacFilterRejections FlexInt `json:"user-wifi0-mac_filter_rejections"`
|
|
||||||
UserMacFilterRejections FlexInt `json:"user-mac_filter_rejections"`
|
|
||||||
GuestMacFilterRejections FlexInt `json:"guest-mac_filter_rejections"`
|
|
||||||
Wifi0MacFilterRejections FlexInt `json:"wifi0-mac_filter_rejections"`
|
|
||||||
Wifi1MacFilterRejections FlexInt `json:"wifi1-mac_filter_rejections"`
|
|
||||||
MacFilterRejections FlexInt `json:"mac_filter_rejections"`
|
|
||||||
GuestWifi0WifiTxAttempts FlexInt `json:"guest-wifi0-wifi_tx_attempts"`
|
|
||||||
GuestWifi1WifiTxAttempts FlexInt `json:"guest-wifi1-wifi_tx_attempts"`
|
|
||||||
UserWifi1WifiTxAttempts FlexInt `json:"user-wifi1-wifi_tx_attempts"`
|
|
||||||
UserWifi0WifiTxAttempts FlexInt `json:"user-wifi0-wifi_tx_attempts"`
|
|
||||||
UserWifiTxAttempts FlexInt `json:"user-wifi_tx_attempts"`
|
|
||||||
GuestWifiTxAttempts FlexInt `json:"guest-wifi_tx_attempts"`
|
|
||||||
Wifi0WifiTxAttempts FlexInt `json:"wifi0-wifi_tx_attempts"`
|
|
||||||
Wifi1WifiTxAttempts FlexInt `json:"wifi1-wifi_tx_attempts"`
|
|
||||||
WifiTxAttempts FlexInt `json:"wifi_tx_attempts"`
|
|
||||||
GuestWifi0WifiTxDropped FlexInt `json:"guest-wifi0-wifi_tx_dropped"`
|
|
||||||
GuestWifi1WifiTxDropped FlexInt `json:"guest-wifi1-wifi_tx_dropped"`
|
|
||||||
UserWifi1WifiTxDropped FlexInt `json:"user-wifi1-wifi_tx_dropped"`
|
|
||||||
UserWifi0WifiTxDropped FlexInt `json:"user-wifi0-wifi_tx_dropped"`
|
|
||||||
UserWifiTxDropped FlexInt `json:"user-wifi_tx_dropped"`
|
|
||||||
GuestWifiTxDropped FlexInt `json:"guest-wifi_tx_dropped"`
|
|
||||||
Wifi0WifiTxDropped FlexInt `json:"wifi0-wifi_tx_dropped"`
|
|
||||||
Wifi1WifiTxDropped FlexInt `json:"wifi1-wifi_tx_dropped"`
|
|
||||||
WifiTxDropped FlexInt `json:"wifi_tx_dropped"`
|
|
||||||
Bytes FlexInt `json:"bytes"`
|
|
||||||
Duration FlexInt `json:"duration"`
|
|
||||||
} `json:"stat,omitempty"`
|
|
||||||
TxBytes FlexInt `json:"tx_bytes"`
|
TxBytes FlexInt `json:"tx_bytes"`
|
||||||
RxBytes FlexInt `json:"rx_bytes"`
|
RxBytes FlexInt `json:"rx_bytes"`
|
||||||
Bytes FlexInt `json:"bytes"`
|
Bytes FlexInt `json:"bytes"`
|
||||||
|
|
@ -451,3 +319,158 @@ type UAP struct {
|
||||||
GuestNumSta int `json:"guest-num_sta"`
|
GuestNumSta int `json:"guest-num_sta"`
|
||||||
TwoPhaseAdopt FlexBool `json:"two_phase_adopt,omitempty"`
|
TwoPhaseAdopt FlexBool `json:"two_phase_adopt,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UAPStat holds the "stat" data for an access point.
|
||||||
|
// This is split out because of a JSON data format change from 5.10 to 5.11.
|
||||||
|
type UAPStat struct {
|
||||||
|
*ap
|
||||||
|
}
|
||||||
|
type ap struct {
|
||||||
|
SiteID string `json:"site_id"`
|
||||||
|
O string `json:"o"`
|
||||||
|
Oid string `json:"oid"`
|
||||||
|
Ap string `json:"ap"`
|
||||||
|
Time FlexInt `json:"time"`
|
||||||
|
Datetime time.Time `json:"datetime"`
|
||||||
|
GuestWifi0RxPackets FlexInt `json:"guest-wifi0-rx_packets"`
|
||||||
|
GuestWifi1RxPackets FlexInt `json:"guest-wifi1-rx_packets"`
|
||||||
|
UserWifi1RxPackets FlexInt `json:"user-wifi1-rx_packets"`
|
||||||
|
UserWifi0RxPackets FlexInt `json:"user-wifi0-rx_packets"`
|
||||||
|
UserRxPackets FlexInt `json:"user-rx_packets"`
|
||||||
|
GuestRxPackets FlexInt `json:"guest-rx_packets"`
|
||||||
|
Wifi0RxPackets FlexInt `json:"wifi0-rx_packets"`
|
||||||
|
Wifi1RxPackets FlexInt `json:"wifi1-rx_packets"`
|
||||||
|
RxPackets FlexInt `json:"rx_packets"`
|
||||||
|
GuestWifi0RxBytes FlexInt `json:"guest-wifi0-rx_bytes"`
|
||||||
|
GuestWifi1RxBytes FlexInt `json:"guest-wifi1-rx_bytes"`
|
||||||
|
UserWifi1RxBytes FlexInt `json:"user-wifi1-rx_bytes"`
|
||||||
|
UserWifi0RxBytes FlexInt `json:"user-wifi0-rx_bytes"`
|
||||||
|
UserRxBytes FlexInt `json:"user-rx_bytes"`
|
||||||
|
GuestRxBytes FlexInt `json:"guest-rx_bytes"`
|
||||||
|
Wifi0RxBytes FlexInt `json:"wifi0-rx_bytes"`
|
||||||
|
Wifi1RxBytes FlexInt `json:"wifi1-rx_bytes"`
|
||||||
|
RxBytes FlexInt `json:"rx_bytes"`
|
||||||
|
GuestWifi0RxErrors FlexInt `json:"guest-wifi0-rx_errors"`
|
||||||
|
GuestWifi1RxErrors FlexInt `json:"guest-wifi1-rx_errors"`
|
||||||
|
UserWifi1RxErrors FlexInt `json:"user-wifi1-rx_errors"`
|
||||||
|
UserWifi0RxErrors FlexInt `json:"user-wifi0-rx_errors"`
|
||||||
|
UserRxErrors FlexInt `json:"user-rx_errors"`
|
||||||
|
GuestRxErrors FlexInt `json:"guest-rx_errors"`
|
||||||
|
Wifi0RxErrors FlexInt `json:"wifi0-rx_errors"`
|
||||||
|
Wifi1RxErrors FlexInt `json:"wifi1-rx_errors"`
|
||||||
|
RxErrors FlexInt `json:"rx_errors"`
|
||||||
|
GuestWifi0RxDropped FlexInt `json:"guest-wifi0-rx_dropped"`
|
||||||
|
GuestWifi1RxDropped FlexInt `json:"guest-wifi1-rx_dropped"`
|
||||||
|
UserWifi1RxDropped FlexInt `json:"user-wifi1-rx_dropped"`
|
||||||
|
UserWifi0RxDropped FlexInt `json:"user-wifi0-rx_dropped"`
|
||||||
|
UserRxDropped FlexInt `json:"user-rx_dropped"`
|
||||||
|
GuestRxDropped FlexInt `json:"guest-rx_dropped"`
|
||||||
|
Wifi0RxDropped FlexInt `json:"wifi0-rx_dropped"`
|
||||||
|
Wifi1RxDropped FlexInt `json:"wifi1-rx_dropped"`
|
||||||
|
RxDropped FlexInt `json:"rx_dropped"`
|
||||||
|
GuestWifi0RxCrypts FlexInt `json:"guest-wifi0-rx_crypts"`
|
||||||
|
GuestWifi1RxCrypts FlexInt `json:"guest-wifi1-rx_crypts"`
|
||||||
|
UserWifi1RxCrypts FlexInt `json:"user-wifi1-rx_crypts"`
|
||||||
|
UserWifi0RxCrypts FlexInt `json:"user-wifi0-rx_crypts"`
|
||||||
|
UserRxCrypts FlexInt `json:"user-rx_crypts"`
|
||||||
|
GuestRxCrypts FlexInt `json:"guest-rx_crypts"`
|
||||||
|
Wifi0RxCrypts FlexInt `json:"wifi0-rx_crypts"`
|
||||||
|
Wifi1RxCrypts FlexInt `json:"wifi1-rx_crypts"`
|
||||||
|
RxCrypts FlexInt `json:"rx_crypts"`
|
||||||
|
GuestWifi0RxFrags FlexInt `json:"guest-wifi0-rx_frags"`
|
||||||
|
GuestWifi1RxFrags FlexInt `json:"guest-wifi1-rx_frags"`
|
||||||
|
UserWifi1RxFrags FlexInt `json:"user-wifi1-rx_frags"`
|
||||||
|
UserWifi0RxFrags FlexInt `json:"user-wifi0-rx_frags"`
|
||||||
|
UserRxFrags FlexInt `json:"user-rx_frags"`
|
||||||
|
GuestRxFrags FlexInt `json:"guest-rx_frags"`
|
||||||
|
Wifi0RxFrags FlexInt `json:"wifi0-rx_frags"`
|
||||||
|
Wifi1RxFrags FlexInt `json:"wifi1-rx_frags"`
|
||||||
|
RxFrags FlexInt `json:"rx_frags"`
|
||||||
|
GuestWifi0TxPackets FlexInt `json:"guest-wifi0-tx_packets"`
|
||||||
|
GuestWifi1TxPackets FlexInt `json:"guest-wifi1-tx_packets"`
|
||||||
|
UserWifi1TxPackets FlexInt `json:"user-wifi1-tx_packets"`
|
||||||
|
UserWifi0TxPackets FlexInt `json:"user-wifi0-tx_packets"`
|
||||||
|
UserTxPackets FlexInt `json:"user-tx_packets"`
|
||||||
|
GuestTxPackets FlexInt `json:"guest-tx_packets"`
|
||||||
|
Wifi0TxPackets FlexInt `json:"wifi0-tx_packets"`
|
||||||
|
Wifi1TxPackets FlexInt `json:"wifi1-tx_packets"`
|
||||||
|
TxPackets FlexInt `json:"tx_packets"`
|
||||||
|
GuestWifi0TxBytes FlexInt `json:"guest-wifi0-tx_bytes"`
|
||||||
|
GuestWifi1TxBytes FlexInt `json:"guest-wifi1-tx_bytes"`
|
||||||
|
UserWifi1TxBytes FlexInt `json:"user-wifi1-tx_bytes"`
|
||||||
|
UserWifi0TxBytes FlexInt `json:"user-wifi0-tx_bytes"`
|
||||||
|
UserTxBytes FlexInt `json:"user-tx_bytes"`
|
||||||
|
GuestTxBytes FlexInt `json:"guest-tx_bytes"`
|
||||||
|
Wifi0TxBytes FlexInt `json:"wifi0-tx_bytes"`
|
||||||
|
Wifi1TxBytes FlexInt `json:"wifi1-tx_bytes"`
|
||||||
|
TxBytes FlexInt `json:"tx_bytes"`
|
||||||
|
GuestWifi0TxErrors FlexInt `json:"guest-wifi0-tx_errors"`
|
||||||
|
GuestWifi1TxErrors FlexInt `json:"guest-wifi1-tx_errors"`
|
||||||
|
UserWifi1TxErrors FlexInt `json:"user-wifi1-tx_errors"`
|
||||||
|
UserWifi0TxErrors FlexInt `json:"user-wifi0-tx_errors"`
|
||||||
|
UserTxErrors FlexInt `json:"user-tx_errors"`
|
||||||
|
GuestTxErrors FlexInt `json:"guest-tx_errors"`
|
||||||
|
Wifi0TxErrors FlexInt `json:"wifi0-tx_errors"`
|
||||||
|
Wifi1TxErrors FlexInt `json:"wifi1-tx_errors"`
|
||||||
|
TxErrors FlexInt `json:"tx_errors"`
|
||||||
|
GuestWifi0TxDropped FlexInt `json:"guest-wifi0-tx_dropped"`
|
||||||
|
GuestWifi1TxDropped FlexInt `json:"guest-wifi1-tx_dropped"`
|
||||||
|
UserWifi1TxDropped FlexInt `json:"user-wifi1-tx_dropped"`
|
||||||
|
UserWifi0TxDropped FlexInt `json:"user-wifi0-tx_dropped"`
|
||||||
|
UserTxDropped FlexInt `json:"user-tx_dropped"`
|
||||||
|
GuestTxDropped FlexInt `json:"guest-tx_dropped"`
|
||||||
|
Wifi0TxDropped FlexInt `json:"wifi0-tx_dropped"`
|
||||||
|
Wifi1TxDropped FlexInt `json:"wifi1-tx_dropped"`
|
||||||
|
TxDropped FlexInt `json:"tx_dropped"`
|
||||||
|
GuestWifi0TxRetries FlexInt `json:"guest-wifi0-tx_retries"`
|
||||||
|
GuestWifi1TxRetries FlexInt `json:"guest-wifi1-tx_retries"`
|
||||||
|
UserWifi1TxRetries FlexInt `json:"user-wifi1-tx_retries"`
|
||||||
|
UserWifi0TxRetries FlexInt `json:"user-wifi0-tx_retries"`
|
||||||
|
UserTxRetries FlexInt `json:"user-tx_retries"`
|
||||||
|
GuestTxRetries FlexInt `json:"guest-tx_retries"`
|
||||||
|
Wifi0TxRetries FlexInt `json:"wifi0-tx_retries"`
|
||||||
|
Wifi1TxRetries FlexInt `json:"wifi1-tx_retries"`
|
||||||
|
TxRetries FlexInt `json:"tx_retries"`
|
||||||
|
GuestWifi0MacFilterRejections FlexInt `json:"guest-wifi0-mac_filter_rejections"`
|
||||||
|
GuestWifi1MacFilterRejections FlexInt `json:"guest-wifi1-mac_filter_rejections"`
|
||||||
|
UserWifi1MacFilterRejections FlexInt `json:"user-wifi1-mac_filter_rejections"`
|
||||||
|
UserWifi0MacFilterRejections FlexInt `json:"user-wifi0-mac_filter_rejections"`
|
||||||
|
UserMacFilterRejections FlexInt `json:"user-mac_filter_rejections"`
|
||||||
|
GuestMacFilterRejections FlexInt `json:"guest-mac_filter_rejections"`
|
||||||
|
Wifi0MacFilterRejections FlexInt `json:"wifi0-mac_filter_rejections"`
|
||||||
|
Wifi1MacFilterRejections FlexInt `json:"wifi1-mac_filter_rejections"`
|
||||||
|
MacFilterRejections FlexInt `json:"mac_filter_rejections"`
|
||||||
|
GuestWifi0WifiTxAttempts FlexInt `json:"guest-wifi0-wifi_tx_attempts"`
|
||||||
|
GuestWifi1WifiTxAttempts FlexInt `json:"guest-wifi1-wifi_tx_attempts"`
|
||||||
|
UserWifi1WifiTxAttempts FlexInt `json:"user-wifi1-wifi_tx_attempts"`
|
||||||
|
UserWifi0WifiTxAttempts FlexInt `json:"user-wifi0-wifi_tx_attempts"`
|
||||||
|
UserWifiTxAttempts FlexInt `json:"user-wifi_tx_attempts"`
|
||||||
|
GuestWifiTxAttempts FlexInt `json:"guest-wifi_tx_attempts"`
|
||||||
|
Wifi0WifiTxAttempts FlexInt `json:"wifi0-wifi_tx_attempts"`
|
||||||
|
Wifi1WifiTxAttempts FlexInt `json:"wifi1-wifi_tx_attempts"`
|
||||||
|
WifiTxAttempts FlexInt `json:"wifi_tx_attempts"`
|
||||||
|
GuestWifi0WifiTxDropped FlexInt `json:"guest-wifi0-wifi_tx_dropped"`
|
||||||
|
GuestWifi1WifiTxDropped FlexInt `json:"guest-wifi1-wifi_tx_dropped"`
|
||||||
|
UserWifi1WifiTxDropped FlexInt `json:"user-wifi1-wifi_tx_dropped"`
|
||||||
|
UserWifi0WifiTxDropped FlexInt `json:"user-wifi0-wifi_tx_dropped"`
|
||||||
|
UserWifiTxDropped FlexInt `json:"user-wifi_tx_dropped"`
|
||||||
|
GuestWifiTxDropped FlexInt `json:"guest-wifi_tx_dropped"`
|
||||||
|
Wifi0WifiTxDropped FlexInt `json:"wifi0-wifi_tx_dropped"`
|
||||||
|
Wifi1WifiTxDropped FlexInt `json:"wifi1-wifi_tx_dropped"`
|
||||||
|
WifiTxDropped FlexInt `json:"wifi_tx_dropped"`
|
||||||
|
Bytes FlexInt `json:"bytes"`
|
||||||
|
Duration FlexInt `json:"duration"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON unmarshalls 5.10 or 5.11 formatted Access Point Stat data.
|
||||||
|
func (v *UAPStat) UnmarshalJSON(data []byte) error {
|
||||||
|
var n struct {
|
||||||
|
ap `json:"ap"`
|
||||||
|
}
|
||||||
|
v.ap = &n.ap
|
||||||
|
err := json.Unmarshal(data, v.ap) // controller version 5.10.
|
||||||
|
if err != nil {
|
||||||
|
return json.Unmarshal(data, &n) // controller version 5.11.
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
package unifi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUAPUnmarshalJSON(t *testing.T) {
|
||||||
|
testcontroller511 := `{
|
||||||
|
"ap": {
|
||||||
|
"site_id": "mySite",
|
||||||
|
"o": "ap",
|
||||||
|
"oid": "00:00:00:00:00:00",
|
||||||
|
"ap": "00:00:00:00:00:00",
|
||||||
|
"time": 1577742600000,
|
||||||
|
"datetime": "2019-12-30T09:50:00Z",
|
||||||
|
"user-wifi1-rx_packets": 6596670,
|
||||||
|
"user-wifi0-rx_packets": 42659527,
|
||||||
|
"user-rx_packets": 49294197,
|
||||||
|
"guest-rx_packets": 0,
|
||||||
|
"wifi0-rx_packets": 42639527,
|
||||||
|
"wifi1-rx_packets": 6591670,
|
||||||
|
"rx_packets": 49299197}}`
|
||||||
|
|
||||||
|
testcontroller510 := `{
|
||||||
|
"site_id": "mySite",
|
||||||
|
"o": "ap",
|
||||||
|
"oid": "00:00:00:00:00:00",
|
||||||
|
"ap": "00:00:00:00:00:00",
|
||||||
|
"time": 1577742600000,
|
||||||
|
"datetime": "2019-12-30T09:50:00Z",
|
||||||
|
"user-wifi1-rx_packets": 6596670,
|
||||||
|
"user-wifi0-rx_packets": 42659527,
|
||||||
|
"user-rx_packets": 49294197,
|
||||||
|
"guest-rx_packets": 0,
|
||||||
|
"wifi0-rx_packets": 42639527,
|
||||||
|
"wifi1-rx_packets": 6591670,
|
||||||
|
"rx_packets": 49299197}`
|
||||||
|
|
||||||
|
t.Parallel()
|
||||||
|
a := assert.New(t)
|
||||||
|
|
||||||
|
u := &UAPStat{}
|
||||||
|
err := u.UnmarshalJSON([]byte(testcontroller510))
|
||||||
|
a.Nil(err, "must be no error unmarshaling test strings")
|
||||||
|
a.Equal(float64(49299197), u.RxPackets.Val, "data was not properly unmarshaled")
|
||||||
|
|
||||||
|
u = &UAPStat{} // reset
|
||||||
|
err = u.UnmarshalJSON([]byte(testcontroller511))
|
||||||
|
a.Nil(err, "must be no error unmarshaling test strings")
|
||||||
|
a.Equal(float64(49299197), u.RxPackets.Val, "data was not properly unmarshaled")
|
||||||
|
}
|
||||||
|
|
@ -58,16 +58,22 @@ func (u *Unifi) getController(user, pass string) error {
|
||||||
return errors.Errorf("authentication failed (user: %s): %s (status: %s)",
|
return errors.Errorf("authentication failed (user: %s): %s (status: %s)",
|
||||||
user, u.baseURL+LoginPath, resp.Status)
|
user, u.baseURL+LoginPath, resp.Status)
|
||||||
}
|
}
|
||||||
return nil
|
return errors.Wrap(u.getServer(), "unable to get server version")
|
||||||
|
}
|
||||||
|
|
||||||
|
// getServer sets the controller's version and UUID.
|
||||||
|
func (u *Unifi) getServer() error {
|
||||||
|
var response struct {
|
||||||
|
Data server `json:"meta"`
|
||||||
|
}
|
||||||
|
u.server = &response.Data
|
||||||
|
return u.GetData(StatusPath, &response)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetServer returns the controller's version and UUID.
|
// GetServer returns the controller's version and UUID.
|
||||||
func (u *Unifi) GetServer() (Server, error) {
|
// This method is deprecated and will go away in a future release, use u.Server*
|
||||||
var response struct {
|
func (u *Unifi) GetServer() (*server, error) {
|
||||||
Data Server `json:"meta"`
|
return u.server, nil
|
||||||
}
|
|
||||||
err := u.GetData(StatusPath, &response)
|
|
||||||
return response.Data, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetClients returns a response full of clients' data from the Unifi Controller.
|
// GetClients returns a response full of clients' data from the Unifi Controller.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
package unifi
|
package unifi
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
// USG represents all the data from the Ubiquiti Controller for a Unifi Security Gateway.
|
// USG represents all the data from the Ubiquiti Controller for a Unifi Security Gateway.
|
||||||
type USG struct {
|
type USG struct {
|
||||||
|
|
@ -230,32 +233,53 @@ type USG struct {
|
||||||
MaxSpeed FlexInt `json:"max_speed"`
|
MaxSpeed FlexInt `json:"max_speed"`
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
} `json:"uplink"`
|
} `json:"uplink"`
|
||||||
Stat struct {
|
Stat *USGStat `json:"stat"`
|
||||||
SiteID string `json:"site_id"`
|
TxBytes FlexInt `json:"tx_bytes"`
|
||||||
O string `json:"o"`
|
RxBytes FlexInt `json:"rx_bytes"`
|
||||||
Oid string `json:"oid"`
|
Bytes FlexInt `json:"bytes"`
|
||||||
Gw string `json:"gw"`
|
NumSta FlexInt `json:"num_sta"`
|
||||||
Time FlexInt `json:"time"`
|
UserNumSta FlexInt `json:"user-num_sta"`
|
||||||
Datetime time.Time `json:"datetime"`
|
GuestNumSta FlexInt `json:"guest-num_sta"`
|
||||||
Duration FlexInt `json:"duration"`
|
NumDesktop FlexInt `json:"num_desktop"`
|
||||||
WanRxPackets FlexInt `json:"wan-rx_packets"`
|
NumMobile FlexInt `json:"num_mobile"`
|
||||||
WanRxBytes FlexInt `json:"wan-rx_bytes"`
|
NumHandheld FlexInt `json:"num_handheld"`
|
||||||
WanTxPackets FlexInt `json:"wan-tx_packets"`
|
}
|
||||||
WanTxBytes FlexInt `json:"wan-tx_bytes"`
|
|
||||||
LanRxPackets FlexInt `json:"lan-rx_packets"`
|
// USGStat holds the "stat" data for a gateway.
|
||||||
LanRxBytes FlexInt `json:"lan-rx_bytes"`
|
// This is split out because of a JSON data format change from 5.10 to 5.11.
|
||||||
LanTxPackets FlexInt `json:"lan-tx_packets"`
|
type USGStat struct {
|
||||||
LanTxBytes FlexInt `json:"lan-tx_bytes"`
|
*gw
|
||||||
WanRxDropped FlexInt `json:"wan-rx_dropped"`
|
}
|
||||||
LanRxDropped FlexInt `json:"lan-rx_dropped"`
|
|
||||||
} `json:"stat"`
|
type gw struct {
|
||||||
TxBytes FlexInt `json:"tx_bytes"`
|
SiteID string `json:"site_id"`
|
||||||
RxBytes FlexInt `json:"rx_bytes"`
|
O string `json:"o"`
|
||||||
Bytes FlexInt `json:"bytes"`
|
Oid string `json:"oid"`
|
||||||
NumSta FlexInt `json:"num_sta"`
|
Gw string `json:"gw"`
|
||||||
UserNumSta FlexInt `json:"user-num_sta"`
|
Time FlexInt `json:"time"`
|
||||||
GuestNumSta FlexInt `json:"guest-num_sta"`
|
Datetime time.Time `json:"datetime"`
|
||||||
NumDesktop FlexInt `json:"num_desktop"`
|
Duration FlexInt `json:"duration"`
|
||||||
NumMobile FlexInt `json:"num_mobile"`
|
WanRxPackets FlexInt `json:"wan-rx_packets"`
|
||||||
NumHandheld FlexInt `json:"num_handheld"`
|
WanRxBytes FlexInt `json:"wan-rx_bytes"`
|
||||||
|
WanTxPackets FlexInt `json:"wan-tx_packets"`
|
||||||
|
WanTxBytes FlexInt `json:"wan-tx_bytes"`
|
||||||
|
LanRxPackets FlexInt `json:"lan-rx_packets"`
|
||||||
|
LanRxBytes FlexInt `json:"lan-rx_bytes"`
|
||||||
|
LanTxPackets FlexInt `json:"lan-tx_packets"`
|
||||||
|
LanTxBytes FlexInt `json:"lan-tx_bytes"`
|
||||||
|
WanRxDropped FlexInt `json:"wan-rx_dropped"`
|
||||||
|
LanRxDropped FlexInt `json:"lan-rx_dropped"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON unmarshalls 5.10 or 5.11 formatted Gateway Stat data.
|
||||||
|
func (v *USGStat) UnmarshalJSON(data []byte) error {
|
||||||
|
var n struct {
|
||||||
|
gw `json:"gw"`
|
||||||
|
}
|
||||||
|
v.gw = &n.gw
|
||||||
|
err := json.Unmarshal(data, v.gw) // controller version 5.10.
|
||||||
|
if err != nil {
|
||||||
|
return json.Unmarshal(data, &n) // controller version 5.11.
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
package unifi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUSGUnmarshalJSON(t *testing.T) {
|
||||||
|
testcontroller511 := `{
|
||||||
|
"gw": {
|
||||||
|
"site_id": "mySite",
|
||||||
|
"o": "gw",
|
||||||
|
"oid": "00:00:00:00:00:00",
|
||||||
|
"gw": "00:00:00:00:00:00",
|
||||||
|
"time": 1577742600000,
|
||||||
|
"datetime": "2019-12-30T09:50:00Z",
|
||||||
|
"bytes": 0,
|
||||||
|
"duration": 3590568000,
|
||||||
|
"wan-rx_packets": 299729434558,
|
||||||
|
"wan-rx_bytes": 299882768958208,
|
||||||
|
"wan-tx_packets": 249639259523,
|
||||||
|
"wan-tx_bytes": 169183252492369,
|
||||||
|
"lan-rx_packets": 78912349453,
|
||||||
|
"lan-rx_bytes": 37599596992669,
|
||||||
|
"lan-tx_packets": 12991234992,
|
||||||
|
"lan-tx_bytes": 11794664098210}}`
|
||||||
|
|
||||||
|
testcontroller510 := `{
|
||||||
|
"site_id": "mySite",
|
||||||
|
"o": "gw",
|
||||||
|
"oid": "00:00:00:00:00:00",
|
||||||
|
"gw": "00:00:00:00:00:00",
|
||||||
|
"time": 1577742600000,
|
||||||
|
"datetime": "2019-12-30T09:50:00Z",
|
||||||
|
"bytes": 0,
|
||||||
|
"duration": 3590568000,
|
||||||
|
"wan-rx_packets": 299729434558,
|
||||||
|
"wan-rx_bytes": 299882768958208,
|
||||||
|
"wan-tx_packets": 249639259523,
|
||||||
|
"wan-tx_bytes": 169183252492369,
|
||||||
|
"lan-rx_packets": 78912349453,
|
||||||
|
"lan-rx_bytes": 37599596992669,
|
||||||
|
"lan-tx_packets": 12991234992,
|
||||||
|
"lan-tx_bytes": 11794664098210}`
|
||||||
|
|
||||||
|
t.Parallel()
|
||||||
|
a := assert.New(t)
|
||||||
|
|
||||||
|
u := &USGStat{}
|
||||||
|
err := u.UnmarshalJSON([]byte(testcontroller510))
|
||||||
|
a.Nil(err, "must be no error unmarshaling test strings")
|
||||||
|
a.Equal(float64(37599596992669), u.LanRxBytes.Val, "data was not properly unmarshaled")
|
||||||
|
|
||||||
|
u = &USGStat{} // reset
|
||||||
|
err = u.UnmarshalJSON([]byte(testcontroller511))
|
||||||
|
a.Nil(err, "must be no error unmarshaling test strings")
|
||||||
|
a.Equal(float64(37599596992669), u.LanRxBytes.Val, "data was not properly unmarshaled")
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
package unifi
|
package unifi
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
// USW represents all the data from the Ubiquiti Controller for a Unifi Switch.
|
// USW represents all the data from the Ubiquiti Controller for a Unifi Switch.
|
||||||
type USW struct {
|
type USW struct {
|
||||||
|
|
@ -167,202 +170,223 @@ type USW struct {
|
||||||
LastUplink struct {
|
LastUplink struct {
|
||||||
UplinkMac string `json:"uplink_mac"`
|
UplinkMac string `json:"uplink_mac"`
|
||||||
} `json:"last_uplink"`
|
} `json:"last_uplink"`
|
||||||
UplinkDepth FlexInt `json:"uplink_depth"`
|
UplinkDepth FlexInt `json:"uplink_depth"`
|
||||||
Stat struct {
|
Stat *USWStat `json:"stat"`
|
||||||
SiteID string `json:"site_id"`
|
TxBytes FlexInt `json:"tx_bytes"`
|
||||||
O string `json:"o"`
|
RxBytes FlexInt `json:"rx_bytes"`
|
||||||
Oid string `json:"oid"`
|
Bytes FlexInt `json:"bytes"`
|
||||||
Sw string `json:"sw"`
|
NumSta FlexInt `json:"num_sta"`
|
||||||
Time FlexInt `json:"time"`
|
UserNumSta FlexInt `json:"user-num_sta"`
|
||||||
Datetime time.Time `json:"datetime"`
|
GuestNumSta FlexInt `json:"guest-num_sta"`
|
||||||
RxPackets FlexInt `json:"rx_packets"`
|
}
|
||||||
RxBytes FlexInt `json:"rx_bytes"`
|
|
||||||
RxErrors FlexInt `json:"rx_errors"`
|
// USWStat holds the "stat" data for a switch.
|
||||||
RxDropped FlexInt `json:"rx_dropped"`
|
// This is split out because of a JSON data format change from 5.10 to 5.11.
|
||||||
RxCrypts FlexInt `json:"rx_crypts"`
|
type USWStat struct {
|
||||||
RxFrags FlexInt `json:"rx_frags"`
|
*sw
|
||||||
TxPackets FlexInt `json:"tx_packets"`
|
}
|
||||||
TxBytes FlexInt `json:"tx_bytes"`
|
|
||||||
TxErrors FlexInt `json:"tx_errors"`
|
type sw struct {
|
||||||
TxDropped FlexInt `json:"tx_dropped"`
|
SiteID string `json:"site_id"`
|
||||||
TxRetries FlexInt `json:"tx_retries"`
|
O string `json:"o"`
|
||||||
RxMulticast FlexInt `json:"rx_multicast"`
|
Oid string `json:"oid"`
|
||||||
RxBroadcast FlexInt `json:"rx_broadcast"`
|
Sw string `json:"sw"`
|
||||||
TxMulticast FlexInt `json:"tx_multicast"`
|
Time FlexInt `json:"time"`
|
||||||
TxBroadcast FlexInt `json:"tx_broadcast"`
|
Datetime time.Time `json:"datetime"`
|
||||||
Bytes FlexInt `json:"bytes"`
|
RxPackets FlexInt `json:"rx_packets"`
|
||||||
Duration FlexInt `json:"duration"`
|
RxBytes FlexInt `json:"rx_bytes"`
|
||||||
Port1RxPackets FlexInt `json:"port_1-rx_packets"`
|
RxErrors FlexInt `json:"rx_errors"`
|
||||||
Port1RxBytes FlexInt `json:"port_1-rx_bytes"`
|
RxDropped FlexInt `json:"rx_dropped"`
|
||||||
Port1TxPackets FlexInt `json:"port_1-tx_packets"`
|
RxCrypts FlexInt `json:"rx_crypts"`
|
||||||
Port1TxBytes FlexInt `json:"port_1-tx_bytes"`
|
RxFrags FlexInt `json:"rx_frags"`
|
||||||
Port1TxMulticast FlexInt `json:"port_1-tx_multicast"`
|
TxPackets FlexInt `json:"tx_packets"`
|
||||||
Port1TxBroadcast FlexInt `json:"port_1-tx_broadcast"`
|
TxBytes FlexInt `json:"tx_bytes"`
|
||||||
Port3RxPackets FlexInt `json:"port_3-rx_packets"`
|
TxErrors FlexInt `json:"tx_errors"`
|
||||||
Port3RxBytes FlexInt `json:"port_3-rx_bytes"`
|
TxDropped FlexInt `json:"tx_dropped"`
|
||||||
Port3TxPackets FlexInt `json:"port_3-tx_packets"`
|
TxRetries FlexInt `json:"tx_retries"`
|
||||||
Port3TxBytes FlexInt `json:"port_3-tx_bytes"`
|
RxMulticast FlexInt `json:"rx_multicast"`
|
||||||
Port3RxBroadcast FlexInt `json:"port_3-rx_broadcast"`
|
RxBroadcast FlexInt `json:"rx_broadcast"`
|
||||||
Port3TxMulticast FlexInt `json:"port_3-tx_multicast"`
|
TxMulticast FlexInt `json:"tx_multicast"`
|
||||||
Port3TxBroadcast FlexInt `json:"port_3-tx_broadcast"`
|
TxBroadcast FlexInt `json:"tx_broadcast"`
|
||||||
Port6RxPackets FlexInt `json:"port_6-rx_packets"`
|
Bytes FlexInt `json:"bytes"`
|
||||||
Port6RxBytes FlexInt `json:"port_6-rx_bytes"`
|
Duration FlexInt `json:"duration"`
|
||||||
Port6TxPackets FlexInt `json:"port_6-tx_packets"`
|
Port1RxPackets FlexInt `json:"port_1-rx_packets"`
|
||||||
Port6TxBytes FlexInt `json:"port_6-tx_bytes"`
|
Port1RxBytes FlexInt `json:"port_1-rx_bytes"`
|
||||||
Port6RxMulticast FlexInt `json:"port_6-rx_multicast"`
|
Port1TxPackets FlexInt `json:"port_1-tx_packets"`
|
||||||
Port6TxMulticast FlexInt `json:"port_6-tx_multicast"`
|
Port1TxBytes FlexInt `json:"port_1-tx_bytes"`
|
||||||
Port6TxBroadcast FlexInt `json:"port_6-tx_broadcast"`
|
Port1TxMulticast FlexInt `json:"port_1-tx_multicast"`
|
||||||
Port7RxPackets FlexInt `json:"port_7-rx_packets"`
|
Port1TxBroadcast FlexInt `json:"port_1-tx_broadcast"`
|
||||||
Port7RxBytes FlexInt `json:"port_7-rx_bytes"`
|
Port3RxPackets FlexInt `json:"port_3-rx_packets"`
|
||||||
Port7TxPackets FlexInt `json:"port_7-tx_packets"`
|
Port3RxBytes FlexInt `json:"port_3-rx_bytes"`
|
||||||
Port7TxBytes FlexInt `json:"port_7-tx_bytes"`
|
Port3TxPackets FlexInt `json:"port_3-tx_packets"`
|
||||||
Port7TxMulticast FlexInt `json:"port_7-tx_multicast"`
|
Port3TxBytes FlexInt `json:"port_3-tx_bytes"`
|
||||||
Port7TxBroadcast FlexInt `json:"port_7-tx_broadcast"`
|
Port3RxBroadcast FlexInt `json:"port_3-rx_broadcast"`
|
||||||
Port9RxPackets FlexInt `json:"port_9-rx_packets"`
|
Port3TxMulticast FlexInt `json:"port_3-tx_multicast"`
|
||||||
Port9RxBytes FlexInt `json:"port_9-rx_bytes"`
|
Port3TxBroadcast FlexInt `json:"port_3-tx_broadcast"`
|
||||||
Port9TxPackets FlexInt `json:"port_9-tx_packets"`
|
Port6RxPackets FlexInt `json:"port_6-rx_packets"`
|
||||||
Port9TxBytes FlexInt `json:"port_9-tx_bytes"`
|
Port6RxBytes FlexInt `json:"port_6-rx_bytes"`
|
||||||
Port9TxMulticast FlexInt `json:"port_9-tx_multicast"`
|
Port6TxPackets FlexInt `json:"port_6-tx_packets"`
|
||||||
Port9TxBroadcast FlexInt `json:"port_9-tx_broadcast"`
|
Port6TxBytes FlexInt `json:"port_6-tx_bytes"`
|
||||||
Port10RxPackets FlexInt `json:"port_10-rx_packets"`
|
Port6RxMulticast FlexInt `json:"port_6-rx_multicast"`
|
||||||
Port10RxBytes FlexInt `json:"port_10-rx_bytes"`
|
Port6TxMulticast FlexInt `json:"port_6-tx_multicast"`
|
||||||
Port10TxPackets FlexInt `json:"port_10-tx_packets"`
|
Port6TxBroadcast FlexInt `json:"port_6-tx_broadcast"`
|
||||||
Port10TxBytes FlexInt `json:"port_10-tx_bytes"`
|
Port7RxPackets FlexInt `json:"port_7-rx_packets"`
|
||||||
Port10RxMulticast FlexInt `json:"port_10-rx_multicast"`
|
Port7RxBytes FlexInt `json:"port_7-rx_bytes"`
|
||||||
Port10TxMulticast FlexInt `json:"port_10-tx_multicast"`
|
Port7TxPackets FlexInt `json:"port_7-tx_packets"`
|
||||||
Port10TxBroadcast FlexInt `json:"port_10-tx_broadcast"`
|
Port7TxBytes FlexInt `json:"port_7-tx_bytes"`
|
||||||
Port11RxPackets FlexInt `json:"port_11-rx_packets"`
|
Port7TxMulticast FlexInt `json:"port_7-tx_multicast"`
|
||||||
Port11RxBytes FlexInt `json:"port_11-rx_bytes"`
|
Port7TxBroadcast FlexInt `json:"port_7-tx_broadcast"`
|
||||||
Port11TxPackets FlexInt `json:"port_11-tx_packets"`
|
Port9RxPackets FlexInt `json:"port_9-rx_packets"`
|
||||||
Port11TxBytes FlexInt `json:"port_11-tx_bytes"`
|
Port9RxBytes FlexInt `json:"port_9-rx_bytes"`
|
||||||
Port11TxMulticast FlexInt `json:"port_11-tx_multicast"`
|
Port9TxPackets FlexInt `json:"port_9-tx_packets"`
|
||||||
Port11TxBroadcast FlexInt `json:"port_11-tx_broadcast"`
|
Port9TxBytes FlexInt `json:"port_9-tx_bytes"`
|
||||||
Port12RxPackets FlexInt `json:"port_12-rx_packets"`
|
Port9TxMulticast FlexInt `json:"port_9-tx_multicast"`
|
||||||
Port12RxBytes FlexInt `json:"port_12-rx_bytes"`
|
Port9TxBroadcast FlexInt `json:"port_9-tx_broadcast"`
|
||||||
Port12TxPackets FlexInt `json:"port_12-tx_packets"`
|
Port10RxPackets FlexInt `json:"port_10-rx_packets"`
|
||||||
Port12TxBytes FlexInt `json:"port_12-tx_bytes"`
|
Port10RxBytes FlexInt `json:"port_10-rx_bytes"`
|
||||||
Port12TxMulticast FlexInt `json:"port_12-tx_multicast"`
|
Port10TxPackets FlexInt `json:"port_10-tx_packets"`
|
||||||
Port12TxBroadcast FlexInt `json:"port_12-tx_broadcast"`
|
Port10TxBytes FlexInt `json:"port_10-tx_bytes"`
|
||||||
Port13RxPackets FlexInt `json:"port_13-rx_packets"`
|
Port10RxMulticast FlexInt `json:"port_10-rx_multicast"`
|
||||||
Port13RxBytes FlexInt `json:"port_13-rx_bytes"`
|
Port10TxMulticast FlexInt `json:"port_10-tx_multicast"`
|
||||||
Port13TxPackets FlexInt `json:"port_13-tx_packets"`
|
Port10TxBroadcast FlexInt `json:"port_10-tx_broadcast"`
|
||||||
Port13TxBytes FlexInt `json:"port_13-tx_bytes"`
|
Port11RxPackets FlexInt `json:"port_11-rx_packets"`
|
||||||
Port13RxMulticast FlexInt `json:"port_13-rx_multicast"`
|
Port11RxBytes FlexInt `json:"port_11-rx_bytes"`
|
||||||
Port13RxBroadcast FlexInt `json:"port_13-rx_broadcast"`
|
Port11TxPackets FlexInt `json:"port_11-tx_packets"`
|
||||||
Port13TxMulticast FlexInt `json:"port_13-tx_multicast"`
|
Port11TxBytes FlexInt `json:"port_11-tx_bytes"`
|
||||||
Port13TxBroadcast FlexInt `json:"port_13-tx_broadcast"`
|
Port11TxMulticast FlexInt `json:"port_11-tx_multicast"`
|
||||||
Port15RxPackets FlexInt `json:"port_15-rx_packets"`
|
Port11TxBroadcast FlexInt `json:"port_11-tx_broadcast"`
|
||||||
Port15RxBytes FlexInt `json:"port_15-rx_bytes"`
|
Port12RxPackets FlexInt `json:"port_12-rx_packets"`
|
||||||
Port15TxPackets FlexInt `json:"port_15-tx_packets"`
|
Port12RxBytes FlexInt `json:"port_12-rx_bytes"`
|
||||||
Port15TxBytes FlexInt `json:"port_15-tx_bytes"`
|
Port12TxPackets FlexInt `json:"port_12-tx_packets"`
|
||||||
Port15RxBroadcast FlexInt `json:"port_15-rx_broadcast"`
|
Port12TxBytes FlexInt `json:"port_12-tx_bytes"`
|
||||||
Port15TxMulticast FlexInt `json:"port_15-tx_multicast"`
|
Port12TxMulticast FlexInt `json:"port_12-tx_multicast"`
|
||||||
Port15TxBroadcast FlexInt `json:"port_15-tx_broadcast"`
|
Port12TxBroadcast FlexInt `json:"port_12-tx_broadcast"`
|
||||||
Port16RxPackets FlexInt `json:"port_16-rx_packets"`
|
Port13RxPackets FlexInt `json:"port_13-rx_packets"`
|
||||||
Port16RxBytes FlexInt `json:"port_16-rx_bytes"`
|
Port13RxBytes FlexInt `json:"port_13-rx_bytes"`
|
||||||
Port16TxPackets FlexInt `json:"port_16-tx_packets"`
|
Port13TxPackets FlexInt `json:"port_13-tx_packets"`
|
||||||
Port16TxBytes FlexInt `json:"port_16-tx_bytes"`
|
Port13TxBytes FlexInt `json:"port_13-tx_bytes"`
|
||||||
Port16TxMulticast FlexInt `json:"port_16-tx_multicast"`
|
Port13RxMulticast FlexInt `json:"port_13-rx_multicast"`
|
||||||
Port16TxBroadcast FlexInt `json:"port_16-tx_broadcast"`
|
Port13RxBroadcast FlexInt `json:"port_13-rx_broadcast"`
|
||||||
Port17RxPackets FlexInt `json:"port_17-rx_packets"`
|
Port13TxMulticast FlexInt `json:"port_13-tx_multicast"`
|
||||||
Port17RxBytes FlexInt `json:"port_17-rx_bytes"`
|
Port13TxBroadcast FlexInt `json:"port_13-tx_broadcast"`
|
||||||
Port17TxPackets FlexInt `json:"port_17-tx_packets"`
|
Port15RxPackets FlexInt `json:"port_15-rx_packets"`
|
||||||
Port17TxBytes FlexInt `json:"port_17-tx_bytes"`
|
Port15RxBytes FlexInt `json:"port_15-rx_bytes"`
|
||||||
Port17TxMulticast FlexInt `json:"port_17-tx_multicast"`
|
Port15TxPackets FlexInt `json:"port_15-tx_packets"`
|
||||||
Port17TxBroadcast FlexInt `json:"port_17-tx_broadcast"`
|
Port15TxBytes FlexInt `json:"port_15-tx_bytes"`
|
||||||
Port18RxPackets FlexInt `json:"port_18-rx_packets"`
|
Port15RxBroadcast FlexInt `json:"port_15-rx_broadcast"`
|
||||||
Port18RxBytes FlexInt `json:"port_18-rx_bytes"`
|
Port15TxMulticast FlexInt `json:"port_15-tx_multicast"`
|
||||||
Port18TxPackets FlexInt `json:"port_18-tx_packets"`
|
Port15TxBroadcast FlexInt `json:"port_15-tx_broadcast"`
|
||||||
Port18TxBytes FlexInt `json:"port_18-tx_bytes"`
|
Port16RxPackets FlexInt `json:"port_16-rx_packets"`
|
||||||
Port18RxMulticast FlexInt `json:"port_18-rx_multicast"`
|
Port16RxBytes FlexInt `json:"port_16-rx_bytes"`
|
||||||
Port18TxMulticast FlexInt `json:"port_18-tx_multicast"`
|
Port16TxPackets FlexInt `json:"port_16-tx_packets"`
|
||||||
Port18TxBroadcast FlexInt `json:"port_18-tx_broadcast"`
|
Port16TxBytes FlexInt `json:"port_16-tx_bytes"`
|
||||||
Port19RxPackets FlexInt `json:"port_19-rx_packets"`
|
Port16TxMulticast FlexInt `json:"port_16-tx_multicast"`
|
||||||
Port19RxBytes FlexInt `json:"port_19-rx_bytes"`
|
Port16TxBroadcast FlexInt `json:"port_16-tx_broadcast"`
|
||||||
Port19TxPackets FlexInt `json:"port_19-tx_packets"`
|
Port17RxPackets FlexInt `json:"port_17-rx_packets"`
|
||||||
Port19TxBytes FlexInt `json:"port_19-tx_bytes"`
|
Port17RxBytes FlexInt `json:"port_17-rx_bytes"`
|
||||||
Port19TxMulticast FlexInt `json:"port_19-tx_multicast"`
|
Port17TxPackets FlexInt `json:"port_17-tx_packets"`
|
||||||
Port19TxBroadcast FlexInt `json:"port_19-tx_broadcast"`
|
Port17TxBytes FlexInt `json:"port_17-tx_bytes"`
|
||||||
Port21RxPackets FlexInt `json:"port_21-rx_packets"`
|
Port17TxMulticast FlexInt `json:"port_17-tx_multicast"`
|
||||||
Port21RxBytes FlexInt `json:"port_21-rx_bytes"`
|
Port17TxBroadcast FlexInt `json:"port_17-tx_broadcast"`
|
||||||
Port21TxPackets FlexInt `json:"port_21-tx_packets"`
|
Port18RxPackets FlexInt `json:"port_18-rx_packets"`
|
||||||
Port21TxBytes FlexInt `json:"port_21-tx_bytes"`
|
Port18RxBytes FlexInt `json:"port_18-rx_bytes"`
|
||||||
Port21RxBroadcast FlexInt `json:"port_21-rx_broadcast"`
|
Port18TxPackets FlexInt `json:"port_18-tx_packets"`
|
||||||
Port21TxMulticast FlexInt `json:"port_21-tx_multicast"`
|
Port18TxBytes FlexInt `json:"port_18-tx_bytes"`
|
||||||
Port21TxBroadcast FlexInt `json:"port_21-tx_broadcast"`
|
Port18RxMulticast FlexInt `json:"port_18-rx_multicast"`
|
||||||
Port22RxPackets FlexInt `json:"port_22-rx_packets"`
|
Port18TxMulticast FlexInt `json:"port_18-tx_multicast"`
|
||||||
Port22RxBytes FlexInt `json:"port_22-rx_bytes"`
|
Port18TxBroadcast FlexInt `json:"port_18-tx_broadcast"`
|
||||||
Port22TxPackets FlexInt `json:"port_22-tx_packets"`
|
Port19RxPackets FlexInt `json:"port_19-rx_packets"`
|
||||||
Port22TxBytes FlexInt `json:"port_22-tx_bytes"`
|
Port19RxBytes FlexInt `json:"port_19-rx_bytes"`
|
||||||
Port22RxMulticast FlexInt `json:"port_22-rx_multicast"`
|
Port19TxPackets FlexInt `json:"port_19-tx_packets"`
|
||||||
Port22TxMulticast FlexInt `json:"port_22-tx_multicast"`
|
Port19TxBytes FlexInt `json:"port_19-tx_bytes"`
|
||||||
Port22TxBroadcast FlexInt `json:"port_22-tx_broadcast"`
|
Port19TxMulticast FlexInt `json:"port_19-tx_multicast"`
|
||||||
Port23RxPackets FlexInt `json:"port_23-rx_packets"`
|
Port19TxBroadcast FlexInt `json:"port_19-tx_broadcast"`
|
||||||
Port23RxBytes FlexInt `json:"port_23-rx_bytes"`
|
Port21RxPackets FlexInt `json:"port_21-rx_packets"`
|
||||||
Port23RxDropped FlexInt `json:"port_23-rx_dropped"`
|
Port21RxBytes FlexInt `json:"port_21-rx_bytes"`
|
||||||
Port23TxPackets FlexInt `json:"port_23-tx_packets"`
|
Port21TxPackets FlexInt `json:"port_21-tx_packets"`
|
||||||
Port23TxBytes FlexInt `json:"port_23-tx_bytes"`
|
Port21TxBytes FlexInt `json:"port_21-tx_bytes"`
|
||||||
Port23RxMulticast FlexInt `json:"port_23-rx_multicast"`
|
Port21RxBroadcast FlexInt `json:"port_21-rx_broadcast"`
|
||||||
Port23RxBroadcast FlexInt `json:"port_23-rx_broadcast"`
|
Port21TxMulticast FlexInt `json:"port_21-tx_multicast"`
|
||||||
Port23TxMulticast FlexInt `json:"port_23-tx_multicast"`
|
Port21TxBroadcast FlexInt `json:"port_21-tx_broadcast"`
|
||||||
Port23TxBroadcast FlexInt `json:"port_23-tx_broadcast"`
|
Port22RxPackets FlexInt `json:"port_22-rx_packets"`
|
||||||
Port24RxPackets FlexInt `json:"port_24-rx_packets"`
|
Port22RxBytes FlexInt `json:"port_22-rx_bytes"`
|
||||||
Port24RxBytes FlexInt `json:"port_24-rx_bytes"`
|
Port22TxPackets FlexInt `json:"port_22-tx_packets"`
|
||||||
Port24TxPackets FlexInt `json:"port_24-tx_packets"`
|
Port22TxBytes FlexInt `json:"port_22-tx_bytes"`
|
||||||
Port24TxBytes FlexInt `json:"port_24-tx_bytes"`
|
Port22RxMulticast FlexInt `json:"port_22-rx_multicast"`
|
||||||
Port24RxMulticast FlexInt `json:"port_24-rx_multicast"`
|
Port22TxMulticast FlexInt `json:"port_22-tx_multicast"`
|
||||||
Port24TxMulticast FlexInt `json:"port_24-tx_multicast"`
|
Port22TxBroadcast FlexInt `json:"port_22-tx_broadcast"`
|
||||||
Port24TxBroadcast FlexInt `json:"port_24-tx_broadcast"`
|
Port23RxPackets FlexInt `json:"port_23-rx_packets"`
|
||||||
Port1RxMulticast FlexInt `json:"port_1-rx_multicast"`
|
Port23RxBytes FlexInt `json:"port_23-rx_bytes"`
|
||||||
Port3RxDropped FlexInt `json:"port_3-rx_dropped"`
|
Port23RxDropped FlexInt `json:"port_23-rx_dropped"`
|
||||||
Port3RxMulticast FlexInt `json:"port_3-rx_multicast"`
|
Port23TxPackets FlexInt `json:"port_23-tx_packets"`
|
||||||
Port6RxDropped FlexInt `json:"port_6-rx_dropped"`
|
Port23TxBytes FlexInt `json:"port_23-tx_bytes"`
|
||||||
Port7RxDropped FlexInt `json:"port_7-rx_dropped"`
|
Port23RxMulticast FlexInt `json:"port_23-rx_multicast"`
|
||||||
Port7RxMulticast FlexInt `json:"port_7-rx_multicast"`
|
Port23RxBroadcast FlexInt `json:"port_23-rx_broadcast"`
|
||||||
Port9RxDropped FlexInt `json:"port_9-rx_dropped"`
|
Port23TxMulticast FlexInt `json:"port_23-tx_multicast"`
|
||||||
Port9RxMulticast FlexInt `json:"port_9-rx_multicast"`
|
Port23TxBroadcast FlexInt `json:"port_23-tx_broadcast"`
|
||||||
Port9RxBroadcast FlexInt `json:"port_9-rx_broadcast"`
|
Port24RxPackets FlexInt `json:"port_24-rx_packets"`
|
||||||
Port10RxBroadcast FlexInt `json:"port_10-rx_broadcast"`
|
Port24RxBytes FlexInt `json:"port_24-rx_bytes"`
|
||||||
Port12RxDropped FlexInt `json:"port_12-rx_dropped"`
|
Port24TxPackets FlexInt `json:"port_24-tx_packets"`
|
||||||
Port12RxMulticast FlexInt `json:"port_12-rx_multicast"`
|
Port24TxBytes FlexInt `json:"port_24-tx_bytes"`
|
||||||
Port13RxDropped FlexInt `json:"port_13-rx_dropped"`
|
Port24RxMulticast FlexInt `json:"port_24-rx_multicast"`
|
||||||
Port17RxDropped FlexInt `json:"port_17-rx_dropped"`
|
Port24TxMulticast FlexInt `json:"port_24-tx_multicast"`
|
||||||
Port17RxMulticast FlexInt `json:"port_17-rx_multicast"`
|
Port24TxBroadcast FlexInt `json:"port_24-tx_broadcast"`
|
||||||
Port17RxBroadcast FlexInt `json:"port_17-rx_broadcast"`
|
Port1RxMulticast FlexInt `json:"port_1-rx_multicast"`
|
||||||
Port19RxDropped FlexInt `json:"port_19-rx_dropped"`
|
Port3RxDropped FlexInt `json:"port_3-rx_dropped"`
|
||||||
Port19RxMulticast FlexInt `json:"port_19-rx_multicast"`
|
Port3RxMulticast FlexInt `json:"port_3-rx_multicast"`
|
||||||
Port19RxBroadcast FlexInt `json:"port_19-rx_broadcast"`
|
Port6RxDropped FlexInt `json:"port_6-rx_dropped"`
|
||||||
Port21RxDropped FlexInt `json:"port_21-rx_dropped"`
|
Port7RxDropped FlexInt `json:"port_7-rx_dropped"`
|
||||||
Port21RxMulticast FlexInt `json:"port_21-rx_multicast"`
|
Port7RxMulticast FlexInt `json:"port_7-rx_multicast"`
|
||||||
Port7RxBroadcast FlexInt `json:"port_7-rx_broadcast"`
|
Port9RxDropped FlexInt `json:"port_9-rx_dropped"`
|
||||||
Port18RxBroadcast FlexInt `json:"port_18-rx_broadcast"`
|
Port9RxMulticast FlexInt `json:"port_9-rx_multicast"`
|
||||||
Port16RxMulticast FlexInt `json:"port_16-rx_multicast"`
|
Port9RxBroadcast FlexInt `json:"port_9-rx_broadcast"`
|
||||||
Port15RxDropped FlexInt `json:"port_15-rx_dropped"`
|
Port10RxBroadcast FlexInt `json:"port_10-rx_broadcast"`
|
||||||
Port15RxMulticast FlexInt `json:"port_15-rx_multicast"`
|
Port12RxDropped FlexInt `json:"port_12-rx_dropped"`
|
||||||
Port16RxBroadcast FlexInt `json:"port_16-rx_broadcast"`
|
Port12RxMulticast FlexInt `json:"port_12-rx_multicast"`
|
||||||
Port11RxBroadcast FlexInt `json:"port_11-rx_broadcast"`
|
Port13RxDropped FlexInt `json:"port_13-rx_dropped"`
|
||||||
Port12RxBroadcast FlexInt `json:"port_12-rx_broadcast"`
|
Port17RxDropped FlexInt `json:"port_17-rx_dropped"`
|
||||||
Port6RxBroadcast FlexInt `json:"port_6-rx_broadcast"`
|
Port17RxMulticast FlexInt `json:"port_17-rx_multicast"`
|
||||||
Port24RxBroadcast FlexInt `json:"port_24-rx_broadcast"`
|
Port17RxBroadcast FlexInt `json:"port_17-rx_broadcast"`
|
||||||
Port22RxBroadcast FlexInt `json:"port_22-rx_broadcast"`
|
Port19RxDropped FlexInt `json:"port_19-rx_dropped"`
|
||||||
Port10TxDropped FlexInt `json:"port_10-tx_dropped"`
|
Port19RxMulticast FlexInt `json:"port_19-rx_multicast"`
|
||||||
Port16TxDropped FlexInt `json:"port_16-tx_dropped"`
|
Port19RxBroadcast FlexInt `json:"port_19-rx_broadcast"`
|
||||||
Port1RxBroadcast FlexInt `json:"port_1-rx_broadcast"`
|
Port21RxDropped FlexInt `json:"port_21-rx_dropped"`
|
||||||
Port4RxPackets FlexInt `json:"port_4-rx_packets"`
|
Port21RxMulticast FlexInt `json:"port_21-rx_multicast"`
|
||||||
Port4RxBytes FlexInt `json:"port_4-rx_bytes"`
|
Port7RxBroadcast FlexInt `json:"port_7-rx_broadcast"`
|
||||||
Port4RxDropped FlexInt `json:"port_4-rx_dropped"`
|
Port18RxBroadcast FlexInt `json:"port_18-rx_broadcast"`
|
||||||
Port4TxPackets FlexInt `json:"port_4-tx_packets"`
|
Port16RxMulticast FlexInt `json:"port_16-rx_multicast"`
|
||||||
Port4TxBytes FlexInt `json:"port_4-tx_bytes"`
|
Port15RxDropped FlexInt `json:"port_15-rx_dropped"`
|
||||||
Port4TxDropped FlexInt `json:"port_4-tx_dropped"`
|
Port15RxMulticast FlexInt `json:"port_15-rx_multicast"`
|
||||||
Port4RxMulticast FlexInt `json:"port_4-rx_multicast"`
|
Port16RxBroadcast FlexInt `json:"port_16-rx_broadcast"`
|
||||||
Port4RxBroadcast FlexInt `json:"port_4-rx_broadcast"`
|
Port11RxBroadcast FlexInt `json:"port_11-rx_broadcast"`
|
||||||
Port4TxMulticast FlexInt `json:"port_4-tx_multicast"`
|
Port12RxBroadcast FlexInt `json:"port_12-rx_broadcast"`
|
||||||
Port4TxBroadcast FlexInt `json:"port_4-tx_broadcast"`
|
Port6RxBroadcast FlexInt `json:"port_6-rx_broadcast"`
|
||||||
} `json:"stat"`
|
Port24RxBroadcast FlexInt `json:"port_24-rx_broadcast"`
|
||||||
TxBytes FlexInt `json:"tx_bytes"`
|
Port22RxBroadcast FlexInt `json:"port_22-rx_broadcast"`
|
||||||
RxBytes FlexInt `json:"rx_bytes"`
|
Port10TxDropped FlexInt `json:"port_10-tx_dropped"`
|
||||||
Bytes FlexInt `json:"bytes"`
|
Port16TxDropped FlexInt `json:"port_16-tx_dropped"`
|
||||||
NumSta FlexInt `json:"num_sta"`
|
Port1RxBroadcast FlexInt `json:"port_1-rx_broadcast"`
|
||||||
UserNumSta FlexInt `json:"user-num_sta"`
|
Port4RxPackets FlexInt `json:"port_4-rx_packets"`
|
||||||
GuestNumSta FlexInt `json:"guest-num_sta"`
|
Port4RxBytes FlexInt `json:"port_4-rx_bytes"`
|
||||||
|
Port4RxDropped FlexInt `json:"port_4-rx_dropped"`
|
||||||
|
Port4TxPackets FlexInt `json:"port_4-tx_packets"`
|
||||||
|
Port4TxBytes FlexInt `json:"port_4-tx_bytes"`
|
||||||
|
Port4TxDropped FlexInt `json:"port_4-tx_dropped"`
|
||||||
|
Port4RxMulticast FlexInt `json:"port_4-rx_multicast"`
|
||||||
|
Port4RxBroadcast FlexInt `json:"port_4-rx_broadcast"`
|
||||||
|
Port4TxMulticast FlexInt `json:"port_4-tx_multicast"`
|
||||||
|
Port4TxBroadcast FlexInt `json:"port_4-tx_broadcast"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON unmarshalls 5.10 or 5.11 formatted Switch Stat data.
|
||||||
|
func (v *USWStat) UnmarshalJSON(data []byte) error {
|
||||||
|
var n struct {
|
||||||
|
sw `json:"sw"`
|
||||||
|
}
|
||||||
|
v.sw = &n.sw
|
||||||
|
err := json.Unmarshal(data, v.sw) // controller version 5.10.
|
||||||
|
if err != nil {
|
||||||
|
return json.Unmarshal(data, &n) // controller version 5.11.
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
package unifi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUSWUnmarshalJSON(t *testing.T) {
|
||||||
|
testcontroller511 := `{
|
||||||
|
"sw": {
|
||||||
|
"site_id": "mySite",
|
||||||
|
"o": "sw",
|
||||||
|
"oid": "00:00:00:00:00:00",
|
||||||
|
"sw": "00:00:00:00:00:00",
|
||||||
|
"time": 1577742600000,
|
||||||
|
"datetime": "2019-12-30T09:40:00Z",
|
||||||
|
"rx_packets": 321,
|
||||||
|
"rx_bytes": 321,
|
||||||
|
"rx_errors": 123,
|
||||||
|
"rx_dropped": 123,
|
||||||
|
"rx_crypts": 123,
|
||||||
|
"rx_frags": 123,
|
||||||
|
"tx_packets": 123,
|
||||||
|
"tx_bytes": 123,
|
||||||
|
"tx_errors": 0,
|
||||||
|
"tx_dropped": 0,
|
||||||
|
"tx_retries": 0,
|
||||||
|
"rx_multicast": 123,
|
||||||
|
"rx_broadcast": 123,
|
||||||
|
"tx_multicast": 123,
|
||||||
|
"tx_broadcast": 123,
|
||||||
|
"bytes": 123,
|
||||||
|
"duration": 123,
|
||||||
|
"port_1-tx_packets": 123,
|
||||||
|
"port_1-tx_bytes": 123,
|
||||||
|
"port_1-tx_multicast": 123,
|
||||||
|
"port_1-tx_broadcast": 123,
|
||||||
|
"port_1-rx_packets": 123,
|
||||||
|
"port_1-rx_bytes": 123,
|
||||||
|
"port_1-rx_dropped": 123,
|
||||||
|
"port_1-rx_multicast": 123,
|
||||||
|
"port_1-rx_broadcast": 123,
|
||||||
|
"port_1-rx_errors": 123}}`
|
||||||
|
|
||||||
|
testcontroller510 := `{
|
||||||
|
"site_id": "mySite",
|
||||||
|
"o": "sw",
|
||||||
|
"oid": "00:00:00:00:00:00",
|
||||||
|
"sw": "00:00:00:00:00:00",
|
||||||
|
"time": 1577742600000,
|
||||||
|
"datetime": "2019-12-30T09:40:00Z",
|
||||||
|
"rx_packets": 321,
|
||||||
|
"rx_bytes": 321,
|
||||||
|
"rx_errors": 123,
|
||||||
|
"rx_dropped": 123,
|
||||||
|
"rx_crypts": 123,
|
||||||
|
"rx_frags": 123,
|
||||||
|
"tx_packets": 123,
|
||||||
|
"tx_bytes": 123,
|
||||||
|
"tx_errors": 0,
|
||||||
|
"tx_dropped": 0,
|
||||||
|
"tx_retries": 0,
|
||||||
|
"rx_multicast": 123,
|
||||||
|
"rx_broadcast": 123,
|
||||||
|
"tx_multicast": 123,
|
||||||
|
"tx_broadcast": 123,
|
||||||
|
"bytes": 123,
|
||||||
|
"duration": 123,
|
||||||
|
"port_1-tx_packets": 123,
|
||||||
|
"port_1-tx_bytes": 123,
|
||||||
|
"port_1-tx_multicast": 123,
|
||||||
|
"port_1-tx_broadcast": 123,
|
||||||
|
"port_1-rx_packets": 123,
|
||||||
|
"port_1-rx_bytes": 123,
|
||||||
|
"port_1-rx_dropped": 123,
|
||||||
|
"port_1-rx_multicast": 123,
|
||||||
|
"port_1-rx_broadcast": 123,
|
||||||
|
"port_1-rx_errors": 123}`
|
||||||
|
|
||||||
|
t.Parallel()
|
||||||
|
a := assert.New(t)
|
||||||
|
|
||||||
|
u := &USWStat{}
|
||||||
|
err := u.UnmarshalJSON([]byte(testcontroller510))
|
||||||
|
a.Nil(err, "must be no error unmarshaling test strings")
|
||||||
|
a.Equal(float64(123), u.RxMulticast.Val, "data was not properly unmarshaled")
|
||||||
|
|
||||||
|
u = &USWStat{} // reset
|
||||||
|
err = u.UnmarshalJSON([]byte(testcontroller511))
|
||||||
|
a.Nil(err, "must be no error unmarshaling test strings")
|
||||||
|
a.Equal(float64(123), u.RxMulticast.Val, "data was not properly unmarshaled")
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue