From 70aae2872394acb31d77a98bf572c5f59fb5808a Mon Sep 17 00:00:00 2001 From: davidnewhall2 Date: Thu, 28 Nov 2019 20:17:37 -0800 Subject: [PATCH] cleanup --- promunifi/collector.go | 17 ++++--- promunifi/site.go | 112 ++++++++++++++++++----------------------- promunifi/uap.go | 88 +++++++------------------------- promunifi/udm.go | 99 +++++++++++++++++++++++++++++------- promunifi/usg.go | 78 +++++++--------------------- promunifi/usw.go | 82 +++++++----------------------- 6 files changed, 196 insertions(+), 280 deletions(-) diff --git a/promunifi/collector.go b/promunifi/collector.go index 960779eb..7b1842b5 100644 --- a/promunifi/collector.go +++ b/promunifi/collector.go @@ -38,6 +38,7 @@ type UnifiCollectorCnfg struct { type unifiCollector struct { Config UnifiCollectorCnfg Client *uclient + Device *unifiDevice UAP *uap USG *usg USW *usw @@ -70,14 +71,17 @@ func NewUnifiCollector(opts UnifiCollectorCnfg) prometheus.Collector { if opts.CollectFn == nil { panic("nil collector function") } - + if opts.Namespace += "_"; opts.Namespace == "_" { + opts.Namespace = "" + } return &unifiCollector{ Config: opts, - Client: descClient(opts.Namespace), - UAP: descUAP(opts.Namespace), - USG: descUSG(opts.Namespace), - USW: descUSW(opts.Namespace), - Site: descSite(opts.Namespace), + Client: descClient(opts.Namespace + "client_"), + Device: descDevice(opts.Namespace + "device_"), // stats for all device types. + UAP: descUAP(opts.Namespace + "device_"), + USG: descUSG(opts.Namespace + "device_"), + USW: descUSW(opts.Namespace + "device_"), + Site: descSite(opts.Namespace + "site_"), } } @@ -97,6 +101,7 @@ func (u *unifiCollector) Describe(ch chan<- *prometheus.Desc) { } describe(u.Client) + describe(u.Device) describe(u.UAP) describe(u.USG) describe(u.USW) diff --git a/promunifi/site.go b/promunifi/site.go index d39994e8..e810c16e 100644 --- a/promunifi/site.go +++ b/promunifi/site.go @@ -5,16 +5,6 @@ import ( "golift.io/unifi" ) -// Each site has five subsystems. -// Some of them share data, but generally each one has its own data set. -const ( - subsystemLAN = "lan" - subsystemVPN = "vpn" - subsystemWWW = "www" - subsystemWLAN = "wlan" - subsystemWAN = "wan" -) - type site struct { NumUser *prometheus.Desc NumGuest *prometheus.Desc @@ -44,11 +34,7 @@ type site struct { } func descSite(ns string) *site { - if ns += "_site_"; ns == "_site_" { - ns = "site_" - } labels := []string{"subsystem", "status", "name", "desc", "site_name"} - return &site{ NumUser: prometheus.NewDesc(ns+"users", "Number of Users", labels, nil), NumGuest: prometheus.NewDesc(ns+"guests", "Number of Guests", labels, nil), @@ -95,13 +81,58 @@ func (u *unifiCollector) exportSite(r *Report, s *unifi.Site) { labels := []string{s.Name, s.Desc, s.SiteName} for _, h := range s.Health { l := append([]string{h.Subsystem, h.Status}, labels...) - - if h.Subsystem != subsystemVPN { + switch h.Subsystem { + case "www": r.send([]*metricExports{ {u.Site.TxBytesR, prometheus.GaugeValue, h.TxBytesR, l}, {u.Site.RxBytesR, prometheus.GaugeValue, h.RxBytesR, l}, + {u.Site.Uptime, prometheus.GaugeValue, h.Latency, l}, + {u.Site.Latency, prometheus.GaugeValue, h.Latency.Val / 1000, l}, + {u.Site.XputUp, prometheus.GaugeValue, h.XputUp, l}, + {u.Site.XputDown, prometheus.GaugeValue, h.XputDown, l}, + {u.Site.SpeedtestPing, prometheus.GaugeValue, h.SpeedtestPing, l}, + {u.Site.Drops, prometheus.CounterValue, h.Drops, l}, }) - } else { + + case "wlan": + r.send([]*metricExports{ + {u.Site.TxBytesR, prometheus.GaugeValue, h.TxBytesR, l}, + {u.Site.RxBytesR, prometheus.GaugeValue, h.RxBytesR, l}, + {u.Site.NumAdopted, prometheus.GaugeValue, h.NumAdopted, l}, + {u.Site.NumDisconnected, prometheus.GaugeValue, h.NumDisconnected, l}, + {u.Site.NumPending, prometheus.GaugeValue, h.NumPending, l}, + {u.Site.NumUser, prometheus.GaugeValue, h.NumUser, l}, + {u.Site.NumGuest, prometheus.GaugeValue, h.NumGuest, l}, + {u.Site.NumIot, prometheus.GaugeValue, h.NumIot, l}, + {u.Site.NumAp, prometheus.GaugeValue, h.NumAp, l}, + {u.Site.NumDisabled, prometheus.GaugeValue, h.NumDisabled, l}, + }) + + case "wan": + r.send([]*metricExports{ + {u.Site.TxBytesR, prometheus.GaugeValue, h.TxBytesR, l}, + {u.Site.RxBytesR, prometheus.GaugeValue, h.RxBytesR, l}, + {u.Site.NumAdopted, prometheus.GaugeValue, h.NumAdopted, l}, + {u.Site.NumDisconnected, prometheus.GaugeValue, h.NumDisconnected, l}, + {u.Site.NumPending, prometheus.GaugeValue, h.NumPending, l}, + {u.Site.NumGw, prometheus.GaugeValue, h.NumGw, l}, + {u.Site.NumSta, prometheus.GaugeValue, h.NumSta, l}, + }) + + case "lan": + r.send([]*metricExports{ + {u.Site.TxBytesR, prometheus.GaugeValue, h.TxBytesR, l}, + {u.Site.RxBytesR, prometheus.GaugeValue, h.RxBytesR, l}, + {u.Site.NumAdopted, prometheus.GaugeValue, h.NumAdopted, l}, + {u.Site.NumDisconnected, prometheus.GaugeValue, h.NumDisconnected, l}, + {u.Site.NumPending, prometheus.GaugeValue, h.NumPending, l}, + {u.Site.NumUser, prometheus.GaugeValue, h.NumUser, l}, + {u.Site.NumGuest, prometheus.GaugeValue, h.NumGuest, l}, + {u.Site.NumIot, prometheus.GaugeValue, h.NumIot, l}, + {u.Site.NumSw, prometheus.GaugeValue, h.NumSw, l}, + }) + + case "vpn": r.send([]*metricExports{ {u.Site.RemoteUserNumActive, prometheus.GaugeValue, h.RemoteUserNumActive, l}, {u.Site.RemoteUserNumInactive, prometheus.GaugeValue, h.RemoteUserNumInactive, l}, @@ -111,52 +142,5 @@ func (u *unifiCollector) exportSite(r *Report, s *unifi.Site) { {u.Site.RemoteUserTxPackets, prometheus.CounterValue, h.RemoteUserTxPackets, l}, }) } - - if h.Subsystem == subsystemWWW { - r.send([]*metricExports{ - {u.Site.Uptime, prometheus.GaugeValue, h.Latency, l}, - {u.Site.Latency, prometheus.GaugeValue, h.Latency.Val / 1000, l}, - {u.Site.XputUp, prometheus.GaugeValue, h.XputUp, l}, - {u.Site.XputDown, prometheus.GaugeValue, h.XputDown, l}, - {u.Site.SpeedtestPing, prometheus.GaugeValue, h.SpeedtestPing, l}, - {u.Site.Drops, prometheus.CounterValue, h.Drops, l}, - }) - } - - if h.Subsystem == subsystemLAN || h.Subsystem == subsystemWLAN || h.Subsystem == subsystemWAN { - r.send([]*metricExports{ - {u.Site.NumAdopted, prometheus.GaugeValue, h.NumAdopted, l}, - {u.Site.NumDisconnected, prometheus.GaugeValue, h.NumDisconnected, l}, - {u.Site.NumPending, prometheus.GaugeValue, h.NumPending, l}, - }) - - if h.Subsystem == subsystemLAN || h.Subsystem == subsystemWLAN { - r.send([]*metricExports{ - {u.Site.NumUser, prometheus.GaugeValue, h.NumUser, l}, - {u.Site.NumGuest, prometheus.GaugeValue, h.NumGuest, l}, - {u.Site.NumIot, prometheus.GaugeValue, h.NumIot, l}, - }) - } - - if h.Subsystem == subsystemWLAN { - r.send([]*metricExports{ - {u.Site.NumAp, prometheus.GaugeValue, h.NumAp, l}, - {u.Site.NumDisabled, prometheus.GaugeValue, h.NumDisabled, l}, - }) - } - - if h.Subsystem == subsystemWAN { - r.send([]*metricExports{ - {u.Site.NumGw, prometheus.GaugeValue, h.NumGw, l}, - {u.Site.NumSta, prometheus.GaugeValue, h.NumSta, l}, - }) - } - - if h.Subsystem == subsystemLAN { - r.send([]*metricExports{ - {u.Site.NumSw, prometheus.GaugeValue, h.NumSw, l}, - }) - } - } } } diff --git a/promunifi/uap.go b/promunifi/uap.go index 5a4a519f..5219675a 100644 --- a/promunifi/uap.go +++ b/promunifi/uap.go @@ -6,27 +6,6 @@ import ( ) type uap struct { - Uptime *prometheus.Desc - TotalTxBytes *prometheus.Desc - TotalRxBytes *prometheus.Desc - TotalBytes *prometheus.Desc - BytesD *prometheus.Desc - TxBytesD *prometheus.Desc - RxBytesD *prometheus.Desc - BytesR *prometheus.Desc - NumSta *prometheus.Desc - UserNumSta *prometheus.Desc - GuestNumSta *prometheus.Desc - // System Stats - Loadavg1 *prometheus.Desc - Loadavg5 *prometheus.Desc - Loadavg15 *prometheus.Desc - MemBuffer *prometheus.Desc - MemTotal *prometheus.Desc - MemUsed *prometheus.Desc - CPU *prometheus.Desc - Mem *prometheus.Desc - ApBytes *prometheus.Desc // Ap Traffic Stats ApWifiTxDropped *prometheus.Desc ApRxErrors *prometheus.Desc @@ -104,36 +83,11 @@ type uap struct { } func descUAP(ns string) *uap { - if ns += "_uap_"; ns == "_uap_" { - ns = "uap_" - } labels := []string{"ip", "site_name", "mac", "model", "name", "serial", "type", "version"} labelA := append([]string{"stat"}, labels[2:]...) labelV := append([]string{"vap_name", "bssid", "radio_name", "essid", "usage"}, labels[2:]...) labelR := append([]string{"radio_name", "radio"}, labels[2:]...) - return &uap{ - Uptime: prometheus.NewDesc(ns+"uptime", "Uptime", labels, nil), - TotalTxBytes: prometheus.NewDesc(ns+"transmit_bytes_total", "Total Transmitted Bytes", labels, nil), - TotalRxBytes: prometheus.NewDesc(ns+"receive_bytes_total", "Total Received Bytes", labels, nil), - TotalBytes: prometheus.NewDesc(ns+"bytes_total", "Total Bytes Transferred", labels, nil), - BytesD: prometheus.NewDesc(ns+"d_bytes", "Total Bytes D???", labels, nil), - TxBytesD: prometheus.NewDesc(ns+"d_tranmsit_bytes", "Transmit Bytes D???", labels, nil), - RxBytesD: prometheus.NewDesc(ns+"d_receive_bytes", "Receive Bytes D???", labels, nil), - BytesR: prometheus.NewDesc(ns+"rate_bytes", "Transfer Rate", labels, nil), - NumSta: prometheus.NewDesc(ns+"stations", "Number of Stations", labels, nil), - UserNumSta: prometheus.NewDesc(ns+"user_stations", "Number of User Stations", labels, nil), - GuestNumSta: prometheus.NewDesc(ns+"guest_stations", "Number of Guest Stations", labels, nil), - Loadavg1: prometheus.NewDesc(ns+"load_average_1", "System Load Average 1 Minute", labels, nil), - Loadavg5: prometheus.NewDesc(ns+"load_average_5", "System Load Average 5 Minutes", labels, nil), - Loadavg15: prometheus.NewDesc(ns+"load_average_15", "System Load Average 15 Minutes", labels, nil), - MemUsed: prometheus.NewDesc(ns+"memory_used_bytes", "System Memory Used", labels, nil), - MemTotal: prometheus.NewDesc(ns+"memory_installed_bytes", "System Installed Memory", labels, nil), - MemBuffer: prometheus.NewDesc(ns+"memory_buffer_bytes", "System Memory Buffer", labels, nil), - CPU: prometheus.NewDesc(ns+"cpu_utilization_percent", "System CPU % Utilized", labels, nil), - Mem: prometheus.NewDesc(ns+"memory_utilization_percent", "System Memory % Utilized", labels, nil), - ApBytes: prometheus.NewDesc(ns+"transferred_bytes_total", "Total Bytes Moved", labels, nil), - // 3x each - stat table: total, guest, user ApWifiTxDropped: prometheus.NewDesc(ns+"stat_wifi_transmt_dropped_total", "Wifi Transmissions Dropped", labelA, nil), ApRxErrors: prometheus.NewDesc(ns+"stat_receive_errors_total", "Receive Errors", labelA, nil), @@ -149,7 +103,6 @@ func descUAP(ns string) *uap { ApRxBytes: prometheus.NewDesc(ns+"stat_receive_bytes_total", "Receive Bytes", labelA, nil), WifiTxAttempts: prometheus.NewDesc(ns+"stat_wifi_transmit_attempts_total", "Wifi Transmission Attempts", labelA, nil), MacFilterRejections: prometheus.NewDesc(ns+"stat_mac_filter_rejects_total", "MAC Filter Rejections", labelA, nil), - // N each - 1 per Virtual AP (VAP) VAPCcq: prometheus.NewDesc(ns+"vap_ccq", "VAP Client Connection Quality", labelV, nil), VAPMacFilterRejections: prometheus.NewDesc(ns+"vap_mac_filter_rejects_total", "VAP MAC Filter Rejections", labelV, nil), @@ -189,7 +142,6 @@ func descUAP(ns string) *uap { VAPWifiTxLatencyMovMin: prometheus.NewDesc(ns+"vap_transmit_latency_moving_min_seconds", "VAP Latency Moving Minimum Tramsit", labelV, nil), VAPWifiTxLatencyMovTotal: prometheus.NewDesc(ns+"vap_transmit_latency_moving_total", "VAP Latency Moving Total Tramsit", labelV, nil), VAPWifiTxLatencyMovCount: prometheus.NewDesc(ns+"vap_transmit_latency_moving_count", "VAP Latency Moving Count Tramsit", labelV, nil), - // N each - 1 per Radio. 1-4 radios per AP usually RadioCurrentAntennaGain: prometheus.NewDesc(ns+"radio_current_antenna_gain", "Radio Current Antenna Gain", labelR, nil), RadioHt: prometheus.NewDesc(ns+"radio_ht", "Radio HT", labelR, nil), @@ -228,28 +180,27 @@ func (u *unifiCollector) exportUAPs(r *Report) { func (u *unifiCollector) exportUAP(r *Report, d *unifi.UAP) { labels := []string{d.IP, d.Type, d.Version, d.SiteName, d.Mac, d.Model, d.Name, d.Serial} - // AP data. r.send([]*metricExports{ - {u.UAP.Uptime, prometheus.GaugeValue, d.Uptime, labels}, - {u.UAP.TotalTxBytes, prometheus.CounterValue, d.TxBytes, labels}, - {u.UAP.TotalRxBytes, prometheus.CounterValue, d.RxBytes, labels}, - {u.UAP.TotalBytes, prometheus.CounterValue, d.Bytes, labels}, - {u.UAP.BytesD, prometheus.CounterValue, d.BytesD, labels}, // not sure if these 3 Ds are counters or gauges. - {u.UAP.TxBytesD, prometheus.CounterValue, d.TxBytesD, labels}, // not sure if these 3 Ds are counters or gauges. - {u.UAP.RxBytesD, prometheus.CounterValue, d.RxBytesD, labels}, // not sure if these 3 Ds are counters or gauges. - {u.UAP.BytesR, prometheus.GaugeValue, d.BytesR, labels}, - {u.UAP.NumSta, prometheus.GaugeValue, d.NumSta, labels}, - {u.UAP.UserNumSta, prometheus.GaugeValue, d.UserNumSta, labels}, - {u.UAP.GuestNumSta, prometheus.GaugeValue, d.GuestNumSta, labels}, - {u.UAP.Loadavg1, prometheus.GaugeValue, d.SysStats.Loadavg1, labels}, - {u.UAP.Loadavg5, prometheus.GaugeValue, d.SysStats.Loadavg5, labels}, - {u.UAP.Loadavg15, prometheus.GaugeValue, d.SysStats.Loadavg15, labels}, - {u.UAP.MemUsed, prometheus.GaugeValue, d.SysStats.MemUsed, labels}, - {u.UAP.MemTotal, prometheus.GaugeValue, d.SysStats.MemTotal, labels}, - {u.UAP.MemBuffer, prometheus.GaugeValue, d.SysStats.MemBuffer, labels}, - {u.UAP.CPU, prometheus.GaugeValue, d.SystemStats.CPU, labels}, - {u.UAP.Mem, prometheus.GaugeValue, d.SystemStats.Mem, labels}, + {u.Device.Uptime, prometheus.GaugeValue, d.Uptime, labels}, + {u.Device.TotalTxBytes, prometheus.CounterValue, d.TxBytes, labels}, + {u.Device.TotalRxBytes, prometheus.CounterValue, d.RxBytes, labels}, + {u.Device.TotalBytes, prometheus.CounterValue, d.Bytes, labels}, + {u.Device.BytesD, prometheus.CounterValue, d.BytesD, labels}, // not sure if these 3 Ds are counters or gauges. + {u.Device.TxBytesD, prometheus.CounterValue, d.TxBytesD, labels}, // not sure if these 3 Ds are counters or gauges. + {u.Device.RxBytesD, prometheus.CounterValue, d.RxBytesD, labels}, // not sure if these 3 Ds are counters or gauges. + {u.Device.BytesR, prometheus.GaugeValue, d.BytesR, labels}, + {u.Device.NumSta, prometheus.GaugeValue, d.NumSta, labels}, + {u.Device.UserNumSta, prometheus.GaugeValue, d.UserNumSta, labels}, + {u.Device.GuestNumSta, prometheus.GaugeValue, d.GuestNumSta, labels}, + {u.Device.Loadavg1, prometheus.GaugeValue, d.SysStats.Loadavg1, labels}, + {u.Device.Loadavg5, prometheus.GaugeValue, d.SysStats.Loadavg5, labels}, + {u.Device.Loadavg15, prometheus.GaugeValue, d.SysStats.Loadavg15, labels}, + {u.Device.MemUsed, prometheus.GaugeValue, d.SysStats.MemUsed, labels}, + {u.Device.MemTotal, prometheus.GaugeValue, d.SysStats.MemTotal, labels}, + {u.Device.MemBuffer, prometheus.GaugeValue, d.SysStats.MemBuffer, labels}, + {u.Device.CPU, prometheus.GaugeValue, d.SystemStats.CPU, labels}, + {u.Device.Mem, prometheus.GaugeValue, d.SystemStats.Mem, labels}, }) u.exportUAPstats(r, labels[2:], d.Stat.Ap) u.exportVAPtable(r, labels[2:], d.VapTable) @@ -260,7 +211,6 @@ func (u *unifiCollector) exportUAPstats(r *Report, labels []string, ap *unifi.Ap labelA := append([]string{"all"}, labels...) labelU := append([]string{"user"}, labels...) labelG := append([]string{"guest"}, labels...) - r.send([]*metricExports{ // all {u.UAP.ApWifiTxDropped, prometheus.CounterValue, ap.WifiTxDropped, labelA}, diff --git a/promunifi/udm.go b/promunifi/udm.go index c8c0dc33..1586addd 100644 --- a/promunifi/udm.go +++ b/promunifi/udm.go @@ -5,6 +5,68 @@ import ( "golift.io/unifi" ) +// These are shared by all four device types: UDM, UAP, USG, USW +type unifiDevice struct { + Uptime *prometheus.Desc + Temperature *prometheus.Desc // sw only + TotalMaxPower *prometheus.Desc // sw only + FanLevel *prometheus.Desc // sw only + TotalTxBytes *prometheus.Desc + TotalRxBytes *prometheus.Desc + TotalBytes *prometheus.Desc + BytesR *prometheus.Desc // ap only + BytesD *prometheus.Desc // ap only + Bytes *prometheus.Desc // ap only + TxBytesD *prometheus.Desc // ap only + RxBytesD *prometheus.Desc // ap only + NumSta *prometheus.Desc + UserNumSta *prometheus.Desc + GuestNumSta *prometheus.Desc + NumDesktop *prometheus.Desc // gw only + NumMobile *prometheus.Desc // gw only + NumHandheld *prometheus.Desc // gw only + Loadavg1 *prometheus.Desc + Loadavg5 *prometheus.Desc + Loadavg15 *prometheus.Desc + MemBuffer *prometheus.Desc + MemTotal *prometheus.Desc + MemUsed *prometheus.Desc + CPU *prometheus.Desc + Mem *prometheus.Desc +} + +func descDevice(ns string) *unifiDevice { + labels := []string{"ip", "site_name", "mac", "model", "name", "serial", "type", "version"} + return &unifiDevice{ + Uptime: prometheus.NewDesc(ns+"uptime", "Uptime", labels, nil), + Temperature: prometheus.NewDesc(ns+"temperature_celsius", "Temperature", labels, nil), + TotalMaxPower: prometheus.NewDesc(ns+"max_power_total", "Total Max Power", labels, nil), + FanLevel: prometheus.NewDesc(ns+"fan_level", "Fan Level", labels, nil), + TotalTxBytes: prometheus.NewDesc(ns+"transmit_bytes_total", "Total Transmitted Bytes", labels, nil), + TotalRxBytes: prometheus.NewDesc(ns+"receive_bytes_total", "Total Received Bytes", labels, nil), + TotalBytes: prometheus.NewDesc(ns+"bytes_total", "Total Bytes Transferred", labels, nil), + BytesR: prometheus.NewDesc(ns+"rate_bytes", "Transfer Rate", labels, nil), + BytesD: prometheus.NewDesc(ns+"d_bytes", "Total Bytes D???", labels, nil), + Bytes: prometheus.NewDesc(ns+"transferred_bytes_total", "Bytes Transferred", labels, nil), + TxBytesD: prometheus.NewDesc(ns+"d_tranmsit_bytes", "Transmit Bytes D???", labels, nil), + RxBytesD: prometheus.NewDesc(ns+"d_receive_bytes", "Receive Bytes D???", labels, nil), + NumSta: prometheus.NewDesc(ns+"stations", "Number of Stations", labels, nil), + UserNumSta: prometheus.NewDesc(ns+"user_stations", "Number of User Stations", labels, nil), + GuestNumSta: prometheus.NewDesc(ns+"guest_stations", "Number of Guest Stations", labels, nil), + NumDesktop: prometheus.NewDesc(ns+"desktops", "Number of Desktops", labels, nil), + NumMobile: prometheus.NewDesc(ns+"mobile", "Number of Mobiles", labels, nil), + NumHandheld: prometheus.NewDesc(ns+"handheld", "Number of Handhelds", labels, nil), + Loadavg1: prometheus.NewDesc(ns+"load_average_1", "System Load Average 1 Minute", labels, nil), + Loadavg5: prometheus.NewDesc(ns+"load_average_5", "System Load Average 5 Minutes", labels, nil), + Loadavg15: prometheus.NewDesc(ns+"load_average_15", "System Load Average 15 Minutes", labels, nil), + MemUsed: prometheus.NewDesc(ns+"memory_used_bytes", "System Memory Used", labels, nil), + MemTotal: prometheus.NewDesc(ns+"memory_installed_bytes", "System Installed Memory", labels, nil), + MemBuffer: prometheus.NewDesc(ns+"memory_buffer_bytes", "System Memory Buffer", labels, nil), + CPU: prometheus.NewDesc(ns+"cpu_utilization_percent", "System CPU % Utilized", labels, nil), + Mem: prometheus.NewDesc(ns+"memory_utilization_percent", "System Memory % Utilized", labels, nil), + } +} + func (u *unifiCollector) exportUDMs(r *Report) { if r.Metrics == nil || r.Metrics.Devices == nil || len(r.Metrics.Devices.UDMs) < 1 { return @@ -23,30 +85,31 @@ func (u *unifiCollector) exportUDM(r *Report, d *unifi.UDM) { labels := []string{d.IP, d.Type, d.Version, d.SiteName, d.Mac, d.Model, d.Name, d.Serial} // Gateway System Data. r.send([]*metricExports{ - {u.USG.Uptime, prometheus.GaugeValue, d.Uptime, labels}, - {u.USG.TotalTxBytes, prometheus.CounterValue, d.TxBytes, labels}, - {u.USG.TotalRxBytes, prometheus.CounterValue, d.RxBytes, labels}, - {u.USG.TotalBytes, prometheus.CounterValue, d.Bytes, labels}, - {u.USG.NumSta, prometheus.GaugeValue, d.NumSta, labels}, - {u.USG.UserNumSta, prometheus.GaugeValue, d.UserNumSta, labels}, - {u.USG.GuestNumSta, prometheus.GaugeValue, d.GuestNumSta, labels}, - {u.USG.NumDesktop, prometheus.GaugeValue, d.NumDesktop, labels}, - {u.USG.NumMobile, prometheus.GaugeValue, d.NumMobile, labels}, - {u.USG.NumHandheld, prometheus.GaugeValue, d.NumHandheld, labels}, - {u.USG.Loadavg1, prometheus.GaugeValue, d.SysStats.Loadavg1, labels}, - {u.USG.Loadavg5, prometheus.GaugeValue, d.SysStats.Loadavg5, labels}, - {u.USG.Loadavg15, prometheus.GaugeValue, d.SysStats.Loadavg15, labels}, - {u.USG.MemUsed, prometheus.GaugeValue, d.SysStats.MemUsed, labels}, - {u.USG.MemTotal, prometheus.GaugeValue, d.SysStats.MemTotal, labels}, - {u.USG.MemBuffer, prometheus.GaugeValue, d.SysStats.MemBuffer, labels}, - {u.USG.CPU, prometheus.GaugeValue, d.SystemStats.CPU, labels}, - {u.USG.Mem, prometheus.GaugeValue, d.SystemStats.Mem, labels}, + {u.Device.Uptime, prometheus.GaugeValue, d.Uptime, labels}, + {u.Device.TotalTxBytes, prometheus.CounterValue, d.TxBytes, labels}, + {u.Device.TotalRxBytes, prometheus.CounterValue, d.RxBytes, labels}, + {u.Device.TotalBytes, prometheus.CounterValue, d.Bytes, labels}, + {u.Device.NumSta, prometheus.GaugeValue, d.NumSta, labels}, + {u.Device.UserNumSta, prometheus.GaugeValue, d.UserNumSta, labels}, + {u.Device.GuestNumSta, prometheus.GaugeValue, d.GuestNumSta, labels}, + {u.Device.NumDesktop, prometheus.GaugeValue, d.NumDesktop, labels}, + {u.Device.NumMobile, prometheus.GaugeValue, d.NumMobile, labels}, + {u.Device.NumHandheld, prometheus.GaugeValue, d.NumHandheld, labels}, + {u.Device.Loadavg1, prometheus.GaugeValue, d.SysStats.Loadavg1, labels}, + {u.Device.Loadavg5, prometheus.GaugeValue, d.SysStats.Loadavg5, labels}, + {u.Device.Loadavg15, prometheus.GaugeValue, d.SysStats.Loadavg15, labels}, + {u.Device.MemUsed, prometheus.GaugeValue, d.SysStats.MemUsed, labels}, + {u.Device.MemTotal, prometheus.GaugeValue, d.SysStats.MemTotal, labels}, + {u.Device.MemBuffer, prometheus.GaugeValue, d.SysStats.MemBuffer, labels}, + {u.Device.CPU, prometheus.GaugeValue, d.SystemStats.CPU, labels}, + {u.Device.Mem, prometheus.GaugeValue, d.SystemStats.Mem, labels}, }) u.exportUSWstats(r, d.Stat.Sw, labels) u.exportUSGstats(r, d.Stat.Gw, d.SpeedtestStatus, labels) u.exportWANPorts(r, labels, d.Wan1, d.Wan2) u.exportPortTable(r, d.PortTable, labels[4:]) if d.Stat.Ap != nil && d.VapTable != nil { + // UDM Pro does not have these. UDM non-Pro does. u.exportUAPstats(r, labels[2:], d.Stat.Ap) u.exportVAPtable(r, labels[2:], *d.VapTable) u.exportRadtable(r, labels[2:], *d.RadioTable, *d.RadioTableStats) diff --git a/promunifi/usg.go b/promunifi/usg.go index 077550ed..b5d7211a 100644 --- a/promunifi/usg.go +++ b/promunifi/usg.go @@ -6,26 +6,6 @@ import ( ) type usg struct { - Uptime *prometheus.Desc - TotalMaxPower *prometheus.Desc - FanLevel *prometheus.Desc - TotalTxBytes *prometheus.Desc - TotalRxBytes *prometheus.Desc - TotalBytes *prometheus.Desc - NumSta *prometheus.Desc - UserNumSta *prometheus.Desc - GuestNumSta *prometheus.Desc - NumDesktop *prometheus.Desc - NumMobile *prometheus.Desc - NumHandheld *prometheus.Desc - Loadavg1 *prometheus.Desc - Loadavg5 *prometheus.Desc - Loadavg15 *prometheus.Desc - MemBuffer *prometheus.Desc - MemTotal *prometheus.Desc - MemUsed *prometheus.Desc - CPU *prometheus.Desc - Mem *prometheus.Desc WanRxPackets *prometheus.Desc WanRxBytes *prometheus.Desc WanRxDropped *prometheus.Desc @@ -54,31 +34,9 @@ type usg struct { } func descUSG(ns string) *usg { - if ns += "_usg_"; ns == "_usg_" { - ns = "usg_" - } labels := []string{"ip", "type", "version", "site_name", "mac", "model", "name", "serial"} labelWan := append([]string{"port"}, labels...) - return &usg{ - Uptime: prometheus.NewDesc(ns+"uptime_seconds", "Uptime", labels, nil), - TotalTxBytes: prometheus.NewDesc(ns+"transmit_bytes_total", "Total Transmitted Bytes", labels, nil), - TotalRxBytes: prometheus.NewDesc(ns+"receive_bytes_total", "Total Received Bytes", labels, nil), - TotalBytes: prometheus.NewDesc(ns+"transferred_bytes_total", "Total Bytes Transferred", labels, nil), - NumSta: prometheus.NewDesc(ns+"stations", "Number of Stations", labels, nil), - UserNumSta: prometheus.NewDesc(ns+"user_stations", "Number of User Stations", labels, nil), - GuestNumSta: prometheus.NewDesc(ns+"guest_stations", "Number of Guest Stations", labels, nil), - NumDesktop: prometheus.NewDesc(ns+"desktops", "Number of Desktops", labels, nil), - NumMobile: prometheus.NewDesc(ns+"mobile", "Number of Mobiles", labels, nil), - NumHandheld: prometheus.NewDesc(ns+"handheld", "Number of Handhelds", labels, nil), - Loadavg1: prometheus.NewDesc(ns+"load_average_1", "System Load Average 1 Minute", labels, nil), - Loadavg5: prometheus.NewDesc(ns+"load_average_5", "System Load Average 5 Minutes", labels, nil), - Loadavg15: prometheus.NewDesc(ns+"load_average_15", "System Load Average 15 Minutes", labels, nil), - MemUsed: prometheus.NewDesc(ns+"memory_used_bytes", "System Memory Used", labels, nil), - MemTotal: prometheus.NewDesc(ns+"memory_installed_bytes", "System Installed Memory", labels, nil), - MemBuffer: prometheus.NewDesc(ns+"memory_buffer_bytes", "System Memory Buffer", labels, nil), - CPU: prometheus.NewDesc(ns+"cpu_utilization_percent", "System CPU % Utilized", labels, nil), - Mem: prometheus.NewDesc(ns+"memory_utilization_percent", "System Memory % Utilized", labels, nil), WanRxPackets: prometheus.NewDesc(ns+"wan_receive_packets_total", "WAN Receive Packets Total", labelWan, nil), WanRxBytes: prometheus.NewDesc(ns+"wan_receive_bytes_total", "WAN Receive Bytes Total", labelWan, nil), WanRxDropped: prometheus.NewDesc(ns+"wan_receive_dropped_total", "WAN Receive Dropped Total", labelWan, nil), @@ -124,24 +82,24 @@ func (u *unifiCollector) exportUSG(r *Report, d *unifi.USG) { labels := []string{d.IP, d.Type, d.Version, d.SiteName, d.Mac, d.Model, d.Name, d.Serial} // Gateway System Data. r.send([]*metricExports{ - {u.USG.Uptime, prometheus.GaugeValue, d.Uptime, labels}, - {u.USG.TotalTxBytes, prometheus.CounterValue, d.TxBytes, labels}, - {u.USG.TotalRxBytes, prometheus.CounterValue, d.RxBytes, labels}, - {u.USG.TotalBytes, prometheus.CounterValue, d.Bytes, labels}, - {u.USG.NumSta, prometheus.GaugeValue, d.NumSta, labels}, - {u.USG.UserNumSta, prometheus.GaugeValue, d.UserNumSta, labels}, - {u.USG.GuestNumSta, prometheus.GaugeValue, d.GuestNumSta, labels}, - {u.USG.NumDesktop, prometheus.GaugeValue, d.NumDesktop, labels}, - {u.USG.NumMobile, prometheus.GaugeValue, d.NumMobile, labels}, - {u.USG.NumHandheld, prometheus.GaugeValue, d.NumHandheld, labels}, - {u.USG.Loadavg1, prometheus.GaugeValue, d.SysStats.Loadavg1, labels}, - {u.USG.Loadavg5, prometheus.GaugeValue, d.SysStats.Loadavg5, labels}, - {u.USG.Loadavg15, prometheus.GaugeValue, d.SysStats.Loadavg15, labels}, - {u.USG.MemUsed, prometheus.GaugeValue, d.SysStats.MemUsed, labels}, - {u.USG.MemTotal, prometheus.GaugeValue, d.SysStats.MemTotal, labels}, - {u.USG.MemBuffer, prometheus.GaugeValue, d.SysStats.MemBuffer, labels}, - {u.USG.CPU, prometheus.GaugeValue, d.SystemStats.CPU, labels}, - {u.USG.Mem, prometheus.GaugeValue, d.SystemStats.Mem, labels}, + {u.Device.Uptime, prometheus.GaugeValue, d.Uptime, labels}, + {u.Device.TotalTxBytes, prometheus.CounterValue, d.TxBytes, labels}, + {u.Device.TotalRxBytes, prometheus.CounterValue, d.RxBytes, labels}, + {u.Device.TotalBytes, prometheus.CounterValue, d.Bytes, labels}, + {u.Device.NumSta, prometheus.GaugeValue, d.NumSta, labels}, + {u.Device.UserNumSta, prometheus.GaugeValue, d.UserNumSta, labels}, + {u.Device.GuestNumSta, prometheus.GaugeValue, d.GuestNumSta, labels}, + {u.Device.NumDesktop, prometheus.GaugeValue, d.NumDesktop, labels}, + {u.Device.NumMobile, prometheus.GaugeValue, d.NumMobile, labels}, + {u.Device.NumHandheld, prometheus.GaugeValue, d.NumHandheld, labels}, + {u.Device.Loadavg1, prometheus.GaugeValue, d.SysStats.Loadavg1, labels}, + {u.Device.Loadavg5, prometheus.GaugeValue, d.SysStats.Loadavg5, labels}, + {u.Device.Loadavg15, prometheus.GaugeValue, d.SysStats.Loadavg15, labels}, + {u.Device.MemUsed, prometheus.GaugeValue, d.SysStats.MemUsed, labels}, + {u.Device.MemTotal, prometheus.GaugeValue, d.SysStats.MemTotal, labels}, + {u.Device.MemBuffer, prometheus.GaugeValue, d.SysStats.MemBuffer, labels}, + {u.Device.CPU, prometheus.GaugeValue, d.SystemStats.CPU, labels}, + {u.Device.Mem, prometheus.GaugeValue, d.SystemStats.Mem, labels}, }) u.exportWANPorts(r, labels, d.Wan1, d.Wan2) u.exportUSGstats(r, d.Stat.Gw, d.SpeedtestStatus, labels) diff --git a/promunifi/usw.go b/promunifi/usw.go index 4dc793f8..f1e5fe13 100644 --- a/promunifi/usw.go +++ b/promunifi/usw.go @@ -6,25 +6,6 @@ import ( ) type usw struct { - Uptime *prometheus.Desc - Temperature *prometheus.Desc - TotalMaxPower *prometheus.Desc - FanLevel *prometheus.Desc - TotalTxBytes *prometheus.Desc - TotalRxBytes *prometheus.Desc - TotalBytes *prometheus.Desc - NumSta *prometheus.Desc - UserNumSta *prometheus.Desc - GuestNumSta *prometheus.Desc - // System Stats - Loadavg1 *prometheus.Desc - Loadavg5 *prometheus.Desc - Loadavg15 *prometheus.Desc - MemBuffer *prometheus.Desc - MemTotal *prometheus.Desc - MemUsed *prometheus.Desc - CPU *prometheus.Desc - Mem *prometheus.Desc // Switch "total" traffic stats SwRxPackets *prometheus.Desc SwRxBytes *prometheus.Desc @@ -65,36 +46,12 @@ type usw struct { } func descUSW(ns string) *usw { - if ns += "_usw_"; ns == "_usw_" { - ns = "usw_" - } pns := ns + "port_" // The first five labels for switch are shared with (the same as) switch ports. labels := []string{"ip", "type", "version", "site_name", "mac", "model", "name", "serial"} // Copy labels, and replace first four with different names. labelP := append([]string{"port_num", "port_name", "port_mac", "port_ip"}, labels[4:]...) - return &usw{ - // switch data - Uptime: prometheus.NewDesc(ns+"uptime_seconds", "Uptime", labels, nil), - Temperature: prometheus.NewDesc(ns+"temperature_celsius", "Temperature", labels, nil), - TotalMaxPower: prometheus.NewDesc(ns+"max_power_total", "Total Max Power", labels, nil), - FanLevel: prometheus.NewDesc(ns+"fan_level", "Fan Level", labels, nil), - TotalTxBytes: prometheus.NewDesc(ns+"bytes_tx_total", "Total Transmitted Bytes", labels, nil), - TotalRxBytes: prometheus.NewDesc(ns+"bytes_rx_total", "Total Received Bytes", labels, nil), - TotalBytes: prometheus.NewDesc(ns+"bytes_total", "Total Bytes Transferred", labels, nil), - NumSta: prometheus.NewDesc(ns+"stations", "Number of Stations", labels, nil), - UserNumSta: prometheus.NewDesc(ns+"user_stations", "Number of User Stations", labels, nil), - GuestNumSta: prometheus.NewDesc(ns+"guest_stations", "Number of Guest Stations", labels, nil), - Loadavg1: prometheus.NewDesc(ns+"load_average_1", "System Load Average 1 Minute", labels, nil), - Loadavg5: prometheus.NewDesc(ns+"load_average_5", "System Load Average 5 Minutes", labels, nil), - Loadavg15: prometheus.NewDesc(ns+"load_average_15", "System Load Average 15 Minutes", labels, nil), - MemUsed: prometheus.NewDesc(ns+"memory_used_bytes", "System Memory Used", labels, nil), - MemTotal: prometheus.NewDesc(ns+"memory_installed_bytes", "System Installed Memory", labels, nil), - MemBuffer: prometheus.NewDesc(ns+"memory_buffer_bytes", "System Memory Buffer", labels, nil), - CPU: prometheus.NewDesc(ns+"cpu_utilization_percent", "System CPU % Utilized", labels, nil), - Mem: prometheus.NewDesc(ns+"memory_utilization_percent", "System Memory % Utilized", labels, nil), - SwRxPackets: prometheus.NewDesc(ns+"switch_receive_packets_total", "Switch Packets Received Total", labels, nil), SwRxBytes: prometheus.NewDesc(ns+"switch_receive_bytes_total", "Switch Bytes Received Total", labels, nil), SwRxErrors: prometheus.NewDesc(ns+"switch_receive_errors_total", "Switch Errors Received Total", labels, nil), @@ -111,7 +68,6 @@ func descUSW(ns string) *usw { SwTxMulticast: prometheus.NewDesc(ns+"switch_transmit_multicast_total", "Switch Multicast Transmit Total", labels, nil), SwTxBroadcast: prometheus.NewDesc(ns+"switch_transmit_broadcast_total", "Switch Broadcast Transmit Total", labels, nil), SwBytes: prometheus.NewDesc(ns+"switch_bytes_total", "Switch Bytes Transferred Total", labels, nil), - // per-port data PoeCurrent: prometheus.NewDesc(pns+"poe_amperes", "POE Current", labelP, nil), PoePower: prometheus.NewDesc(pns+"poe_watts", "POE Power", labelP, nil), @@ -150,32 +106,31 @@ func (u *unifiCollector) exportUSWs(r *Report) { func (u *unifiCollector) exportUSW(r *Report, d *unifi.USW) { labels := []string{d.IP, d.Type, d.Version, d.SiteName, d.Mac, d.Model, d.Name, d.Serial} - if d.HasTemperature.Val { - r.send([]*metricExports{{u.USW.Temperature, prometheus.GaugeValue, d.GeneralTemperature, labels}}) + r.send([]*metricExports{{u.Device.Temperature, prometheus.GaugeValue, d.GeneralTemperature, labels}}) } if d.HasFan.Val { - r.send([]*metricExports{{u.USW.FanLevel, prometheus.GaugeValue, d.FanLevel, labels}}) + r.send([]*metricExports{{u.Device.FanLevel, prometheus.GaugeValue, d.FanLevel, labels}}) } // Switch data. r.send([]*metricExports{ - {u.USW.Uptime, prometheus.GaugeValue, d.Uptime, labels}, - {u.USW.TotalMaxPower, prometheus.GaugeValue, d.TotalMaxPower, labels}, - {u.USW.TotalTxBytes, prometheus.CounterValue, d.TxBytes, labels}, - {u.USW.TotalRxBytes, prometheus.CounterValue, d.RxBytes, labels}, - {u.USW.TotalBytes, prometheus.CounterValue, d.Bytes, labels}, - {u.USW.NumSta, prometheus.GaugeValue, d.NumSta, labels}, - {u.USW.UserNumSta, prometheus.GaugeValue, d.UserNumSta, labels}, - {u.USW.GuestNumSta, prometheus.GaugeValue, d.GuestNumSta, labels}, - {u.USW.Loadavg1, prometheus.GaugeValue, d.SysStats.Loadavg1, labels}, - {u.USW.Loadavg5, prometheus.GaugeValue, d.SysStats.Loadavg5, labels}, - {u.USW.Loadavg15, prometheus.GaugeValue, d.SysStats.Loadavg15, labels}, - {u.USW.MemUsed, prometheus.GaugeValue, d.SysStats.MemUsed, labels}, - {u.USW.MemTotal, prometheus.GaugeValue, d.SysStats.MemTotal, labels}, - {u.USW.MemBuffer, prometheus.GaugeValue, d.SysStats.MemBuffer, labels}, - {u.USW.CPU, prometheus.GaugeValue, d.SystemStats.CPU, labels}, - {u.USW.Mem, prometheus.GaugeValue, d.SystemStats.Mem, labels}, + {u.Device.Uptime, prometheus.GaugeValue, d.Uptime, labels}, + {u.Device.TotalMaxPower, prometheus.GaugeValue, d.TotalMaxPower, labels}, + {u.Device.TotalTxBytes, prometheus.CounterValue, d.TxBytes, labels}, + {u.Device.TotalRxBytes, prometheus.CounterValue, d.RxBytes, labels}, + {u.Device.TotalBytes, prometheus.CounterValue, d.Bytes, labels}, + {u.Device.NumSta, prometheus.GaugeValue, d.NumSta, labels}, + {u.Device.UserNumSta, prometheus.GaugeValue, d.UserNumSta, labels}, + {u.Device.GuestNumSta, prometheus.GaugeValue, d.GuestNumSta, labels}, + {u.Device.Loadavg1, prometheus.GaugeValue, d.SysStats.Loadavg1, labels}, + {u.Device.Loadavg5, prometheus.GaugeValue, d.SysStats.Loadavg5, labels}, + {u.Device.Loadavg15, prometheus.GaugeValue, d.SysStats.Loadavg15, labels}, + {u.Device.MemUsed, prometheus.GaugeValue, d.SysStats.MemUsed, labels}, + {u.Device.MemTotal, prometheus.GaugeValue, d.SysStats.MemTotal, labels}, + {u.Device.MemBuffer, prometheus.GaugeValue, d.SysStats.MemBuffer, labels}, + {u.Device.CPU, prometheus.GaugeValue, d.SystemStats.CPU, labels}, + {u.Device.Mem, prometheus.GaugeValue, d.SystemStats.Mem, labels}, }) u.exportPortTable(r, d.PortTable, labels[4:]) u.exportUSWstats(r, d.Stat.Sw, labels) @@ -217,6 +172,7 @@ func (u *unifiCollector) exportPortTable(r *Report, pt []unifi.Port, labels []st {u.USW.PoeVoltage, prometheus.GaugeValue, p.PoeVoltage, l}, }) } + r.send([]*metricExports{ {u.USW.RxBroadcast, prometheus.CounterValue, p.RxBroadcast, l}, {u.USW.RxBytes, prometheus.CounterValue, p.RxBytes, l},