satisfy new interface

This commit is contained in:
davidnewhall2 2020-06-21 16:20:51 -07:00
parent d80398b7a5
commit 979a625e6e
6 changed files with 69 additions and 24 deletions

View File

@ -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)}

View File

@ -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)
}
}

View File

@ -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
)

View File

@ -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=

View File

@ -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()

View File

@ -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}