diff --git a/core/unifi/uap_influx.go b/core/unifi/uap_influx.go index 06657ef7..b46af1f3 100644 --- a/core/unifi/uap_influx.go +++ b/core/unifi/uap_influx.go @@ -1,7 +1,6 @@ package unifi import ( - "strconv" "time" influx "github.com/influxdata/influxdb1-client/v2" @@ -10,258 +9,242 @@ import ( // Points generates Wireless-Access-Point datapoints for InfluxDB. // These points can be passed directly to influx. func (u UAP) Points() ([]*influx.Point, error) { - /* I generally suck at InfluxDB, so if I got the tags/fields wrong, - please send me a PR or open an Issue to address my faults. Thanks! - */ tags := map[string]string{ - "id": u.ID, - "mac": u.Mac, - "device_type": u.Stat.O, - "device_oid": u.Stat.Oid, - "device_ap": u.Stat.Ap, - "site_id": u.SiteID, - "site_name": u.SiteName, - "name": u.Name, - "adopted": u.Adopted.Txt, - "bandsteering_mode": u.BandsteeringMode, - "board_rev": strconv.Itoa(u.BoardRev), - "cfgversion": u.Cfgversion, - "config_network_ip": u.ConfigNetwork.IP, - "config_network_type": u.ConfigNetwork.Type, - "connect_request_ip": u.ConnectRequestIP, - "connect_request_port": u.ConnectRequestPort, - "default": u.Default.Txt, - "device_id": u.DeviceID, - "discovered_via": u.DiscoveredVia, - "fw_caps": strconv.Itoa(u.FwCaps), - "guest_token": u.GuestToken, - "has_eth1": u.HasEth1.Txt, - "has_speaker": u.HasSpeaker.Txt, - "inform_ip": u.InformIP, - "isolated": u.Isolated.Txt, - "last_uplink_mac": u.LastUplink.UplinkMac, - "last_uplink_remote_port": strconv.Itoa(u.LastUplink.UplinkRemotePort), - "known_cfgversion": u.KnownCfgversion, - "led_override": u.LedOverride, - "locating": u.Locating.Txt, - "model": u.Model, - "outdoor_mode_override": u.OutdoorModeOverride, - "serial": u.Serial, - "type": u.Type, - "version_incompatible": u.VersionIncompatible.Txt, - "vwireEnabled": u.VwireEnabled.Txt, - "wifi_caps": strconv.Itoa(u.WifiCaps), + "id": u.ID, + "mac": u.Mac, + "device_type": u.Stat.O, + "device_oid": u.Stat.Oid, + "device_ap": u.Stat.Ap, + "site_id": u.SiteID, + "site_name": u.SiteName, + "name": u.Name, + "adopted": u.Adopted.Txt, + "cfgversion": u.Cfgversion, + "config_network_ip": u.ConfigNetwork.IP, + "config_network_type": u.ConfigNetwork.Type, + "connect_request_ip": u.ConnectRequestIP, + "device_id": u.DeviceID, + "has_eth1": u.HasEth1.Txt, + "inform_ip": u.InformIP, + "isolated": u.Isolated.Txt, + "known_cfgversion": u.KnownCfgversion, + "model": u.Model, + "outdoor_mode_override": u.OutdoorModeOverride, + "serial": u.Serial, + "type": u.Type, + "vwireEnabled": u.VwireEnabled.Txt, } fields := map[string]interface{}{ - "ip": u.IP, - "bytes": u.Bytes, - "bytes_d": u.BytesD, - "bytes_r": u.BytesR, - "last_seen": u.LastSeen, - "rx_bytes": u.RxBytes, - "rx_bytes-d": u.RxBytesD, - "tx_bytes": u.TxBytes, - "tx_bytes-d": u.TxBytesD, - "uptime": u.Uptime.Val, - "considered_lost_at": u.ConsideredLostAt, - "next_heartbeat_at": u.NextHeartbeatAt, - "scanning": u.Scanning.Val, - "spectrum_scanning": u.SpectrumScanning.Val, - "roll_upgrade": u.Rollupgrade.Val, - "state": u.State, - "upgradable": u.Upgradable.Val, - "user-num_sta": u.UserNumSta, - "guest-num_sta": u.GuestNumSta, - "version": u.Version, - "loadavg_1": u.SysStats.Loadavg1, - "loadavg_5": u.SysStats.Loadavg5, - "loadavg_15": u.SysStats.Loadavg15, - "mem_buffer": u.SysStats.MemBuffer, - "mem_total": u.SysStats.MemTotal, - "mem_used": u.SysStats.MemUsed, - "cpu": u.SystemStats.CPU, - "mem": u.SystemStats.Mem, - "system_uptime": u.SystemStats.Uptime, - "stat_bytes": u.Stat.Bytes, - "stat_duration": u.Stat.Duration, - "stat_guest-rx_bytes": u.Stat.RxBytes, - "stat_guest-rx_crypts": u.Stat.RxCrypts, - "stat_guest-rx_dropped": u.Stat.RxDropped, - "stat_guest-rx_errors": u.Stat.RxErrors, - "stat_guest-rx_frags": u.Stat.RxFrags, - "stat_guest-rx_packets": u.Stat.RxPackets, - "stat_guest-tx_bytes": u.Stat.TxBytes, - "stat_guest-tx_dropped": u.Stat.TxDropped, - "stat_guest-tx_errors": u.Stat.TxErrors, - "stat_guest-tx_packets": u.Stat.TxPackets, - "stat_guest-tx_retries": u.Stat.TxRetries, - "stat_port_1-rx_broadcast": u.Stat.Port1RxBroadcast, - "stat_port_1-rx_bytes": u.Stat.Port1RxBytes, - "stat_port_1-rx_multicast": u.Stat.Port1RxMulticast, - "stat_port_1-rx_packets": u.Stat.Port1RxPackets, - "stat_port_1-tx_broadcast": u.Stat.Port1TxBroadcast, - "stat_port_1-tx_bytes": u.Stat.Port1TxBytes, - "stat_port_1-tx_multicast": u.Stat.Port1TxMulticast, - "stat_port_1-tx_packets": u.Stat.Port1TxPackets, - "stat_rx_bytes": u.Stat.RxBytes, - "stat_rx_crypts": u.Stat.RxCrypts, - "stat_rx_dropped": u.Stat.RxDropped, - "stat_rx_errors": u.Stat.RxErrors, - "stat_rx_frags": u.Stat.RxFrags, - "stat_rx_packets": u.Stat.TxPackets, - "stat_tx_bytes": u.Stat.TxBytes, - "stat_tx_dropped": u.Stat.TxDropped, - "stat_tx_errors": u.Stat.TxErrors, - "stat_tx_packets": u.Stat.TxPackets, - "stat_tx_retries": u.Stat.TxRetries, - "stat_user-rx_bytes": u.Stat.UserRxBytes, - "stat_user-rx_crypts": u.Stat.UserRxCrypts, - "stat_user-rx_dropped": u.Stat.UserRxDropped, - "stat_user-rx_errors": u.Stat.UserRxErrors, - "stat_user-rx_frags": u.Stat.UserRxFrags, - "stat_user-rx_packets": u.Stat.UserRxPackets, - "stat_user-tx_bytes": u.Stat.UserTxBytes, - "stat_user-tx_dropped": u.Stat.UserTxDropped, - "stat_user-tx_errors": u.Stat.UserTxErrors, - "stat_user-tx_packets": u.Stat.UserTxPackets, - "stat_user-tx_retries": u.Stat.UserTxRetries, - "stat_user-wifi0-rx_bytes": u.Stat.UserWifi0RxBytes, - "stat_user-wifi0-rx_crypts": u.Stat.UserWifi0RxCrypts, - "stat_user-wifi0-rx_dropped": u.Stat.UserWifi0RxDropped, - "stat_user-wifi0-rx_errors": u.Stat.UserWifi0RxErrors, - "stat_user-wifi0-rx_frags": u.Stat.UserWifi0RxFrags, - "stat_user-wifi0-rx_packets": u.Stat.UserWifi0RxPackets, - "stat_user-wifi0-tx_bytes": u.Stat.UserWifi0TxBytes, - "stat_user-wifi0-tx_dropped": u.Stat.UserWifi0TxDropped, - "stat_user-wifi0-tx_errors": u.Stat.UserWifi0TxErrors, - "stat_user-wifi0-tx_packets": u.Stat.UserWifi0TxPackets, - "stat_user-wifi0-tx_retries": u.Stat.UserWifi0TxRetries, - "stat_user-wifi1-rx_bytes": u.Stat.UserWifi1RxBytes, - "stat_user-wifi1-rx_crypts": u.Stat.UserWifi1RxCrypts, - "stat_user-wifi1-rx_dropped": u.Stat.UserWifi1RxDropped, - "stat_user-wifi1-rx_errors": u.Stat.UserWifi1RxErrors, - "stat_user-wifi1-rx_frags": u.Stat.UserWifi1RxFrags, - "stat_user-wifi1-rx_packets": u.Stat.UserWifi1RxPackets, - "stat_user-wifi1-tx_bytes": u.Stat.UserWifi1TxBytes, - "stat_user-wifi1-tx_dropped": u.Stat.UserWifi1TxDropped, - "stat_user-wifi1-tx_errors": u.Stat.UserWifi1TxErrors, - "stat_user-wifi1-tx_packets": u.Stat.UserWifi1TxPackets, - "stat_user-wifi1-tx_retries": u.Stat.UserWifi1TxRetries, - "stat_wifi0-rx_bytes": u.Stat.Wifi0RxBytes, - "stat_wifi0-rx_crypts": u.Stat.Wifi0RxCrypts, - "stat_wifi0-rx_dropped": u.Stat.Wifi0RxDropped, - "stat_wifi0-rx_errors": u.Stat.Wifi0RxErrors, - "stat_wifi0-rx_frags": u.Stat.Wifi0RxFrags, - "stat_wifi0-rx_packets": u.Stat.Wifi0RxPackets, - "stat_wifi0-tx_bytes": u.Stat.Wifi0TxBytes, - "stat_wifi0-tx_dropped": u.Stat.Wifi0TxDropped, - "stat_wifi0-tx_errors": u.Stat.Wifi0TxErrors, - "stat_wifi0-tx_packets": u.Stat.Wifi0TxPackets, - "stat_wifi0-tx_retries": u.Stat.Wifi0TxRetries, - "stat_wifi1-rx_bytes": u.Stat.Wifi1RxBytes, - "stat_wifi1-rx_crypts": u.Stat.Wifi1RxCrypts, - "stat_wifi1-rx_dropped": u.Stat.Wifi1RxDropped, - "stat_wifi1-rx_errors": u.Stat.Wifi1RxErrors, - "stat_wifi1-rx_frags": u.Stat.Wifi1RxFrags, - "stat_wifi1-rx_packets": u.Stat.Wifi1RxPackets, - "stat_wifi1-tx_bytes": u.Stat.Wifi1TxBytes, - "stat_wifi1-tx_dropped": u.Stat.Wifi1TxDropped, - "stat_wifi1-tx_errors": u.Stat.Wifi1TxErrors, - "stat_wifi1-tx_packets": u.Stat.Wifi1TxPackets, - "stat_wifi1-tx_retries": u.Stat.Wifi1TxRetries, + "ip": u.IP, + "bytes": u.Bytes.Val, + "bytes_d": u.BytesD.Val, + "bytes_r": u.BytesR.Val, + "last_seen": u.LastSeen.Val, + "rx_bytes": u.RxBytes.Val, + "rx_bytes-d": u.RxBytesD.Val, + "tx_bytes": u.TxBytes.Val, + "tx_bytes-d": u.TxBytesD.Val, + "uptime": u.Uptime.Val, + "scanning": u.Scanning.Val, + "spectrum_scanning": u.SpectrumScanning.Val, + "roll_upgrade": u.Rollupgrade.Val, + "state": u.State, + "upgradable": u.Upgradable.Val, + "user-num_sta": u.UserNumSta, + "guest-num_sta": u.GuestNumSta, + "version": u.Version, + "loadavg_1": u.SysStats.Loadavg1, + "loadavg_5": u.SysStats.Loadavg5, + "loadavg_15": u.SysStats.Loadavg15, + "mem_buffer": u.SysStats.MemBuffer.Val, + "mem_total": u.SysStats.MemTotal.Val, + "mem_used": u.SysStats.MemUsed.Val, + "cpu": u.SystemStats.CPU, + "mem": u.SystemStats.Mem, + "system_uptime": u.SystemStats.Uptime, + "stat_bytes": u.Stat.Bytes.Val, + "stat_duration": u.Stat.Duration.Val, + "stat_guest-rx_bytes": u.Stat.RxBytes.Val, + "stat_guest-rx_crypts": u.Stat.RxCrypts.Val, + "stat_guest-rx_dropped": u.Stat.RxDropped.Val, + "stat_guest-rx_errors": u.Stat.RxErrors.Val, + "stat_guest-rx_frags": u.Stat.RxFrags.Val, + "stat_guest-rx_packets": u.Stat.RxPackets.Val, + "stat_guest-tx_bytes": u.Stat.TxBytes.Val, + "stat_guest-tx_dropped": u.Stat.TxDropped.Val, + "stat_guest-tx_errors": u.Stat.TxErrors.Val, + "stat_guest-tx_packets": u.Stat.TxPackets.Val, + "stat_guest-tx_retries": u.Stat.TxRetries.Val, + /* snip */ + "stat_rx_bytes": u.Stat.RxBytes.Val, + "stat_rx_crypts": u.Stat.RxCrypts.Val, + "stat_rx_dropped": u.Stat.RxDropped.Val, + "stat_rx_errors": u.Stat.RxErrors.Val, + "stat_rx_frags": u.Stat.RxFrags.Val, + "stat_rx_packets": u.Stat.TxPackets.Val, + "stat_tx_bytes": u.Stat.TxBytes.Val, + "stat_tx_dropped": u.Stat.TxDropped.Val, + "stat_tx_errors": u.Stat.TxErrors.Val, + "stat_tx_packets": u.Stat.TxPackets.Val, + "stat_tx_retries": u.Stat.TxRetries.Val, + "stat_user-rx_bytes": u.Stat.UserRxBytes.Val, + "stat_user-rx_crypts": u.Stat.UserRxCrypts.Val, + "stat_user-rx_dropped": u.Stat.UserRxDropped.Val, + "stat_user-rx_errors": u.Stat.UserRxErrors.Val, + "stat_user-rx_frags": u.Stat.UserRxFrags.Val, + "stat_user-rx_packets": u.Stat.UserRxPackets.Val, + "stat_user-tx_bytes": u.Stat.UserTxBytes.Val, + "stat_user-tx_dropped": u.Stat.UserTxDropped.Val, + "stat_user-tx_errors": u.Stat.UserTxErrors.Val, + "stat_user-tx_packets": u.Stat.UserTxPackets.Val, + "stat_user-tx_retries": u.Stat.UserTxRetries.Val, + "stat_user-wifi0-rx_bytes": u.Stat.UserWifi0RxBytes.Val, + "stat_user-wifi0-rx_crypts": u.Stat.UserWifi0RxCrypts.Val, + "stat_user-wifi0-rx_dropped": u.Stat.UserWifi0RxDropped.Val, + "stat_user-wifi0-rx_errors": u.Stat.UserWifi0RxErrors.Val, + "stat_user-wifi0-rx_frags": u.Stat.UserWifi0RxFrags.Val, + "stat_user-wifi0-rx_packets": u.Stat.UserWifi0RxPackets.Val, + "stat_user-wifi0-tx_bytes": u.Stat.UserWifi0TxBytes.Val, + "stat_user-wifi0-tx_dropped": u.Stat.UserWifi0TxDropped.Val, + "stat_user-wifi0-tx_errors": u.Stat.UserWifi0TxErrors.Val, + "stat_user-wifi0-tx_packets": u.Stat.UserWifi0TxPackets.Val, + "stat_user-wifi0-tx_retries": u.Stat.UserWifi0TxRetries.Val, + "stat_user-wifi1-rx_bytes": u.Stat.UserWifi1RxBytes.Val, + "stat_user-wifi1-rx_crypts": u.Stat.UserWifi1RxCrypts.Val, + "stat_user-wifi1-rx_dropped": u.Stat.UserWifi1RxDropped.Val, + "stat_user-wifi1-rx_errors": u.Stat.UserWifi1RxErrors.Val, + "stat_user-wifi1-rx_frags": u.Stat.UserWifi1RxFrags.Val, + "stat_user-wifi1-rx_packets": u.Stat.UserWifi1RxPackets.Val, + "stat_user-wifi1-tx_bytes": u.Stat.UserWifi1TxBytes.Val, + "stat_user-wifi1-tx_dropped": u.Stat.UserWifi1TxDropped.Val, + "stat_user-wifi1-tx_errors": u.Stat.UserWifi1TxErrors.Val, + "stat_user-wifi1-tx_packets": u.Stat.UserWifi1TxPackets.Val, + "stat_user-wifi1-tx_retries": u.Stat.UserWifi1TxRetries.Val, + "stat_wifi0-rx_bytes": u.Stat.Wifi0RxBytes.Val, + "stat_wifi0-rx_crypts": u.Stat.Wifi0RxCrypts.Val, + "stat_wifi0-rx_dropped": u.Stat.Wifi0RxDropped.Val, + "stat_wifi0-rx_errors": u.Stat.Wifi0RxErrors.Val, + "stat_wifi0-rx_frags": u.Stat.Wifi0RxFrags.Val, + "stat_wifi0-rx_packets": u.Stat.Wifi0RxPackets.Val, + "stat_wifi0-tx_bytes": u.Stat.Wifi0TxBytes.Val, + "stat_wifi0-tx_dropped": u.Stat.Wifi0TxDropped.Val, + "stat_wifi0-tx_errors": u.Stat.Wifi0TxErrors.Val, + "stat_wifi0-tx_packets": u.Stat.Wifi0TxPackets.Val, + "stat_wifi0-tx_retries": u.Stat.Wifi0TxRetries.Val, + "stat_wifi1-rx_bytes": u.Stat.Wifi1RxBytes.Val, + "stat_wifi1-rx_crypts": u.Stat.Wifi1RxCrypts.Val, + "stat_wifi1-rx_dropped": u.Stat.Wifi1RxDropped.Val, + "stat_wifi1-rx_errors": u.Stat.Wifi1RxErrors.Val, + "stat_wifi1-rx_frags": u.Stat.Wifi1RxFrags.Val, + "stat_wifi1-rx_packets": u.Stat.Wifi1RxPackets.Val, + "stat_wifi1-tx_bytes": u.Stat.Wifi1TxBytes.Val, + "stat_wifi1-tx_dropped": u.Stat.Wifi1TxDropped.Val, + "stat_wifi1-tx_errors": u.Stat.Wifi1TxErrors.Val, + "stat_wifi1-tx_packets": u.Stat.Wifi1TxPackets.Val, + "stat_wifi1-tx_retries": u.Stat.Wifi1TxRetries.Val, } pt, err := influx.NewPoint("uap", tags, fields, time.Now()) if err != nil { return nil, err } points := []*influx.Point{pt} - for _, p := range u.RadioTable { - tags := map[string]string{ - "device_name": u.Name, - "device_id": u.ID, - "device_mac": u.Mac, - "name": p.Name, - "wlangroup_id": p.WlangroupID, - "channel": p.Channel.Txt, - "radio": p.Radio, - } - fields := map[string]interface{}{ - "builtin_ant_gain": p.BuiltinAntGain, - "current_antenna_gain": p.CurrentAntennaGain, - "has_dfs": p.HasDfs.Val, - "has_fccdfs": p.HasFccdfs.Val, - "ht": p.Ht, - "is_11ac": p.Is11Ac.Val, - "max_txpower": p.MaxTxpower, - "min_rssi_enabled": p.MinRssiEnabled.Val, - "min_txpower": p.MinTxpower, - "nss": p.Nss, - "radio_caps": p.RadioCaps, - "tx_power": int(p.TxPower.Val), // this will go float in 2.1. - "tx_power_mode": p.TxPowerMode, - } - for _, s := range u.RadioTableStats { + tags = make(map[string]string) + fields = make(map[string]interface{}) + // Loop each virtual AP (ESSID) and extract data for it from radio_tables and radio_table_stats. + for _, s := range u.VapTable { + tags["device_name"] = u.Name + tags["device_id"] = u.ID + tags["device_mac"] = u.Mac + tags["site_name"] = u.SiteName + tags["ap_mac"] = s.ApMac + tags["bssid"] = s.Bssid + tags["id"] = s.ID + tags["name"] = s.Name + tags["radio_name"] = s.RadioName + tags["wlanconf_id"] = s.WlanconfID + tags["site_id"] = s.SiteID + fields["ccq"] = s.Ccq + fields["essid"] = s.Essid + fields["extchannel"] = s.Extchannel + fields["is_guest"] = s.IsGuest.Val + fields["is_wep"] = s.IsWep.Val + fields["mac_filter_rejections"] = s.MacFilterRejections + fields["num_satisfaction_sta"] = s.NumSatisfactionSta.Val + fields["avg_client_signal"] = s.AvgClientSignal.Val + fields["satisfaction"] = s.Satisfaction.Val + fields["satisfaction_now"] = s.SatisfactionNow.Val + fields["rx_bytes"] = s.RxBytes.Val + fields["rx_crypts"] = s.RxCrypts.Val + fields["rx_dropped"] = s.RxDropped.Val + fields["rx_errors"] = s.RxErrors.Val + fields["rx_frags"] = s.RxFrags.Val + fields["rx_nwids"] = s.RxNwids.Val + fields["rx_packets"] = s.RxPackets.Val + fields["tx_bytes"] = s.TxBytes.Val + fields["tx_dropped"] = s.TxDropped.Val + fields["tx_errors"] = s.TxErrors.Val + fields["tx_packets"] = s.TxPackets.Val + fields["tx_power"] = s.TxPower.Val + fields["tx_retries"] = s.TxRetries.Val + fields["tx_combined_retries"] = s.TxCombinedRetries.Val + fields["tx_data_mpdu_bytes"] = s.TxDataMpduBytes.Val + fields["tx_rts_retries"] = s.TxRtsRetries.Val + fields["tx_success"] = s.TxSuccess.Val + fields["tx_total"] = s.TxTotal.Val + fields["tx_tcp_goodbytes"] = s.TxTCPStats.Goodbytes.Val + fields["tx_tcp_lat_avg"] = s.TxTCPStats.LatAvg.Val + fields["tx_tcp_lat_max"] = s.TxTCPStats.LatMax.Val + fields["tx_tcp_lat_min"] = s.TxTCPStats.LatMin.Val + fields["rx_tcp_goodbytes"] = s.RxTCPStats.Goodbytes.Val + fields["rx_tcp_lat_avg"] = s.RxTCPStats.LatAvg.Val + fields["rx_tcp_lat_max"] = s.RxTCPStats.LatMax.Val + fields["rx_tcp_lat_min"] = s.RxTCPStats.LatMin.Val + fields["wifi_tx_latency_mov_avg"] = s.WifiTxLatencyMov.Avg.Val + fields["wifi_tx_latency_mov_max"] = s.WifiTxLatencyMov.Max.Val + fields["wifi_tx_latency_mov_min"] = s.WifiTxLatencyMov.Min.Val + fields["wifi_tx_latency_mov_total"] = s.WifiTxLatencyMov.Total.Val + fields["wifi_tx_latency_mov_cuont"] = s.WifiTxLatencyMov.TotalCount.Val + + fields["usage"] = s.Usage + for _, p := range u.RadioTable { + if p.Name != s.RadioName { + continue + } + tags["wlangroup_id"] = p.WlangroupID + tags["channel"] = p.Channel.Txt + tags["radio"] = p.Radio + fields["current_antenna_gain"] = p.CurrentAntennaGain.Val + fields["ht"] = p.Ht + fields["max_txpower"] = p.MaxTxpower.Val + fields["min_rssi_enabled"] = p.MinRssiEnabled.Val + fields["min_txpower"] = p.MinTxpower.Val + fields["nss"] = p.Nss.Val + fields["radio_caps"] = p.RadioCaps.Val + fields["tx_power"] = p.TxPower.Val + } + for _, p := range u.RadioTableStats { // This may be a tad slower but it allows putting // all the radio stats into one table. - if p.Name == s.Name { - fields["ast_be_xmit"] = s.AstBeXmit - fields["ast_cst"] = s.AstCst - fields["channel"] = s.Channel - fields["ast_txto"] = s.AstTxto - fields["cu_self_rx"] = s.CuSelfRx - fields["cu_self_tx"] = s.CuSelfTx - fields["cu_total"] = s.CuTotal - fields["extchannel"] = s.Extchannel - fields["gain"] = s.Gain - fields["guest-num_sta"] = s.GuestNumSta - fields["num_sta"] = s.NumSta - fields["radio"] = s.Radio - fields["state"] = s.State - fields["radio_tx_packets"] = s.TxPackets - fields["radio_tx_power"] = s.TxPower.Val - fields["radio_tx_retries"] = s.TxRetries - fields["user-num_sta"] = s.UserNumSta - break + if p.Name != s.RadioName { + continue } + fields["ast_be_xmit"] = p.AstBeXmit.Val + fields["channel"] = p.Channel.Val + fields["cu_self_rx"] = p.CuSelfRx.Val + fields["cu_self_tx"] = p.CuSelfTx.Val + fields["cu_total"] = p.CuTotal.Val + fields["extchannel"] = p.Extchannel.Val + fields["gain"] = p.Gain.Val + fields["guest-num_sta"] = p.GuestNumSta.Val + fields["num_sta"] = p.NumSta.Val + fields["radio"] = p.Radio + fields["tx_packets"] = p.TxPackets.Val + fields["tx_power"] = p.TxPower.Val + fields["tx_retries"] = p.TxRetries.Val + fields["user-num_sta"] = p.UserNumSta.Val } - for _, s := range u.VapTable { - if p.Name == s.RadioName { - tags["ap_mac"] = s.ApMac - tags["bssid"] = s.Bssid - tags["vap_id"] = s.ID - tags["vap_name"] = s.Name - tags["wlanconf_id"] = s.WlanconfID - tags["site_id"] = s.SiteID - tags["site_name"] = s.SiteName - fields["ccq"] = s.Ccq - fields["essid"] = s.Essid - fields["extchannel"] = s.Extchannel - fields["is_guest"] = s.IsGuest.Val - fields["is_wep"] = s.IsWep.Val - fields["mac_filter_rejections"] = s.MacFilterRejections - fields["map_id"] = s.MapID - fields["vap_rx_bytes"] = s.RxBytes - fields["vap_rx_crypts"] = s.RxCrypts - fields["vap_rx_dropped"] = s.RxDropped - fields["vap_rx_errors"] = s.RxErrors - fields["vap_rx_frags"] = s.RxFrags - fields["vap_rx_nwids"] = s.RxNwids - fields["vap_rx_packets"] = s.RxPackets - fields["vap_tx_bytes"] = s.TxBytes - fields["vap_tx_dropped"] = s.TxDropped - fields["vap_tx_errors"] = s.TxErrors - fields["vap_tx_latency_avg"] = s.TxLatencyAvg - fields["vap_tx_latency_max"] = s.TxLatencyMax - fields["vap_tx_latency_min"] = s.TxLatencyMin - fields["vap_tx_packets"] = s.TxPackets - fields["vap_tx_power"] = s.TxPower.Val - fields["vap_tx_retries"] = s.TxRetries - fields["usage"] = s.Usage - break - } - } - pt, err := influx.NewPoint("uap_radios", tags, fields, time.Now()) + pt, err := influx.NewPoint("uap_vaps", tags, fields, time.Now()) if err != nil { return points, err } diff --git a/core/unifi/uap_type.go b/core/unifi/uap_type.go index 3b804501..43136882 100644 --- a/core/unifi/uap_type.go +++ b/core/unifi/uap_type.go @@ -1,363 +1,454 @@ package unifi +import "time" + // UAP represents all the data from the Ubiquiti Controller for a Unifi Access Point. type UAP struct { /* This was auto generated and then slowly edited by hand to get all the data types right and graphable. - No ones feelings will be hurt if you want to break this - up into multiple structs, and/or make it better in general. */ ID string `json:"_id"` - UUptime float64 `json:"_uptime"` - AdoptIP string `json:"adopt_ip,omitempty"` - AdoptURL string `json:"adopt_url,omitempty"` Adopted FlexBool `json:"adopted"` AntennaTable []struct { - ID float64 `json:"id"` - Name string `json:"name"` - Wifi0Gain float64 `json:"wifi0_gain"` - Wifi1Gain float64 `json:"wifi1_gain"` + Default FlexBool `json:"default"` + ID FlexInt `json:"id"` + Name string `json:"name"` + Wifi0Gain FlexInt `json:"wifi0_gain"` + Wifi1Gain FlexInt `json:"wifi1_gain"` } `json:"antenna_table"` - BandsteeringMode string `json:"bandsteering_mode,omitempty"` - BoardRev int `json:"board_rev"` - Bytes float64 `json:"bytes"` - BytesD float64 `json:"bytes-d"` - BytesR float64 `json:"bytes-r"` - Cfgversion string `json:"cfgversion"` + BandsteeringMode string `json:"bandsteering_mode,omitempty"` + BoardRev int `json:"board_rev"` + Cfgversion string `json:"cfgversion"` ConfigNetwork struct { - IP string `json:"ip"` Type string `json:"type"` + IP string `json:"ip"` } `json:"config_network"` - ConnectRequestIP string `json:"connect_request_ip"` - ConnectRequestPort string `json:"connect_request_port"` - ConsideredLostAt float64 `json:"considered_lost_at"` - CountrycodeTable []float64 `json:"countrycode_table"` - Default FlexBool `json:"default,omitempty"` - DeviceID string `json:"device_id"` - DiscoveredVia string `json:"discovered_via,omitempty"` - DownlinkTable []interface{} `json:"downlink_table"` - EthernetTable []struct { + CountrycodeTable []int `json:"countrycode_table"` + EthernetTable []struct { Mac string `json:"mac"` + NumPort FlexInt `json:"num_port"` Name string `json:"name"` - NumPort float64 `json:"num_port"` } `json:"ethernet_table"` - FwCaps int `json:"fw_caps"` - GuestNumSta int `json:"guest-num_sta"` - GuestToken string `json:"guest_token"` - HasEth1 FlexBool `json:"has_eth1"` - HasSpeaker FlexBool `json:"has_speaker"` - InformIP string `json:"inform_ip"` - InformURL string `json:"inform_url"` - IP string `json:"ip"` - Isolated FlexBool `json:"isolated"` - KnownCfgversion string `json:"known_cfgversion"` - LastSeen float64 `json:"last_seen"` - LastUplink struct { - UplinkMac string `json:"uplink_mac"` - UplinkRemotePort int `json:"uplink_remote_port"` - } `json:"last_uplink"` + FwCaps int `json:"fw_caps"` + HasEth1 FlexBool `json:"has_eth1"` + HasSpeaker FlexBool `json:"has_speaker"` + InformIP string `json:"inform_ip"` + InformURL string `json:"inform_url"` + IP string `json:"ip"` LedOverride string `json:"led_override"` - Locating FlexBool `json:"locating"` Mac string `json:"mac"` + MeshStaVapEnabled FlexBool `json:"mesh_sta_vap_enabled"` Model string `json:"model"` Name string `json:"name"` - NextHeartbeatAt float64 `json:"next_heartbeat_at"` - NumSta float64 `json:"num_sta"` OutdoorModeOverride string `json:"outdoor_mode_override"` PortTable []struct { - AggregatedBy FlexBool `json:"aggregated_by"` - AttrNoEdit FlexBool `json:"attr_no_edit,omitempty"` - Autoneg FlexBool `json:"autoneg"` - BytesR float64 `json:"bytes-r"` - Enable FlexBool `json:"enable"` - FlowctrlRx FlexBool `json:"flowctrl_rx"` - FlowctrlTx FlexBool `json:"flowctrl_tx"` - FullDuplex FlexBool `json:"full_duplex"` - IsUplink FlexBool `json:"is_uplink"` - Jumbo FlexBool `json:"jumbo"` - MacTable []struct { - Age float64 `json:"age"` - Mac string `json:"mac"` - Static FlexBool `json:"static"` - Uptime float64 `json:"uptime"` - Vlan float64 `json:"vlan"` - } `json:"mac_table"` - Masked FlexBool `json:"masked"` - Media string `json:"media"` - Name string `json:"name"` - OpMode string `json:"op_mode"` - PoeCaps float64 `json:"poe_caps"` - PortDelta struct { - RxBytes float64 `json:"rx_bytes"` - RxPackets float64 `json:"rx_packets"` - TimeDelta float64 `json:"time_delta"` - TxBytes float64 `json:"tx_bytes"` - TxPackets float64 `json:"tx_packets"` + PortIdx FlexInt `json:"port_idx"` + OpMode string `json:"op_mode"` + PortconfID string `json:"portconf_id"` + AttrNoEdit FlexBool `json:"attr_no_edit,omitempty"` + Media string `json:"media"` + Name string `json:"name"` + PoeCaps FlexInt `json:"poe_caps"` + PortPoe FlexBool `json:"port_poe"` + TxBytesR FlexInt `json:"tx_bytes-r"` + RxBytesR FlexInt `json:"rx_bytes-r"` + BytesR FlexInt `json:"bytes-r"` + PortDelta struct { + TimeDelta FlexInt `json:"time_delta"` } `json:"port_delta"` - PortIdx float64 `json:"port_idx"` - PortPoe FlexBool `json:"port_poe"` - PortconfID string `json:"portconf_id"` - RxBroadcast float64 `json:"rx_broadcast"` - RxBytes float64 `json:"rx_bytes"` - RxBytesR float64 `json:"rx_bytes-r"` - RxDropped float64 `json:"rx_dropped"` - RxErrors float64 `json:"rx_errors"` - RxMulticast float64 `json:"rx_multicast"` - RxPackets float64 `json:"rx_packets"` - Speed float64 `json:"speed"` - StpPathcost float64 `json:"stp_pathcost"` - StpState string `json:"stp_state"` - TxBroadcast float64 `json:"tx_broadcast"` - TxBytes float64 `json:"tx_bytes"` - TxBytesR float64 `json:"tx_bytes-r"` - TxDropped float64 `json:"tx_dropped"` - TxErrors float64 `json:"tx_errors"` - TxMulticast float64 `json:"tx_multicast"` - TxPackets float64 `json:"tx_packets"` - Up FlexBool `json:"up"` + Enable FlexBool `json:"enable"` + Masked FlexBool `json:"masked"` + AggregatedBy FlexBool `json:"aggregated_by"` } `json:"port_table"` RadioTable []struct { - BuiltinAntGain float64 `json:"builtin_ant_gain"` - BuiltinAntenna FlexBool `json:"builtin_antenna"` - Channel FlexInt `json:"channel"` - CurrentAntennaGain float64 `json:"current_antenna_gain"` - Ht string `json:"ht"` - MaxTxpower float64 `json:"max_txpower"` - MinRssiEnabled FlexBool `json:"min_rssi_enabled"` - MinTxpower float64 `json:"min_txpower"` - Name string `json:"name"` - Nss float64 `json:"nss"` Radio string `json:"radio"` - RadioCaps float64 `json:"radio_caps"` - TxPower FlexInt `json:"tx_power"` + Name string `json:"name"` + Channel FlexInt `json:"channel"` + Ht string `json:"ht"` TxPowerMode string `json:"tx_power_mode"` + TxPower FlexInt `json:"tx_power"` + MaxTxpower FlexInt `json:"max_txpower"` + MinTxpower FlexInt `json:"min_txpower"` + Nss FlexInt `json:"nss"` + MinRssiEnabled FlexBool `json:"min_rssi_enabled"` + BuiltinAntenna FlexBool `json:"builtin_antenna"` + BuiltinAntGain FlexInt `json:"builtin_ant_gain"` + CurrentAntennaGain FlexInt `json:"current_antenna_gain"` + RadioCaps FlexInt `json:"radio_caps"` WlangroupID string `json:"wlangroup_id"` + Is11Ac FlexBool `json:"is_11ac,omitempty"` HasDfs FlexBool `json:"has_dfs,omitempty"` HasFccdfs FlexBool `json:"has_fccdfs,omitempty"` - Is11Ac FlexBool `json:"is_11ac,omitempty"` } `json:"radio_table"` - RadioTableStats []struct { - AstBeXmit float64 `json:"ast_be_xmit"` - AstCst float64 `json:"ast_cst"` - AstTxto float64 `json:"ast_txto"` - Channel float64 `json:"channel"` - CuSelfRx float64 `json:"cu_self_rx"` - CuSelfTx float64 `json:"cu_self_tx"` - CuTotal float64 `json:"cu_total"` - Extchannel float64 `json:"extchannel"` - Gain float64 `json:"gain"` - GuestNumSta float64 `json:"guest-num_sta"` - Name string `json:"name"` - NumSta float64 `json:"num_sta"` - Radio string `json:"radio"` - State string `json:"state"` - TxPackets float64 `json:"tx_packets"` - TxPower FlexInt `json:"tx_power"` - TxRetries float64 `json:"tx_retries"` - UserNumSta float64 `json:"user-num_sta"` - } `json:"radio_table_stats"` - Rollupgrade FlexBool `json:"rollupgrade"` - RxBytes float64 `json:"rx_bytes"` - RxBytesD float64 `json:"rx_bytes-d"` - ScanRadioTable []interface{} `json:"scan_radio_table"` - Scanning FlexBool `json:"scanning"` - Serial string `json:"serial"` - SiteID string `json:"site_id"` - SiteName string `json:"-"` - SpectrumScanning FlexBool `json:"spectrum_scanning"` - SSHSessionTable []interface{} `json:"ssh_session_table"` - Stat struct { - Ap string `json:"ap"` - Bytes float64 `json:"bytes"` - Datetime string `json:"datetime"` - Duration float64 `json:"duration"` - GuestRxBytes float64 `json:"guest-rx_bytes"` - GuestRxCrypts float64 `json:"guest-rx_crypts"` - GuestRxDropped float64 `json:"guest-rx_dropped"` - GuestRxErrors float64 `json:"guest-rx_errors"` - GuestRxFrags float64 `json:"guest-rx_frags"` - GuestRxPackets float64 `json:"guest-rx_packets"` - GuestTxBytes float64 `json:"guest-tx_bytes"` - GuestTxDropped float64 `json:"guest-tx_dropped"` - GuestTxErrors float64 `json:"guest-tx_errors"` - GuestTxPackets float64 `json:"guest-tx_packets"` - GuestTxRetries float64 `json:"guest-tx_retries"` - O string `json:"o"` - Oid string `json:"oid"` - Port1RxBroadcast float64 `json:"port_1-rx_broadcast"` - Port1RxBytes float64 `json:"port_1-rx_bytes"` - Port1RxMulticast float64 `json:"port_1-rx_multicast"` - Port1RxPackets float64 `json:"port_1-rx_packets"` - Port1TxBroadcast float64 `json:"port_1-tx_broadcast"` - Port1TxBytes float64 `json:"port_1-tx_bytes"` - Port1TxMulticast float64 `json:"port_1-tx_multicast"` - Port1TxPackets float64 `json:"port_1-tx_packets"` - RxBytes float64 `json:"rx_bytes"` - RxCrypts float64 `json:"rx_crypts"` - RxDropped float64 `json:"rx_dropped"` - RxErrors float64 `json:"rx_errors"` - RxFrags float64 `json:"rx_frags"` - RxPackets float64 `json:"rx_packets"` - SiteID string `json:"site_id"` - Time float64 `json:"time"` - TxBytes float64 `json:"tx_bytes"` - TxDropped float64 `json:"tx_dropped"` - TxErrors float64 `json:"tx_errors"` - TxPackets float64 `json:"tx_packets"` - TxRetries float64 `json:"tx_retries"` - UserRxBytes float64 `json:"user-rx_bytes"` - UserRxCrypts float64 `json:"user-rx_crypts"` - UserRxDropped float64 `json:"user-rx_dropped"` - UserRxErrors float64 `json:"user-rx_errors"` - UserRxFrags float64 `json:"user-rx_frags"` - UserRxPackets float64 `json:"user-rx_packets"` - UserTxBytes float64 `json:"user-tx_bytes"` - UserTxDropped float64 `json:"user-tx_dropped"` - UserTxErrors float64 `json:"user-tx_errors"` - UserTxPackets float64 `json:"user-tx_packets"` - UserTxRetries float64 `json:"user-tx_retries"` - UserWifi0RxBytes float64 `json:"user-wifi0-rx_bytes"` - UserWifi0RxCrypts float64 `json:"user-wifi0-rx_crypts"` - UserWifi0RxDropped float64 `json:"user-wifi0-rx_dropped"` - UserWifi0RxErrors float64 `json:"user-wifi0-rx_errors"` - UserWifi0RxFrags float64 `json:"user-wifi0-rx_frags"` - UserWifi0RxPackets float64 `json:"user-wifi0-rx_packets"` - UserWifi0TxBytes float64 `json:"user-wifi0-tx_bytes"` - UserWifi0TxDropped float64 `json:"user-wifi0-tx_dropped"` - UserWifi0TxErrors float64 `json:"user-wifi0-tx_errors"` - UserWifi0TxPackets float64 `json:"user-wifi0-tx_packets"` - UserWifi0TxRetries float64 `json:"user-wifi0-tx_retries"` - UserWifi1RxBytes float64 `json:"user-wifi1-rx_bytes"` - UserWifi1RxCrypts float64 `json:"user-wifi1-rx_crypts"` - UserWifi1RxDropped float64 `json:"user-wifi1-rx_dropped"` - UserWifi1RxErrors float64 `json:"user-wifi1-rx_errors"` - UserWifi1RxFrags float64 `json:"user-wifi1-rx_frags"` - UserWifi1RxPackets float64 `json:"user-wifi1-rx_packets"` - UserWifi1TxBytes float64 `json:"user-wifi1-tx_bytes"` - UserWifi1TxDropped float64 `json:"user-wifi1-tx_dropped"` - UserWifi1TxErrors float64 `json:"user-wifi1-tx_errors"` - UserWifi1TxPackets float64 `json:"user-wifi1-tx_packets"` - UserWifi1TxRetries float64 `json:"user-wifi1-tx_retries"` - Wifi0RxBytes float64 `json:"wifi0-rx_bytes"` - Wifi0RxCrypts float64 `json:"wifi0-rx_crypts"` - Wifi0RxDropped float64 `json:"wifi0-rx_dropped"` - Wifi0RxErrors float64 `json:"wifi0-rx_errors"` - Wifi0RxFrags float64 `json:"wifi0-rx_frags"` - Wifi0RxPackets float64 `json:"wifi0-rx_packets"` - Wifi0TxBytes float64 `json:"wifi0-tx_bytes"` - Wifi0TxDropped float64 `json:"wifi0-tx_dropped"` - Wifi0TxErrors float64 `json:"wifi0-tx_errors"` - Wifi0TxPackets float64 `json:"wifi0-tx_packets"` - Wifi0TxRetries float64 `json:"wifi0-tx_retries"` - Wifi1RxBytes float64 `json:"wifi1-rx_bytes"` - Wifi1RxCrypts float64 `json:"wifi1-rx_crypts"` - Wifi1RxDropped float64 `json:"wifi1-rx_dropped"` - Wifi1RxErrors float64 `json:"wifi1-rx_errors"` - Wifi1RxFrags float64 `json:"wifi1-rx_frags"` - Wifi1RxPackets float64 `json:"wifi1-rx_packets"` - Wifi1TxBytes float64 `json:"wifi1-tx_bytes"` - Wifi1TxDropped float64 `json:"wifi1-tx_dropped"` - Wifi1TxErrors float64 `json:"wifi1-tx_errors"` - Wifi1TxPackets float64 `json:"wifi1-tx_packets"` - Wifi1TxRetries float64 `json:"wifi1-tx_retries"` - } `json:"stat"` - State int `json:"state"` - SysStats struct { + ScanRadioTable []interface{} `json:"scan_radio_table"` + Serial string `json:"serial"` + SiteID string `json:"site_id"` + SiteName string `json:"-"` + Type string `json:"type"` + Version string `json:"version"` + VwireTable []interface{} `json:"vwire_table"` + WifiCaps int `json:"wifi_caps"` + WlangroupIDNa string `json:"wlangroup_id_na"` + WlangroupIDNg string `json:"wlangroup_id_ng"` + RequiredVersion string `json:"required_version"` + HwCaps int `json:"hw_caps"` + Unsupported FlexBool `json:"unsupported"` + UnsupportedReason FlexInt `json:"unsupported_reason"` + SysErrorCaps int `json:"sys_error_caps"` + HasFan FlexBool `json:"has_fan"` + HasTemperature FlexBool `json:"has_temperature"` + DeviceID string `json:"device_id"` + State int `json:"state"` + LastSeen FlexInt `json:"last_seen"` + Upgradable FlexBool `json:"upgradable"` + AdoptableWhenUpgraded FlexBool `json:"adoptable_when_upgraded"` + Rollupgrade FlexBool `json:"rollupgrade"` + KnownCfgversion string `json:"known_cfgversion"` + Uptime FlexInt `json:"uptime"` + UUptime FlexInt `json:"_uptime"` + Locating FlexBool `json:"locating"` + ConnectRequestIP string `json:"connect_request_ip"` + ConnectRequestPort string `json:"connect_request_port"` + SysStats struct { Loadavg1 float64 `json:"loadavg_1,string"` Loadavg15 float64 `json:"loadavg_15,string"` Loadavg5 float64 `json:"loadavg_5,string"` - MemBuffer float64 `json:"mem_buffer"` - MemTotal float64 `json:"mem_total"` - MemUsed float64 `json:"mem_used"` + MemBuffer FlexInt `json:"mem_buffer"` + MemTotal FlexInt `json:"mem_total"` + MemUsed FlexInt `json:"mem_used"` } `json:"sys_stats"` SystemStats struct { CPU float64 `json:"cpu,string"` Mem float64 `json:"mem,string"` Uptime float64 `json:"uptime,string"` } `json:"system-stats"` - TxBytes float64 `json:"tx_bytes"` - TxBytesD float64 `json:"tx_bytes-d"` - Type string `json:"type"` - Upgradable FlexBool `json:"upgradable"` - Uplink struct { + SSHSessionTable []interface{} `json:"ssh_session_table"` + Scanning FlexBool `json:"scanning"` + SpectrumScanning FlexBool `json:"spectrum_scanning"` + GuestToken string `json:"guest_token"` + Meshv3PeerMac string `json:"meshv3_peer_mac"` + Satisfaction FlexInt `json:"satisfaction"` + Isolated FlexBool `json:"isolated"` + RadioTableStats []struct { + Name string `json:"name"` + Channel FlexInt `json:"channel"` + Radio string `json:"radio"` + AstTxto interface{} `json:"ast_txto"` + AstCst interface{} `json:"ast_cst"` + AstBeXmit FlexInt `json:"ast_be_xmit"` + CuTotal FlexInt `json:"cu_total"` + CuSelfRx FlexInt `json:"cu_self_rx"` + CuSelfTx FlexInt `json:"cu_self_tx"` + Gain FlexInt `json:"gain"` + State string `json:"state"` + Extchannel FlexInt `json:"extchannel"` + TxPower FlexInt `json:"tx_power"` + TxPackets FlexInt `json:"tx_packets"` + TxRetries FlexInt `json:"tx_retries"` + NumSta FlexInt `json:"num_sta"` + GuestNumSta FlexInt `json:"guest-num_sta"` + UserNumSta FlexInt `json:"user-num_sta"` + } `json:"radio_table_stats"` + Uplink struct { FullDuplex FlexBool `json:"full_duplex"` IP string `json:"ip"` Mac string `json:"mac"` - MaxSpeed int `json:"max_speed"` MaxVlan int `json:"max_vlan"` - Media string `json:"media"` Name string `json:"name"` Netmask string `json:"netmask"` NumPort int `json:"num_port"` - RxBytes float64 `json:"rx_bytes"` - RxBytesR float64 `json:"rx_bytes-r"` - RxDropped float64 `json:"rx_dropped"` - RxErrors float64 `json:"rx_errors"` - RxMulticast float64 `json:"rx_multicast"` - RxPackets float64 `json:"rx_packets"` - Speed float64 `json:"speed"` - TxBytes float64 `json:"tx_bytes"` - TxBytesR float64 `json:"tx_bytes-r"` - TxDropped float64 `json:"tx_dropped"` - TxErrors float64 `json:"tx_errors"` - TxPackets float64 `json:"tx_packets"` - Type string `json:"type"` + RxBytes FlexInt `json:"rx_bytes"` + RxDropped FlexInt `json:"rx_dropped"` + RxErrors FlexInt `json:"rx_errors"` + RxMulticast FlexInt `json:"rx_multicast"` + RxPackets FlexInt `json:"rx_packets"` + Speed FlexInt `json:"speed"` + TxBytes FlexInt `json:"tx_bytes"` + TxDropped FlexInt `json:"tx_dropped"` + TxErrors FlexInt `json:"tx_errors"` + TxPackets FlexInt `json:"tx_packets"` Up FlexBool `json:"up"` + MaxSpeed FlexInt `json:"max_speed"` + Type string `json:"type"` + TxBytesR FlexInt `json:"tx_bytes-r"` + RxBytesR FlexInt `json:"rx_bytes-r"` UplinkMac string `json:"uplink_mac"` UplinkRemotePort int `json:"uplink_remote_port"` } `json:"uplink"` - UplinkTable []interface{} `json:"uplink_table"` - Uptime FlexInt `json:"uptime"` - UserNumSta int `json:"user-num_sta"` - VapTable []struct { - ApMac string `json:"ap_mac"` - Bssid string `json:"bssid"` - Ccq int `json:"ccq"` - Channel int `json:"channel"` - Essid string `json:"essid"` - Extchannel int `json:"extchannel"` - ID string `json:"id"` - IsGuest FlexBool `json:"is_guest"` - IsWep FlexBool `json:"is_wep"` - MacFilterRejections int `json:"mac_filter_rejections"` - MapID string `json:"map_id"` - Name string `json:"name"` - NumSta int `json:"num_sta"` - Radio string `json:"radio"` - RadioName string `json:"radio_name"` - RxBytes float64 `json:"rx_bytes"` - RxCrypts float64 `json:"rx_crypts"` - RxDropped float64 `json:"rx_dropped"` - RxErrors float64 `json:"rx_errors"` - RxFrags float64 `json:"rx_frags"` - RxNwids float64 `json:"rx_nwids"` - RxPackets float64 `json:"rx_packets"` - SiteID string `json:"site_id"` - SiteName string `json:"-"` - State string `json:"state"` - T string `json:"t"` - TxBytes float64 `json:"tx_bytes"` - TxDropped float64 `json:"tx_dropped"` - TxErrors float64 `json:"tx_errors"` - TxLatencyAvg float64 `json:"tx_latency_avg"` - TxLatencyMax float64 `json:"tx_latency_max"` - TxLatencyMin float64 `json:"tx_latency_min"` - TxPackets float64 `json:"tx_packets"` - TxPower FlexInt `json:"tx_power"` - TxRetries int `json:"tx_retries"` - Up FlexBool `json:"up"` - Usage string `json:"usage"` - WlanconfID string `json:"wlanconf_id"` + VapTable []struct { + SiteName string `json:"-"` + AnomaliesBarChart struct { + HighTCPLatency FlexInt `json:"high_tcp_latency"` + HighTCPPacketLoss FlexInt `json:"high_tcp_packet_loss"` + HighWifiLatency FlexInt `json:"high_wifi_latency"` + HighWifiRetries FlexInt `json:"high_wifi_retries"` + LowPhyRate FlexInt `json:"low_phy_rate"` + PoorStreamEff FlexInt `json:"poor_stream_eff"` + SleepyClient FlexInt `json:"sleepy_client"` + StaArpTimeout FlexInt `json:"sta_arp_timeout"` + StaDNSTimeout FlexInt `json:"sta_dns_timeout"` + StaIPTimeout FlexInt `json:"sta_ip_timeout"` + WeakSignal FlexInt `json:"weak_signal"` + } `json:"anomalies_bar_chart"` + AnomaliesBarChartNow struct { + HighTCPLatency FlexInt `json:"high_tcp_latency"` + HighTCPPacketLoss FlexInt `json:"high_tcp_packet_loss"` + HighWifiLatency FlexInt `json:"high_wifi_latency"` + HighWifiRetries FlexInt `json:"high_wifi_retries"` + LowPhyRate FlexInt `json:"low_phy_rate"` + PoorStreamEff FlexInt `json:"poor_stream_eff"` + SleepyClient FlexInt `json:"sleepy_client"` + StaArpTimeout FlexInt `json:"sta_arp_timeout"` + StaDNSTimeout FlexInt `json:"sta_dns_timeout"` + StaIPTimeout FlexInt `json:"sta_ip_timeout"` + WeakSignal FlexInt `json:"weak_signal"` + } `json:"anomalies_bar_chart_now"` + AvgClientSignal FlexInt `json:"avg_client_signal"` + Bssid string `json:"bssid"` + Ccq int `json:"ccq"` + Channel int `json:"channel"` + Essid string `json:"essid"` + Extchannel int `json:"extchannel"` + ID string `json:"id"` + MacFilterRejections int `json:"mac_filter_rejections"` + Name string `json:"name"` + NumSatisfactionSta FlexInt `json:"num_satisfaction_sta"` + NumSta int `json:"num_sta"` + Radio string `json:"radio"` + RadioName string `json:"radio_name"` + ReasonsBarChart struct { + PhyRate FlexInt `json:"phy_rate"` + Signal FlexInt `json:"signal"` + SleepyClient FlexInt `json:"sleepy_client"` + StaArpTimeout FlexInt `json:"sta_arp_timeout"` + StaDNSTimeout FlexInt `json:"sta_dns_timeout"` + StaIPTimeout FlexInt `json:"sta_ip_timeout"` + StreamEff FlexInt `json:"stream_eff"` + TCPLatency FlexInt `json:"tcp_latency"` + TCPPacketLoss FlexInt `json:"tcp_packet_loss"` + WifiLatency FlexInt `json:"wifi_latency"` + WifiRetries FlexInt `json:"wifi_retries"` + } `json:"reasons_bar_chart"` + ReasonsBarChartNow struct { + PhyRate FlexInt `json:"phy_rate"` + Signal FlexInt `json:"signal"` + SleepyClient FlexInt `json:"sleepy_client"` + StaArpTimeout FlexInt `json:"sta_arp_timeout"` + StaDNSTimeout FlexInt `json:"sta_dns_timeout"` + StaIPTimeout FlexInt `json:"sta_ip_timeout"` + StreamEff FlexInt `json:"stream_eff"` + TCPLatency FlexInt `json:"tcp_latency"` + TCPPacketLoss FlexInt `json:"tcp_packet_loss"` + WifiLatency FlexInt `json:"wifi_latency"` + WifiRetries FlexInt `json:"wifi_retries"` + } `json:"reasons_bar_chart_now"` + RxBytes FlexInt `json:"rx_bytes"` + RxCrypts FlexInt `json:"rx_crypts"` + RxDropped FlexInt `json:"rx_dropped"` + RxErrors FlexInt `json:"rx_errors"` + RxFrags FlexInt `json:"rx_frags"` + RxNwids FlexInt `json:"rx_nwids"` + RxPackets FlexInt `json:"rx_packets"` + RxTCPStats struct { + Goodbytes FlexInt `json:"goodbytes"` + LatAvg FlexInt `json:"lat_avg"` + LatMax FlexInt `json:"lat_max"` + LatMin FlexInt `json:"lat_min"` + Stalls FlexInt `json:"stalls"` + } `json:"rx_tcp_stats"` + Satisfaction FlexInt `json:"satisfaction"` + SatisfactionNow FlexInt `json:"satisfaction_now"` + State string `json:"state"` + TxBytes FlexInt `json:"tx_bytes"` + TxCombinedRetries FlexInt `json:"tx_combined_retries"` + TxDataMpduBytes FlexInt `json:"tx_data_mpdu_bytes"` + TxDropped FlexInt `json:"tx_dropped"` + TxErrors FlexInt `json:"tx_errors"` + TxPackets FlexInt `json:"tx_packets"` + TxPower FlexInt `json:"tx_power"` + TxRetries FlexInt `json:"tx_retries"` + TxRtsRetries FlexInt `json:"tx_rts_retries"` + TxSuccess FlexInt `json:"tx_success"` + TxTCPStats struct { + Goodbytes FlexInt `json:"goodbytes"` + LatAvg FlexInt `json:"lat_avg"` + LatMax FlexInt `json:"lat_max"` + LatMin FlexInt `json:"lat_min"` + Stalls FlexInt `json:"stalls"` + } `json:"tx_tcp_stats"` + TxTotal FlexInt `json:"tx_total"` + Up FlexBool `json:"up"` + Usage string `json:"usage"` + WifiTxAttempts FlexInt `json:"wifi_tx_attempts"` + WifiTxDropped FlexInt `json:"wifi_tx_dropped"` + WifiTxLatencyMov struct { + Avg FlexInt `json:"avg"` + Max FlexInt `json:"max"` + Min FlexInt `json:"min"` + Total FlexInt `json:"total"` + TotalCount FlexInt `json:"total_count"` + } `json:"wifi_tx_latency_mov"` + T string `json:"t"` + WlanconfID string `json:"wlanconf_id"` + IsGuest FlexBool `json:"is_guest"` + IsWep FlexBool `json:"is_wep"` + ApMac string `json:"ap_mac"` + MapID interface{} `json:"map_id"` + SiteID string `json:"site_id"` } `json:"vap_table"` - Version string `json:"version"` - VersionIncompatible FlexBool `json:"version_incompatible"` - VwireEnabled FlexBool `json:"vwireEnabled"` - VwireTable []interface{} `json:"vwire_table"` - VwireVapTable []struct { - Bssid string `json:"bssid"` - Radio string `json:"radio"` - RadioName string `json:"radio_name"` - State string `json:"state"` - } `json:"vwire_vap_table"` - WifiCaps int `json:"wifi_caps"` + DownlinkTable []interface{} `json:"downlink_table"` + VwireVapTable []interface{} `json:"vwire_vap_table"` + BytesD FlexInt `json:"bytes-d"` + TxBytesD FlexInt `json:"tx_bytes-d"` + RxBytesD FlexInt `json:"rx_bytes-d"` + BytesR FlexInt `json:"bytes-r"` + LastUplink struct { + UplinkMac string `json:"uplink_mac"` + UplinkRemotePort int `json:"uplink_remote_port"` + } `json:"last_uplink"` + Stat 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"` + } `json:"stat,omitempty"` + TxBytes FlexInt `json:"tx_bytes"` + RxBytes FlexInt `json:"rx_bytes"` + Bytes FlexInt `json:"bytes"` + VwireEnabled FlexBool `json:"vwireEnabled"` + UplinkTable []interface{} `json:"uplink_table"` + NumSta int `json:"num_sta"` + UserNumSta int `json:"user-num_sta"` + GuestNumSta int `json:"guest-num_sta"` + TwoPhaseAdopt FlexBool `json:"two_phase_adopt,omitempty"` }