diff --git a/integrations/influxunifi/clients.go b/integrations/influxunifi/clients.go index 84b03954..bc80baa3 100644 --- a/integrations/influxunifi/clients.go +++ b/integrations/influxunifi/clients.go @@ -78,7 +78,7 @@ type totalsDPImap map[string]map[string]map[string]unifi.DPIData func (u *InfluxUnifi) batchClientDPI(r report, v interface{}, appTotal, catTotal totalsDPImap) { s, ok := v.(*unifi.DPITable) if !ok { - u.Collector.LogErrorf("invalid type given to batchClientDPI: %T", v) + u.LogErrorf("invalid type given to batchClientDPI: %T", v) return } diff --git a/integrations/influxunifi/go.mod b/integrations/influxunifi/go.mod index 2da7c27e..895d57d4 100644 --- a/integrations/influxunifi/go.mod +++ b/integrations/influxunifi/go.mod @@ -5,7 +5,8 @@ go 1.14 require ( github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 github.com/pkg/errors v0.9.1 - github.com/unifi-poller/poller v0.0.8-0.20200621214016-5d1ed3324a46 + github.com/unifi-poller/poller v0.0.8-0.20200626082958-a9a7092a5684 github.com/unifi-poller/unifi v0.0.6-0.20200625090439-421046871a37 + github.com/unifi-poller/webserver v0.0.0-20200628115531-e071827d7598 golift.io/cnfg v0.0.5 ) diff --git a/integrations/influxunifi/go.sum b/integrations/influxunifi/go.sum index 799338cf..f5293129 100644 --- a/integrations/influxunifi/go.sum +++ b/integrations/influxunifi/go.sum @@ -41,6 +41,8 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 h1:k3/6a1Shi7GGCp9QpyYuXsMM6ncTOjCzOE9Fd6CDA+Q= github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -106,6 +108,8 @@ github.com/unifi-poller/poller v0.0.8-0.20200621110949-33f1a1454d10 h1:1rGP4ISFp github.com/unifi-poller/poller v0.0.8-0.20200621110949-33f1a1454d10/go.mod h1:+Ppksi2wBCrByJke0B0lTutxFtKfv1zx6L1haALBrN4= github.com/unifi-poller/poller v0.0.8-0.20200621214016-5d1ed3324a46 h1:OhbVj3VVgbpUMQFSwD0NszDsbEL7DdbTcJuU+p9DwIM= github.com/unifi-poller/poller v0.0.8-0.20200621214016-5d1ed3324a46/go.mod h1:pJ/MeYaakLOOpbyc7s4zeZ92UzNK/rir5jkA7t5jIjo= +github.com/unifi-poller/poller v0.0.8-0.20200626082958-a9a7092a5684 h1:r1B8GoI47czgGnQ7WY89qlSKqSE1d1pQmcLfdXVW/+Y= +github.com/unifi-poller/poller v0.0.8-0.20200626082958-a9a7092a5684/go.mod h1:pJ/MeYaakLOOpbyc7s4zeZ92UzNK/rir5jkA7t5jIjo= github.com/unifi-poller/promunifi v0.0.9-0.20200620104707-26208eb4336b h1:HgmbS5cKfvw3x0ie6IV/FfhxNtKwAvICKxXL7gg2sgM= github.com/unifi-poller/promunifi v0.0.9-0.20200620104707-26208eb4336b/go.mod h1:jOcYehhsOrs4ctswSKEqGuqSgVBpConaWmRYskycbUc= github.com/unifi-poller/unifi v0.0.5-0.20200619092006-d24c776a42f5/go.mod h1:L1kMRH2buZhB31vZnRC1im7Tk/4uD3ET4biwl2faYy8= @@ -114,7 +118,10 @@ github.com/unifi-poller/unifi v0.0.5-0.20200621075746-253ccae7e106 h1:eKErSqWD65 github.com/unifi-poller/unifi v0.0.5-0.20200621075746-253ccae7e106/go.mod h1:L1kMRH2buZhB31vZnRC1im7Tk/4uD3ET4biwl2faYy8= github.com/unifi-poller/unifi v0.0.6-0.20200625090439-421046871a37 h1:T2y8JWkjZd1vz2ZKu4vmmAk9s6PUwupuTldwhfww5xY= github.com/unifi-poller/unifi v0.0.6-0.20200625090439-421046871a37/go.mod h1:L1kMRH2buZhB31vZnRC1im7Tk/4uD3ET4biwl2faYy8= +github.com/unifi-poller/webserver v0.0.0-20200628115531-e071827d7598 h1:Nmo1arOOln7V7YhjcwrT2AEFN0dl43tl5NgoNF4SgiA= +github.com/unifi-poller/webserver v0.0.0-20200628115531-e071827d7598/go.mod h1:rlM8tRx7wCxqj4+6ZkuFVt2voFoAlHhS/XTrHd7T57s= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= diff --git a/integrations/influxunifi/influxdb.go b/integrations/influxunifi/influxdb.go index 12e6ae44..e0f8ac19 100644 --- a/integrations/influxunifi/influxdb.go +++ b/integrations/influxunifi/influxdb.go @@ -6,6 +6,7 @@ import ( "crypto/tls" "io/ioutil" "log" + "strconv" "strings" "time" @@ -13,9 +14,13 @@ import ( "github.com/pkg/errors" "github.com/unifi-poller/poller" "github.com/unifi-poller/unifi" + "github.com/unifi-poller/webserver" "golift.io/cnfg" ) +// PluginName is the name of this plugin. +const PluginName = "influxdb" + const ( defaultInterval = 30 * time.Second minimumInterval = 10 * time.Second @@ -59,7 +64,7 @@ func init() { // nolint: gochecknoinits u := &InfluxUnifi{InfluxDB: &InfluxDB{}, LastCheck: time.Now()} poller.NewOutput(&poller.Output{ - Name: "influxdb", + Name: PluginName, Config: u.InfluxDB, Method: u.Run, }) @@ -75,24 +80,24 @@ func (u *InfluxUnifi) PollController() { for u.LastCheck = range ticker.C { metrics, err := u.Collector.Metrics(&poller.Filter{Name: "unifi"}) if err != nil { - u.Collector.LogErrorf("metric fetch for InfluxDB failed: %v", err) + u.LogErrorf("metric fetch for InfluxDB failed: %v", err) continue } events, err := u.Collector.Events(&poller.Filter{Name: "unifi", Dur: interval}) if err != nil { - u.Collector.LogErrorf("event fetch for InfluxDB failed: %v", err) + u.LogErrorf("event fetch for InfluxDB failed: %v", err) continue } report, err := u.ReportMetrics(metrics, events) if err != nil { // XXX: reset and re-auth? not sure.. - u.Collector.LogErrorf("%v", err) + u.LogErrorf("%v", err) continue } - u.Collector.Logf("UniFi Metrics Recorded. %v", report) + u.Logf("UniFi Metrics Recorded. %v", report) } } @@ -100,12 +105,11 @@ func (u *InfluxUnifi) PollController() { func (u *InfluxUnifi) Run(c poller.Collect) error { var err error - if u.Config == nil || u.Disable { - c.Logf("InfluxDB config missing (or disabled), InfluxDB output disabled!") + if u.Collector = c; u.Config == nil || u.Disable { + u.Logf("InfluxDB config missing (or disabled), InfluxDB output disabled!") return nil } - u.Collector = c u.setConfigDefaults() u.influx, err = influx.NewHTTPClient(influx.HTTPConfig{ @@ -118,6 +122,10 @@ func (u *InfluxUnifi) Run(c poller.Collect) error { return err } + fake := *u.Config + fake.Pass = strconv.FormatBool(fake.Pass != "") + + webserver.UpdateOutput(&webserver.Output{Name: PluginName, Config: fake}) u.PollController() return nil @@ -156,7 +164,7 @@ func (u *InfluxUnifi) setConfigDefaults() { func (u *InfluxUnifi) getPassFromFile(filename string) string { b, err := ioutil.ReadFile(filename) if err != nil { - u.Collector.LogErrorf("Reading InfluxDB Password File: %v", err) + u.LogErrorf("Reading InfluxDB Password File: %v", err) } return strings.TrimSpace(string(b)) @@ -274,6 +282,6 @@ func (u *InfluxUnifi) switchExport(r report, v interface{}) { case *unifi.Anomaly: u.batchAnomaly(r, v) default: - u.Collector.LogErrorf("invalid export type: %T", v) + u.LogErrorf("invalid export type: %T", v) } } diff --git a/integrations/influxunifi/logger.go b/integrations/influxunifi/logger.go new file mode 100644 index 00000000..b3a92007 --- /dev/null +++ b/integrations/influxunifi/logger.go @@ -0,0 +1,38 @@ +package influxunifi + +import ( + "fmt" + "time" + + "github.com/unifi-poller/webserver" +) + +// Logf logs a message. +func (u *InfluxUnifi) Logf(msg string, v ...interface{}) { + webserver.NewInputEvent(PluginName, PluginName, &webserver.Event{ + Ts: time.Now(), + Msg: fmt.Sprintf(msg, v...), + Tags: map[string]string{"type": "info"}, + }) + u.Collector.Logf(msg, v...) +} + +// LogErrorf logs an error message. +func (u *InfluxUnifi) LogErrorf(msg string, v ...interface{}) { + webserver.NewInputEvent(PluginName, PluginName, &webserver.Event{ + Ts: time.Now(), + Msg: fmt.Sprintf(msg, v...), + Tags: map[string]string{"type": "error"}, + }) + u.Collector.LogErrorf(msg, v...) +} + +// LogDebugf logs a debug message. +func (u *InfluxUnifi) LogDebugf(msg string, v ...interface{}) { + webserver.NewInputEvent(PluginName, PluginName, &webserver.Event{ + Ts: time.Now(), + Msg: fmt.Sprintf(msg, v...), + Tags: map[string]string{"type": "debug"}, + }) + u.Collector.LogDebugf(msg, v...) +} diff --git a/integrations/influxunifi/site.go b/integrations/influxunifi/site.go index 0f2b8331..4a5a9852 100644 --- a/integrations/influxunifi/site.go +++ b/integrations/influxunifi/site.go @@ -60,7 +60,7 @@ func (u *InfluxUnifi) batchSite(r report, s *unifi.Site) { func (u *InfluxUnifi) batchSiteDPI(r report, v interface{}) { s, ok := v.(*unifi.DPITable) if !ok { - u.Collector.LogErrorf("invalid type given to batchSiteDPI: %T", v) + u.LogErrorf("invalid type given to batchSiteDPI: %T", v) return }