Change to newer toml library. Add untested support for xml, json and yaml config file formats.

This commit is contained in:
David Newhall II 2019-06-21 03:58:05 -07:00
parent 5f7b2bf05c
commit ff2ff0f5d5
6 changed files with 48 additions and 42 deletions

2
.gitignore vendored
View File

@ -1,9 +1,11 @@
/up.conf /up.conf
/unifi-poller /unifi-poller
/unifi-poller*.gz /unifi-poller*.gz
/unifi-poller*.zip
/unifi-poller*.1 /unifi-poller*.1
/unifi-poller*.deb /unifi-poller*.deb
/unifi-poller*.rpm /unifi-poller*.rpm
/unifi-poller.exe
/unifi-poller.macos /unifi-poller.macos
/unifi-poller.linux /unifi-poller.linux
/unifi-poller.rb /unifi-poller.rb

38
Gopkg.lock generated
View File

@ -1,6 +1,14 @@
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
digest = "1:9f3b30d9f8e0d7040f729b82dcbc8f0dead820a133b3147ce355fc451f32d761"
name = "github.com/BurntSushi/toml"
packages = ["."]
pruneopts = "UT"
revision = "3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005"
version = "v0.3.1"
[[projects]] [[projects]]
digest = "1:28ef1378055e34f154c8efcd8863a3e53a276c58cc7fc0d0a32d6b9eed6f6cfc" digest = "1:28ef1378055e34f154c8efcd8863a3e53a276c58cc7fc0d0a32d6b9eed6f6cfc"
name = "github.com/golift/unifi" name = "github.com/golift/unifi"
@ -21,25 +29,6 @@
pruneopts = "UT" pruneopts = "UT"
revision = "8ff2fc3824fcb533795f9a2f233275f0bb18d6c5" revision = "8ff2fc3824fcb533795f9a2f233275f0bb18d6c5"
[[projects]]
digest = "1:b56c589214f01a5601e0821387db484617392d0042f26234bf2da853a2f498a1"
name = "github.com/naoina/go-stringutil"
packages = ["."]
pruneopts = "UT"
revision = "6b638e95a32d0c1131db0e7fe83775cbea4a0d0b"
version = "v0.1.0"
[[projects]]
digest = "1:f58c3d0e46b64878d00652fedba24ee879725191ab919dca7b62586859281c04"
name = "github.com/naoina/toml"
packages = [
".",
"ast",
]
pruneopts = "UT"
revision = "e6f5723bf2a66af014955e0888881314cf294129"
version = "v0.1.1"
[[projects]] [[projects]]
digest = "1:cf31692c14422fa27c83a05292eb5cbe0fb2775972e8f1f8446a71549bd8980b" digest = "1:cf31692c14422fa27c83a05292eb5cbe0fb2775972e8f1f8446a71549bd8980b"
name = "github.com/pkg/errors" name = "github.com/pkg/errors"
@ -56,15 +45,24 @@
revision = "298182f68c66c05229eb03ac171abe6e309ee79a" revision = "298182f68c66c05229eb03ac171abe6e309ee79a"
version = "v1.0.3" version = "v1.0.3"
[[projects]]
digest = "1:4d2e5a73dc1500038e504a8d78b986630e3626dc027bc030ba5c75da257cdb96"
name = "gopkg.in/yaml.v2"
packages = ["."]
pruneopts = "UT"
revision = "51d6538a90f86fe93ac480b35f37b2be17fef232"
version = "v2.2.2"
[solve-meta] [solve-meta]
analyzer-name = "dep" analyzer-name = "dep"
analyzer-version = 1 analyzer-version = 1
input-imports = [ input-imports = [
"github.com/BurntSushi/toml",
"github.com/golift/unifi", "github.com/golift/unifi",
"github.com/influxdata/influxdb1-client/v2", "github.com/influxdata/influxdb1-client/v2",
"github.com/naoina/toml",
"github.com/pkg/errors", "github.com/pkg/errors",
"github.com/spf13/pflag", "github.com/spf13/pflag",
"gopkg.in/yaml.v2",
] ]
solver-name = "gps-cdcl" solver-name = "gps-cdcl"
solver-version = 1 solver-version = 1

View File

@ -24,10 +24,6 @@
# go-tests = true # go-tests = true
# unused-packages = true # unused-packages = true
[[constraint]]
name = "github.com/naoina/toml"
version = "0.1.1"
[prune] [prune]
go-tests = true go-tests = true
unused-packages = true unused-packages = true

View File

@ -1,7 +1,6 @@
package unifipoller package unifipoller
import ( import (
"strings"
"time" "time"
"github.com/golift/unifi" "github.com/golift/unifi"
@ -67,14 +66,10 @@ type Config struct {
} }
// Dur is used to UnmarshalTOML into a time.Duration value. // Dur is used to UnmarshalTOML into a time.Duration value.
type Dur struct{ value time.Duration } type Dur struct{ time.Duration }
// UnmarshalTOML parses a duration type from a config file. // UnmarshalText parses a duration type from a config file.
func (v *Dur) UnmarshalTOML(data []byte) error { func (d *Dur) UnmarshalText(data []byte) (err error) {
unquoted := strings.Trim(string(data), `"`) d.Duration, err = time.ParseDuration(string(data))
dur, err := time.ParseDuration(unquoted) return
if err == nil {
v.value = dur
}
return err
} }

View File

@ -1,16 +1,20 @@
package unifipoller package unifipoller
import ( import (
"encoding/json"
"encoding/xml"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"log" "log"
"os" "os"
"strings"
"github.com/BurntSushi/toml"
"github.com/golift/unifi" "github.com/golift/unifi"
influx "github.com/influxdata/influxdb1-client/v2" influx "github.com/influxdata/influxdb1-client/v2"
"github.com/naoina/toml"
"github.com/pkg/errors" "github.com/pkg/errors"
flag "github.com/spf13/pflag" flag "github.com/spf13/pflag"
yaml "gopkg.in/yaml.v2"
) )
// ParseFlags runs the parser. // ParseFlags runs the parser.
@ -28,7 +32,7 @@ func (u *UnifiPoller) ParseFlags(args []string) {
} }
// GetConfig parses and returns our configuration data. // GetConfig parses and returns our configuration data.
func (u *UnifiPoller) GetConfig() error { func (u *UnifiPoller) GetConfig() (err error) {
// Preload our defaults. // Preload our defaults.
u.Config = &Config{ u.Config = &Config{
InfluxURL: defaultInfxURL, InfluxURL: defaultInfxURL,
@ -38,15 +42,26 @@ func (u *UnifiPoller) GetConfig() error {
UnifiUser: defaultUnifUser, UnifiUser: defaultUnifUser,
UnifiPass: os.Getenv("UNIFI_PASSWORD"), UnifiPass: os.Getenv("UNIFI_PASSWORD"),
UnifiBase: defaultUnifURL, UnifiBase: defaultUnifURL,
Interval: Dur{value: defaultInterval}, Interval: Dur{defaultInterval},
Sites: []string{"default"}, Sites: []string{"default"},
} }
if buf, err := ioutil.ReadFile(u.ConfigFile); err != nil { var buf []byte
switch buf, err = ioutil.ReadFile(u.ConfigFile); {
case err != nil:
return err return err
// This is where the defaults in the config variable are overwritten. default:
} else if err := toml.Unmarshal(buf, u.Config); err != nil { err = toml.Unmarshal(buf, u.Config)
case strings.HasSuffix(u.ConfigFile, ".json"):
err = json.Unmarshal(buf, u.Config)
case strings.HasSuffix(u.ConfigFile, ".xml"):
err = xml.Unmarshal(buf, u.Config)
case strings.HasSuffix(u.ConfigFile, ".yaml"):
err = yaml.Unmarshal(buf, u.Config)
}
if err != nil {
return err return err
} }
if u.DumpJSON != "" { if u.DumpJSON != "" {
u.Quiet = true u.Quiet = true
} }

View File

@ -38,8 +38,8 @@ FIRST:
// PollController runs forever, polling unifi, and pushing to influx. // PollController runs forever, polling unifi, and pushing to influx.
func (u *UnifiPoller) PollController() error { func (u *UnifiPoller) PollController() error {
log.Println("[INFO] Everything checks out! Poller started, interval:", u.Interval.value) log.Println("[INFO] Everything checks out! Poller started, interval:", u.Interval.Round(time.Second))
ticker := time.NewTicker(u.Interval.value) ticker := time.NewTicker(u.Interval.Round(time.Second))
var err error var err error
for range ticker.C { for range ticker.C {
m := &Metrics{} m := &Metrics{}