diff --git a/core/poller/pkg/poller/influx.go b/core/poller/pkg/poller/influx.go index e9433460..52690c13 100644 --- a/core/poller/pkg/poller/influx.go +++ b/core/poller/pkg/poller/influx.go @@ -2,6 +2,7 @@ package poller import ( "fmt" + "log" "time" "github.com/davidnewhall/unifi-poller/pkg/influxunifi" @@ -29,6 +30,20 @@ func (u *UnifiPoller) GetInfluxDB() (err error) { return nil } +// PollController runs forever, polling UniFi and pushing to InfluxDB +// This is started by Run() or RunBoth() after everything checks out. +func (u *UnifiPoller) PollController() { + interval := u.Config.Interval.Round(time.Second) + log.Printf("[INFO] Everything checks out! Poller started, InfluxDB interval: %v", interval) + + ticker := time.NewTicker(interval) + for u.LastCheck = range ticker.C { + if err := u.CollectAndProcess(); err != nil { + u.LogErrorf("%v", err) + } + } +} + // CollectAndProcess collects measurements and then reports them to InfluxDB // Can be called once or in a ticker loop. This function and all the ones below // handle their own logging. An error is returned so the calling function may diff --git a/core/poller/pkg/poller/start.go b/core/poller/pkg/poller/start.go index 154f0395..2a81ac03 100644 --- a/core/poller/pkg/poller/start.go +++ b/core/poller/pkg/poller/start.go @@ -131,17 +131,3 @@ func (u *UnifiPoller) Run() error { return u.RunPrometheus() } } - -// PollController runs forever, polling UniFi and pushing to InfluxDB -// This is started by Run() or RunBoth() after everything checks out. -func (u *UnifiPoller) PollController() { - interval := u.Config.Interval.Round(time.Second) - log.Printf("[INFO] Everything checks out! Poller started, InfluxDB interval: %v", interval) - - ticker := time.NewTicker(interval) - for u.LastCheck = range ticker.C { - if err := u.CollectAndProcess(); err != nil { - u.LogErrorf("%v", err) - } - } -} diff --git a/core/poller/pkg/poller/unifi.go b/core/poller/pkg/poller/unifi.go index 5ba11127..0e598716 100644 --- a/core/poller/pkg/poller/unifi.go +++ b/core/poller/pkg/poller/unifi.go @@ -84,18 +84,9 @@ func (u *UnifiPoller) CollectMetrics() (*metrics.Metrics, error) { metrics := &metrics.Metrics{} for _, c := range u.Config.Controllers { - m, err := u.collectController(c) + m, err := u.checkAndPollController(c) if err != nil { - u.LogErrorf("collecting metrics from %s: %v", c.URL, err) - u.Logf("Re-authenticating to UniFi Controller: %s", c.URL) - - if err := u.GetUnifi(c); err != nil { - u.LogErrorf("re-authenticating to %s: %v", c.URL, err) - errs = append(errs, err.Error()) - } else if m, err = u.collectController(c); err != nil { - u.LogErrorf("collecting metrics from %s: %v", c.URL, err) - errs = append(errs, err.Error()) - } + errs = append(errs, err.Error()) } if m == nil { @@ -129,19 +120,35 @@ func (u *UnifiPoller) CollectMetrics() (*metrics.Metrics, error) { return metrics, err } -func (u *UnifiPoller) collectController(c Controller) (*metrics.Metrics, error) { - var err error - +func (u *UnifiPoller) checkAndPollController(c Controller) (*metrics.Metrics, error) { if c.Unifi == nil { - // Some users need to re-auth every interval because the cookie times out. - // Sometimes we hit this path when the controller dies. - u.Logf("Re-authenticating to UniFi Controller: %v", c.URL) + u.Logf("Re-authenticating to UniFi Controller: %s", c.URL) if err := u.GetUnifi(c); err != nil { + u.LogErrorf("re-authenticating to %s: %v", c.URL, err) return nil, err } } + m, err := u.collectController(c) + if err == nil { + return m, nil + } + + u.LogErrorf("collecting metrics %v", err) + u.Logf("Re-authenticating to UniFi Controller: %s", c.URL) + + if err := u.GetUnifi(c); err != nil { + u.LogErrorf("re-authenticating to %s: %v", c.URL, err) + return nil, err + } + + return u.collectController(c) +} + +func (u *UnifiPoller) collectController(c Controller) (*metrics.Metrics, error) { + var err error + m := &metrics.Metrics{TS: u.LastCheck} // At this point, it's the Current Check. // Get the sites we care about.