Eliminate global variables.

This commit is contained in:
DN2 2018-04-20 13:33:51 -07:00
parent d61795eced
commit d0f1899311
1 changed files with 8 additions and 15 deletions

23
main.go
View File

@ -15,11 +15,6 @@ import (
influx "github.com/influxdata/influxdb/client/v2" influx "github.com/influxdata/influxdb/client/v2"
) )
var (
unifi *http.Client
stats influx.Client
)
// Response marshalls the payload from the controller. // Response marshalls the payload from the controller.
type Response struct { type Response struct {
Data []Client Data []Client
@ -154,20 +149,19 @@ func (c Client) Point() *influx.Point {
} }
func main() { func main() {
var err error
tickRate := os.Getenv("TICK_RATE") tickRate := os.Getenv("TICK_RATE")
interval, err := time.ParseDuration(tickRate) interval, err := time.ParseDuration(tickRate)
if err != nil { if err != nil {
panic(err) panic(err)
} }
unifi, err = login() unifi, err := login()
if err != nil { if err != nil {
panic(err) panic(err)
} }
log.Println("Successfully authenticated to Unifi Controller!")
database := os.Getenv("INFLUXDB_DATABASE") database := os.Getenv("INFLUXDB_DATABASE")
stats, err = influx.NewHTTPClient(influx.HTTPConfig{ stats, err := influx.NewHTTPClient(influx.HTTPConfig{
Addr: os.Getenv("INFLUXDB_ADDR"), Addr: os.Getenv("INFLUXDB_ADDR"),
Username: os.Getenv("INFLUXDB_USERNAME"), Username: os.Getenv("INFLUXDB_USERNAME"),
Password: os.Getenv("INFLUXDB_PASSWORD"), Password: os.Getenv("INFLUXDB_PASSWORD"),
@ -176,16 +170,15 @@ func main() {
panic(err) panic(err)
} }
log.Printf("Starting to poll Unifi every %+v\n", interval) log.Printf("Polling Unifi Controller, interval: %+v\n", interval)
for { for {
devices, err := fetch() devices, err := fetch(unifi)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} else { } else {
bp, _ := influx.NewBatchPoints(influx.BatchPointsConfig{ bp, _ := influx.NewBatchPoints(influx.BatchPointsConfig{
Database: database, Database: database,
}) })
for _, device := range devices { for _, device := range devices {
bp.AddPoint(device.Point()) bp.AddPoint(device.Point())
} }
@ -194,14 +187,14 @@ func main() {
log.Println(err) log.Println(err)
} }
log.Println("Logged client state...") log.Printf("Logged client state. Devices: %v", len(devices))
} }
time.Sleep(interval) time.Sleep(interval)
} }
} }
func fetch() ([]Client, error) { func fetch(unifi *http.Client) ([]Client, error) {
url := "https://" + os.Getenv("UNIFI_ADDR") + ":" + os.Getenv("UNIFI_PORT") + "/api/s/default/stat/sta" url := "https://" + os.Getenv("UNIFI_ADDR") + ":" + os.Getenv("UNIFI_PORT") + "/api/s/default/stat/sta"
req, err := http.NewRequest("GET", url, nil) req, err := http.NewRequest("GET", url, nil)
if err != nil { if err != nil {
@ -215,7 +208,7 @@ func fetch() ([]Client, error) {
defer func() { defer func() {
if err = resp.Body.Close(); err != nil { if err = resp.Body.Close(); err != nil {
log.Println("Error closing http respond body:", err) log.Println("Closing HTTP response:", err)
} }
}() }()
body, _ := ioutil.ReadAll(resp.Body) body, _ := ioutil.ReadAll(resp.Body)