diff --git a/core/poller/pkg/poller/config.go b/core/poller/pkg/poller/config.go index c77bdff6..b0266405 100644 --- a/core/poller/pkg/poller/config.go +++ b/core/poller/pkg/poller/config.go @@ -61,9 +61,9 @@ type Controller struct { VerifySSL bool `json:"verify_ssl" toml:"verify_ssl" xml:"verify_ssl" yaml:"verify_ssl"` SaveIDS bool `json:"save_ids" toml:"save_ids" xml:"save_ids" yaml:"save_ids"` SaveSites bool `json:"save_sites,omitempty" toml:"save_sites,omitempty" xml:"save_sites" yaml:"save_sites"` - User string `json:"unifi_user,omitempty" toml:"unifi_user,omitempty" xml:"unifi_user" yaml:"unifi_user"` - Pass string `json:"unifi_pass,omitempty" toml:"unifi_pass,omitempty" xml:"unifi_pass" yaml:"unifi_pass"` - URL string `json:"unifi_url,omitempty" toml:"unifi_url,omitempty" xml:"unifi_url" yaml:"unifi_url"` + User string `json:"user,omitempty" toml:"user,omitempty" xml:"user" yaml:"user"` + Pass string `json:"pass,omitempty" toml:"pass,omitempty" xml:"pass" yaml:"pass"` + URL string `json:"url,omitempty" toml:"url,omitempty" xml:"url" yaml:"url"` Sites []string `json:"sites,omitempty" toml:"sites,omitempty" xml:"sites" yaml:"sites"` Unifi *unifi.Unifi `json:"-" toml:"-" xml:"-" yaml:"-"` } diff --git a/core/poller/pkg/poller/unifi.go b/core/poller/pkg/poller/unifi.go index c602293c..03435a2b 100644 --- a/core/poller/pkg/poller/unifi.go +++ b/core/poller/pkg/poller/unifi.go @@ -10,45 +10,45 @@ import ( ) // GetUnifi returns a UniFi controller interface. -func (u *UnifiPoller) GetUnifi(config Controller) error { +func (u *UnifiPoller) GetUnifi(c Controller) error { var err error u.Lock() defer u.Unlock() - if config.Unifi != nil { - config.Unifi.CloseIdleConnections() + if c.Unifi != nil { + c.Unifi.CloseIdleConnections() } - // Create an authenticated session to the Unifi Controller. - config.Unifi, err = unifi.NewUnifi(&unifi.Config{ - User: config.User, - Pass: config.Pass, - URL: config.URL, - VerifySSL: config.VerifySSL, + c.Unifi, err = unifi.NewUnifi(&unifi.Config{ + User: c.User, + Pass: c.Pass, + URL: c.URL, + VerifySSL: c.VerifySSL, ErrorLog: u.LogErrorf, // Log all errors. DebugLog: u.LogDebugf, // Log debug messages. }) + if err != nil { - config.Unifi = nil + c.Unifi = nil return fmt.Errorf("unifi controller: %v", err) } - u.LogDebugf("Authenticated with controller successfully, %s", config.URL) + u.LogDebugf("Authenticated with controller successfully, %s", c.URL) - return u.CheckSites(config) + return u.CheckSites(c) } // CheckSites makes sure the list of provided sites exists on the controller. // This does not run in Lambda (run-once) mode. -func (u *UnifiPoller) CheckSites(config Controller) error { +func (u *UnifiPoller) CheckSites(c Controller) error { if strings.Contains(strings.ToLower(u.Config.Mode), "lambda") { return nil // Skip this in lambda mode. } u.LogDebugf("Checking Controller Sites List") - sites, err := config.Unifi.GetSites() + sites, err := c.Unifi.GetSites() if err != nil { return err } @@ -60,13 +60,13 @@ func (u *UnifiPoller) CheckSites(config Controller) error { } u.Logf("Found %d site(s) on controller: %v", len(msg), strings.Join(msg, ", ")) - if StringInSlice("all", config.Sites) { - config.Sites = []string{"all"} + if StringInSlice("all", c.Sites) { + c.Sites = []string{"all"} return nil } FIRST: - for _, s := range config.Sites { + for _, s := range c.Sites { for _, site := range sites { if s == site.Name { continue FIRST @@ -97,9 +97,22 @@ func (u *UnifiPoller) CollectMetrics() (metrics *metrics.Metrics, err error) { } } + if m == nil { + continue + } + metrics.Sites = append(metrics.Sites, m.Sites...) metrics.Clients = append(metrics.Clients, m.Clients...) metrics.IDSList = append(metrics.IDSList, m.IDSList...) + + if m.Devices == nil { + continue + } + + if metrics.Devices == nil { + metrics.Devices = &unifi.Devices{} + } + metrics.UAPs = append(metrics.UAPs, m.UAPs...) metrics.USGs = append(metrics.USGs, m.USGs...) metrics.USWs = append(metrics.USWs, m.USWs...) @@ -134,7 +147,7 @@ func (u *UnifiPoller) collectController(c Controller) (*metrics.Metrics, error) } if c.SaveIDS { - m.IDSList, err = c.Unifi.GetIDS(m.Sites, time.Now().Add(u.Config.Interval.Duration), time.Now()) + m.IDSList, err = c.Unifi.GetIDS(m.Sites, time.Now().Add(2*time.Minute), time.Now()) if err != nil { return m, fmt.Errorf("unifi.GetIDS(%v): %v", c.URL, err) }