175 lines
6.7 KiB
Go
175 lines
6.7 KiB
Go
package promunifi
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"golift.io/unifi"
|
|
)
|
|
|
|
type site struct {
|
|
NumUser *prometheus.Desc
|
|
NumGuest *prometheus.Desc
|
|
NumIot *prometheus.Desc
|
|
TxBytesR *prometheus.Desc
|
|
RxBytesR *prometheus.Desc
|
|
NumAp *prometheus.Desc
|
|
NumAdopted *prometheus.Desc
|
|
NumDisabled *prometheus.Desc
|
|
NumDisconnected *prometheus.Desc
|
|
NumPending *prometheus.Desc
|
|
NumGw *prometheus.Desc
|
|
NumSw *prometheus.Desc
|
|
NumSta *prometheus.Desc
|
|
Latency *prometheus.Desc
|
|
Drops *prometheus.Desc
|
|
XputUp *prometheus.Desc
|
|
XputDown *prometheus.Desc
|
|
SpeedtestPing *prometheus.Desc
|
|
RemoteUserNumActive *prometheus.Desc
|
|
RemoteUserNumInactive *prometheus.Desc
|
|
RemoteUserRxBytes *prometheus.Desc
|
|
RemoteUserTxBytes *prometheus.Desc
|
|
RemoteUserRxPackets *prometheus.Desc
|
|
RemoteUserTxPackets *prometheus.Desc
|
|
}
|
|
|
|
// XXX: The help values can be more verbose.
|
|
func descSite(ns string) *site {
|
|
labels := []string{"name", "desc", "site_name", "subsystem", "status", "gwversion"}
|
|
ns2 := "site"
|
|
|
|
return &site{
|
|
NumUser: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumUser"),
|
|
"NumUser", labels, nil,
|
|
),
|
|
NumGuest: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumGuest"),
|
|
"NumGuest", labels, nil,
|
|
),
|
|
NumIot: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumIot"),
|
|
"NumIot", labels, nil,
|
|
),
|
|
TxBytesR: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "TxBytesR"),
|
|
"TxBytesR", labels, nil,
|
|
),
|
|
RxBytesR: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "RxBytesR"),
|
|
"RxBytesR", labels, nil,
|
|
),
|
|
NumAp: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumAp"),
|
|
"NumAp", labels, nil,
|
|
),
|
|
NumAdopted: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumAdopted"),
|
|
"NumAdopted", labels, nil,
|
|
),
|
|
NumDisabled: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumDisabled"),
|
|
"NumDisabled", labels, nil,
|
|
),
|
|
NumDisconnected: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumDisconnected"),
|
|
"NumDisconnected", labels, nil,
|
|
),
|
|
NumPending: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumPending"),
|
|
"NumPending", labels, nil,
|
|
),
|
|
NumGw: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumGw"),
|
|
"NumGw", labels, nil,
|
|
),
|
|
NumSw: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumSw"),
|
|
"NumSw", labels, nil,
|
|
),
|
|
NumSta: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "NumSta"),
|
|
"NumSta", labels, nil,
|
|
),
|
|
Latency: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "Latency"),
|
|
"Latency", labels, nil,
|
|
),
|
|
Drops: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "Drops"),
|
|
"Drops", labels, nil,
|
|
),
|
|
XputUp: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "XputUp"),
|
|
"XputUp", labels, nil,
|
|
),
|
|
XputDown: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "XputDown"),
|
|
"XputDown", labels, nil,
|
|
),
|
|
SpeedtestPing: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "SpeedtestPing"),
|
|
"SpeedtestPing", labels, nil,
|
|
),
|
|
RemoteUserNumActive: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "RemoteUserNumActive"),
|
|
"RemoteUserNumActive", labels, nil,
|
|
),
|
|
RemoteUserNumInactive: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "RemoteUserNumInactive"),
|
|
"RemoteUserNumInactive", labels, nil,
|
|
),
|
|
RemoteUserRxBytes: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "RemoteUserRxBytes"),
|
|
"RemoteUserRxBytes", labels, nil,
|
|
),
|
|
RemoteUserTxBytes: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "RemoteUserTxBytes"),
|
|
"RemoteUserTxBytes", labels, nil,
|
|
),
|
|
RemoteUserRxPackets: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "RemoteUserRxPackets"),
|
|
"RemoteUserRxPackets", labels, nil,
|
|
),
|
|
RemoteUserTxPackets: prometheus.NewDesc(
|
|
prometheus.BuildFQName(ns, ns2, "RemoteUserTxPackets"),
|
|
"RemoteUserTxPackets", labels, nil,
|
|
),
|
|
}
|
|
}
|
|
|
|
// exportSite exports Network Site Data
|
|
func (u *unifiCollector) exportSite(s *unifi.Site) []*metricExports {
|
|
labels := []string{s.Name, s.Desc, s.SiteName}
|
|
var m []*metricExports
|
|
for _, h := range s.Health {
|
|
l := append(labels, h.Subsystem, h.Status, h.GwVersion)
|
|
m = append(m, &metricExports{u.Site.NumUser, prometheus.CounterValue, h.NumUser.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumGuest, prometheus.CounterValue, h.NumGuest.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumIot, prometheus.CounterValue, h.NumIot.Val, l})
|
|
m = append(m, &metricExports{u.Site.TxBytesR, prometheus.GaugeValue, h.TxBytesR.Val, l})
|
|
m = append(m, &metricExports{u.Site.RxBytesR, prometheus.GaugeValue, h.RxBytesR.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumAp, prometheus.CounterValue, h.NumAp.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumAdopted, prometheus.CounterValue, h.NumAdopted.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumDisabled, prometheus.CounterValue, h.NumDisabled.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumDisconnected, prometheus.CounterValue, h.NumDisconnected.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumPending, prometheus.CounterValue, h.NumPending.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumGw, prometheus.CounterValue, h.NumGw.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumSw, prometheus.CounterValue, h.NumSw.Val, l})
|
|
m = append(m, &metricExports{u.Site.NumSta, prometheus.CounterValue, h.NumSta.Val, l})
|
|
m = append(m, &metricExports{u.Site.Latency, prometheus.GaugeValue, h.Latency.Val, l})
|
|
m = append(m, &metricExports{u.Site.Drops, prometheus.CounterValue, h.Drops.Val, l})
|
|
m = append(m, &metricExports{u.Site.XputUp, prometheus.GaugeValue, h.XputUp.Val, l})
|
|
m = append(m, &metricExports{u.Site.XputDown, prometheus.GaugeValue, h.XputDown.Val, l})
|
|
m = append(m, &metricExports{u.Site.SpeedtestPing, prometheus.GaugeValue, h.SpeedtestPing.Val, l})
|
|
if h.Subsystem == "vpn" {
|
|
m = append(m, &metricExports{u.Site.RemoteUserNumActive, prometheus.CounterValue, h.RemoteUserNumActive.Val, l})
|
|
m = append(m, &metricExports{u.Site.RemoteUserNumInactive, prometheus.CounterValue, h.RemoteUserNumInactive.Val, l})
|
|
m = append(m, &metricExports{u.Site.RemoteUserRxBytes, prometheus.CounterValue, h.RemoteUserRxBytes.Val, l})
|
|
m = append(m, &metricExports{u.Site.RemoteUserTxBytes, prometheus.CounterValue, h.RemoteUserTxBytes.Val, l})
|
|
m = append(m, &metricExports{u.Site.RemoteUserRxPackets, prometheus.CounterValue, h.RemoteUserRxPackets.Val, l})
|
|
m = append(m, &metricExports{u.Site.RemoteUserTxPackets, prometheus.CounterValue, h.RemoteUserTxPackets.Val, l})
|
|
}
|
|
}
|
|
return m
|
|
}
|