fix a bug and send a few more pieces into the mix
This commit is contained in:
parent
e762929221
commit
d63a91655e
|
|
@ -99,19 +99,14 @@ func (u *UnifiPoller) Run() (err error) {
|
||||||
|
|
||||||
case "prometheus", "exporter":
|
case "prometheus", "exporter":
|
||||||
u.Logf("Exporting Measurements at https://%s/metrics for Prometheus", u.Config.HTTPListen)
|
u.Logf("Exporting Measurements at https://%s/metrics for Prometheus", u.Config.HTTPListen)
|
||||||
u.Config.Mode = "http exporter"
|
http.Handle("/metrics", promhttp.Handler())
|
||||||
http.Handle("/metrics", http.HandlerFunc(u.PromHandler))
|
|
||||||
prometheus.MustRegister(promunifi.NewUnifiCollector(promunifi.UnifiCollectorOpts{
|
prometheus.MustRegister(promunifi.NewUnifiCollector(promunifi.UnifiCollectorOpts{
|
||||||
|
Namespace: "unifi",
|
||||||
CollectFn: u.ExportMetrics,
|
CollectFn: u.ExportMetrics,
|
||||||
ReportErrors: true,
|
ReportErrors: true,
|
||||||
Namespace: "unifi",
|
|
||||||
CollectIDS: true,
|
CollectIDS: true,
|
||||||
}))
|
}))
|
||||||
err = http.ListenAndServe(u.Config.HTTPListen, nil)
|
return http.ListenAndServe(u.Config.HTTPListen, nil)
|
||||||
if err != http.ErrServerClosed {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if err = u.GetInfluxDB(); err != nil {
|
if err = u.GetInfluxDB(); err != nil {
|
||||||
|
|
@ -139,12 +134,6 @@ func (u *UnifiPoller) GetInfluxDB() (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PromHandler logs /metrics requests and serves them with the prometheus handler.
|
|
||||||
func (u *UnifiPoller) PromHandler(w http.ResponseWriter, r *http.Request) {
|
|
||||||
u.LogDebugf("/metrics endpoint polled by %v", r.RemoteAddr)
|
|
||||||
promhttp.Handler().ServeHTTP(w, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetUnifi returns a UniFi controller interface.
|
// GetUnifi returns a UniFi controller interface.
|
||||||
func (u *UnifiPoller) GetUnifi() (err error) {
|
func (u *UnifiPoller) GetUnifi() (err error) {
|
||||||
// Create an authenticated session to the Unifi Controller.
|
// Create an authenticated session to the Unifi Controller.
|
||||||
|
|
|
||||||
|
|
@ -100,18 +100,14 @@ func (u *UnifiPoller) ExportMetrics() *metrics.Metrics {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
metrics, err := u.CollectMetrics()
|
|
||||||
|
m, err := u.CollectMetrics()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
u.LogErrorf("collecting metrics: %v", err)
|
u.LogErrorf("collecting metrics: %v", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
u.AugmentMetrics(metrics)
|
u.AugmentMetrics(m)
|
||||||
u.LogExportReport(metrics)
|
|
||||||
return metrics
|
|
||||||
}
|
|
||||||
|
|
||||||
// LogExportReport writes a log line after exporting metrics via HTTP.
|
|
||||||
func (u *UnifiPoller) LogExportReport(m *metrics.Metrics) {
|
|
||||||
idsMsg := ""
|
idsMsg := ""
|
||||||
if u.Config.CollectIDS {
|
if u.Config.CollectIDS {
|
||||||
idsMsg = fmt.Sprintf(", IDS Events: %d, ", len(m.IDSList))
|
idsMsg = fmt.Sprintf(", IDS Events: %d, ", len(m.IDSList))
|
||||||
|
|
@ -120,6 +116,8 @@ func (u *UnifiPoller) LogExportReport(m *metrics.Metrics) {
|
||||||
"Wireless APs: %d, Gateways: %d, Switches: %d%s",
|
"Wireless APs: %d, Gateways: %d, Switches: %d%s",
|
||||||
len(m.Sites), len(m.Clients), len(m.UAPs),
|
len(m.Sites), len(m.Clients), len(m.UAPs),
|
||||||
len(m.UDMs)+len(m.USGs), len(m.USWs), idsMsg)
|
len(m.UDMs)+len(m.USGs), len(m.USWs), idsMsg)
|
||||||
|
|
||||||
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
// CollectMetrics grabs all the measurements from a UniFi controller and returns them.
|
// CollectMetrics grabs all the measurements from a UniFi controller and returns them.
|
||||||
|
|
|
||||||
|
|
@ -29,12 +29,12 @@ type UnifiCollectorOpts struct {
|
||||||
type unifiCollector struct {
|
type unifiCollector struct {
|
||||||
opts UnifiCollectorOpts
|
opts UnifiCollectorOpts
|
||||||
Client *client
|
Client *client
|
||||||
// UAP *UAP
|
UAP *uap
|
||||||
// USG *USG
|
USG *usg
|
||||||
// USW *USW
|
USW *usw
|
||||||
// UDM *UDM
|
UDM *udm
|
||||||
// IDS *IDS
|
IDS *ids
|
||||||
// Site *Site
|
Site *site
|
||||||
}
|
}
|
||||||
|
|
||||||
type metricExports struct {
|
type metricExports struct {
|
||||||
|
|
@ -53,12 +53,12 @@ func NewUnifiCollector(opts UnifiCollectorOpts) prometheus.Collector {
|
||||||
return &unifiCollector{
|
return &unifiCollector{
|
||||||
opts: opts,
|
opts: opts,
|
||||||
Client: descClient(opts.Namespace),
|
Client: descClient(opts.Namespace),
|
||||||
// UAP: descUAP(opts.Namespace),
|
UAP: descUAP(opts.Namespace),
|
||||||
// USG: descUSG(opts.Namespace),
|
USG: descUSG(opts.Namespace),
|
||||||
// USW: descUSW(opts.Namespace),
|
USW: descUSW(opts.Namespace),
|
||||||
// UDM: descUDM(opts.Namespace),
|
UDM: descUDM(opts.Namespace),
|
||||||
// Site: descSite(opts.Namespace),
|
Site: descSite(opts.Namespace),
|
||||||
// IDS: descIDS(opts.Namespace),
|
IDS: descIDS(opts.Namespace),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,7 +66,8 @@ func NewUnifiCollector(opts UnifiCollectorOpts) prometheus.Collector {
|
||||||
// metric descriptions that this packages produces.
|
// metric descriptions that this packages produces.
|
||||||
func (u *unifiCollector) Describe(ch chan<- *prometheus.Desc) {
|
func (u *unifiCollector) Describe(ch chan<- *prometheus.Desc) {
|
||||||
describe := func(from interface{}) {
|
describe := func(from interface{}) {
|
||||||
v := reflect.ValueOf(from)
|
v := reflect.Indirect(reflect.ValueOf(from))
|
||||||
|
|
||||||
// Loop each struct member and send it to the provided channel.
|
// Loop each struct member and send it to the provided channel.
|
||||||
for i := 0; i < v.NumField(); i++ {
|
for i := 0; i < v.NumField(); i++ {
|
||||||
desc, ok := v.Field(i).Interface().(*prometheus.Desc)
|
desc, ok := v.Field(i).Interface().(*prometheus.Desc)
|
||||||
|
|
@ -76,20 +77,23 @@ func (u *unifiCollector) Describe(ch chan<- *prometheus.Desc) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
describe(u.Client)
|
describe(u.Client)
|
||||||
// describe(u.UAP)
|
describe(u.UAP)
|
||||||
// describe(u.USG)
|
describe(u.USG)
|
||||||
// describe(u.USW)
|
describe(u.USW)
|
||||||
// describe(u.UDM)
|
describe(u.UDM)
|
||||||
// describe(u.Site)
|
describe(u.Site)
|
||||||
// if u.opts.CollectIDS {
|
if u.opts.CollectIDS {
|
||||||
// describe(u.IDS)
|
describe(u.IDS)
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collect satisifes the prometheus Collector. This runs the input method to get
|
// Collect satisifes the prometheus Collector. This runs the input method to get
|
||||||
// the current metrics (from another package) then exports them for prometheus.
|
// the current metrics (from another package) then exports them for prometheus.
|
||||||
func (u *unifiCollector) Collect(ch chan<- prometheus.Metric) {
|
func (u *unifiCollector) Collect(ch chan<- prometheus.Metric) {
|
||||||
m := u.opts.CollectFn()
|
m := u.opts.CollectFn()
|
||||||
|
if m == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
for _, asset := range m.Clients {
|
for _, asset := range m.Clients {
|
||||||
u.export(ch, u.exportClient(asset), m.TS)
|
u.export(ch, u.exportClient(asset), m.TS)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ import (
|
||||||
"golift.io/unifi"
|
"golift.io/unifi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ids struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func descIDS(ns string) *ids {
|
||||||
|
return &ids{}
|
||||||
|
}
|
||||||
|
|
||||||
// exportIDS exports Intrusion Detection System Data
|
// exportIDS exports Intrusion Detection System Data
|
||||||
func (u *unifiCollector) exportIDS(i *unifi.IDS) []*metricExports {
|
func (u *unifiCollector) exportIDS(i *unifi.IDS) []*metricExports {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ import (
|
||||||
"golift.io/unifi"
|
"golift.io/unifi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type site struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func descSite(ns string) *site {
|
||||||
|
return &site{}
|
||||||
|
}
|
||||||
|
|
||||||
// exportSite exports Network Site Data
|
// exportSite exports Network Site Data
|
||||||
func (u *unifiCollector) exportSite(s *unifi.Site) []*metricExports {
|
func (u *unifiCollector) exportSite(s *unifi.Site) []*metricExports {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ import (
|
||||||
"golift.io/unifi"
|
"golift.io/unifi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type uap struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func descUAP(ns string) *uap {
|
||||||
|
return &uap{}
|
||||||
|
}
|
||||||
|
|
||||||
// exportUAP exports Access Point Data
|
// exportUAP exports Access Point Data
|
||||||
func (u *unifiCollector) exportUAP(a *unifi.UAP) []*metricExports {
|
func (u *unifiCollector) exportUAP(a *unifi.UAP) []*metricExports {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ import (
|
||||||
"golift.io/unifi"
|
"golift.io/unifi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type udm struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func descUDM(ns string) *udm {
|
||||||
|
return &udm{}
|
||||||
|
}
|
||||||
|
|
||||||
// exportUDM exports UniFi Dream Machine (and Pro) Data
|
// exportUDM exports UniFi Dream Machine (and Pro) Data
|
||||||
func (u *unifiCollector) exportUDM(d *unifi.UDM) []*metricExports {
|
func (u *unifiCollector) exportUDM(d *unifi.UDM) []*metricExports {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ import (
|
||||||
"golift.io/unifi"
|
"golift.io/unifi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type usg struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func descUSG(ns string) *usg {
|
||||||
|
return &usg{}
|
||||||
|
}
|
||||||
|
|
||||||
// exportUSG Exports Security Gateway Data
|
// exportUSG Exports Security Gateway Data
|
||||||
func (u *unifiCollector) exportUSG(s *unifi.USG) []*metricExports {
|
func (u *unifiCollector) exportUSG(s *unifi.USG) []*metricExports {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ import (
|
||||||
"golift.io/unifi"
|
"golift.io/unifi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type usw struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func descUSW(ns string) *usw {
|
||||||
|
return &usw{}
|
||||||
|
}
|
||||||
|
|
||||||
// exportUSW exports Network Switch Data
|
// exportUSW exports Network Switch Data
|
||||||
func (u *unifiCollector) exportUSW(s *unifi.USW) []*metricExports {
|
func (u *unifiCollector) exportUSW(s *unifi.USW) []*metricExports {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue