more reusable code
This commit is contained in:
parent
50c1a635c6
commit
36e88dcaf4
|
|
@ -19,157 +19,152 @@ func (u *InfluxUnifi) batchUAP(r report, s *unifi.UAP) {
|
|||
"serial": s.Serial,
|
||||
"type": s.Type,
|
||||
}
|
||||
fields := map[string]interface{}{
|
||||
"ip": s.IP,
|
||||
"bytes": s.Bytes.Val,
|
||||
"last_seen": s.LastSeen.Val,
|
||||
"rx_bytes": s.RxBytes.Val,
|
||||
"tx_bytes": s.TxBytes.Val,
|
||||
"uptime": s.Uptime.Val,
|
||||
"state": s.State,
|
||||
"user-num_sta": int(s.UserNumSta.Val),
|
||||
"guest-num_sta": int(s.GuestNumSta.Val),
|
||||
"num_sta": s.NumSta.Val,
|
||||
"loadavg_1": s.SysStats.Loadavg1.Val,
|
||||
"loadavg_5": s.SysStats.Loadavg5.Val,
|
||||
"loadavg_15": s.SysStats.Loadavg15.Val,
|
||||
"mem_buffer": s.SysStats.MemBuffer.Val,
|
||||
"mem_total": s.SysStats.MemTotal.Val,
|
||||
"mem_used": s.SysStats.MemUsed.Val,
|
||||
"cpu": s.SystemStats.CPU.Val,
|
||||
"mem": s.SystemStats.Mem.Val,
|
||||
"system_uptime": s.SystemStats.Uptime.Val,
|
||||
// Accumulative Statistics.
|
||||
"stat_user-rx_packets": s.Stat.Ap.UserRxPackets.Val,
|
||||
"stat_guest-rx_packets": s.Stat.Ap.GuestRxPackets.Val,
|
||||
"stat_rx_packets": s.Stat.Ap.RxPackets.Val,
|
||||
"stat_user-rx_bytes": s.Stat.Ap.UserRxBytes.Val,
|
||||
"stat_guest-rx_bytes": s.Stat.Ap.GuestRxBytes.Val,
|
||||
"stat_rx_bytes": s.Stat.Ap.RxBytes.Val,
|
||||
"stat_user-rx_errors": s.Stat.Ap.UserRxErrors.Val,
|
||||
"stat_guest-rx_errors": s.Stat.Ap.GuestRxErrors.Val,
|
||||
"stat_rx_errors": s.Stat.Ap.RxErrors.Val,
|
||||
"stat_user-rx_dropped": s.Stat.Ap.UserRxDropped.Val,
|
||||
"stat_guest-rx_dropped": s.Stat.Ap.GuestRxDropped.Val,
|
||||
"stat_rx_dropped": s.Stat.Ap.RxDropped.Val,
|
||||
"stat_user-rx_crypts": s.Stat.Ap.UserRxCrypts.Val,
|
||||
"stat_guest-rx_crypts": s.Stat.Ap.GuestRxCrypts.Val,
|
||||
"stat_rx_crypts": s.Stat.Ap.RxCrypts.Val,
|
||||
"stat_user-rx_frags": s.Stat.Ap.UserRxFrags.Val,
|
||||
"stat_guest-rx_frags": s.Stat.Ap.GuestRxFrags.Val,
|
||||
"stat_rx_frags": s.Stat.Ap.RxFrags.Val,
|
||||
"stat_user-tx_packets": s.Stat.Ap.UserTxPackets.Val,
|
||||
"stat_guest-tx_packets": s.Stat.Ap.GuestTxPackets.Val,
|
||||
"stat_tx_packets": s.Stat.Ap.TxPackets.Val,
|
||||
"stat_user-tx_bytes": s.Stat.Ap.UserTxBytes.Val,
|
||||
"stat_guest-tx_bytes": s.Stat.Ap.GuestTxBytes.Val,
|
||||
"stat_tx_bytes": s.Stat.Ap.TxBytes.Val,
|
||||
"stat_user-tx_errors": s.Stat.Ap.UserTxErrors.Val,
|
||||
"stat_guest-tx_errors": s.Stat.Ap.GuestTxErrors.Val,
|
||||
"stat_tx_errors": s.Stat.Ap.TxErrors.Val,
|
||||
"stat_user-tx_dropped": s.Stat.Ap.UserTxDropped.Val,
|
||||
"stat_guest-tx_dropped": s.Stat.Ap.GuestTxDropped.Val,
|
||||
"stat_tx_dropped": s.Stat.Ap.TxDropped.Val,
|
||||
"stat_user-tx_retries": s.Stat.Ap.UserTxRetries.Val,
|
||||
"stat_guest-tx_retries": s.Stat.Ap.GuestTxRetries.Val,
|
||||
}
|
||||
fields := Combine(u.processUAPstats(r, s.Stat.Ap), u.batchSysStats(r, s.SysStats, s.SystemStats))
|
||||
fields["ip"] = s.IP
|
||||
fields["bytes"] = s.Bytes.Val
|
||||
fields["last_seen"] = s.LastSeen.Val
|
||||
fields["rx_bytes"] = s.RxBytes.Val
|
||||
fields["tx_bytes"] = s.TxBytes.Val
|
||||
fields["uptime"] = s.Uptime.Val
|
||||
fields["state"] = s.State
|
||||
fields["user-num_sta"] = int(s.UserNumSta.Val)
|
||||
fields["guest-num_sta"] = int(s.GuestNumSta.Val)
|
||||
fields["num_sta"] = s.NumSta.Val
|
||||
r.send(&metric{Table: "uap", Tags: tags, Fields: fields})
|
||||
u.processVAPs(r, s.VapTable, s.RadioTable, s.RadioTableStats, s.Name, s.Mac, s.SiteName)
|
||||
u.processVAPs(r, tags, s.VapTable, s.RadioTable, s.RadioTableStats)
|
||||
}
|
||||
|
||||
func (u *InfluxUnifi) processUAPstats(r report, ap *unifi.Ap) map[string]interface{} {
|
||||
// Accumulative Statistics.
|
||||
return map[string]interface{}{
|
||||
"stat_user-rx_packets": ap.UserRxPackets.Val,
|
||||
"stat_guest-rx_packets": ap.GuestRxPackets.Val,
|
||||
"stat_rx_packets": ap.RxPackets.Val,
|
||||
"stat_user-rx_bytes": ap.UserRxBytes.Val,
|
||||
"stat_guest-rx_bytes": ap.GuestRxBytes.Val,
|
||||
"stat_rx_bytes": ap.RxBytes.Val,
|
||||
"stat_user-rx_errors": ap.UserRxErrors.Val,
|
||||
"stat_guest-rx_errors": ap.GuestRxErrors.Val,
|
||||
"stat_rx_errors": ap.RxErrors.Val,
|
||||
"stat_user-rx_dropped": ap.UserRxDropped.Val,
|
||||
"stat_guest-rx_dropped": ap.GuestRxDropped.Val,
|
||||
"stat_rx_dropped": ap.RxDropped.Val,
|
||||
"stat_user-rx_crypts": ap.UserRxCrypts.Val,
|
||||
"stat_guest-rx_crypts": ap.GuestRxCrypts.Val,
|
||||
"stat_rx_crypts": ap.RxCrypts.Val,
|
||||
"stat_user-rx_frags": ap.UserRxFrags.Val,
|
||||
"stat_guest-rx_frags": ap.GuestRxFrags.Val,
|
||||
"stat_rx_frags": ap.RxFrags.Val,
|
||||
"stat_user-tx_packets": ap.UserTxPackets.Val,
|
||||
"stat_guest-tx_packets": ap.GuestTxPackets.Val,
|
||||
"stat_tx_packets": ap.TxPackets.Val,
|
||||
"stat_user-tx_bytes": ap.UserTxBytes.Val,
|
||||
"stat_guest-tx_bytes": ap.GuestTxBytes.Val,
|
||||
"stat_tx_bytes": ap.TxBytes.Val,
|
||||
"stat_user-tx_errors": ap.UserTxErrors.Val,
|
||||
"stat_guest-tx_errors": ap.GuestTxErrors.Val,
|
||||
"stat_tx_errors": ap.TxErrors.Val,
|
||||
"stat_user-tx_dropped": ap.UserTxDropped.Val,
|
||||
"stat_guest-tx_dropped": ap.GuestTxDropped.Val,
|
||||
"stat_tx_dropped": ap.TxDropped.Val,
|
||||
"stat_user-tx_retries": ap.UserTxRetries.Val,
|
||||
"stat_guest-tx_retries": ap.GuestTxRetries.Val,
|
||||
}
|
||||
}
|
||||
|
||||
// processVAPs creates points for Wifi Radios. This works with several types of UAP-capable devices.
|
||||
func (u *InfluxUnifi) processVAPs(r report, vt unifi.VapTable, rt unifi.RadioTable, rts unifi.RadioTableStats, name, mac, sitename string) {
|
||||
func (u *InfluxUnifi) processVAPs(r report, tags map[string]string, vt unifi.VapTable, rt unifi.RadioTable, rts unifi.RadioTableStats) {
|
||||
// Loop each virtual AP (ESSID) and extract data for it
|
||||
// from radio_tables and radio_table_stats.
|
||||
for _, s := range vt {
|
||||
tags := make(map[string]string)
|
||||
fields := make(map[string]interface{})
|
||||
tags["device_name"] = name
|
||||
tags["device_mac"] = mac
|
||||
tags["site_name"] = sitename
|
||||
tags["ap_mac"] = s.ApMac
|
||||
tags["bssid"] = s.Bssid
|
||||
tags["id"] = s.ID
|
||||
tags["name"] = s.Name
|
||||
tags["radio_name"] = s.RadioName
|
||||
tags["essid"] = s.Essid
|
||||
tags["site_id"] = s.SiteID
|
||||
tags["usage"] = s.Usage
|
||||
tags["state"] = s.State
|
||||
tags["is_guest"] = s.IsGuest.Txt
|
||||
t := make(map[string]string) // tags
|
||||
f := make(map[string]interface{}) // fields
|
||||
t["device_name"] = tags["name"]
|
||||
t["site_name"] = tags["site_name"]
|
||||
t["ap_mac"] = s.ApMac
|
||||
t["bssid"] = s.Bssid
|
||||
t["id"] = s.ID
|
||||
t["name"] = s.Name
|
||||
t["radio_name"] = s.RadioName
|
||||
t["essid"] = s.Essid
|
||||
t["site_id"] = s.SiteID
|
||||
t["usage"] = s.Usage
|
||||
t["state"] = s.State
|
||||
t["is_guest"] = s.IsGuest.Txt
|
||||
|
||||
fields["ccq"] = s.Ccq
|
||||
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
|
||||
f["ccq"] = s.Ccq
|
||||
f["mac_filter_rejections"] = s.MacFilterRejections
|
||||
f["num_satisfaction_sta"] = s.NumSatisfactionSta.Val
|
||||
f["avg_client_signal"] = s.AvgClientSignal.Val
|
||||
f["satisfaction"] = s.Satisfaction.Val
|
||||
f["satisfaction_now"] = s.SatisfactionNow.Val
|
||||
f["rx_bytes"] = s.RxBytes.Val
|
||||
f["rx_crypts"] = s.RxCrypts.Val
|
||||
f["rx_dropped"] = s.RxDropped.Val
|
||||
f["rx_errors"] = s.RxErrors.Val
|
||||
f["rx_frags"] = s.RxFrags.Val
|
||||
f["rx_nwids"] = s.RxNwids.Val
|
||||
f["rx_packets"] = s.RxPackets.Val
|
||||
f["tx_bytes"] = s.TxBytes.Val
|
||||
f["tx_dropped"] = s.TxDropped.Val
|
||||
f["tx_errors"] = s.TxErrors.Val
|
||||
f["tx_packets"] = s.TxPackets.Val
|
||||
f["tx_power"] = s.TxPower.Val
|
||||
f["tx_retries"] = s.TxRetries.Val
|
||||
f["tx_combined_retries"] = s.TxCombinedRetries.Val
|
||||
f["tx_data_mpdu_bytes"] = s.TxDataMpduBytes.Val
|
||||
f["tx_rts_retries"] = s.TxRtsRetries.Val
|
||||
f["tx_success"] = s.TxSuccess.Val
|
||||
f["tx_total"] = s.TxTotal.Val
|
||||
f["tx_tcp_goodbytes"] = s.TxTCPStats.Goodbytes.Val
|
||||
f["tx_tcp_lat_avg"] = s.TxTCPStats.LatAvg.Val
|
||||
f["tx_tcp_lat_max"] = s.TxTCPStats.LatMax.Val
|
||||
f["tx_tcp_lat_min"] = s.TxTCPStats.LatMin.Val
|
||||
f["rx_tcp_goodbytes"] = s.RxTCPStats.Goodbytes.Val
|
||||
f["rx_tcp_lat_avg"] = s.RxTCPStats.LatAvg.Val
|
||||
f["rx_tcp_lat_max"] = s.RxTCPStats.LatMax.Val
|
||||
f["rx_tcp_lat_min"] = s.RxTCPStats.LatMin.Val
|
||||
f["wifi_tx_latency_mov_avg"] = s.WifiTxLatencyMov.Avg.Val
|
||||
f["wifi_tx_latency_mov_max"] = s.WifiTxLatencyMov.Max.Val
|
||||
f["wifi_tx_latency_mov_min"] = s.WifiTxLatencyMov.Min.Val
|
||||
f["wifi_tx_latency_mov_total"] = s.WifiTxLatencyMov.Total.Val
|
||||
f["wifi_tx_latency_mov_cuont"] = s.WifiTxLatencyMov.TotalCount.Val
|
||||
|
||||
// XXX: This is busted. It needs its own table....
|
||||
for _, p := range rt {
|
||||
if p.Name != s.RadioName {
|
||||
continue
|
||||
}
|
||||
tags["channel"] = p.Channel.Txt
|
||||
tags["radio"] = p.Radio
|
||||
fields["current_antenna_gain"] = p.CurrentAntennaGain.Val
|
||||
fields["ht"] = p.Ht.Txt
|
||||
fields["max_txpower"] = p.MaxTxpower.Val
|
||||
fields["min_txpower"] = p.MinTxpower.Val
|
||||
fields["nss"] = p.Nss.Val
|
||||
fields["radio_caps"] = p.RadioCaps.Val
|
||||
fields["tx_power"] = p.TxPower.Val
|
||||
t["channel"] = p.Channel.Txt
|
||||
t["radio"] = p.Radio
|
||||
f["current_antenna_gain"] = p.CurrentAntennaGain.Val
|
||||
f["ht"] = p.Ht.Txt
|
||||
f["max_txpower"] = p.MaxTxpower.Val
|
||||
f["min_txpower"] = p.MinTxpower.Val
|
||||
f["nss"] = p.Nss.Val
|
||||
f["radio_caps"] = p.RadioCaps.Val
|
||||
f["tx_power"] = p.TxPower.Val
|
||||
}
|
||||
|
||||
for _, p := range rts {
|
||||
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
|
||||
f["ast_be_xmit"] = p.AstBeXmit.Val
|
||||
f["channel"] = p.Channel.Val
|
||||
f["cu_self_rx"] = p.CuSelfRx.Val
|
||||
f["cu_self_tx"] = p.CuSelfTx.Val
|
||||
f["cu_total"] = p.CuTotal.Val
|
||||
f["extchannel"] = p.Extchannel.Val
|
||||
f["gain"] = p.Gain.Val
|
||||
f["guest-num_sta"] = p.GuestNumSta.Val
|
||||
f["num_sta"] = p.NumSta.Val
|
||||
f["radio"] = p.Radio
|
||||
f["tx_packets"] = p.TxPackets.Val
|
||||
f["tx_power"] = p.TxPower.Val
|
||||
f["tx_retries"] = p.TxRetries.Val
|
||||
f["user-num_sta"] = p.UserNumSta.Val
|
||||
}
|
||||
r.send(&metric{Table: "uap_vaps", Tags: tags, Fields: fields})
|
||||
r.send(&metric{Table: "uap_vaps", Tags: t, Fields: f})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,32 @@ import (
|
|||
"golift.io/unifi"
|
||||
)
|
||||
|
||||
// Combines concatenates N maps. This will delete things if not used with caution.
|
||||
func Combine(in ...map[string]interface{}) map[string]interface{} {
|
||||
out := make(map[string]interface{})
|
||||
for i := range in {
|
||||
for k := range in[i] {
|
||||
out[k] = in[i][k]
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// batchSysStats is used by all device types.
|
||||
func (u *InfluxUnifi) batchSysStats(r report, s unifi.SysStats, ss unifi.SystemStats) map[string]interface{} {
|
||||
return map[string]interface{}{
|
||||
"loadavg_1": s.Loadavg1.Val,
|
||||
"loadavg_5": s.Loadavg5.Val,
|
||||
"loadavg_15": s.Loadavg15.Val,
|
||||
"mem_used": s.MemUsed.Val,
|
||||
"mem_buffer": s.MemBuffer.Val,
|
||||
"mem_total": s.MemTotal.Val,
|
||||
"cpu": ss.CPU.Val,
|
||||
"mem": ss.Mem.Val,
|
||||
"system_uptime": ss.Uptime.Val,
|
||||
}
|
||||
}
|
||||
|
||||
// batchUDM generates Unifi Gateway datapoints for InfluxDB.
|
||||
// These points can be passed directly to influx.
|
||||
func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) {
|
||||
|
|
@ -22,7 +48,7 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) {
|
|||
"serial": s.Serial,
|
||||
"type": s.Type,
|
||||
}
|
||||
fields := map[string]interface{}{
|
||||
fields := Combine(map[string]interface{}{
|
||||
"ip": s.IP,
|
||||
"bytes": s.Bytes.Val,
|
||||
"last_seen": s.LastSeen.Val,
|
||||
|
|
@ -42,72 +68,14 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) {
|
|||
"speedtest-status_ping": s.SpeedtestStatus.StatusPing.Val,
|
||||
"speedtest-status_xput_download": s.SpeedtestStatus.XputDownload.Val,
|
||||
"speedtest-status_xput_upload": s.SpeedtestStatus.XputUpload.Val,
|
||||
"wan1_bytes-r": s.Wan1.BytesR.Val,
|
||||
"wan1_enable": s.Wan1.Enable.Val,
|
||||
"wan1_full_duplex": s.Wan1.FullDuplex.Val,
|
||||
"wan1_gateway": s.Wan1.Gateway,
|
||||
"wan1_ifname": s.Wan1.Ifname,
|
||||
"wan1_ip": s.Wan1.IP,
|
||||
"wan1_mac": s.Wan1.Mac,
|
||||
"wan1_max_speed": s.Wan1.MaxSpeed.Val,
|
||||
"wan1_name": s.Wan1.Name,
|
||||
"wan1_rx_bytes": s.Wan1.RxBytes.Val,
|
||||
"wan1_rx_bytes-r": s.Wan1.RxBytesR.Val,
|
||||
"wan1_rx_dropped": s.Wan1.RxDropped.Val,
|
||||
"wan1_rx_errors": s.Wan1.RxErrors.Val,
|
||||
"wan1_rx_multicast": s.Wan1.RxMulticast.Val,
|
||||
"wan1_rx_packets": s.Wan1.RxPackets.Val,
|
||||
"wan1_type": s.Wan1.Type,
|
||||
"wan1_speed": s.Wan1.Speed.Val,
|
||||
"wan1_up": s.Wan1.Up.Val,
|
||||
"wan1_tx_bytes": s.Wan1.TxBytes.Val,
|
||||
"wan1_tx_bytes-r": s.Wan1.TxBytesR.Val,
|
||||
"wan1_tx_dropped": s.Wan1.TxDropped.Val,
|
||||
"wan1_tx_errors": s.Wan1.TxErrors.Val,
|
||||
"wan1_tx_packets": s.Wan1.TxPackets.Val,
|
||||
"wan2_bytes-r": s.Wan2.BytesR.Val,
|
||||
"wan2_enable": s.Wan2.Enable.Val,
|
||||
"wan2_full_duplex": s.Wan2.FullDuplex.Val,
|
||||
"wan2_gateway": s.Wan2.Gateway,
|
||||
"wan2_ifname": s.Wan2.Ifname,
|
||||
"wan2_ip": s.Wan2.IP,
|
||||
"wan2_mac": s.Wan2.Mac,
|
||||
"wan2_max_speed": s.Wan2.MaxSpeed.Val,
|
||||
"wan2_name": s.Wan2.Name,
|
||||
"wan2_rx_bytes": s.Wan2.RxBytes.Val,
|
||||
"wan2_rx_bytes-r": s.Wan2.RxBytesR.Val,
|
||||
"wan2_rx_dropped": s.Wan2.RxDropped.Val,
|
||||
"wan2_rx_errors": s.Wan2.RxErrors.Val,
|
||||
"wan2_rx_multicast": s.Wan2.RxMulticast.Val,
|
||||
"wan2_rx_packets": s.Wan2.RxPackets.Val,
|
||||
"wan2_type": s.Wan2.Type,
|
||||
"wan2_speed": s.Wan2.Speed.Val,
|
||||
"wan2_up": s.Wan2.Up.Val,
|
||||
"wan2_tx_bytes": s.Wan2.TxBytes.Val,
|
||||
"wan2_tx_bytes-r": s.Wan2.TxBytesR.Val,
|
||||
"wan2_tx_dropped": s.Wan2.TxDropped.Val,
|
||||
"wan2_tx_errors": s.Wan2.TxErrors.Val,
|
||||
"wan2_tx_packets": s.Wan2.TxPackets.Val,
|
||||
"loadavg_1": s.SysStats.Loadavg1.Val,
|
||||
"loadavg_5": s.SysStats.Loadavg5.Val,
|
||||
"loadavg_15": s.SysStats.Loadavg15.Val,
|
||||
"mem_used": s.SysStats.MemUsed.Val,
|
||||
"mem_buffer": s.SysStats.MemBuffer.Val,
|
||||
"mem_total": s.SysStats.MemTotal.Val,
|
||||
"cpu": s.SystemStats.CPU.Val,
|
||||
"mem": s.SystemStats.Mem.Val,
|
||||
"system_uptime": s.SystemStats.Uptime.Val,
|
||||
"lan-rx_bytes": s.Stat.LanRxBytes.Val,
|
||||
"lan-rx_packets": s.Stat.LanRxPackets.Val,
|
||||
"lan-tx_bytes": s.Stat.LanTxBytes.Val,
|
||||
"lan-tx_packets": s.Stat.LanTxPackets.Val,
|
||||
"wan-rx_bytes": s.Stat.WanRxBytes.Val,
|
||||
"wan-rx_dropped": s.Stat.WanRxDropped.Val,
|
||||
"wan-rx_packets": s.Stat.WanRxPackets.Val,
|
||||
"wan-tx_bytes": s.Stat.WanTxBytes.Val,
|
||||
"wan-tx_packets": s.Stat.WanTxPackets.Val,
|
||||
}
|
||||
"lan-rx_bytes": s.Stat.Gw.LanRxBytes.Val,
|
||||
"lan-rx_packets": s.Stat.Gw.LanRxPackets.Val,
|
||||
"lan-tx_bytes": s.Stat.Gw.LanTxBytes.Val,
|
||||
"lan-tx_packets": s.Stat.Gw.LanTxPackets.Val,
|
||||
}, u.batchSysStats(r, s.SysStats, s.SystemStats))
|
||||
r.send(&metric{Table: "usg", Tags: tags, Fields: fields})
|
||||
u.batchNetworkTable(r, tags, s.NetworkTable)
|
||||
u.batchUSGwans(r, tags, s.Wan1, s.Wan2)
|
||||
|
||||
tags = map[string]string{
|
||||
"mac": s.Mac,
|
||||
|
|
@ -127,16 +95,6 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) {
|
|||
"tx_bytes": s.TxBytes.Val,
|
||||
"uptime": s.Uptime.Val,
|
||||
"state": s.State.Val,
|
||||
"user-num_sta": s.UserNumSta.Val,
|
||||
"loadavg_1": s.SysStats.Loadavg1.Val,
|
||||
"loadavg_5": s.SysStats.Loadavg5.Val,
|
||||
"loadavg_15": s.SysStats.Loadavg15.Val,
|
||||
"mem_buffer": s.SysStats.MemBuffer.Val,
|
||||
"mem_used": s.SysStats.MemUsed.Val,
|
||||
"mem_total": s.SysStats.MemTotal.Val,
|
||||
"cpu": s.SystemStats.CPU.Val,
|
||||
"mem": s.SystemStats.Mem.Val,
|
||||
"system_uptime": s.SystemStats.Uptime.Val,
|
||||
"stat_bytes": s.Stat.Sw.Bytes.Val,
|
||||
"stat_rx_bytes": s.Stat.Sw.RxBytes.Val,
|
||||
"stat_rx_crypts": s.Stat.Sw.RxCrypts.Val,
|
||||
|
|
@ -151,85 +109,8 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) {
|
|||
"stat_tx_retries": s.Stat.Sw.TxRetries.Val,
|
||||
}
|
||||
r.send(&metric{Table: "usw", Tags: tags, Fields: fields})
|
||||
u.batchPortTable(r, tags, s.PortTable)
|
||||
|
||||
for _, p := range s.NetworkTable {
|
||||
tags := map[string]string{
|
||||
"device_name": s.Name,
|
||||
"device_id": s.ID,
|
||||
"device_mac": s.Mac,
|
||||
"site_name": s.SiteName,
|
||||
"up": p.Up.Txt,
|
||||
"enabled": p.Enabled.Txt,
|
||||
"site_id": p.SiteID,
|
||||
"ip": p.IP,
|
||||
"ip_subnet": p.IPSubnet,
|
||||
"mac": p.Mac,
|
||||
"name": p.Name,
|
||||
"domain_name": p.DomainName,
|
||||
"purpose": p.Purpose,
|
||||
}
|
||||
fields := map[string]interface{}{
|
||||
"domain_name": p.DomainName,
|
||||
"dhcpd_start": p.DhcpdStart,
|
||||
"dhcpd_stop": p.DhcpdStop,
|
||||
"ip": p.IP,
|
||||
"ip_subnet": p.IPSubnet,
|
||||
"mac": p.Mac,
|
||||
"name": p.Name,
|
||||
"num_sta": p.NumSta.Val,
|
||||
"purpose": p.Purpose,
|
||||
"rx_bytes": p.RxBytes.Val,
|
||||
"rx_packets": p.RxPackets.Val,
|
||||
"tx_bytes": p.TxBytes.Val,
|
||||
"tx_packets": p.TxPackets.Val,
|
||||
"ipv6_interface_type": p.Ipv6InterfaceType,
|
||||
"attr_hidden_id": p.AttrHiddenID,
|
||||
}
|
||||
r.send(&metric{Table: "usg_networks", Tags: tags, Fields: fields})
|
||||
}
|
||||
|
||||
for _, p := range s.PortTable {
|
||||
tags := map[string]string{
|
||||
"site_id": s.SiteID,
|
||||
"site_name": s.SiteName,
|
||||
"device_name": s.Name,
|
||||
"name": p.Name,
|
||||
"enable": p.Enable.Txt,
|
||||
"up": p.Up.Txt,
|
||||
"poe_mode": p.PoeMode,
|
||||
"port_poe": p.PortPoe.Txt,
|
||||
"port_idx": p.PortIdx.Txt,
|
||||
"port_id": s.Name + " Port " + p.PortIdx.Txt,
|
||||
"poe_enable": p.PoeEnable.Txt,
|
||||
"flowctrl_rx": p.FlowctrlRx.Txt,
|
||||
"flowctrl_tx": p.FlowctrlTx.Txt,
|
||||
"media": p.Media,
|
||||
"poe_class": p.PoeClass,
|
||||
}
|
||||
fields := map[string]interface{}{
|
||||
"dbytes_r": p.BytesR.Val,
|
||||
"rx_broadcast": p.RxBroadcast.Val,
|
||||
"rx_bytes": p.RxBytes.Val,
|
||||
"rx_bytes-r": p.RxBytesR.Val,
|
||||
"rx_dropped": p.RxDropped.Val,
|
||||
"rx_errors": p.RxErrors.Val,
|
||||
"rx_multicast": p.RxMulticast.Val,
|
||||
"rx_packets": p.RxPackets.Val,
|
||||
"speed": p.Speed.Val,
|
||||
"stp_pathcost": p.StpPathcost.Val,
|
||||
"tx_broadcast": p.TxBroadcast.Val,
|
||||
"tx_bytes": p.TxBytes.Val,
|
||||
"tx_bytes-r": p.TxBytesR.Val,
|
||||
"tx_dropped": p.TxDropped.Val,
|
||||
"tx_errors": p.TxErrors.Val,
|
||||
"tx_multicast": p.TxMulticast.Val,
|
||||
"tx_packets": p.TxPackets.Val,
|
||||
"poe_current": p.PoeCurrent.Val,
|
||||
"poe_power": p.PoePower.Val,
|
||||
"poe_voltage": p.PoeVoltage.Val,
|
||||
}
|
||||
r.send(&metric{Table: "usw_ports", Tags: tags, Fields: fields})
|
||||
}
|
||||
if s.Stat.Ap == nil {
|
||||
return
|
||||
// we're done now. the following code process UDM (non-pro) UAP data.
|
||||
|
|
@ -243,60 +124,17 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) {
|
|||
"serial": s.Serial,
|
||||
"type": s.Type,
|
||||
}
|
||||
fields = map[string]interface{}{
|
||||
"ip": s.IP,
|
||||
"bytes": s.Bytes.Val,
|
||||
"last_seen": s.LastSeen.Val,
|
||||
"rx_bytes": s.RxBytes.Val,
|
||||
"tx_bytes": s.TxBytes.Val,
|
||||
"uptime": s.Uptime.Val,
|
||||
"state": int(s.State.Val),
|
||||
"user-num_sta": int(s.UserWlanNumSta.Val),
|
||||
"guest-num_sta": int(s.GuestWlanNumSta.Val),
|
||||
"num_sta": s.WlanNumSta.Val,
|
||||
"loadavg_1": s.SysStats.Loadavg1.Val,
|
||||
"loadavg_5": s.SysStats.Loadavg5.Val,
|
||||
"loadavg_15": s.SysStats.Loadavg15.Val,
|
||||
"mem_buffer": s.SysStats.MemBuffer.Val,
|
||||
"mem_total": s.SysStats.MemTotal.Val,
|
||||
"mem_used": s.SysStats.MemUsed.Val,
|
||||
"cpu": s.SystemStats.CPU.Val,
|
||||
"mem": s.SystemStats.Mem.Val,
|
||||
"system_uptime": s.SystemStats.Uptime.Val,
|
||||
// Accumulative Statistics.
|
||||
"stat_user-rx_packets": s.Stat.Ap.UserRxPackets.Val,
|
||||
"stat_guest-rx_packets": s.Stat.Ap.GuestRxPackets.Val,
|
||||
"stat_rx_packets": s.Stat.Ap.RxPackets.Val,
|
||||
"stat_user-rx_bytes": s.Stat.Ap.UserRxBytes.Val,
|
||||
"stat_guest-rx_bytes": s.Stat.Ap.GuestRxBytes.Val,
|
||||
"stat_rx_bytes": s.Stat.Ap.RxBytes.Val,
|
||||
"stat_user-rx_errors": s.Stat.Ap.UserRxErrors.Val,
|
||||
"stat_guest-rx_errors": s.Stat.Ap.GuestRxErrors.Val,
|
||||
"stat_rx_errors": s.Stat.Ap.RxErrors.Val,
|
||||
"stat_user-rx_dropped": s.Stat.Ap.UserRxDropped.Val,
|
||||
"stat_guest-rx_dropped": s.Stat.Ap.GuestRxDropped.Val,
|
||||
"stat_rx_dropped": s.Stat.Ap.RxDropped.Val,
|
||||
"stat_user-rx_crypts": s.Stat.Ap.UserRxCrypts.Val,
|
||||
"stat_guest-rx_crypts": s.Stat.Ap.GuestRxCrypts.Val,
|
||||
"stat_rx_crypts": s.Stat.Ap.RxCrypts.Val,
|
||||
"stat_user-rx_frags": s.Stat.Ap.UserRxFrags.Val,
|
||||
"stat_guest-rx_frags": s.Stat.Ap.GuestRxFrags.Val,
|
||||
"stat_rx_frags": s.Stat.Ap.RxFrags.Val,
|
||||
"stat_user-tx_packets": s.Stat.Ap.UserTxPackets.Val,
|
||||
"stat_guest-tx_packets": s.Stat.Ap.GuestTxPackets.Val,
|
||||
"stat_tx_packets": s.Stat.Ap.TxPackets.Val,
|
||||
"stat_user-tx_bytes": s.Stat.Ap.UserTxBytes.Val,
|
||||
"stat_guest-tx_bytes": s.Stat.Ap.GuestTxBytes.Val,
|
||||
"stat_tx_bytes": s.Stat.Ap.TxBytes.Val,
|
||||
"stat_user-tx_errors": s.Stat.Ap.UserTxErrors.Val,
|
||||
"stat_guest-tx_errors": s.Stat.Ap.GuestTxErrors.Val,
|
||||
"stat_tx_errors": s.Stat.Ap.TxErrors.Val,
|
||||
"stat_user-tx_dropped": s.Stat.Ap.UserTxDropped.Val,
|
||||
"stat_guest-tx_dropped": s.Stat.Ap.GuestTxDropped.Val,
|
||||
"stat_tx_dropped": s.Stat.Ap.TxDropped.Val,
|
||||
"stat_user-tx_retries": s.Stat.Ap.UserTxRetries.Val,
|
||||
"stat_guest-tx_retries": s.Stat.Ap.GuestTxRetries.Val,
|
||||
}
|
||||
fields = u.processUAPstats(r, s.Stat.Ap)
|
||||
fields["ip"] = s.IP
|
||||
fields["bytes"] = s.Bytes.Val
|
||||
fields["last_seen"] = s.LastSeen.Val
|
||||
fields["rx_bytes"] = s.RxBytes.Val
|
||||
fields["tx_bytes"] = s.TxBytes.Val
|
||||
fields["uptime"] = s.Uptime.Val
|
||||
fields["state"] = s.State
|
||||
fields["user-num_sta"] = int(s.UserNumSta.Val)
|
||||
fields["guest-num_sta"] = int(s.GuestNumSta.Val)
|
||||
fields["num_sta"] = s.NumSta.Val
|
||||
r.send(&metric{Table: "uap", Tags: tags, Fields: fields})
|
||||
u.processVAPs(r, *s.VapTable, *s.RadioTable, *s.RadioTableStats, s.Name, s.Mac, s.SiteName)
|
||||
u.processVAPs(r, tags, *s.VapTable, *s.RadioTable, *s.RadioTableStats)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
package influxunifi
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"golift.io/unifi"
|
||||
)
|
||||
|
||||
|
|
@ -41,84 +39,93 @@ func (u *InfluxUnifi) batchUSG(r report, s *unifi.USG) {
|
|||
"speedtest-status_ping": s.SpeedtestStatus.StatusPing.Val,
|
||||
"speedtest-status_xput_download": s.SpeedtestStatus.XputDownload.Val,
|
||||
"speedtest-status_xput_upload": s.SpeedtestStatus.XputUpload.Val,
|
||||
"wan1_bytes-r": s.Wan1.BytesR.Val,
|
||||
"wan1_enable": s.Wan1.Enable.Val,
|
||||
"wan1_full_duplex": s.Wan1.FullDuplex.Val,
|
||||
"wan1_gateway": s.Wan1.Gateway,
|
||||
"wan1_ifname": s.Wan1.Ifname,
|
||||
"wan1_ip": s.Wan1.IP,
|
||||
"wan1_mac": s.Wan1.Mac,
|
||||
"wan1_max_speed": s.Wan1.MaxSpeed.Val,
|
||||
"wan1_name": s.Wan1.Name,
|
||||
"wan1_rx_bytes": s.Wan1.RxBytes.Val,
|
||||
"wan1_rx_bytes-r": s.Wan1.RxBytesR.Val,
|
||||
"wan1_rx_dropped": s.Wan1.RxDropped.Val,
|
||||
"wan1_rx_errors": s.Wan1.RxErrors.Val,
|
||||
"wan1_rx_multicast": s.Wan1.RxMulticast.Val,
|
||||
"wan1_rx_packets": s.Wan1.RxPackets.Val,
|
||||
"wan1_type": s.Wan1.Type,
|
||||
"wan1_speed": s.Wan1.Speed.Val,
|
||||
"wan1_up": s.Wan1.Up.Val,
|
||||
"wan1_tx_bytes": s.Wan1.TxBytes.Val,
|
||||
"wan1_tx_bytes-r": s.Wan1.TxBytesR.Val,
|
||||
"wan1_tx_dropped": s.Wan1.TxDropped.Val,
|
||||
"wan1_tx_errors": s.Wan1.TxErrors.Val,
|
||||
"wan1_tx_packets": s.Wan1.TxPackets.Val,
|
||||
"wan2_bytes-r": s.Wan2.BytesR.Val,
|
||||
"wan2_enable": s.Wan2.Enable.Val,
|
||||
"wan2_full_duplex": s.Wan2.FullDuplex.Val,
|
||||
"wan2_gateway": s.Wan2.Gateway,
|
||||
"wan2_ifname": s.Wan2.Ifname,
|
||||
"wan2_ip": s.Wan2.IP,
|
||||
"wan2_mac": s.Wan2.Mac,
|
||||
"wan2_max_speed": s.Wan2.MaxSpeed.Val,
|
||||
"wan2_name": s.Wan2.Name,
|
||||
"wan2_rx_bytes": s.Wan2.RxBytes.Val,
|
||||
"wan2_rx_bytes-r": s.Wan2.RxBytesR.Val,
|
||||
"wan2_rx_dropped": s.Wan2.RxDropped.Val,
|
||||
"wan2_rx_errors": s.Wan2.RxErrors.Val,
|
||||
"wan2_rx_multicast": s.Wan2.RxMulticast.Val,
|
||||
"wan2_rx_packets": s.Wan2.RxPackets.Val,
|
||||
"wan2_type": s.Wan2.Type,
|
||||
"wan2_speed": s.Wan2.Speed.Val,
|
||||
"wan2_up": s.Wan2.Up.Val,
|
||||
"wan2_tx_bytes": s.Wan2.TxBytes.Val,
|
||||
"wan2_tx_bytes-r": s.Wan2.TxBytesR.Val,
|
||||
"wan2_tx_dropped": s.Wan2.TxDropped.Val,
|
||||
"wan2_tx_errors": s.Wan2.TxErrors.Val,
|
||||
"wan2_tx_packets": s.Wan2.TxPackets.Val,
|
||||
"loadavg_1": s.SysStats.Loadavg1.Val,
|
||||
"loadavg_5": s.SysStats.Loadavg5.Val,
|
||||
"loadavg_15": s.SysStats.Loadavg15.Val,
|
||||
"mem_used": s.SysStats.MemUsed.Val,
|
||||
"mem_buffer": s.SysStats.MemBuffer.Val,
|
||||
"mem_total": s.SysStats.MemTotal.Val,
|
||||
"cpu": s.SystemStats.CPU.Val,
|
||||
"mem": s.SystemStats.Mem.Val,
|
||||
"system_uptime": s.SystemStats.Uptime.Val,
|
||||
"lan-rx_bytes": s.Stat.LanRxBytes.Val,
|
||||
"lan-rx_packets": s.Stat.LanRxPackets.Val,
|
||||
"lan-tx_bytes": s.Stat.LanTxBytes.Val,
|
||||
"lan-tx_packets": s.Stat.LanTxPackets.Val,
|
||||
"wan-rx_bytes": s.Stat.WanRxBytes.Val,
|
||||
"wan-rx_dropped": s.Stat.WanRxDropped.Val,
|
||||
"wan-rx_packets": s.Stat.WanRxPackets.Val,
|
||||
"wan-tx_bytes": s.Stat.WanTxBytes.Val,
|
||||
"wan-tx_packets": s.Stat.WanTxPackets.Val,
|
||||
"lan-rx_bytes": s.Stat.Gw.LanRxBytes.Val,
|
||||
"lan-rx_packets": s.Stat.Gw.LanRxPackets.Val,
|
||||
"lan-tx_bytes": s.Stat.Gw.LanTxBytes.Val,
|
||||
"lan-tx_packets": s.Stat.Gw.LanTxPackets.Val,
|
||||
}
|
||||
/*
|
||||
for _, p := range s.PortTable {
|
||||
t := map[string]string{
|
||||
"device_name": tags["name"],
|
||||
"site_name": tags["site_name"],
|
||||
"name": p.Name,
|
||||
"ifname": p.Ifname,
|
||||
"ip": p.IP,
|
||||
"mac": p.Mac,
|
||||
"up": p.Up.Txt,
|
||||
"speed": p.Speed.Txt,
|
||||
"full_duplex": p.FullDuplex.Txt,
|
||||
"enable": p.Enable.Txt,
|
||||
}
|
||||
f := map[string]interface{}{
|
||||
"rx_bytes": p.RxBytes.Val,
|
||||
"rx_dropped": p.RxDropped.Val,
|
||||
"rx_errors": p.RxErrors.Val,
|
||||
"rx_packets": p.RxBytes.Val,
|
||||
"tx_bytes": p.TxBytes.Val,
|
||||
"tx_dropped": p.TxDropped.Val,
|
||||
"tx_errors": p.TxErrors.Val,
|
||||
"tx_packets": p.TxPackets.Val,
|
||||
"rx_multicast": p.RxMulticast.Val,
|
||||
"dns_servers": strings.Join(p.DNS, ","),
|
||||
}
|
||||
r.send(&metric{Table: "usg_ports", Tags: t, Fields: f})
|
||||
}
|
||||
*/
|
||||
fields = Combine(fields, u.batchSysStats(r, s.SysStats, s.SystemStats))
|
||||
r.send(&metric{Table: "usg", Tags: tags, Fields: fields})
|
||||
u.batchNetworkTable(r, tags, s.NetworkTable)
|
||||
u.batchUSGwans(r, tags, s.Wan1, s.Wan2)
|
||||
}
|
||||
|
||||
for _, p := range s.NetworkTable {
|
||||
func (u *InfluxUnifi) batchUSGwans(r report, tags map[string]string, wans ...unifi.Wan) {
|
||||
for _, wan := range wans {
|
||||
if !wan.Up.Val {
|
||||
continue
|
||||
}
|
||||
tags := map[string]string{
|
||||
"device_name": s.Name,
|
||||
"device_id": s.ID,
|
||||
"device_mac": s.Mac,
|
||||
"site_name": s.SiteName,
|
||||
"device_name": tags["name"],
|
||||
"site_name": tags["site_name"],
|
||||
"wan_name": wan.Name,
|
||||
}
|
||||
fields := map[string]interface{}{
|
||||
"bytes-r": wan.BytesR.Val,
|
||||
"enable": wan.Enable.Val,
|
||||
"full_duplex": wan.FullDuplex.Val,
|
||||
"gateway": wan.Gateway,
|
||||
"ifname": wan.Ifname,
|
||||
"ip": wan.IP,
|
||||
"mac": wan.Mac,
|
||||
"max_speed": wan.MaxSpeed.Val,
|
||||
"name": wan.Name,
|
||||
"rx_bytes": wan.RxBytes.Val,
|
||||
"rx_bytes-r": wan.RxBytesR.Val,
|
||||
"rx_dropped": wan.RxDropped.Val,
|
||||
"rx_errors": wan.RxErrors.Val,
|
||||
"rx_multicast": wan.RxMulticast.Val,
|
||||
"rx_packets": wan.RxPackets.Val,
|
||||
"type": wan.Type,
|
||||
"speed": wan.Speed.Val,
|
||||
"up": wan.Up.Val,
|
||||
"tx_bytes": wan.TxBytes.Val,
|
||||
"tx_bytes-r": wan.TxBytesR.Val,
|
||||
"tx_dropped": wan.TxDropped.Val,
|
||||
"tx_errors": wan.TxErrors.Val,
|
||||
"tx_packets": wan.TxPackets.Val,
|
||||
}
|
||||
r.send(&metric{Table: "usg_wan_ports", Tags: tags, Fields: fields})
|
||||
}
|
||||
}
|
||||
|
||||
func (u *InfluxUnifi) batchNetworkTable(r report, tags map[string]string, nt unifi.NetworkTable) {
|
||||
for _, p := range nt {
|
||||
tags := map[string]string{
|
||||
"device_name": tags["name"],
|
||||
"site_name": tags["site_name"],
|
||||
"up": p.Up.Txt,
|
||||
"enabled": p.Enabled.Txt,
|
||||
"site_id": p.SiteID,
|
||||
"ip": p.IP,
|
||||
"ip_subnet": p.IPSubnet,
|
||||
"mac": p.Mac,
|
||||
"name": p.Name,
|
||||
"domain_name": p.DomainName,
|
||||
|
|
@ -133,34 +140,4 @@ func (u *InfluxUnifi) batchUSG(r report, s *unifi.USG) {
|
|||
}
|
||||
r.send(&metric{Table: "usg_networks", Tags: tags, Fields: fields})
|
||||
}
|
||||
for _, p := range s.PortTable {
|
||||
tags := map[string]string{
|
||||
"device_name": s.Name,
|
||||
"device_id": s.ID,
|
||||
"device_mac": s.Mac,
|
||||
"site_name": s.SiteName,
|
||||
"name": p.Name,
|
||||
"ifname": p.Ifname,
|
||||
"ip": p.IP,
|
||||
"mac": p.Mac,
|
||||
"up": p.Up.Txt,
|
||||
"speed": p.Speed.Txt,
|
||||
"full_duplex": p.FullDuplex.Txt,
|
||||
"enable": p.Enable.Txt,
|
||||
}
|
||||
fields := map[string]interface{}{
|
||||
"rx_bytes": p.RxBytes.Val,
|
||||
"rx_dropped": p.RxDropped.Val,
|
||||
"rx_errors": p.RxErrors.Val,
|
||||
"rx_packets": p.RxBytes.Val,
|
||||
"tx_bytes": p.TxBytes.Val,
|
||||
"tx_dropped": p.TxDropped.Val,
|
||||
"tx_errors": p.TxErrors.Val,
|
||||
"tx_packets": p.TxPackets.Val,
|
||||
"rx_multicast": p.RxMulticast.Val,
|
||||
"dns_servers": strings.Join(p.DNS, ","),
|
||||
}
|
||||
r.send(&metric{Table: "usg_ports", Tags: tags, Fields: fields})
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ func (u *InfluxUnifi) batchUSW(r report, s *unifi.USW) {
|
|||
"serial": s.Serial,
|
||||
"type": s.Type,
|
||||
}
|
||||
fields := map[string]interface{}{
|
||||
fields := Combine(map[string]interface{}{
|
||||
"guest-num_sta": s.GuestNumSta.Val,
|
||||
"ip": s.IP,
|
||||
"bytes": s.Bytes.Val,
|
||||
|
|
@ -31,15 +31,6 @@ func (u *InfluxUnifi) batchUSW(r report, s *unifi.USW) {
|
|||
"uptime": s.Uptime.Val,
|
||||
"state": s.State.Val,
|
||||
"user-num_sta": s.UserNumSta.Val,
|
||||
"loadavg_1": s.SysStats.Loadavg1.Val,
|
||||
"loadavg_5": s.SysStats.Loadavg5.Val,
|
||||
"loadavg_15": s.SysStats.Loadavg15.Val,
|
||||
"mem_buffer": s.SysStats.MemBuffer.Val,
|
||||
"mem_used": s.SysStats.MemUsed.Val,
|
||||
"mem_total": s.SysStats.MemTotal.Val,
|
||||
"cpu": s.SystemStats.CPU.Val,
|
||||
"mem": s.SystemStats.Mem.Val,
|
||||
"system_uptime": s.SystemStats.Uptime.Val,
|
||||
"stat_bytes": s.Stat.Sw.Bytes.Val,
|
||||
"stat_rx_bytes": s.Stat.Sw.RxBytes.Val,
|
||||
"stat_rx_crypts": s.Stat.Sw.RxCrypts.Val,
|
||||
|
|
@ -52,21 +43,24 @@ func (u *InfluxUnifi) batchUSW(r report, s *unifi.USW) {
|
|||
"stat_tx_errors": s.Stat.Sw.TxErrors.Val,
|
||||
"stat_tx_packets": s.Stat.Sw.TxPackets.Val,
|
||||
"stat_tx_retries": s.Stat.Sw.TxRetries.Val,
|
||||
}
|
||||
}, u.batchSysStats(r, s.SysStats, s.SystemStats))
|
||||
r.send(&metric{Table: "usw", Tags: tags, Fields: fields})
|
||||
u.batchPortTable(r, tags, s.PortTable)
|
||||
}
|
||||
|
||||
for _, p := range s.PortTable {
|
||||
func (u *InfluxUnifi) batchPortTable(r report, tags map[string]string, pt []unifi.Port) {
|
||||
for _, p := range pt {
|
||||
if !p.Up.Val || !p.Enable.Val {
|
||||
continue // only record UP ports.
|
||||
}
|
||||
tags := map[string]string{
|
||||
"site_name": s.SiteName,
|
||||
"device_name": s.Name,
|
||||
"site_name": tags["site_name"],
|
||||
"device_name": tags["name"],
|
||||
"name": p.Name,
|
||||
"poe_mode": p.PoeMode,
|
||||
"port_poe": p.PortPoe.Txt,
|
||||
"port_idx": p.PortIdx.Txt,
|
||||
"port_id": s.Name + " Port " + p.PortIdx.Txt,
|
||||
"port_id": tags["name"] + " Port " + p.PortIdx.Txt,
|
||||
"poe_enable": p.PoeEnable.Txt,
|
||||
"flowctrl_rx": p.FlowctrlRx.Txt,
|
||||
"flowctrl_tx": p.FlowctrlTx.Txt,
|
||||
|
|
|
|||
Loading…
Reference in New Issue