mirror of
https://github.com/unpoller/unpoller.git
synced 2026-04-05 08:54:09 -04:00
prom and influx support
This commit is contained in:
@@ -155,7 +155,7 @@ func (u *InfluxUnifi) Run(c poller.Collect) error {
|
||||
var err error
|
||||
|
||||
u.setConfigDefaults()
|
||||
|
||||
|
||||
_, err = url.Parse(u.Config.URL)
|
||||
if err != nil {
|
||||
u.LogErrorf("invalid influx URL: %v", err)
|
||||
@@ -368,6 +368,8 @@ func (u *InfluxUnifi) switchExport(r report, v any) { //nolint:cyclop
|
||||
u.batchUAP(r, v)
|
||||
case *unifi.USW:
|
||||
u.batchUSW(r, v)
|
||||
case *unifi.PDU:
|
||||
u.batchPDU(r, v)
|
||||
case *unifi.USG:
|
||||
u.batchUSG(r, v)
|
||||
case *unifi.UXG:
|
||||
|
||||
120
pkg/influxunifi/pdu.go
Normal file
120
pkg/influxunifi/pdu.go
Normal file
@@ -0,0 +1,120 @@
|
||||
package influxunifi
|
||||
|
||||
import (
|
||||
"github.com/unpoller/unifi"
|
||||
)
|
||||
|
||||
// pduT is used as a name for printed/logged counters.
|
||||
const pduT = item("PDU")
|
||||
|
||||
// batchPDU generates Unifi PDU data points for InfluxDB.
|
||||
// These points can be passed directly to influx.
|
||||
func (u *InfluxUnifi) batchPDU(r report, s *unifi.PDU) {
|
||||
if !s.Adopted.Val || s.Locating.Val {
|
||||
return
|
||||
}
|
||||
|
||||
tags := map[string]string{
|
||||
"mac": s.Mac,
|
||||
"site_name": s.SiteName,
|
||||
"source": s.SourceName,
|
||||
"name": s.Name,
|
||||
"version": s.Version,
|
||||
"model": s.Model,
|
||||
"serial": s.Serial,
|
||||
"type": s.Type,
|
||||
}
|
||||
fields := Combine(
|
||||
u.batchPDUstat(s.Stat.Sw),
|
||||
u.batchSysStats(s.SysStats, s.SystemStats),
|
||||
map[string]any{
|
||||
"guest-num_sta": s.GuestNumSta.Val,
|
||||
"ip": s.IP,
|
||||
"bytes": s.Bytes.Val,
|
||||
"last_seen": s.LastSeen.Val,
|
||||
"rx_bytes": s.RxBytes.Val,
|
||||
"tx_bytes": s.TxBytes.Val,
|
||||
"uptime": s.Uptime.Val,
|
||||
"state": s.State.Val,
|
||||
"user-num_sta": s.UserNumSta.Val,
|
||||
"upgradeable": s.Upgradeable.Val,
|
||||
"outlet_ac_power_budget": s.OutletACPowerBudget.Val,
|
||||
"outlet_ac_power_consumption": s.OutletACPowerConsumption.Val,
|
||||
"outlet_enabled": s.OutletEnabled.Val,
|
||||
"overheating": s.Overheating.Val,
|
||||
"power_source": s.PowerSource.Val,
|
||||
"total_max_power": s.TotalMaxPower.Val,
|
||||
})
|
||||
|
||||
r.addCount(pduT)
|
||||
r.send(&metric{Table: "pdu", Tags: tags, Fields: fields})
|
||||
u.batchPortTable(r, tags, s.PortTable)
|
||||
|
||||
for _, oo := range s.OutletOverrides {
|
||||
oot := cleanTags(map[string]string{
|
||||
"mac": s.Mac,
|
||||
"site_name": s.SiteName,
|
||||
"source": s.SourceName,
|
||||
"name": s.Name,
|
||||
"version": s.Version,
|
||||
"model": s.Model,
|
||||
"serial": s.Serial,
|
||||
"type": s.Type,
|
||||
"ip": s.IP,
|
||||
"outlet_index": oo.Index.Txt,
|
||||
"outlet_name": oo.Name,
|
||||
})
|
||||
ood := map[string]any{
|
||||
"cycle_enabled": oo.CycleEnabled.Val,
|
||||
"relay_state": oo.RelayState.Val,
|
||||
}
|
||||
r.send(&metric{Table: "pdu.outlet_overrides", Tags: oot, Fields: ood})
|
||||
}
|
||||
|
||||
for _, ot := range s.OutletTable {
|
||||
ott := cleanTags(map[string]string{
|
||||
"mac": s.Mac,
|
||||
"site_name": s.SiteName,
|
||||
"source": s.SourceName,
|
||||
"name": s.Name,
|
||||
"version": s.Version,
|
||||
"model": s.Model,
|
||||
"serial": s.Serial,
|
||||
"type": s.Type,
|
||||
"ip": s.IP,
|
||||
"outlet_index": ot.Index.Txt,
|
||||
"outlet_name": ot.Name,
|
||||
})
|
||||
otd := map[string]any{
|
||||
"cycle_enabled": ot.CycleEnabled.Val,
|
||||
"relay_state": ot.RelayState.Val,
|
||||
"outlet_caps": ot.OutletCaps.Val,
|
||||
"outlet_power_factor": ot.OutletPowerFactor.Val,
|
||||
"outlet_current": ot.OutletCurrent.Val,
|
||||
"outlet_power": ot.OutletPower.Val,
|
||||
"outlet_voltage": ot.OutletVoltage.Val,
|
||||
}
|
||||
r.send(&metric{Table: "pdu.outlet_table", Tags: ott, Fields: otd})
|
||||
}
|
||||
}
|
||||
|
||||
func (u *InfluxUnifi) batchPDUstat(sw *unifi.Sw) map[string]any {
|
||||
if sw == nil {
|
||||
return map[string]any{}
|
||||
}
|
||||
|
||||
return map[string]any{
|
||||
"stat_bytes": sw.Bytes.Val,
|
||||
"stat_rx_bytes": sw.RxBytes.Val,
|
||||
"stat_rx_crypts": sw.RxCrypts.Val,
|
||||
"stat_rx_dropped": sw.RxDropped.Val,
|
||||
"stat_rx_errors": sw.RxErrors.Val,
|
||||
"stat_rx_frags": sw.RxFrags.Val,
|
||||
"stat_rx_packets": sw.TxPackets.Val,
|
||||
"stat_tx_bytes": sw.TxBytes.Val,
|
||||
"stat_tx_dropped": sw.TxDropped.Val,
|
||||
"stat_tx_errors": sw.TxErrors.Val,
|
||||
"stat_tx_packets": sw.TxPackets.Val,
|
||||
"stat_tx_retries": sw.TxRetries.Val,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user