Run all the pollers even during an error.

This commit is contained in:
David Newhall II 2019-05-30 02:40:25 -07:00
parent 9f39a1acd2
commit b9848c9a54
1 changed files with 39 additions and 17 deletions

View File

@ -111,20 +111,35 @@ func GetConfig(configFile string) (Config, error) {
func (c *Config) PollUnifiController(controller *unifi.Unifi, infdb influx.Client) {
log.Println("[INFO] Everyting checks out! Beginning Poller Routine.")
ticker := time.NewTicker(c.Interval.value)
for range ticker.C {
if sites, err := filterSites(controller, c.Sites); err != nil {
sites, err := filterSites(controller, c.Sites)
if err != nil {
logErrors([]error{err}, "uni.GetSites()")
} else if clients, err := controller.GetClients(sites); err != nil {
}
// Get all the points.
clients, err := controller.GetClients(sites)
if err != nil {
logErrors([]error{err}, "uni.GetClients()")
} else if devices, err := controller.GetDevices(sites); err != nil {
}
devices, err := controller.GetDevices(sites)
if err != nil {
logErrors([]error{err}, "uni.GetDevices()")
} else if bp, err := influx.NewBatchPoints(influx.BatchPointsConfig{Database: c.InfluxDB}); err != nil {
}
bp, err := influx.NewBatchPoints(influx.BatchPointsConfig{Database: c.InfluxDB})
if err != nil {
logErrors([]error{err}, "influx.NewBatchPoints")
} else if errs := batchPoints(devices, clients, bp); errs != nil && hasErr(errs) {
continue
}
// Batch all the points.
if errs := batchPoints(devices, clients, bp); errs != nil && hasErr(errs) {
logErrors(errs, "asset.Points()")
} else if err := infdb.Write(bp); err != nil {
}
if err := infdb.Write(bp); err != nil {
logErrors([]error{err}, "infdb.Write(bp)")
} else if !c.Quiet {
}
if !c.Quiet {
log.Printf("[INFO] Logged Unifi States. Sites: %d Clients: %d, Wireless APs: %d, Gateways: %d, Switches: %d",
len(sites), len(clients.UCLs), len(devices.UAPs), len(devices.USGs), len(devices.USWs))
}
@ -154,6 +169,9 @@ func filterSites(controller *unifi.Unifi, filter []string) ([]unifi.Site, error)
// batchPoints combines all device and client data into influxdb data points.
func batchPoints(devices *unifi.Devices, clients *unifi.Clients, batchPoints influx.BatchPoints) (errs []error) {
process := func(asset Asset) error {
if asset == nil {
return nil
}
influxPoints, err := asset.Points()
if err != nil {
return err
@ -161,17 +179,21 @@ func batchPoints(devices *unifi.Devices, clients *unifi.Clients, batchPoints inf
batchPoints.AddPoints(influxPoints)
return nil
}
for _, asset := range devices.UAPs {
errs = append(errs, process(asset))
if devices != nil {
for _, asset := range devices.UAPs {
errs = append(errs, process(asset))
}
for _, asset := range devices.USGs {
errs = append(errs, process(asset))
}
for _, asset := range devices.USWs {
errs = append(errs, process(asset))
}
}
for _, asset := range devices.USGs {
errs = append(errs, process(asset))
}
for _, asset := range devices.USWs {
errs = append(errs, process(asset))
}
for _, asset := range clients.UCLs {
errs = append(errs, process(asset))
if clients != nil {
for _, asset := range clients.UCLs {
errs = append(errs, process(asset))
}
}
return
}