diff --git a/Gopkg.lock b/Gopkg.lock index a80ef87a..c2c2a633 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -10,12 +10,12 @@ version = "v0.3.1" [[projects]] - digest = "1:7a6d857bd263ca56a403bfd8a4466b2cb01510e5177c7a16e3f87e084deecca7" + digest = "1:b148ed25622a093e995956ed755bbfc0dd9907ced48946c3b04ca38fc69319e0" name = "github.com/golift/unifi" packages = ["."] pruneopts = "UT" - revision = "4648720c158a153924d1717f7f74736aa42a8ecb" - version = "v2.1.4" + revision = "af72953b15407ea795c955ddd503c75ee25c9d47" + version = "v2.1.5" [[projects]] branch = "master" diff --git a/unifipoller/unifi.go b/unifipoller/unifi.go index 424aaa34..62a2b49a 100644 --- a/unifipoller/unifi.go +++ b/unifipoller/unifi.go @@ -66,6 +66,9 @@ func (u *UnifiPoller) CollectAndReport() error { if err != nil { return err } + if err := u.AugmentMetrics(metrics); err != nil { + return err + } err = u.ReportMetrics(metrics) u.LogError(err, "reporting metrics") return err @@ -90,6 +93,29 @@ func (u *UnifiPoller) CollectMetrics() (*Metrics, error) { return m, err } +// AugmentMetrics is our middleware layer between collecting metrics and writing them. +// This is where we can manipuate the returned data or make arbitrary decisions. +// This function currently adds parent device names to client metrics. +func (u *UnifiPoller) AugmentMetrics(metrics *Metrics) error { + devices := make(map[string]string) + for _, r := range metrics.UAPs { + devices[r.Mac] = r.Name + } + for _, r := range metrics.USGs { + devices[r.Mac] = r.Name + } + for _, r := range metrics.USWs { + devices[r.Mac] = r.Name + } + // These come blank, so set them here. + for i, c := range metrics.Clients { + metrics.Clients[i].SwName = devices[c.SwMac] + metrics.Clients[i].ApName = devices[c.ApMac] + metrics.Clients[i].GwName = devices[c.GwMac] + } + return nil +} + // ReportMetrics batches all the metrics and writes them to InfluxDB. // Returns an error if the write to influx fails. func (u *UnifiPoller) ReportMetrics(metrics *Metrics) error {