mirror of
https://github.com/unpoller/unpoller.git
synced 2026-04-05 08:54:00 -04:00
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>
36 lines
958 B
Go
36 lines
958 B
Go
package influxunifi
|
|
|
|
import (
|
|
"github.com/unpoller/unifi/v5"
|
|
)
|
|
|
|
// batchSpeedTest generates Unifi Speed Test datapoints for InfluxDB.
|
|
// These points can be passed directly to influx.
|
|
func (u *InfluxUnifi) batchSpeedTest(r report, st *unifi.SpeedTestResult) {
|
|
if st == nil {
|
|
return
|
|
}
|
|
|
|
tags := map[string]string{
|
|
"site_name": st.SiteName,
|
|
"source": st.SourceName,
|
|
"wan_interface": st.InterfaceName,
|
|
"wan_group": st.WANNetworkGroup,
|
|
"network_conf_id": st.NetworkConfID,
|
|
}
|
|
|
|
fields := map[string]any{
|
|
"download_mbps": st.DownloadMbps.Val,
|
|
"upload_mbps": st.UploadMbps.Val,
|
|
"latency_ms": st.LatencyMs.Val,
|
|
"timestamp": st.Time.Val,
|
|
}
|
|
|
|
if st.WANProviderCapabilities != nil {
|
|
fields["provider_download_kbps"] = st.WANProviderCapabilities.DownloadKbps.Val
|
|
fields["provider_upload_kbps"] = st.WANProviderCapabilities.UploadKbps.Val
|
|
}
|
|
|
|
r.send(&metric{Table: "speedtest", Tags: tags, Fields: fields})
|
|
}
|