diff --git a/pkg/promunifi/clients.go b/pkg/promunifi/clients.go index c5477ac3..4c7ae481 100644 --- a/pkg/promunifi/clients.go +++ b/pkg/promunifi/clients.go @@ -115,7 +115,7 @@ func (u *promUnifi) exportClient(r report, c *unifi.Client) { {u.Client.BytesR, gauge, c.BytesR, labelW}, }) } - r.sendone(u.Client.Info, gauge, c.Uptime, labelW) + r.send([]*metric{{u.Client.Info, gauge, c.Uptime, labelW}}) /* needs more "looking into" {u.Client.DpiStatsApp, gauge, c.DpiStats.App, labels}, {u.Client.DpiStatsCat, gauge, c.DpiStats.Cat, labels}, diff --git a/pkg/promunifi/report.go b/pkg/promunifi/report.go index 690f2256..7d40ea31 100644 --- a/pkg/promunifi/report.go +++ b/pkg/promunifi/report.go @@ -16,7 +16,6 @@ type report interface { add() done() send([]*metric) - sendone(*prometheus.Desc, prometheus.ValueType, interface{}, []string) metrics() *metrics.Metrics report(descs map[*prometheus.Desc]bool) export(m *metric, v float64) prometheus.Metric @@ -34,11 +33,6 @@ func (r *Report) done() { r.wg.Add(-one) } -func (r *Report) sendone(desc *prometheus.Desc, valType prometheus.ValueType, val interface{}, labels []string) { - r.wg.Add(one) - r.ch <- []*metric{{desc, valType, val, labels}} -} - func (r *Report) send(m []*metric) { r.wg.Add(one) r.ch <- m diff --git a/pkg/promunifi/uap.go b/pkg/promunifi/uap.go index cedce816..0a47ecec 100644 --- a/pkg/promunifi/uap.go +++ b/pkg/promunifi/uap.go @@ -167,7 +167,10 @@ func (u *promUnifi) exportUAP(r report, d *unifi.UAP) { u.exportSYSstats(r, labels, d.SysStats, d.SystemStats) u.exportSTAcount(r, labels, d.UserNumSta, d.GuestNumSta) u.exportRADtable(r, labels, d.RadioTable, d.RadioTableStats) - r.sendone(u.Device.Info, gauge, 1.0, append(labels, infoLabels...)) + r.send([]*metric{ + {u.Device.Info, gauge, 1.0, append(labels, infoLabels...)}, + {u.Device.Uptime, gauge, d.Uptime, labels}, + }) } // udm doesn't have these stats exposed yet, so pass 2 or 6 metrics. diff --git a/pkg/promunifi/udm.go b/pkg/promunifi/udm.go index 4cfb0c79..524c9908 100644 --- a/pkg/promunifi/udm.go +++ b/pkg/promunifi/udm.go @@ -7,7 +7,8 @@ import ( // These are shared by all four device types: UDM, UAP, USG, USW type unifiDevice struct { - Info *prometheus.Desc // uptime + Info *prometheus.Desc + Uptime *prometheus.Desc Temperature *prometheus.Desc // sw only TotalMaxPower *prometheus.Desc // sw only FanLevel *prometheus.Desc // sw only @@ -34,6 +35,7 @@ func descDevice(ns string) *unifiDevice { infoLabels := []string{"version", "model", "serial", "mac", "ip", "id", "bytes", "uptime"} return &unifiDevice{ Info: prometheus.NewDesc(ns+"info", "Device Information", append(labels, infoLabels...), nil), + Uptime: prometheus.NewDesc(ns+"uptime", "Device Uptime", labels, nil), Temperature: prometheus.NewDesc(ns+"temperature_celsius", "Temperature", labels, nil), TotalMaxPower: prometheus.NewDesc(ns+"max_power_total", "Total Max Power", labels, nil), FanLevel: prometheus.NewDesc(ns+"fan_level", "Fan Level", labels, nil), @@ -71,7 +73,10 @@ func (u *promUnifi) exportUDM(r report, d *unifi.UDM) { u.exportWANPorts(r, labels, d.Wan1, d.Wan2) u.exportUSGstats(r, labels, d.Stat.Gw, d.SpeedtestStatus, d.Uplink) // Dream Machine System Data. - r.sendone(u.Device.Info, gauge, 1.0, append(labels, infoLabels...)) + r.send([]*metric{ + {u.Device.Info, gauge, 1.0, append(labels, infoLabels...)}, + {u.Device.Uptime, gauge, d.Uptime, labels}, + }) // Wireless Data - UDM (non-pro) only if d.Stat.Ap != nil && d.VapTable != nil { u.exportUAPstats(r, labels, d.Stat.Ap) diff --git a/pkg/promunifi/usg.go b/pkg/promunifi/usg.go index 7ed8d7f9..6c2ffd01 100644 --- a/pkg/promunifi/usg.go +++ b/pkg/promunifi/usg.go @@ -77,7 +77,10 @@ func (u *promUnifi) exportUSG(r report, d *unifi.USG) { u.exportSYSstats(r, labels, d.SysStats, d.SystemStats) u.exportUSGstats(r, labels, d.Stat.Gw, d.SpeedtestStatus, d.Uplink) u.exportSTAcount(r, labels, d.UserNumSta, d.GuestNumSta, d.NumDesktop, d.UserNumSta, d.GuestNumSta) - r.sendone(u.Device.Info, gauge, 1.0, append(labels, infoLabels...)) + r.send([]*metric{ + {u.Device.Info, gauge, 1.0, append(labels, infoLabels...)}, + {u.Device.Uptime, gauge, d.Uptime, labels}, + }) } // Gateway States diff --git a/pkg/promunifi/usw.go b/pkg/promunifi/usw.go index 325f8cec..831e71ee 100644 --- a/pkg/promunifi/usw.go +++ b/pkg/promunifi/usw.go @@ -98,16 +98,19 @@ func (u *promUnifi) exportUSW(r report, d *unifi.USW) { u.exportBYTstats(r, labels, d.TxBytes, d.RxBytes) u.exportSYSstats(r, labels, d.SysStats, d.SystemStats) u.exportSTAcount(r, labels, d.UserNumSta, d.GuestNumSta) - r.sendone(u.Device.Info, gauge, 1.0, append(labels, infoLabels...)) + r.send([]*metric{ + {u.Device.Info, gauge, 1.0, append(labels, infoLabels...)}, + {u.Device.Uptime, gauge, d.Uptime, labels}, + }) // Switch System Data. if d.HasTemperature.Val { - r.sendone(u.Device.Temperature, gauge, d.GeneralTemperature, labels) + r.send([]*metric{{u.Device.Temperature, gauge, d.GeneralTemperature, labels}}) } if d.HasFan.Val { - r.sendone(u.Device.FanLevel, gauge, d.FanLevel, labels) + r.send([]*metric{{u.Device.FanLevel, gauge, d.FanLevel, labels}}) } if d.TotalMaxPower.Txt != "" { - r.sendone(u.Device.TotalMaxPower, gauge, d.TotalMaxPower, labels) + r.send([]*metric{{u.Device.TotalMaxPower, gauge, d.TotalMaxPower, labels}}) } }