re-arrange pieces

This commit is contained in:
davidnewhall2 2019-12-09 21:23:18 -08:00
parent 0f02bb3031
commit 2bb38b900e
3 changed files with 25 additions and 22 deletions

View File

@ -44,7 +44,6 @@ func (u *UnifiPoller) CollectAndProcess() error {
report, err := u.Influx.ReportMetrics(metrics)
if err != nil {
u.LogErrorf("processing metrics: %v", err)
return err
}

View File

@ -92,11 +92,13 @@ func (f *Flag) Parse(args []string) {
// 2. Run the collector one time and report the metrics to influxdb. (lambda)
// 3. Start a web server and wait for Prometheus to poll the application for metrics.
func (u *UnifiPoller) Run() error {
if err := u.GetUnifi(); err != nil {
return err
switch err := u.GetUnifi(); err {
case nil:
u.Logf("Polling UniFi Controller at %s v%s as user %s. Sites: %v",
u.Config.UnifiBase, u.Unifi.ServerVersion, u.Config.UnifiUser, u.Config.Sites)
default:
u.LogErrorf("Controller Auth or Connection failed, but continuing to retry! %v", err)
}
u.Logf("Polling UniFi Controller at %s v%s as user %s. Sites: %v",
u.Config.UnifiBase, u.Unifi.ServerVersion, u.Config.UnifiUser, u.Config.Sites)
switch strings.ToLower(u.Config.Mode) {
default:
@ -116,23 +118,13 @@ func (u *UnifiPoller) Run() error {
// PollController runs forever, polling UniFi and pushing to InfluxDB
// This is started by Run() or RunBoth() after everything checks out.
func (u *UnifiPoller) PollController() {
var tryAgain bool
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 {
// Some users need to re-auth every interval because the cookie times out.
if u.Config.ReAuth || tryAgain {
u.LogDebugf("Re-authenticating to UniFi Controller")
if err := u.Unifi.Login(); err != nil {
u.LogErrorf("%v", err)
continue
}
tryAgain = false
}
if err := u.CollectAndProcess(); err != nil {
u.LogErrorf("%v", err)
tryAgain = true
u.Unifi = nil // trigger re-auth in unifi.go.
}
}
}

View File

@ -21,6 +21,7 @@ func (u *UnifiPoller) GetUnifi() (err error) {
DebugLog: u.LogDebugf, // Log debug messages.
})
if err != nil {
u.Unifi = nil
return fmt.Errorf("unifi controller: %v", err)
}
u.LogDebugf("Authenticated with controller successfully")
@ -63,20 +64,31 @@ FIRST:
// CollectMetrics grabs all the measurements from a UniFi controller and returns them.
func (u *UnifiPoller) CollectMetrics() (*metrics.Metrics, error) {
if u.Unifi == nil || u.Config.ReAuth {
// Some users need to re-auth every interval because the cookie times out.
// Sometimes we hit this path when the controller dies.
u.LogDebugf("Re-authenticating to UniFi Controller")
if err := u.GetUnifi(); err != nil {
return nil, err
}
}
m := &metrics.Metrics{TS: u.LastCheck} // At this point, it's the Current Check.
var err error
// Get the sites we care about.
m.Sites, err = u.GetFilteredSites()
u.LogErrorf("unifi.GetSites(): %v", err)
if m.Sites, err = u.GetFilteredSites(); err != nil {
u.LogErrorf("unifi.GetSites(): %v", err)
}
if u.Config.SaveIDS {
m.IDSList, err = u.Unifi.GetIDS(m.Sites, time.Now().Add(u.Config.Interval.Duration), time.Now())
u.LogErrorf("unifi.GetIDS(): %v", err)
}
// Get all the points.
m.Clients, err = u.Unifi.GetClients(m.Sites)
u.LogErrorf("unifi.GetClients(): %v", err)
m.Devices, err = u.Unifi.GetDevices(m.Sites)
u.LogErrorf("unifi.GetDevices(): %v", err)
if m.Clients, err = u.Unifi.GetClients(m.Sites); err != nil {
u.LogErrorf("unifi.GetClients(): %v", err)
}
if m.Devices, err = u.Unifi.GetDevices(m.Sites); err != nil {
u.LogErrorf("unifi.GetDevices(): %v", err)
}
return m, err
}