diff --git a/pkg/promunifi/collector.go b/pkg/promunifi/collector.go index 3116c2db..aa14b1a8 100644 --- a/pkg/promunifi/collector.go +++ b/pkg/promunifi/collector.go @@ -121,16 +121,17 @@ func (u *promUnifi) Collect(ch chan<- prometheus.Metric) { } // Pass Report interface into our collecting and reporting methods. - go u.exportMetrics(r, ch) + go u.exportMetrics(r, ch, r.ch) u.loopExports(r) } // This is closely tied to the method above with a sync.WaitGroup. // This method runs in a go routine and exits when the channel closes. -func (u *promUnifi) exportMetrics(r report, ch chan<- prometheus.Metric) { +// This is where our channels connects to the prometheus channel. +func (u *promUnifi) exportMetrics(r report, ch chan<- prometheus.Metric, ourChan chan []*metric) { descs := make(map[*prometheus.Desc]bool) // used as a counter defer r.report(descs) - for newMetrics := range r.channel() { + for newMetrics := range ourChan { for _, m := range newMetrics { descs[m.Desc] = true switch v := m.Value.(type) { diff --git a/pkg/promunifi/report.go b/pkg/promunifi/report.go index 3fc36466..690f2256 100644 --- a/pkg/promunifi/report.go +++ b/pkg/promunifi/report.go @@ -18,7 +18,6 @@ type report interface { send([]*metric) sendone(*prometheus.Desc, prometheus.ValueType, interface{}, []string) metrics() *metrics.Metrics - channel() chan []*metric report(descs map[*prometheus.Desc]bool) export(m *metric, v float64) prometheus.Metric error(ch chan<- prometheus.Metric, d *prometheus.Desc, v interface{}) @@ -35,9 +34,9 @@ func (r *Report) done() { r.wg.Add(-one) } -func (r *Report) sendone(d *prometheus.Desc, tv prometheus.ValueType, i interface{}, s []string) { +func (r *Report) sendone(desc *prometheus.Desc, valType prometheus.ValueType, val interface{}, labels []string) { r.wg.Add(one) - r.ch <- []*metric{{d, tv, i, s}} + r.ch <- []*metric{{desc, valType, val, labels}} } func (r *Report) send(m []*metric) { @@ -49,10 +48,6 @@ func (r *Report) metrics() *metrics.Metrics { return r.Metrics } -func (r *Report) channel() chan []*metric { - return r.ch -} - func (r *Report) report(descs map[*prometheus.Desc]bool) { if r.cf.LoggingFn == nil { return diff --git a/pkg/promunifi/uap.go b/pkg/promunifi/uap.go index e010c86d..8cec4507 100644 --- a/pkg/promunifi/uap.go +++ b/pkg/promunifi/uap.go @@ -170,6 +170,7 @@ func (u *promUnifi) exportUAP(r report, d *unifi.UAP) { r.sendone(u.Device.Info, gauge, d.Uptime, append(labels, infoLabels...)) } +// udm doesn't have these stats exposed yet, so pass 2 or 6 metrics. func (u *promUnifi) exportUAPstats(r report, labels []string, ap *unifi.Ap, bytes ...unifi.FlexInt) { labelU := []string{"user", labels[1], labels[2]} labelG := []string{"guest", labels[1], labels[2]} diff --git a/pkg/promunifi/udm.go b/pkg/promunifi/udm.go index 83205852..b4812f56 100644 --- a/pkg/promunifi/udm.go +++ b/pkg/promunifi/udm.go @@ -90,7 +90,7 @@ func (u *promUnifi) exportBYTstats(r report, labels []string, tx, rx unifi.FlexI }) } -// shared by all +// shared by all, pass 2 or 5 stats. func (u *promUnifi) exportSTAcount(r report, labels []string, stas ...unifi.FlexInt) { r.send([]*metric{ {u.Device.Counter, gauge, stas[0], append(labels, "user")},