Change to newer toml library. Add untested support for xml, json and yaml config file formats.
This commit is contained in:
parent
5f7b2bf05c
commit
ff2ff0f5d5
|
|
@ -1,9 +1,11 @@
|
|||
/up.conf
|
||||
/unifi-poller
|
||||
/unifi-poller*.gz
|
||||
/unifi-poller*.zip
|
||||
/unifi-poller*.1
|
||||
/unifi-poller*.deb
|
||||
/unifi-poller*.rpm
|
||||
/unifi-poller.exe
|
||||
/unifi-poller.macos
|
||||
/unifi-poller.linux
|
||||
/unifi-poller.rb
|
||||
|
|
|
|||
|
|
@ -1,6 +1,14 @@
|
|||
# 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]]
|
||||
digest = "1:28ef1378055e34f154c8efcd8863a3e53a276c58cc7fc0d0a32d6b9eed6f6cfc"
|
||||
name = "github.com/golift/unifi"
|
||||
|
|
@ -21,25 +29,6 @@
|
|||
pruneopts = "UT"
|
||||
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]]
|
||||
digest = "1:cf31692c14422fa27c83a05292eb5cbe0fb2775972e8f1f8446a71549bd8980b"
|
||||
name = "github.com/pkg/errors"
|
||||
|
|
@ -56,15 +45,24 @@
|
|||
revision = "298182f68c66c05229eb03ac171abe6e309ee79a"
|
||||
version = "v1.0.3"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:4d2e5a73dc1500038e504a8d78b986630e3626dc027bc030ba5c75da257cdb96"
|
||||
name = "gopkg.in/yaml.v2"
|
||||
packages = ["."]
|
||||
pruneopts = "UT"
|
||||
revision = "51d6538a90f86fe93ac480b35f37b2be17fef232"
|
||||
version = "v2.2.2"
|
||||
|
||||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
input-imports = [
|
||||
"github.com/BurntSushi/toml",
|
||||
"github.com/golift/unifi",
|
||||
"github.com/influxdata/influxdb1-client/v2",
|
||||
"github.com/naoina/toml",
|
||||
"github.com/pkg/errors",
|
||||
"github.com/spf13/pflag",
|
||||
"gopkg.in/yaml.v2",
|
||||
]
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
|
|
|
|||
|
|
@ -24,10 +24,6 @@
|
|||
# go-tests = true
|
||||
# unused-packages = true
|
||||
|
||||
[[constraint]]
|
||||
name = "github.com/naoina/toml"
|
||||
version = "0.1.1"
|
||||
|
||||
[prune]
|
||||
go-tests = true
|
||||
unused-packages = true
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package unifipoller
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/golift/unifi"
|
||||
|
|
@ -67,14 +66,10 @@ type Config struct {
|
|||
}
|
||||
|
||||
// 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.
|
||||
func (v *Dur) UnmarshalTOML(data []byte) error {
|
||||
unquoted := strings.Trim(string(data), `"`)
|
||||
dur, err := time.ParseDuration(unquoted)
|
||||
if err == nil {
|
||||
v.value = dur
|
||||
}
|
||||
return err
|
||||
// UnmarshalText parses a duration type from a config file.
|
||||
func (d *Dur) UnmarshalText(data []byte) (err error) {
|
||||
d.Duration, err = time.ParseDuration(string(data))
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,20 @@
|
|||
package unifipoller
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/BurntSushi/toml"
|
||||
"github.com/golift/unifi"
|
||||
influx "github.com/influxdata/influxdb1-client/v2"
|
||||
"github.com/naoina/toml"
|
||||
"github.com/pkg/errors"
|
||||
flag "github.com/spf13/pflag"
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
// ParseFlags runs the parser.
|
||||
|
|
@ -28,7 +32,7 @@ func (u *UnifiPoller) ParseFlags(args []string) {
|
|||
}
|
||||
|
||||
// GetConfig parses and returns our configuration data.
|
||||
func (u *UnifiPoller) GetConfig() error {
|
||||
func (u *UnifiPoller) GetConfig() (err error) {
|
||||
// Preload our defaults.
|
||||
u.Config = &Config{
|
||||
InfluxURL: defaultInfxURL,
|
||||
|
|
@ -38,15 +42,26 @@ func (u *UnifiPoller) GetConfig() error {
|
|||
UnifiUser: defaultUnifUser,
|
||||
UnifiPass: os.Getenv("UNIFI_PASSWORD"),
|
||||
UnifiBase: defaultUnifURL,
|
||||
Interval: Dur{value: defaultInterval},
|
||||
Interval: Dur{defaultInterval},
|
||||
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
|
||||
// This is where the defaults in the config variable are overwritten.
|
||||
} else if err := toml.Unmarshal(buf, u.Config); err != nil {
|
||||
default:
|
||||
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
|
||||
}
|
||||
|
||||
if u.DumpJSON != "" {
|
||||
u.Quiet = true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@ FIRST:
|
|||
|
||||
// PollController runs forever, polling unifi, and pushing to influx.
|
||||
func (u *UnifiPoller) PollController() error {
|
||||
log.Println("[INFO] Everything checks out! Poller started, interval:", u.Interval.value)
|
||||
ticker := time.NewTicker(u.Interval.value)
|
||||
log.Println("[INFO] Everything checks out! Poller started, interval:", u.Interval.Round(time.Second))
|
||||
ticker := time.NewTicker(u.Interval.Round(time.Second))
|
||||
var err error
|
||||
for range ticker.C {
|
||||
m := &Metrics{}
|
||||
|
|
|
|||
Loading…
Reference in New Issue