From f7d488a8877c9f6d18b19f54c9689d4b7cbd0da2 Mon Sep 17 00:00:00 2001 From: aharper343 Date: Wed, 24 Dec 2025 12:09:19 -0500 Subject: [PATCH] Lint and format cleanup --- pkg/inputunifi/collector.go | 21 +++++++++++++++++---- pkg/poller/commands.go | 1 + pkg/poller/inputs.go | 1 + pkg/promunifi/countries.go | 5 +++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/pkg/inputunifi/collector.go b/pkg/inputunifi/collector.go index 45619ee6..0f128037 100644 --- a/pkg/inputunifi/collector.go +++ b/pkg/inputunifi/collector.go @@ -12,8 +12,8 @@ import ( ) const ( - history_seconds = 86400 - poll_duration = time.Second * history_seconds + historySeconds = 86400 + pollDuration = time.Second * historySeconds ) var ErrScrapeFilterMatchFailed = fmt.Errorf("scrape filter match failed, and filter is not http URL") @@ -105,13 +105,14 @@ func (u *InputUnifi) pollController(c *Controller) (*poller.Metrics, error) { defer updateWeb(c, m) // FIXME needs to be last poll time maybe - st := m.TS.Add(-1 * poll_duration) + st := m.TS.Add(-1 * pollDuration) tp := unifi.EpochMillisTimePeriod{StartEpochMillis: st.UnixMilli(), EndEpochMillis: m.TS.UnixMilli()} if c.SaveRogue != nil && *c.SaveRogue { if m.RogueAPs, err = c.Unifi.GetRogueAPs(sites); err != nil { return nil, fmt.Errorf("unifi.GetRogueAPs(%s): %w", c.URL, err) } + u.LogDebugf("Found %d RogueAPs entries", len(m.RogueAPs)) } @@ -119,11 +120,13 @@ func (u *InputUnifi) pollController(c *Controller) (*poller.Metrics, error) { if m.SitesDPI, err = c.Unifi.GetSiteDPI(sites); err != nil { return nil, fmt.Errorf("unifi.GetSiteDPI(%s): %w", c.URL, err) } + u.LogDebugf("Found %d SitesDPI entries", len(m.SitesDPI)) if m.ClientsDPI, err = c.Unifi.GetClientsDPI(sites); err != nil { return nil, fmt.Errorf("unifi.GetClientsDPI(%s): %w", c.URL, err) } + u.LogDebugf("Found %d ClientsDPI entries", len(m.ClientsDPI)) } @@ -131,6 +134,7 @@ func (u *InputUnifi) pollController(c *Controller) (*poller.Metrics, error) { if m.CountryTraffic, err = c.Unifi.GetCountryTraffic(sites, &tp); err != nil { return nil, fmt.Errorf("unifi.GetCountryTraffic(%s): %w", c.URL, err) } + u.LogDebugf("Found %d CountryTraffic entries", len(m.CountryTraffic)) } @@ -139,6 +143,7 @@ func (u *InputUnifi) pollController(c *Controller) (*poller.Metrics, error) { if err != nil { return nil, fmt.Errorf("unifi.GetClientTraffic(%s): %w", c.URL, err) } + u.LogDebugf("Found %d ClientUsageByApp entries", len(clientUsageByApp)) b4 := len(m.ClientsDPI) u.convertToClientDPI(clientUsageByApp, m) @@ -149,11 +154,13 @@ func (u *InputUnifi) pollController(c *Controller) (*poller.Metrics, error) { if m.Clients, err = c.Unifi.GetClients(sites); err != nil { return nil, fmt.Errorf("unifi.GetClients(%s): %w", c.URL, err) } + u.LogDebugf("Found %d Clients entries", len(m.Clients)) if m.Devices, err = c.Unifi.GetDevices(sites); err != nil { return nil, fmt.Errorf("unifi.GetDevices(%s): %w", c.URL, err) } + u.LogDebugf("Found %d UBB, %d UXG, %d PDU, %d UCI, %d UAP %d USG %d USW %d UDM devices", len(m.Devices.UBBs), len(m.Devices.UXGs), len(m.Devices.PDUs), len(m.Devices.UCIs), @@ -161,7 +168,7 @@ func (u *InputUnifi) pollController(c *Controller) (*poller.Metrics, error) { len(m.Devices.USWs), len(m.Devices.UDMs)) // Get speed test results for all WANs - if m.SpeedTests, err = c.Unifi.GetSpeedTests(sites, history_seconds); err != nil { + if m.SpeedTests, err = c.Unifi.GetSpeedTests(sites, historySeconds); err != nil { // Don't fail collection if speed tests fail - older controllers may not have this endpoint u.LogDebugf("unifi.GetSpeedTests(%s): %v (continuing)", c.URL, err) } else { @@ -191,10 +198,12 @@ func (u *InputUnifi) convertToClientDPI(clientUsageByApp []*unifi.ClientUsageByA for _, client := range clientUsageByApp { byApp := make([]unifi.DPIData, 0) byCat := make([]unifi.DPIData, 0) + type catCount struct { BytesReceived int64 BytesTransmitted int64 } + byCatMap := make(map[int]catCount) dpiClients := make([]*unifi.DPIClient, 0) // TODO create cat table @@ -209,6 +218,7 @@ func (u *InputUnifi) convertToClientDPI(clientUsageByApp []*unifi.ClientUsageByA TxBytes: u.int64ToFlexInt(app.BytesTransmitted), TxPackets: u.int64ToFlexInt(0), // We don't have packets from Unifi Controller } + cat, ok := byCatMap[app.Category] if ok { cat.BytesReceived += app.BytesReceived @@ -220,8 +230,10 @@ func (u *InputUnifi) convertToClientDPI(clientUsageByApp []*unifi.ClientUsageByA } byCatMap[app.Category] = cat } + byApp = append(byApp, dpiData) } + if len(byApp) <= 1 { byCat = byApp } else { @@ -239,6 +251,7 @@ func (u *InputUnifi) convertToClientDPI(clientUsageByApp []*unifi.ClientUsageByA byCat = append(byCat, dpiData) } } + dpiTable := unifi.DPITable{ ByApp: byApp, ByCat: byCat, diff --git a/pkg/poller/commands.go b/pkg/poller/commands.go index 354fb9aa..5f8fe8b1 100644 --- a/pkg/poller/commands.go +++ b/pkg/poller/commands.go @@ -166,6 +166,7 @@ func (u *UnifiPoller) HealthCheck() error { for _, output := range outputs { if output.Enabled() { hasEnabledOutput = true + break } } diff --git a/pkg/poller/inputs.go b/pkg/poller/inputs.go index 28b3241b..7c6fdf23 100644 --- a/pkg/poller/inputs.go +++ b/pkg/poller/inputs.go @@ -269,6 +269,7 @@ func AppendMetrics(existing *Metrics, m *Metrics) *Metrics { existing.Clients = append(existing.Clients, m.Clients...) existing.Devices = append(existing.Devices, m.Devices...) existing.CountryTraffic = append(existing.CountryTraffic, m.CountryTraffic...) + return existing } diff --git a/pkg/promunifi/countries.go b/pkg/promunifi/countries.go index 3e9ec612..80ea654b 100644 --- a/pkg/promunifi/countries.go +++ b/pkg/promunifi/countries.go @@ -31,20 +31,25 @@ func (u *promUnifi) exportCountryTraffic(r report, v any) { s, ok := v.(*unifi.UsageByCountry) if !ok { u.LogErrorf("invalid type given to CountryTraffic: %T", v) + return } + country, ok := countrycodes.GetByAlpha2(s.Country) name := "Unknown" region := "Unknown" subRegion := "Unknown" + if ok { name = country.Name region = country.Region subRegion = country.SubRegion } + if s.Country == "GB" || s.Country == "UK" { name = "United Kingdom" // Because the name is so long otherwise } + labels := []string{s.Country, name, region, subRegion, s.TrafficSite.SiteName, s.TrafficSite.SourceName} r.send([]*metric{ {u.CountryTraffic.RxBytes, counter, s.BytesReceived, labels},