140 lines
6.2 KiB
Go
140 lines
6.2 KiB
Go
package promunifi
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"golift.io/unifi"
|
|
)
|
|
|
|
type uap struct {
|
|
Uptime *prometheus.Desc
|
|
TotalTxBytes *prometheus.Desc
|
|
TotalRxBytes *prometheus.Desc
|
|
TotalBytes *prometheus.Desc
|
|
BytesD *prometheus.Desc
|
|
TxBytesD *prometheus.Desc
|
|
RxBytesD *prometheus.Desc
|
|
BytesR *prometheus.Desc
|
|
NumSta *prometheus.Desc
|
|
UserNumSta *prometheus.Desc
|
|
GuestNumSta *prometheus.Desc
|
|
// System Stats
|
|
Loadavg1 *prometheus.Desc
|
|
Loadavg5 *prometheus.Desc
|
|
Loadavg15 *prometheus.Desc
|
|
MemBuffer *prometheus.Desc
|
|
MemTotal *prometheus.Desc
|
|
MemUsed *prometheus.Desc
|
|
CPU *prometheus.Desc
|
|
Mem *prometheus.Desc
|
|
// Ap Traffic Stats -- not sure about these yet.
|
|
ApBytes *prometheus.Desc
|
|
ApWifiTxDropped *prometheus.Desc
|
|
ApRxErrors *prometheus.Desc
|
|
ApRxDropped *prometheus.Desc
|
|
ApRxFrags *prometheus.Desc
|
|
ApRxCrypts *prometheus.Desc
|
|
ApTxPackets *prometheus.Desc
|
|
ApTxBytes *prometheus.Desc
|
|
ApTxErrors *prometheus.Desc
|
|
ApTxDropped *prometheus.Desc
|
|
ApTxRetries *prometheus.Desc
|
|
ApRxPackets *prometheus.Desc
|
|
ApRxBytes *prometheus.Desc
|
|
UserRxDropped *prometheus.Desc
|
|
GuestRxDropped *prometheus.Desc
|
|
UserRxErrors *prometheus.Desc
|
|
GuestRxErrors *prometheus.Desc
|
|
UserRxPackets *prometheus.Desc
|
|
GuestRxPackets *prometheus.Desc
|
|
UserRxBytes *prometheus.Desc
|
|
GuestRxBytes *prometheus.Desc
|
|
UserRxCrypts *prometheus.Desc
|
|
GuestRxCrypts *prometheus.Desc
|
|
UserRxFrags *prometheus.Desc
|
|
GuestRxFrags *prometheus.Desc
|
|
UserTxPackets *prometheus.Desc
|
|
GuestTxPackets *prometheus.Desc
|
|
UserTxBytes *prometheus.Desc
|
|
GuestTxBytes *prometheus.Desc
|
|
UserTxErrors *prometheus.Desc
|
|
GuestTxErrors *prometheus.Desc
|
|
UserTxDropped *prometheus.Desc
|
|
GuestTxDropped *prometheus.Desc
|
|
UserTxRetries *prometheus.Desc
|
|
GuestTxRetries *prometheus.Desc
|
|
MacFilterRejections *prometheus.Desc
|
|
UserMacFilterRejections *prometheus.Desc
|
|
GuestMacFilterRejections *prometheus.Desc
|
|
WifiTxAttempts *prometheus.Desc
|
|
UserWifiTxDropped *prometheus.Desc
|
|
GuestWifiTxDropped *prometheus.Desc
|
|
UserWifiTxAttempts *prometheus.Desc
|
|
GuestWifiTxAttempts *prometheus.Desc
|
|
}
|
|
|
|
func descUAP(ns string) *uap {
|
|
if ns += "_uap_"; ns == "_uap_" {
|
|
ns = "uap_"
|
|
}
|
|
labels := []string{"site_name", "mac", "model", "name", "serial", "site_id",
|
|
"type", "version", "device_id", "ip"}
|
|
|
|
return &uap{
|
|
Uptime: prometheus.NewDesc(ns+"uptime", "Uptime", labels, nil),
|
|
TotalTxBytes: prometheus.NewDesc(ns+"bytes_tx_total", "Total Transmitted Bytes", labels, nil),
|
|
TotalRxBytes: prometheus.NewDesc(ns+"bytes_rx_total", "Total Received Bytes", labels, nil),
|
|
TotalBytes: prometheus.NewDesc(ns+"bytes_total", "Total Bytes Transferred", labels, nil),
|
|
BytesD: prometheus.NewDesc(ns+"bytes_d_total", "Total Bytes D???", labels, nil),
|
|
TxBytesD: prometheus.NewDesc(ns+"bytes_d_tx", "Transmit Bytes D???", labels, nil),
|
|
RxBytesD: prometheus.NewDesc(ns+"bytes_d_rx", "Receive Bytes D???", labels, nil),
|
|
BytesR: prometheus.NewDesc(ns+"bytes_rate", "Transfer Rate", labels, nil),
|
|
NumSta: prometheus.NewDesc(ns+"stations_total", "Number of Stations", labels, nil),
|
|
UserNumSta: prometheus.NewDesc(ns+"stations_user_total", "Number of User Stations", labels, nil),
|
|
GuestNumSta: prometheus.NewDesc(ns+"stations_guest_total", "Number of Guest Stations", labels, nil),
|
|
Loadavg1: prometheus.NewDesc(ns+"load_average_1", "System Load Average 1 Minute", labels, nil),
|
|
Loadavg5: prometheus.NewDesc(ns+"load_average_5", "System Load Average 5 Minutes", labels, nil),
|
|
Loadavg15: prometheus.NewDesc(ns+"load_average_15", "System Load Average 15 Minutes", labels, nil),
|
|
MemUsed: prometheus.NewDesc(ns+"memory_used_bytes", "System Memory Used", labels, nil),
|
|
MemTotal: prometheus.NewDesc(ns+"memory_installed_bytes", "System Installed Memory", labels, nil),
|
|
MemBuffer: prometheus.NewDesc(ns+"memory_buffer_bytes", "System Memory Buffer", labels, nil),
|
|
CPU: prometheus.NewDesc(ns+"cpu_utilization", "System CPU % Utilized", labels, nil),
|
|
Mem: prometheus.NewDesc(ns+"memory_utilization", "System Memory % Utilized", labels, nil),
|
|
}
|
|
}
|
|
|
|
func (u *unifiCollector) exportUAPs(uaps []*unifi.UAP, ch chan []*metricExports) {
|
|
for _, a := range uaps {
|
|
ch <- u.exportUAP(a)
|
|
}
|
|
}
|
|
|
|
// exportUAP exports Access Point Data
|
|
func (u *unifiCollector) exportUAP(a *unifi.UAP) []*metricExports {
|
|
labels := []string{a.SiteName, a.Mac, a.Model, a.Name, a.Serial, a.SiteID,
|
|
a.Type, a.Version, a.DeviceID, a.IP}
|
|
|
|
// Switch data.
|
|
metrics := []*metricExports{
|
|
{u.UAP.Uptime, prometheus.GaugeValue, a.Uptime, labels},
|
|
{u.UAP.TotalTxBytes, prometheus.CounterValue, a.TxBytes, labels},
|
|
{u.UAP.TotalRxBytes, prometheus.CounterValue, a.RxBytes, labels},
|
|
{u.UAP.TotalBytes, prometheus.CounterValue, a.Bytes, labels},
|
|
{u.UAP.BytesD, prometheus.CounterValue, a.BytesD, labels}, // not sure if these 3 Ds are counters or gauges.
|
|
{u.UAP.TxBytesD, prometheus.CounterValue, a.TxBytesD, labels},
|
|
{u.UAP.RxBytesD, prometheus.CounterValue, a.RxBytesD, labels},
|
|
{u.UAP.BytesR, prometheus.GaugeValue, a.BytesR, labels},
|
|
{u.UAP.NumSta, prometheus.GaugeValue, a.NumSta, labels},
|
|
{u.UAP.UserNumSta, prometheus.GaugeValue, a.UserNumSta, labels},
|
|
{u.UAP.GuestNumSta, prometheus.GaugeValue, a.GuestNumSta, labels},
|
|
{u.UAP.Loadavg1, prometheus.GaugeValue, a.SysStats.Loadavg1, labels},
|
|
{u.UAP.Loadavg5, prometheus.GaugeValue, a.SysStats.Loadavg5, labels},
|
|
{u.UAP.Loadavg15, prometheus.GaugeValue, a.SysStats.Loadavg15, labels},
|
|
{u.UAP.MemUsed, prometheus.GaugeValue, a.SysStats.MemUsed, labels},
|
|
{u.UAP.MemTotal, prometheus.GaugeValue, a.SysStats.MemTotal, labels},
|
|
{u.UAP.MemBuffer, prometheus.GaugeValue, a.SysStats.MemBuffer, labels},
|
|
{u.UAP.CPU, prometheus.GaugeValue, a.SystemStats.CPU, labels},
|
|
{u.UAP.Mem, prometheus.GaugeValue, a.SystemStats.Mem, labels},
|
|
}
|
|
return metrics
|
|
}
|