diff --git a/integrations/influxunifi/Gopkg.lock b/integrations/influxunifi/Gopkg.lock index 6d3ecf14..93133343 100644 --- a/integrations/influxunifi/Gopkg.lock +++ b/integrations/influxunifi/Gopkg.lock @@ -30,12 +30,12 @@ version = "v1.0.3" [[projects]] - digest = "1:8a7dc583b5300f5d3f2602769b11127193330f74bb0a31e135d7354a1f96374a" + digest = "1:a9c89c9c5c1cb23eec483854438c6c960f6e58cdedcd46b8cbe613c3855bc25f" name = "golift.io/unifi" packages = ["."] pruneopts = "UT" - revision = "65d8c5a10faeb8180053a760d20800baf515f01a" - version = "v4.0.2" + revision = "5de396262e0c5ce475045bfccd658df58c7c3b13" + version = "v4.1.0" [[projects]] digest = "1:4d2e5a73dc1500038e504a8d78b986630e3626dc027bc030ba5c75da257cdb96" diff --git a/integrations/influxunifi/unifipoller/influx_uap.go b/integrations/influxunifi/unifipoller/influx_uap.go index ea9da689..0a7c36fa 100644 --- a/integrations/influxunifi/unifipoller/influx_uap.go +++ b/integrations/influxunifi/unifipoller/influx_uap.go @@ -39,147 +39,91 @@ func UAPPoints(u *unifi.UAP, now time.Time) ([]*influx.Point, error) { "vwireEnabled": u.VwireEnabled.Txt, } fields := map[string]interface{}{ - "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.Val, - "loadavg_5": u.SysStats.Loadavg5.Val, - "loadavg_15": u.SysStats.Loadavg15.Val, - "mem_buffer": u.SysStats.MemBuffer.Val, - "mem_total": u.SysStats.MemTotal.Val, - "mem_used": u.SysStats.MemUsed.Val, - "cpu": u.SystemStats.CPU.Val, - "mem": u.SystemStats.Mem.Val, - "system_uptime": u.SystemStats.Uptime.Val, - "stat_guest-wifi0-rx_packets": u.Stat.GuestWifi0RxPackets.Val, - "stat_guest-wifi1-rx_packets": u.Stat.GuestWifi1RxPackets.Val, - "stat_user-wifi1-rx_packets": u.Stat.UserWifi1RxPackets.Val, - "stat_user-wifi0-rx_packets": u.Stat.UserWifi0RxPackets.Val, - "stat_user-rx_packets": u.Stat.UserRxPackets.Val, - "stat_guest-rx_packets": u.Stat.GuestRxPackets.Val, - "stat_wifi0-rx_packets": u.Stat.Wifi0RxPackets.Val, - "stat_wifi1-rx_packets": u.Stat.Wifi1RxPackets.Val, - "stat_rx_packets": u.Stat.RxPackets.Val, - "stat_guest-wifi0-rx_bytes": u.Stat.GuestWifi0RxBytes.Val, - "stat_guest-wifi1-rx_bytes": u.Stat.GuestWifi1RxBytes.Val, - "stat_user-wifi1-rx_bytes": u.Stat.UserWifi1RxBytes.Val, - "stat_user-wifi0-rx_bytes": u.Stat.UserWifi0RxBytes.Val, - "stat_user-rx_bytes": u.Stat.UserRxBytes.Val, - "stat_guest-rx_bytes": u.Stat.GuestRxBytes.Val, - "stat_wifi0-rx_bytes": u.Stat.Wifi0RxBytes.Val, - "stat_wifi1-rx_bytes": u.Stat.Wifi1RxBytes.Val, - "stat_rx_bytes": u.Stat.RxBytes.Val, - "stat_guest-wifi0-rx_errors": u.Stat.GuestWifi0RxErrors.Val, - "stat_guest-wifi1-rx_errors": u.Stat.GuestWifi1RxErrors.Val, - "stat_user-wifi1-rx_errors": u.Stat.UserWifi1RxErrors.Val, - "stat_user-wifi0-rx_errors": u.Stat.UserWifi0RxErrors.Val, - "stat_user-rx_errors": u.Stat.UserRxErrors.Val, - "stat_guest-rx_errors": u.Stat.GuestRxErrors.Val, - "stat_wifi0-rx_errors": u.Stat.Wifi0RxErrors.Val, - "stat_wifi1-rx_errors": u.Stat.Wifi1RxErrors.Val, - "stat_rx_errors": u.Stat.RxErrors.Val, - "stat_guest-wifi0-rx_dropped": u.Stat.GuestWifi0RxDropped.Val, - "stat_guest-wifi1-rx_dropped": u.Stat.GuestWifi1RxDropped.Val, - "stat_user-wifi1-rx_dropped": u.Stat.UserWifi1RxDropped.Val, - "stat_user-wifi0-rx_dropped": u.Stat.UserWifi0RxDropped.Val, - "stat_user-rx_dropped": u.Stat.UserRxDropped.Val, - "stat_guest-rx_dropped": u.Stat.GuestRxDropped.Val, - "stat_wifi0-rx_dropped": u.Stat.Wifi0RxDropped.Val, - "stat_wifi1-rx_dropped": u.Stat.Wifi1RxDropped.Val, - "stat_rx_dropped": u.Stat.RxDropped.Val, - "stat_guest-wifi0-rx_crypts": u.Stat.GuestWifi0RxCrypts.Val, - "stat_guest-wifi1-rx_crypts": u.Stat.GuestWifi1RxCrypts.Val, - "stat_user-wifi1-rx_crypts": u.Stat.UserWifi1RxCrypts.Val, - "stat_user-wifi0-rx_crypts": u.Stat.UserWifi0RxCrypts.Val, - "stat_user-rx_crypts": u.Stat.UserRxCrypts.Val, - "stat_guest-rx_crypts": u.Stat.GuestRxCrypts.Val, - "stat_wifi0-rx_crypts": u.Stat.Wifi0RxCrypts.Val, - "stat_wifi1-rx_crypts": u.Stat.Wifi1RxCrypts.Val, - "stat_rx_crypts": u.Stat.RxCrypts.Val, - "stat_guest-wifi0-rx_frags": u.Stat.GuestWifi0RxFrags.Val, - "stat_guest-wifi1-rx_frags": u.Stat.GuestWifi1RxFrags.Val, - "stat_user-wifi1-rx_frags": u.Stat.UserWifi1RxFrags.Val, - "stat_user-wifi0-rx_frags": u.Stat.UserWifi0RxFrags.Val, - "stat_user-rx_frags": u.Stat.UserRxFrags.Val, - "stat_guest-rx_frags": u.Stat.GuestRxFrags.Val, - "stat_wifi0-rx_frags": u.Stat.Wifi0RxFrags.Val, - "stat_wifi1-rx_frags": u.Stat.Wifi1RxFrags.Val, - "stat_rx_frags": u.Stat.RxFrags.Val, - "stat_guest-wifi0-tx_packets": u.Stat.GuestWifi0TxPackets.Val, - "stat_guest-wifi1-tx_packets": u.Stat.GuestWifi1TxPackets.Val, - "stat_user-wifi1-tx_packets": u.Stat.UserWifi1TxPackets.Val, - "stat_user-wifi0-tx_packets": u.Stat.UserWifi0TxPackets.Val, - "stat_user-tx_packets": u.Stat.UserTxPackets.Val, - "stat_guest-tx_packets": u.Stat.GuestTxPackets.Val, - "stat_wifi0-tx_packets": u.Stat.Wifi0TxPackets.Val, - "stat_wifi1-tx_packets": u.Stat.Wifi1TxPackets.Val, - "stat_tx_packets": u.Stat.TxPackets.Val, - "stat_guest-wifi0-tx_bytes": u.Stat.GuestWifi0TxBytes.Val, - "stat_guest-wifi1-tx_bytes": u.Stat.GuestWifi1TxBytes.Val, - "stat_user-wifi1-tx_bytes": u.Stat.UserWifi1TxBytes.Val, - "stat_user-wifi0-tx_bytes": u.Stat.UserWifi0TxBytes.Val, - "stat_user-tx_bytes": u.Stat.UserTxBytes.Val, - "stat_guest-tx_bytes": u.Stat.GuestTxBytes.Val, - "stat_wifi0-tx_bytes": u.Stat.Wifi0TxBytes.Val, - "stat_wifi1-tx_bytes": u.Stat.Wifi1TxBytes.Val, - "stat_tx_bytes": u.Stat.TxBytes.Val, - "stat_guest-wifi0-tx_errors": u.Stat.GuestWifi0TxErrors.Val, - "stat_guest-wifi1-tx_errors": u.Stat.GuestWifi1TxErrors.Val, - "stat_user-wifi1-tx_errors": u.Stat.UserWifi1TxErrors.Val, - "stat_user-wifi0-tx_errors": u.Stat.UserWifi0TxErrors.Val, - "stat_user-tx_errors": u.Stat.UserTxErrors.Val, - "stat_guest-tx_errors": u.Stat.GuestTxErrors.Val, - "stat_wifi0-tx_errors": u.Stat.Wifi0TxErrors.Val, - "stat_wifi1-tx_errors": u.Stat.Wifi1TxErrors.Val, - "stat_tx_errors": u.Stat.TxErrors.Val, - "stat_guest-wifi0-tx_dropped": u.Stat.GuestWifi0TxDropped.Val, - "stat_guest-wifi1-tx_dropped": u.Stat.GuestWifi1TxDropped.Val, - "stat_user-wifi1-tx_dropped": u.Stat.UserWifi1TxDropped.Val, - "stat_user-wifi0-tx_dropped": u.Stat.UserWifi0TxDropped.Val, - "stat_user-tx_dropped": u.Stat.UserTxDropped.Val, - "stat_guest-tx_dropped": u.Stat.GuestTxDropped.Val, - "stat_wifi0-tx_dropped": u.Stat.Wifi0TxDropped.Val, - "stat_wifi1-tx_dropped": u.Stat.Wifi1TxDropped.Val, - "stat_tx_dropped": u.Stat.TxDropped.Val, - "stat_guest-wifi0-tx_retries": u.Stat.GuestWifi0TxRetries.Val, - "stat_guest-wifi1-tx_retries": u.Stat.GuestWifi1TxRetries.Val, - "stat_user-wifi1-tx_retries": u.Stat.UserWifi1TxRetries.Val, - "stat_user-wifi0-tx_retries": u.Stat.UserWifi0TxRetries.Val, - "stat_user-tx_retries": u.Stat.UserTxRetries.Val, - "stat_guest-tx_retries": u.Stat.GuestTxRetries.Val, - "stat_wifi0-tx_retries": u.Stat.Wifi0TxRetries.Val, - "stat_wifi1-tx_retries": u.Stat.Wifi1TxRetries.Val, + "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.Val, + "loadavg_5": u.SysStats.Loadavg5.Val, + "loadavg_15": u.SysStats.Loadavg15.Val, + "mem_buffer": u.SysStats.MemBuffer.Val, + "mem_total": u.SysStats.MemTotal.Val, + "mem_used": u.SysStats.MemUsed.Val, + "cpu": u.SystemStats.CPU.Val, + "mem": u.SystemStats.Mem.Val, + "system_uptime": u.SystemStats.Uptime.Val, + // Accumulative Statistics. + "stat_user-rx_packets": u.Stat.UserRxPackets.Val, + "stat_guest-rx_packets": u.Stat.GuestRxPackets.Val, + "stat_rx_packets": u.Stat.RxPackets.Val, + "stat_user-rx_bytes": u.Stat.UserRxBytes.Val, + "stat_guest-rx_bytes": u.Stat.GuestRxBytes.Val, + "stat_rx_bytes": u.Stat.RxBytes.Val, + "stat_user-rx_errors": u.Stat.UserRxErrors.Val, + "stat_guest-rx_errors": u.Stat.GuestRxErrors.Val, + "stat_rx_errors": u.Stat.RxErrors.Val, + "stat_user-rx_dropped": u.Stat.UserRxDropped.Val, + "stat_guest-rx_dropped": u.Stat.GuestRxDropped.Val, + "stat_rx_dropped": u.Stat.RxDropped.Val, + "stat_user-rx_crypts": u.Stat.UserRxCrypts.Val, + "stat_guest-rx_crypts": u.Stat.GuestRxCrypts.Val, + "stat_rx_crypts": u.Stat.RxCrypts.Val, + "stat_user-rx_frags": u.Stat.UserRxFrags.Val, + "stat_guest-rx_frags": u.Stat.GuestRxFrags.Val, + "stat_rx_frags": u.Stat.RxFrags.Val, + "stat_user-tx_packets": u.Stat.UserTxPackets.Val, + "stat_guest-tx_packets": u.Stat.GuestTxPackets.Val, + "stat_tx_packets": u.Stat.TxPackets.Val, + "stat_user-tx_bytes": u.Stat.UserTxBytes.Val, + "stat_guest-tx_bytes": u.Stat.GuestTxBytes.Val, + "stat_tx_bytes": u.Stat.TxBytes.Val, + "stat_user-tx_errors": u.Stat.UserTxErrors.Val, + "stat_guest-tx_errors": u.Stat.GuestTxErrors.Val, + "stat_tx_errors": u.Stat.TxErrors.Val, + "stat_user-tx_dropped": u.Stat.UserTxDropped.Val, + "stat_guest-tx_dropped": u.Stat.GuestTxDropped.Val, + "stat_tx_dropped": u.Stat.TxDropped.Val, + "stat_user-tx_retries": u.Stat.UserTxRetries.Val, + "stat_guest-tx_retries": u.Stat.GuestTxRetries.Val, } pt, err := influx.NewPoint("uap", tags, fields, now) if err != nil { return nil, err } - points := []*influx.Point{pt} + morePoints, err := processVAPs(u.VapTable, u.RadioTable, u.RadioTableStats, u.Name, u.ID, u.Mac, u.SiteName, now) + if err != nil { + return nil, err + } + return append(morePoints, pt), nil +} + +// processVAPs creates points for Wifi Radios. This works with several types of UAP-capable devices. +func processVAPs(vt unifi.VapTable, rt unifi.RadioTable, rts unifi.RadioTableStats, name, id, mac, sitename string, ts time.Time) ([]*influx.Point, error) { + tags := make(map[string]string) + fields := make(map[string]interface{}) + points := []*influx.Point{} - 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 + for _, s := range vt { + tags["device_name"] = name + tags["device_id"] = id + tags["device_mac"] = mac + tags["site_name"] = sitename tags["ap_mac"] = s.ApMac tags["bssid"] = s.Bssid tags["id"] = s.ID @@ -232,7 +176,7 @@ func UAPPoints(u *unifi.UAP, now time.Time) ([]*influx.Point, error) { fields["wifi_tx_latency_mov_total"] = s.WifiTxLatencyMov.Total.Val fields["wifi_tx_latency_mov_cuont"] = s.WifiTxLatencyMov.TotalCount.Val - for _, p := range u.RadioTable { + for _, p := range rt { if p.Name != s.RadioName { continue } @@ -249,7 +193,7 @@ func UAPPoints(u *unifi.UAP, now time.Time) ([]*influx.Point, error) { fields["tx_power"] = p.TxPower.Val } - for _, p := range u.RadioTableStats { + for _, p := range rts { if p.Name != s.RadioName { continue } @@ -269,7 +213,7 @@ func UAPPoints(u *unifi.UAP, now time.Time) ([]*influx.Point, error) { fields["user-num_sta"] = p.UserNumSta.Val } - pt, err := influx.NewPoint("uap_vaps", tags, fields, now) + pt, err := influx.NewPoint("uap_vaps", tags, fields, ts) if err != nil { return points, err } diff --git a/integrations/influxunifi/unifipoller/influx_udm.go b/integrations/influxunifi/unifipoller/influx_udm.go index 80492878..73d27188 100644 --- a/integrations/influxunifi/unifipoller/influx_udm.go +++ b/integrations/influxunifi/unifipoller/influx_udm.go @@ -196,19 +196,18 @@ func UDMPoints(u *unifi.UDM, now time.Time) ([]*influx.Point, error) { "cpu": u.SystemStats.CPU.Val, "mem": u.SystemStats.Mem.Val, "system_uptime": u.SystemStats.Uptime.Val, - "stat_bytes": u.Stat.Bytes.Val, - "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, - "uplink_depth": "0", + "stat_bytes": u.Stat.Sw.Bytes.Val, + "stat_rx_bytes": u.Stat.Sw.RxBytes.Val, + "stat_rx_crypts": u.Stat.Sw.RxCrypts.Val, + "stat_rx_dropped": u.Stat.Sw.RxDropped.Val, + "stat_rx_errors": u.Stat.Sw.RxErrors.Val, + "stat_rx_frags": u.Stat.Sw.RxFrags.Val, + "stat_rx_packets": u.Stat.Sw.TxPackets.Val, + "stat_tx_bytes": u.Stat.Sw.TxBytes.Val, + "stat_tx_dropped": u.Stat.Sw.TxDropped.Val, + "stat_tx_errors": u.Stat.Sw.TxErrors.Val, + "stat_tx_packets": u.Stat.Sw.TxPackets.Val, + "stat_tx_retries": u.Stat.Sw.TxRetries.Val, } pt, err = influx.NewPoint("usw", tags, fields, now) if err != nil { @@ -321,5 +320,13 @@ func UDMPoints(u *unifi.UDM, now time.Time) ([]*influx.Point, error) { } points = append(points, pt) } - return points, nil + if u.Stat.Ap == nil { + return points, nil + // we're done now. the following code process UDM (non-pro) UAP data. + } + uapPoints, err := processVAPs(*u.VapTable, *u.RadioTable, *u.RadioTableStats, u.Name, u.ID, u.Mac, u.SiteName, now) + if err != nil { + return nil, err + } + return append(points, uapPoints...), nil }