should be good
This commit is contained in:
		
							parent
							
								
									e220610df7
								
							
						
					
					
						commit
						062fb797de
					
				|  | @ -106,6 +106,14 @@ | ||||||
|   pruneopts = "UT" |   pruneopts = "UT" | ||||||
|   revision = "ac6580df4449443a05718fd7858c1f91ad5f8d20" |   revision = "ac6580df4449443a05718fd7858c1f91ad5f8d20" | ||||||
| 
 | 
 | ||||||
|  | [[projects]] | ||||||
|  |   branch = "master" | ||||||
|  |   digest = "1:d54a8d89f95a4d2a5a24ce63cb1835ccdff337fde7776c87ceacb6fdbe4349ae" | ||||||
|  |   name = "golift.io/config" | ||||||
|  |   packages = ["."] | ||||||
|  |   pruneopts = "UT" | ||||||
|  |   revision = "fd8ffb02173aad2183e5555a03b1d1f909aca930" | ||||||
|  | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:2883cea734f2766f41ff9c9d4aefccccc53e3d44f5c8b08893b9c218cf666722" |   digest = "1:2883cea734f2766f41ff9c9d4aefccccc53e3d44f5c8b08893b9c218cf666722" | ||||||
|   name = "golift.io/unifi" |   name = "golift.io/unifi" | ||||||
|  | @ -126,14 +134,13 @@ | ||||||
|   analyzer-name = "dep" |   analyzer-name = "dep" | ||||||
|   analyzer-version = 1 |   analyzer-version = 1 | ||||||
|   input-imports = [ |   input-imports = [ | ||||||
|     "github.com/BurntSushi/toml", |  | ||||||
|     "github.com/influxdata/influxdb1-client/v2", |     "github.com/influxdata/influxdb1-client/v2", | ||||||
|     "github.com/prometheus/client_golang/prometheus", |     "github.com/prometheus/client_golang/prometheus", | ||||||
|     "github.com/prometheus/client_golang/prometheus/promhttp", |     "github.com/prometheus/client_golang/prometheus/promhttp", | ||||||
|     "github.com/prometheus/common/version", |     "github.com/prometheus/common/version", | ||||||
|     "github.com/spf13/pflag", |     "github.com/spf13/pflag", | ||||||
|  |     "golift.io/config", | ||||||
|     "golift.io/unifi", |     "golift.io/unifi", | ||||||
|     "gopkg.in/yaml.v2", |  | ||||||
|   ] |   ] | ||||||
|   solver-name = "gps-cdcl" |   solver-name = "gps-cdcl" | ||||||
|   solver-version = 1 |   solver-version = 1 | ||||||
|  |  | ||||||
|  | @ -83,5 +83,5 @@ type Config struct { | ||||||
| 	InfluxUser  string          `json:"influx_user,omitempty" toml:"influx_user,omitempty" xml:"influx_user" yaml:"influx_user"` | 	InfluxUser  string          `json:"influx_user,omitempty" toml:"influx_user,omitempty" xml:"influx_user" yaml:"influx_user"` | ||||||
| 	InfluxPass  string          `json:"influx_pass,omitempty" toml:"influx_pass,omitempty" xml:"influx_pass" yaml:"influx_pass"` | 	InfluxPass  string          `json:"influx_pass,omitempty" toml:"influx_pass,omitempty" xml:"influx_pass" yaml:"influx_pass"` | ||||||
| 	InfluxDB    string          `json:"influx_db,omitempty" toml:"influx_db,omitempty" xml:"influx_db" yaml:"influx_db"` | 	InfluxDB    string          `json:"influx_db,omitempty" toml:"influx_db,omitempty" xml:"influx_db" yaml:"influx_db"` | ||||||
| 	Controller []Controller    `json:"controller,omitempty" toml:"controller,omitempty" xml:"controller" yaml:"controller"` | 	Controllers []Controller    `json:"controller,omitempty" toml:"controller,omitempty" xml:"controller" yaml:"controller"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ import ( | ||||||
| // This only works with controller 0 (first one) in the config.
 | // This only works with controller 0 (first one) in the config.
 | ||||||
| func (u *UnifiPoller) DumpJSONPayload() (err error) { | func (u *UnifiPoller) DumpJSONPayload() (err error) { | ||||||
| 	u.Config.Quiet = true | 	u.Config.Quiet = true | ||||||
| 	config := u.Config.Controller[0] | 	config := u.Config.Controllers[0] | ||||||
| 
 | 
 | ||||||
| 	config.Unifi, err = unifi.NewUnifi(&unifi.Config{ | 	config.Unifi, err = unifi.NewUnifi(&unifi.Config{ | ||||||
| 		User:      config.User, | 		User:      config.User, | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ import ( | ||||||
| func New() *UnifiPoller { | func New() *UnifiPoller { | ||||||
| 	return &UnifiPoller{ | 	return &UnifiPoller{ | ||||||
| 		Config: &Config{ | 		Config: &Config{ | ||||||
| 			Controller: []Controller{{ | 			Controllers: []Controller{{ | ||||||
| 				Sites:     []string{"all"}, | 				Sites:     []string{"all"}, | ||||||
| 				User:      defaultUnifiUser, | 				User:      defaultUnifiUser, | ||||||
| 				Pass:      "", | 				Pass:      "", | ||||||
|  | @ -65,7 +65,6 @@ func (u *UnifiPoller) Start() error { | ||||||
| 	if _, err := config.ParseENV(u.Config, ENVConfigPrefix); err != nil { | 	if _, err := config.ParseENV(u.Config, ENVConfigPrefix); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	log.Println("START(): controller", u.Config.Controller) |  | ||||||
| 	if u.Flag.DumpJSON != "" { | 	if u.Flag.DumpJSON != "" { | ||||||
| 		return u.DumpJSONPayload() | 		return u.DumpJSONPayload() | ||||||
| 	} | 	} | ||||||
|  | @ -100,7 +99,7 @@ func (f *Flag) Parse(args []string) { | ||||||
| // 2. Run the collector one time and report the metrics to influxdb. (lambda)
 | // 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.
 | // 3. Start a web server and wait for Prometheus to poll the application for metrics.
 | ||||||
| func (u *UnifiPoller) Run() error { | func (u *UnifiPoller) Run() error { | ||||||
| 	for _, c := range u.Config.Controller { | 	for _, c := range u.Config.Controllers { | ||||||
| 		switch err := u.GetUnifi(c); err { | 		switch err := u.GetUnifi(c); err { | ||||||
| 		case nil: | 		case nil: | ||||||
| 			u.Logf("Polling UniFi Controller at %s v%s as user %s. Sites: %v", | 			u.Logf("Polling UniFi Controller at %s v%s as user %s. Sites: %v", | ||||||
|  |  | ||||||
|  | @ -30,6 +30,7 @@ func (u *UnifiPoller) GetUnifi(config Controller) error { | ||||||
| 		DebugLog:  u.LogDebugf, // Log debug messages.
 | 		DebugLog:  u.LogDebugf, // Log debug messages.
 | ||||||
| 	}) | 	}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		config.Unifi = nil | ||||||
| 		return fmt.Errorf("unifi controller: %v", err) | 		return fmt.Errorf("unifi controller: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -81,13 +82,8 @@ FIRST: | ||||||
| func (u *UnifiPoller) CollectMetrics() (metrics *metrics.Metrics, err error) { | func (u *UnifiPoller) CollectMetrics() (metrics *metrics.Metrics, err error) { | ||||||
| 	var errs []string | 	var errs []string | ||||||
| 
 | 
 | ||||||
| 	for _, c := range u.Config.Controller { | 	for _, c := range u.Config.Controllers { | ||||||
| 		m, err := u.collectController(c) | 		m, err := u.collectController(c) | ||||||
| 		if err != nil { |  | ||||||
| 			errs = append(errs, err.Error()) |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			u.LogErrorf("collecting metrics from %s: %v", c.URL, err) | 			u.LogErrorf("collecting metrics from %s: %v", c.URL, err) | ||||||
| 			u.Logf("Re-authenticating to UniFi Controller: %s", c.URL) | 			u.Logf("Re-authenticating to UniFi Controller: %s", c.URL) | ||||||
|  | @ -123,7 +119,7 @@ func (u *UnifiPoller) collectController(c Controller) (*metrics.Metrics, error) | ||||||
| 	if c.Unifi == nil { | 	if c.Unifi == nil { | ||||||
| 		// Some users need to re-auth every interval because the cookie times out.
 | 		// Some users need to re-auth every interval because the cookie times out.
 | ||||||
| 		// Sometimes we hit this path when the controller dies.
 | 		// Sometimes we hit this path when the controller dies.
 | ||||||
| 		u.Logf("Re-authenticating to UniFi Controller") | 		u.Logf("Re-authenticating to UniFi Controller: %v", c.URL) | ||||||
| 
 | 
 | ||||||
| 		if err := u.GetUnifi(c); err != nil { | 		if err := u.GetUnifi(c); err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
|  | @ -134,23 +130,23 @@ func (u *UnifiPoller) collectController(c Controller) (*metrics.Metrics, error) | ||||||
| 
 | 
 | ||||||
| 	// Get the sites we care about.
 | 	// Get the sites we care about.
 | ||||||
| 	if m.Sites, err = u.GetFilteredSites(c); err != nil { | 	if m.Sites, err = u.GetFilteredSites(c); err != nil { | ||||||
| 		return m, fmt.Errorf("unifi.GetSites(): %v", err) | 		return m, fmt.Errorf("unifi.GetSites(%v): %v", c.URL, err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	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(u.Config.Interval.Duration), time.Now()) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return m, fmt.Errorf("unifi.GetIDS(): %v", err) | 			return m, fmt.Errorf("unifi.GetIDS(%v): %v", c.URL, err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Get all the points.
 | 	// Get all the points.
 | ||||||
| 	if m.Clients, err = c.Unifi.GetClients(m.Sites); err != nil { | 	if m.Clients, err = c.Unifi.GetClients(m.Sites); err != nil { | ||||||
| 		return m, fmt.Errorf("unifi.GetClients(): %v", err) | 		return m, fmt.Errorf("unifi.GetClients(%v): %v", c.URL, err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if m.Devices, err = c.Unifi.GetDevices(m.Sites); err != nil { | 	if m.Devices, err = c.Unifi.GetDevices(m.Sites); err != nil { | ||||||
| 		return m, fmt.Errorf("unifi.GetDevices(): %v", err) | 		return m, fmt.Errorf("unifi.GetDevices(%v): %v", c.URL, err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return u.augmentMetrics(c, m), nil | 	return u.augmentMetrics(c, m), nil | ||||||
|  | @ -204,19 +200,19 @@ func (u *UnifiPoller) augmentMetrics(c Controller, metrics *metrics.Metrics) *me | ||||||
| // GetFilteredSites returns a list of sites to fetch data for.
 | // GetFilteredSites returns a list of sites to fetch data for.
 | ||||||
| // Omits requested but unconfigured sites. Grabs the full list from the
 | // Omits requested but unconfigured sites. Grabs the full list from the
 | ||||||
| // controller and returns the sites provided in the config file.
 | // controller and returns the sites provided in the config file.
 | ||||||
| func (u *UnifiPoller) GetFilteredSites(config Controller) (unifi.Sites, error) { | func (u *UnifiPoller) GetFilteredSites(c Controller) (unifi.Sites, error) { | ||||||
| 	var i int | 	var i int | ||||||
| 
 | 
 | ||||||
| 	sites, err := config.Unifi.GetSites() | 	sites, err := c.Unifi.GetSites() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if len(config.Sites) < 1 || StringInSlice("all", config.Sites) { | 	} else if len(c.Sites) < 1 || StringInSlice("all", c.Sites) { | ||||||
| 		return sites, nil | 		return sites, nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for _, s := range sites { | 	for _, s := range sites { | ||||||
| 		// Only include valid sites in the request filter.
 | 		// Only include valid sites in the request filter.
 | ||||||
| 		if StringInSlice(s.Name, config.Sites) { | 		if StringInSlice(s.Name, c.Sites) { | ||||||
| 			sites[i] = s | 			sites[i] = s | ||||||
| 			i++ | 			i++ | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue