85 lines
2.8 KiB
Go
85 lines
2.8 KiB
Go
package influxunifi
|
|
|
|
import (
|
|
"github.com/unpoller/unifi"
|
|
)
|
|
|
|
// batchSite generates Unifi Sites' datapoints for InfluxDB.
|
|
// These points can be passed directly to influx.
|
|
func (u *InfluxUnifi) batchSite(r report, s *unifi.Site) {
|
|
for _, h := range s.Health {
|
|
tags := map[string]string{
|
|
"name": s.Name,
|
|
"site_name": s.SiteName,
|
|
"source": s.SourceName,
|
|
"desc": s.Desc,
|
|
"status": h.Status,
|
|
"subsystem": h.Subsystem,
|
|
"wan_ip": h.WanIP,
|
|
"gw_name": h.GwName,
|
|
"lan_ip": h.LanIP,
|
|
}
|
|
fields := map[string]interface{}{
|
|
"num_user": h.NumUser.Val,
|
|
"num_guest": h.NumGuest.Val,
|
|
"num_iot": h.NumIot.Val,
|
|
"tx_bytes-r": h.TxBytesR.Val,
|
|
"rx_bytes-r": h.RxBytesR.Val,
|
|
"num_ap": h.NumAp.Val,
|
|
"num_adopted": h.NumAdopted.Val,
|
|
"num_disabled": h.NumDisabled.Val,
|
|
"num_disconnected": h.NumDisconnected.Val,
|
|
"num_pending": h.NumPending.Val,
|
|
"num_gw": h.NumGw.Val,
|
|
"wan_ip": h.WanIP,
|
|
"num_sta": h.NumSta.Val,
|
|
"gw_cpu": h.GwSystemStats.CPU.Val,
|
|
"gw_mem": h.GwSystemStats.Mem.Val,
|
|
"gw_uptime": h.GwSystemStats.Uptime.Val,
|
|
"latency": h.Latency.Val,
|
|
"uptime": h.Uptime.Val,
|
|
"drops": h.Drops.Val,
|
|
"xput_up": h.XputUp.Val,
|
|
"xput_down": h.XputDown.Val,
|
|
"speedtest_ping": h.SpeedtestPing.Val,
|
|
"speedtest_lastrun": h.SpeedtestLastrun.Val,
|
|
"num_sw": h.NumSw.Val,
|
|
"remote_user_num_active": h.RemoteUserNumActive.Val,
|
|
"remote_user_num_inactive": h.RemoteUserNumInactive.Val,
|
|
"remote_user_rx_bytes": h.RemoteUserRxBytes.Val,
|
|
"remote_user_tx_bytes": h.RemoteUserTxBytes.Val,
|
|
"remote_user_rx_packets": h.RemoteUserRxPackets.Val,
|
|
"remote_user_tx_packets": h.RemoteUserTxPackets.Val,
|
|
"num_new_alarms": s.NumNewAlarms.Val,
|
|
}
|
|
|
|
r.send(&metric{Table: "subsystems", Tags: tags, Fields: fields})
|
|
}
|
|
}
|
|
|
|
func (u *InfluxUnifi) batchSiteDPI(r report, v interface{}) {
|
|
s, ok := v.(*unifi.DPITable)
|
|
if !ok {
|
|
u.LogErrorf("invalid type given to batchSiteDPI: %T", v)
|
|
return
|
|
}
|
|
|
|
for _, dpi := range s.ByApp {
|
|
r.send(&metric{
|
|
Table: "sitedpi",
|
|
Tags: map[string]string{
|
|
"category": unifi.DPICats.Get(dpi.Cat),
|
|
"application": unifi.DPIApps.GetApp(dpi.Cat, dpi.App),
|
|
"site_name": s.SiteName,
|
|
"source": s.SourceName,
|
|
},
|
|
Fields: map[string]interface{}{
|
|
"tx_packets": dpi.TxPackets,
|
|
"rx_packets": dpi.RxPackets,
|
|
"tx_bytes": dpi.TxBytes,
|
|
"rx_bytes": dpi.RxBytes,
|
|
},
|
|
})
|
|
}
|
|
}
|