unpoller_unpoller/pkg/poller
Cody Lee 0ffe6152ab
Fix multi-WAN speed test reporting (issue #841)
Speed tests were not being reported correctly for multi-WAN setups
because the device-level speedtest-status field was returning zeros.
The data has moved to a new aggregated dashboard API endpoint.

Changes:
- Add GetSpeedTests() and GetSiteSpeedTests() methods to fetch from
  /v2/api/site/{site}/aggregated-dashboard endpoint
- Create SpeedTestResult data structures to capture per-WAN metrics
- Update Prometheus exporter with new speedtest_* metrics per interface
- Update InfluxDB exporter to write speedtest measurements per WAN
- Update Datadog exporter with unifi.speedtest.* metrics per WAN
- Update metrics collection to include speed test data for all sites

Metrics now include labels/tags for:
- wan_interface: Physical interface (eth8, eth9, etc.)
- wan_group: Logical WAN name (WAN, WAN2, etc.)
- site_name: Site identifier
- source: Controller URL

Gracefully handles older controllers without the new API endpoint.

Fixes #841

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-09 16:46:14 -06:00
..
LICENSE all to pkg 2022-12-02 20:48:01 -05:00
README.md go 1.19 interface{} -> any 2022-12-03 16:32:12 -06:00
commands.go Fix health check port binding conflict (issue #892) 2025-12-09 08:11:21 -06:00
config.go Fix multi-WAN speed test reporting (issue #841) 2025-12-09 16:46:14 -06:00
inputs.go fix linting 2025-12-03 11:40:21 -06:00
logger.go go 1.19 interface{} -> any 2022-12-03 16:32:12 -06:00
outputs.go Fix health check port binding conflict (issue #892) 2025-12-09 08:11:21 -06:00
start.go Add Docker health check support 2025-12-08 13:09:10 -06:00
testutil.go rename package per per comment, add comments, and drop unnecessary compile time check 2023-08-03 09:27:09 -05:00

README.md

poller

UniFi Poller Core

This module ties the inputs together with the outputs.

Aggregates metrics on request. Provides CLI app and args parsing.

Ideal

This library has no notion of "UniFi" or controllers, or Influx, or Prometheus. This library simply provides an input interface and an output interface. Each interface uses an []any type, so any type of data can be used. That is to say, you could write input and output plugins that work with, say, Cisco gear, or any other network (or even non-network) data. The existing plugins should provide ample example of how to use this library, but at some point the godoc will improve.

Features

  • Automatically unmarshal's plugin config structs from config file and/or env variables.
  • Initializes all "imported" plugins on startup.
  • Provides input plugins a Logger, requires an interface for Metrics and Events retrieval.
  • Provides Output plugins an interface to retrieve Metrics and Events, and a Logger.
  • Provides automatic aggregation of Metrics and Events from multiple sources.