This commit is contained in:
davidnewhall2 2019-12-14 18:55:10 -08:00
parent c1bdc16184
commit 4f987d3225
2 changed files with 34 additions and 21 deletions

View File

@ -61,9 +61,9 @@ type Controller struct {
VerifySSL bool `json:"verify_ssl" toml:"verify_ssl" xml:"verify_ssl" yaml:"verify_ssl"` 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"` 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"` 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"` User string `json:"user,omitempty" toml:"user,omitempty" xml:"user" yaml:"user"`
Pass string `json:"unifi_pass,omitempty" toml:"unifi_pass,omitempty" xml:"unifi_pass" yaml:"unifi_pass"` Pass string `json:"pass,omitempty" toml:"pass,omitempty" xml:"pass" yaml:"pass"`
URL string `json:"unifi_url,omitempty" toml:"unifi_url,omitempty" xml:"unifi_url" yaml:"unifi_url"` URL string `json:"url,omitempty" toml:"url,omitempty" xml:"url" yaml:"url"`
Sites []string `json:"sites,omitempty" toml:"sites,omitempty" xml:"sites" yaml:"sites"` Sites []string `json:"sites,omitempty" toml:"sites,omitempty" xml:"sites" yaml:"sites"`
Unifi *unifi.Unifi `json:"-" toml:"-" xml:"-" yaml:"-"` Unifi *unifi.Unifi `json:"-" toml:"-" xml:"-" yaml:"-"`
} }

View File

@ -10,45 +10,45 @@ import (
) )
// GetUnifi returns a UniFi controller interface. // GetUnifi returns a UniFi controller interface.
func (u *UnifiPoller) GetUnifi(config Controller) error { func (u *UnifiPoller) GetUnifi(c Controller) error {
var err error var err error
u.Lock() u.Lock()
defer u.Unlock() defer u.Unlock()
if config.Unifi != nil { if c.Unifi != nil {
config.Unifi.CloseIdleConnections() c.Unifi.CloseIdleConnections()
} }
// Create an authenticated session to the Unifi Controller. // Create an authenticated session to the Unifi Controller.
config.Unifi, err = unifi.NewUnifi(&unifi.Config{ c.Unifi, err = unifi.NewUnifi(&unifi.Config{
User: config.User, User: c.User,
Pass: config.Pass, Pass: c.Pass,
URL: config.URL, URL: c.URL,
VerifySSL: config.VerifySSL, VerifySSL: c.VerifySSL,
ErrorLog: u.LogErrorf, // Log all errors. ErrorLog: u.LogErrorf, // Log all errors.
DebugLog: u.LogDebugf, // Log debug messages. DebugLog: u.LogDebugf, // Log debug messages.
}) })
if err != nil { if err != nil {
config.Unifi = nil c.Unifi = nil
return fmt.Errorf("unifi controller: %v", err) 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. // CheckSites makes sure the list of provided sites exists on the controller.
// This does not run in Lambda (run-once) mode. // 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") { if strings.Contains(strings.ToLower(u.Config.Mode), "lambda") {
return nil // Skip this in lambda mode. return nil // Skip this in lambda mode.
} }
u.LogDebugf("Checking Controller Sites List") u.LogDebugf("Checking Controller Sites List")
sites, err := config.Unifi.GetSites() sites, err := c.Unifi.GetSites()
if err != nil { if err != nil {
return err 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, ", ")) u.Logf("Found %d site(s) on controller: %v", len(msg), strings.Join(msg, ", "))
if StringInSlice("all", config.Sites) { if StringInSlice("all", c.Sites) {
config.Sites = []string{"all"} c.Sites = []string{"all"}
return nil return nil
} }
FIRST: FIRST:
for _, s := range config.Sites { for _, s := range c.Sites {
for _, site := range sites { for _, site := range sites {
if s == site.Name { if s == site.Name {
continue FIRST 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.Sites = append(metrics.Sites, m.Sites...)
metrics.Clients = append(metrics.Clients, m.Clients...) metrics.Clients = append(metrics.Clients, m.Clients...)
metrics.IDSList = append(metrics.IDSList, m.IDSList...) 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.UAPs = append(metrics.UAPs, m.UAPs...)
metrics.USGs = append(metrics.USGs, m.USGs...) metrics.USGs = append(metrics.USGs, m.USGs...)
metrics.USWs = append(metrics.USWs, m.USWs...) metrics.USWs = append(metrics.USWs, m.USWs...)
@ -134,7 +147,7 @@ func (u *UnifiPoller) collectController(c Controller) (*metrics.Metrics, error)
} }
if c.SaveIDS { 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 { if err != nil {
return m, fmt.Errorf("unifi.GetIDS(%v): %v", c.URL, err) return m, fmt.Errorf("unifi.GetIDS(%v): %v", c.URL, err)
} }