From 979a625e6ebaf634da8b4a9b0ee65139361e2f85 Mon Sep 17 00:00:00 2001 From: davidnewhall2 Date: Sun, 21 Jun 2020 16:20:51 -0700 Subject: [PATCH] satisfy new interface --- integrations/promunifi/clients.go | 8 ++++- integrations/promunifi/collector.go | 51 ++++++++++++++++++----------- integrations/promunifi/go.mod | 2 +- integrations/promunifi/go.sum | 2 ++ integrations/promunifi/report.go | 22 ++++++++++++- integrations/promunifi/site.go | 8 ++++- 6 files changed, 69 insertions(+), 24 deletions(-) diff --git a/integrations/promunifi/clients.go b/integrations/promunifi/clients.go index 2aa4ece1..22620661 100644 --- a/integrations/promunifi/clients.go +++ b/integrations/promunifi/clients.go @@ -72,7 +72,13 @@ func descClient(ns string) *uclient { } } -func (u *promUnifi) exportClientDPI(r report, s *unifi.DPITable, appTotal, catTotal totalsDPImap) { +func (u *promUnifi) exportClientDPI(r report, v interface{}, appTotal, catTotal totalsDPImap) { + s, ok := v.(*unifi.DPITable) + if !ok { + u.Collector.LogErrorf("invalid type given to ClientsDPI: %T", v) + return + } + for _, dpi := range s.ByApp { labelDPI := []string{s.Name, s.MAC, s.SiteName, s.SourceName, unifi.DPICats.Get(dpi.Cat), unifi.DPIApps.GetApp(dpi.Cat, dpi.App)} diff --git a/integrations/promunifi/collector.go b/integrations/promunifi/collector.go index 39e08607..476611bc 100644 --- a/integrations/promunifi/collector.go +++ b/integrations/promunifi/collector.go @@ -72,6 +72,10 @@ type Report struct { Total int // Total count of metrics recorded. Errors int // Total count of errors recording metrics. Zeros int // Total count of metrics equal to zero. + USG int // Total count of USG devices. + USW int // Total count of USW devices. + UAP int // Total count of UAP devices. + UDM int // Total count of UDM devices. Metrics *poller.Metrics // Metrics collected and recorded. Elapsed time.Duration // Duration elapsed collecting and exporting. Fetch time.Duration // Duration elapsed making controller requests. @@ -240,10 +244,6 @@ func (u *promUnifi) collect(ch chan<- prometheus.Metric, filter *poller.Filter) return } - if r.Metrics.Devices == nil { - r.Metrics.Devices = &unifi.Devices{} - } - // Pass Report interface into our collecting and reporting methods. go u.exportMetrics(r, ch, r.ch) u.loopExports(r) @@ -282,7 +282,7 @@ func (u *promUnifi) loopExports(r report) { m := r.metrics() for _, s := range m.Sites { - u.exportSite(r, s) + u.switchExport(r, s) } for _, s := range m.SitesDPI { @@ -290,7 +290,11 @@ func (u *promUnifi) loopExports(r report) { } for _, c := range m.Clients { - u.exportClient(r, c) + u.switchExport(r, c) + } + + for _, d := range m.Devices { + u.switchExport(r, d) } appTotal := make(totalsDPImap) @@ -301,20 +305,27 @@ func (u *promUnifi) loopExports(r report) { } u.exportClientDPItotals(r, appTotal, catTotal) +} - for _, d := range m.UAPs { - u.exportUAP(r, d) - } - - for _, d := range m.UDMs { - u.exportUDM(r, d) - } - - for _, d := range m.USGs { - u.exportUSG(r, d) - } - - for _, d := range m.USWs { - u.exportUSW(r, d) +func (u *promUnifi) switchExport(r report, v interface{}) { + switch v := v.(type) { + case *unifi.UAP: + r.addUAP() + u.exportUAP(r, v) + case *unifi.USW: + r.addUSW() + u.exportUSW(r, v) + case *unifi.USG: + r.addUSG() + u.exportUSG(r, v) + case *unifi.UDM: + r.addUDM() + u.exportUDM(r, v) + case *unifi.Site: + u.exportSite(r, v) + case *unifi.Client: + u.exportClient(r, v) + default: + u.Collector.LogErrorf("invalid type: %T", v) } } diff --git a/integrations/promunifi/go.mod b/integrations/promunifi/go.mod index 784a21c7..2aefb94a 100644 --- a/integrations/promunifi/go.mod +++ b/integrations/promunifi/go.mod @@ -6,6 +6,6 @@ require ( github.com/prometheus/client_golang v1.6.0 github.com/prometheus/common v0.10.0 github.com/prometheus/procfs v0.1.2 // indirect - github.com/unifi-poller/poller v0.0.8-0.20200621110949-33f1a1454d10 + github.com/unifi-poller/poller v0.0.8-0.20200621214016-5d1ed3324a46 github.com/unifi-poller/unifi v0.0.5-0.20200620103801-b927287ea1cd ) diff --git a/integrations/promunifi/go.sum b/integrations/promunifi/go.sum index 7397f9bb..b2e90186 100644 --- a/integrations/promunifi/go.sum +++ b/integrations/promunifi/go.sum @@ -97,6 +97,8 @@ github.com/unifi-poller/poller v0.0.8-0.20200621101255-6d0d0b288ece h1:EsyR6cKuw github.com/unifi-poller/poller v0.0.8-0.20200621101255-6d0d0b288ece/go.mod h1:+Ppksi2wBCrByJke0B0lTutxFtKfv1zx6L1haALBrN4= github.com/unifi-poller/poller v0.0.8-0.20200621110949-33f1a1454d10 h1:1rGP4ISFpBj9xjJDXNak7EdaQtyoy3MwMZzo2+W1PLo= github.com/unifi-poller/poller v0.0.8-0.20200621110949-33f1a1454d10/go.mod h1:+Ppksi2wBCrByJke0B0lTutxFtKfv1zx6L1haALBrN4= +github.com/unifi-poller/poller v0.0.8-0.20200621214016-5d1ed3324a46 h1:OhbVj3VVgbpUMQFSwD0NszDsbEL7DdbTcJuU+p9DwIM= +github.com/unifi-poller/poller v0.0.8-0.20200621214016-5d1ed3324a46/go.mod h1:pJ/MeYaakLOOpbyc7s4zeZ92UzNK/rir5jkA7t5jIjo= github.com/unifi-poller/unifi v0.0.4/go.mod h1:bTUtctrf56aapjKH+L+98eThBaVFbQXw5iNGZI0g/+E= github.com/unifi-poller/unifi v0.0.5-0.20200619092006-d24c776a42f5/go.mod h1:L1kMRH2buZhB31vZnRC1im7Tk/4uD3ET4biwl2faYy8= github.com/unifi-poller/unifi v0.0.5-0.20200620103801-b927287ea1cd h1:jrwuiY1AdoPi+b+R8zjt/e8h8ZqULNB9izcyQnf3pSw= diff --git a/integrations/promunifi/report.go b/integrations/promunifi/report.go index 12cf3a32..a2f5061f 100644 --- a/integrations/promunifi/report.go +++ b/integrations/promunifi/report.go @@ -19,6 +19,10 @@ type report interface { report(c poller.Collect, descs map[*prometheus.Desc]bool) export(m *metric, v float64) prometheus.Metric error(ch chan<- prometheus.Metric, d *prometheus.Desc, v interface{}) + addUDM() + addUSG() + addUAP() + addUSW() } // Satisfy gomnd. @@ -43,7 +47,7 @@ func (r *Report) report(c poller.Collect, descs map[*prometheus.Desc]bool) { c.Logf("UniFi Measurements Exported. Site: %d, Client: %d, "+ "UAP: %d, USG/UDM: %d, USW: %d, Descs: %d, "+ "Metrics: %d, Errs: %d, 0s: %d, Reqs/Total: %v / %v", - len(m.Sites), len(m.Clients), len(m.UAPs), len(m.UDMs)+len(m.USGs), len(m.USWs), + len(m.Sites), len(m.Clients), r.UAP, r.UDM+r.USG, r.USW, len(descs), r.Total, r.Errors, r.Zeros, r.Fetch.Round(time.Millisecond/oneDecimalPoint), r.Elapsed.Round(time.Millisecond/oneDecimalPoint)) @@ -67,6 +71,22 @@ func (r *Report) error(ch chan<- prometheus.Metric, d *prometheus.Desc, v interf } } +func (r *Report) addUSW() { + r.USW++ +} + +func (r *Report) addUAP() { + r.UAP++ +} + +func (r *Report) addUSG() { + r.USG++ +} + +func (r *Report) addUDM() { + r.UDM++ +} + // close is not part of the interface. func (r *Report) close() { r.wg.Wait() diff --git a/integrations/promunifi/site.go b/integrations/promunifi/site.go index 6607d1f8..6a93ddeb 100644 --- a/integrations/promunifi/site.go +++ b/integrations/promunifi/site.go @@ -75,7 +75,13 @@ func descSite(ns string) *site { } } -func (u *promUnifi) exportSiteDPI(r report, s *unifi.DPITable) { +func (u *promUnifi) exportSiteDPI(r report, v interface{}) { + s, ok := v.(*unifi.DPITable) + if !ok { + u.Collector.LogErrorf("invalid type given to SiteDPI: %T", v) + return + } + for _, dpi := range s.ByApp { labelDPI := []string{unifi.DPICats.Get(dpi.Cat), unifi.DPIApps.GetApp(dpi.Cat, dpi.App), s.SiteName, s.SourceName}