Commit Graph
100 Commits
Author SHA1 Message Date
Cody Lee d46146bdd0 Merge pull request #1093 from neilmunday/master 2026-09-18 18:09:00 -04:00
Cody Lee 4123a13973 Merge pull request #1092 from jonathanrdelgado/fix/otel-callback-leak 2026-09-18 07:06:13 -04:00
Cody Lee 58d01430ef Merge pull request #1091 from gdelbergue/build/distroless-debian13 2026-09-15 20:30:14 -04:00
Cody Lee b479f9bcd2 Merge pull request #1089 from unpoller/dependabot/go_modules/all-df48bebb66 2026-09-14 13:23:33 -04:00
Cody Lee 7827d30380 Merge pull request #1087 from NotAFlightRisk/fix/health-check-ipv6-http-listen 2026-09-11 19:46:59 -04:00
Cody Lee d78d47cb93 Merge pull request #1086 from unpoller/fix/prometheus-cache-and-locate-mode
fix: honor scrape-cache disable and export locate-mode devices
2026-09-11 09:54:37 -04:00
Cody Lee 467fbd2de1 Merge pull request #1082 from unpoller/dependabot/go_modules/google.golang.org/grpc-1.83.2 2026-09-08 23:16:21 -04:00
Cody Lee 8cf64e1d78 Merge pull request #1077 from NotAFlightRisk/fix/health-check-empty-http-listen 2026-09-02 20:40:31 -04:00
Cody Lee 4e3c58a79a Merge pull request #1074 from Prototype0645/fix/site-name-override-logs 2026-09-01 07:58:47 -04:00
Cody Lee 3d70164732 Merge pull request #1073 from Prototype0645/feat/wan-status-source-label 2026-08-31 19:35:52 -04:00
Cody Lee ad84c29f29 Merge pull request #1072 from unpoller/fix/986-remote-multi-site
fix: poll remote multi-site controllers by internalReference
2026-08-31 15:17:59 -04:00
Cody Lee 6972dfc0c2 Merge pull request #1068 from cooperlees/feat/protect-only-console 2026-08-31 09:20:39 -04:00
Cody Lee c0fbdd85c6 Merge pull request #1071 from Prototype0645/feat/wan-site-labels 2026-08-31 05:14:41 -05:00
Cody Lee 76fbddf810 Merge pull request #1069 from unpoller/dependabot/go_modules/all-c0562bfa1b 2026-08-31 04:55:34 -05:00
Cody Lee 611cdd01fb Merge pull request #1070 from Prototype0645/chore/bump-unifi-v6.0.2 2026-08-31 04:39:59 -05:00
Cody Lee 3a595a6896 Merge pull request #1065 from unpoller/fix/remote-default-site-name-override-1057
fix: respect configured default_site_name_override in remote mode
2026-08-27 16:59:25 -05:00
Cody Lee 71ac64499c Merge pull request #1064 from unpoller/feat/influxdb-v3-support
Add InfluxDB v3 support and fix tag/field schema collisions
2026-08-27 16:55:55 -05:00
Cody Lee 6e468667cd Merge pull request #1056 from unpoller/feat/protect-device-metrics
Add UniFi Protect device metrics
2026-08-27 12:50:56 -05:00
Cody Lee 98e95050e2 Merge branch 'master' into feat/protect-device-metrics 2026-08-27 12:12:17 -05:00
Cody Lee 9472f349d1 Merge pull request #1062 from unpoller/fix/golangci-lint-go127
ci: bump golangci-lint to v2.13 for Go 1.27 deps
2026-08-27 12:11:59 -05:00
Cody Lee cb639e0c5c Merge branch 'master' into feat/protect-device-metrics 2026-08-27 09:58:11 -05:00
Cody Lee 2beb8839b9 Merge pull request #1060 from unpoller/dependabot/go_modules/all-b0668f810d 2026-08-24 18:30:47 -05:00
Cody Lee 192ee254f9 Merge pull request #1059 from NotAFlightRisk/fix-switch-stat-rx-packets 2026-08-22 22:01:42 -05:00
Cody Lee 204b51bca4 Merge pull request #1055 from unpoller/feat/unas-support
feat: opt-in UNAS Pro support (#785) + fix AppendMetrics dropping SpeedTests
2026-08-19 10:38:33 -05:00
Cody Lee ccc6ad5dae Merge pull request #1054 from unpoller/fix-1050-alarms-400-invalid-object
inputunifi: skip alarms endpoint on 400 api.err.InvalidObject
2026-08-18 09:43:46 -05:00
Cody Lee 75fd7d7042 Merge pull request #1053 from unpoller/fix-1045-wan-status-state-label
promunifi: add state label to wan_interface_state metric
2026-08-18 09:37:45 -05:00
Cody Lee 75cf40e9fc Merge pull request #1052 from unpoller/fix-1030-input-panic-crash
Recover input plugin panics in poller goroutines (fixes #1030)
2026-08-18 09:23:46 -05:00
Cody Lee a83d2cb019 Merge pull request #1051 from unpoller/dependabot/go_modules/all-aa163f63f4
build(deps): bump golang.org/x/crypto from 0.54.0 to 0.55.0 in the all group
2026-08-17 15:01:49 -05:00
Cody Lee 638da75628 Merge pull request #1049 from unpoller/dependabot/go_modules/all-364a4fa44d 2026-08-10 04:54:35 -05:00
Cody Lee d9f4fcbe2c Merge pull request #1046 from Nebu2k/feat/save-speedtest-toggle 2026-08-07 16:39:29 -05:00
Cody Lee b48836f308 Merge branch 'master' into feat/save-speedtest-toggle 2026-08-07 15:32:56 -05:00
Cody Lee 9c662ad951 Merge pull request #1048 from jimstrang/chore/deps-unifi-5.30.0 2026-08-07 06:56:47 -05:00
Cody Lee 251aebf19a Merge pull request #1044 from unpoller/dependabot/github_actions/all-94d0792ac8 2026-08-03 17:36:12 -05:00
Cody Lee 7e103398c0 Merge pull request #1042 from unpoller/dependabot/go_modules/all-443659d970 2026-07-27 05:39:33 -05:00
Cody Lee a47d9fc1f5 Merge pull request #1022 from unpoller/dependabot/go_modules/all-0dab53a3cd 2026-06-01 08:37:04 +03:00
Cody Lee cf92c87c96 Merge pull request #1021 from unpoller/dependabot/github_actions/all-db05c2199b 2026-05-25 01:43:39 -05:00
Cody Lee 45eafca1f3 Merge pull request #1020 from unpoller/dependabot/go_modules/all-a3c8a40308 2026-05-25 01:43:20 -05:00
Cody Lee b18851848f Merge pull request #1019 from davidyilee/feat/uci-docsis-ci-metrics 2026-05-25 01:42:45 -05:00
Cody Lee a6adc638f9 Merge pull request #1017 from unpoller/dependabot/go_modules/all-66901936d3 2026-05-24 11:22:50 -05:00
Cody Lee 2ecdd797af Merge pull request #1014 from unpoller/fix/prometheus-scrape-cache-1013
fix(prometheus): serve scrapes from cached background poll
2026-05-12 09:34:36 -05:00
Cody Lee 4093648205 Merge pull request #1011 from unpoller/chore/goreleaser-deprecations
chore(release): migrate goreleaser config off deprecated fields
2026-05-09 11:41:04 -05:00
Cody Lee 46f9f8fe72 Merge pull request #1010 from unpoller/chore/deps-unifi-5.28.0
chore(deps): upgrade unifi to v5.28.0 (fixes #997)
2026-05-09 10:09:47 -05:00
Cody Lee 840fa0a6a5 Merge pull request #1009 from unpoller/chore/deps-unifi-5.27.0
chore(deps): upgrade unifi to v5.27.0 and refresh golang.org/x deps
2026-05-09 09:38:36 -05:00
Cody Lee 817d725f63 Merge pull request #1008 from unpoller/feature/issue-988-uap-uplink-metrics
feat: add UAP uplink metrics, Prometheus parity for USW/UBB/UDB (#988)
2026-05-09 09:32:05 -05:00
Cody Lee cf56aa9c58 Merge pull request #1007 from unpoller/feature/influx-global-tags-1001
feat(influxunifi): add global tags applied to every measurement
2026-05-09 09:01:23 -05:00
Cody Lee 724982b1e3 Merge pull request #1005 from jimstrang/fix/prometheus-integration-device-collision 2026-05-09 07:41:32 -05:00
Cody Lee 728869741a Merge pull request #1000 from unpoller/fix/issue-995-brew-up-conf
fix: reference up.conf.example in brew install steps (#995)
2026-05-08 16:59:33 -05:00
Cody Lee bbc33006ee Merge pull request #999 from unpoller/upgrade/unifi-v5.26.0
feat: upgrade unifi to v5.26.0 with Integration/v1 + new legacy metrics
2026-05-08 16:48:11 -05:00
Cody Lee f23e681c01 Merge pull request #992 from danroozemond/feature/docker-compose-remote 2026-04-13 19:56:26 -05:00
Cody Lee 431d6dbfdc Merge pull request #993 from unpoller/dependabot/go_modules/all-aa7bbf7b0a 2026-04-13 19:55:00 -05:00
Cody Lee 6d9ba5de04 Merge pull request #989 from unpoller/dependabot/go_modules/all-8bc9e2f491 2026-04-06 05:38:08 -05:00
Cody Lee c529f1aa8c Merge pull request #990 from unpoller/dependabot/github_actions/all-cb5fd4910d 2026-04-06 05:37:43 -05:00
Cody LeeandClaude Sonnet 4.6 c596e82cf2 fix: use v2 traffic API as DPI fallback for Network 9.1+ firmware (#985)
The legacy /stat/stadpi and /stat/sitedpi endpoints return empty data
on UniFi Network 9.1+ (issue #834). The v2 /traffic endpoint already
existed in the unifi library and in the collector, but was only called
when both SaveTraffic and SaveDPI were enabled — most users only set
SaveDPI=true and never saw any data.

- Remove the SaveTraffic gate on GetClientTraffic; call it whenever
  SaveDPI is enabled, treating it as a DPI data source
- Downgrade GetClientTraffic errors to debug-log so old firmware that
  lacks the v2 endpoint continues to use the legacy API without error
- Add convertToSiteDPI to aggregate per-client v2 data into per-site
  DPITable entries, filling SitesDPI when the legacy endpoint is empty
- Legacy API results are preserved; v2 data only supplements sites not
  already covered, so old-firmware users are unaffected

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 09:42:35 -05:00
Cody LeeandClaude Sonnet 4.6 2f1e28c7d3 chore: apply linter auto-fixes (wsl_v5, nlreturn, tagalign) (#984)
golangci-lint auto-fixes across multiple packages:
- wsl_v5: blank lines between logical blocks
- nlreturn: newlines before return statements
- tagalign: struct field tag alignment

No logic changes.

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 21:10:52 -05:00
Cody LeeandClaude Sonnet 4.6 18c6e66a8e feat: add Site Magic site-to-site VPN metrics (closes #926) (#983)
* feat: add Site Magic site-to-site VPN metrics (closes #926)

Bump github.com/unpoller/unifi/v5 to v5.25.0 which adds:
- GetMagicSiteToSiteVPN / GetMagicSiteToSiteVPNSite API methods
- MagicSiteToSiteVPN types with mesh, connection, device, and status structs
- Missing VPN health fields on Site.Health (SiteToSiteNumActive/Inactive,
  SiteToSiteRxBytes/TxBytes/RxPackets/TxPackets)

Implement VPN metrics collection across all output plugins:
- Collect Site Magic VPN mesh data per-site in inputunifi pollController
- Propagate VPNMeshes through poller.Metrics / AppendMetrics
- Apply DefaultSiteNameOverride for VPN meshes in augmentMetrics /
  applySiteNameOverride
- influxunifi: vpn_mesh, vpn_mesh_connection, vpn_mesh_status tables
- promunifi: vpn_mesh_*, vpn_tunnel_*, vpn_mesh_status_* gauges
- datadogunifi: unifi.vpn_mesh.*, unifi.vpn_tunnel.*, unifi.vpn_mesh_status.*

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* feat(otelunifi): add Site Magic VPN metrics to OpenTelemetry output

Adds exportVPNMeshes to the otel output plugin, emitting the same
unifi_vpn_mesh_*, unifi_vpn_tunnel_*, and unifi_vpn_mesh_status_*
gauges as the other output plugins.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 21:08:09 -05:00
Cody LeeandClaude Sonnet 4.6 a81a6e6e16 feat: add port anomaly metrics (closes #929) (#982)
Collect port anomalies from the UniFi v2 API endpoint
/proxy/network/v2/api/site/{site}/ports/port-anomalies and export
them to all output plugins (Prometheus, InfluxDB, DataDog, OpenTelemetry).

Metrics exported per port:
- port_anomaly_count     – number of anomaly events
- port_anomaly_last_seen – unix timestamp of last event

Labels: site_name, source, device_mac, port_idx, anomaly_type

Bumps github.com/unpoller/unifi/v5 to v5.24.0 which adds GetPortAnomalies.

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:56:37 -05:00
Cody LeeandClaude Sonnet 4.6 643c108674 feat: add network topology metrics (closes #931) (#981)
Bumps github.com/unpoller/unifi/v5 to v5.23.0 which adds
GetTopology() fetching vertices (devices/clients) and edges
(wired/wireless connections) from /proxy/network/v2/api/site/{site}/topology.

Changes across the stack:
- poller.Metrics: add Topologies []any field + AppendMetrics support
- inputunifi: collect topology per-site (non-fatal on older controllers),
  pass through augmentMetrics with site name override support
- promunifi: new topology.go with summary, connection-type, link-quality,
  and band-distribution gauges
- influxunifi: new topology.go with topology_summary and topology_edge
  measurements
- datadogunifi: new topology.go with equivalent Datadog gauges
- otelunifi: new topology.go with OpenTelemetry gauge observations

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:44:51 -05:00
Cody LeeandClaude Sonnet 4.6 6b33b6b97b feat: firewall policy metrics across all output plugins (closes #928) (#979)
* feat(promunifi): add firewall policy metrics (closes #928)

Bump unifi client to v5.22.0 and wire up firewall policy data end-to-end:

- poller.Metrics: add FirewallPolicies []any slice
- inputunifi: collect GetFirewallPolicies() per poll cycle; apply
  DefaultSiteNameOverride; augment into poller.Metrics
- promunifi: export per-rule (rule_enabled, rule_index) and per-site
  aggregate metrics (rules_total, rules_enabled, rules_disabled,
  rules_by_action, rules_predefined, rules_custom, rules_logging_enabled)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* feat: export firewall policies to influx, datadog, and otel outputs

Extends firewall policy support (PR #979) to all remaining output plugins:

- influxunifi: batchFirewallPolicy() writes measurement "firewall_policy"
  with tags (rule_name, action, protocol, ip_version, source/dest zone,
  site_name, source) and fields (enabled, index, predefined, logging)
- datadogunifi: batchFirewallPolicy() emits the same data as Datadog gauges
  under the "firewall_policy.*" namespace
- otelunifi: exportFirewallPolicies() emits per-rule gauges
  (unifi_firewall_rule_enabled, unifi_firewall_rule_index) and per-site
  aggregates (rules_total, rules_enabled, rules_disabled, rules_by_action,
  rules_predefined, rules_custom, rules_logging_enabled)

Also rebases onto master to pick up the otelunifi plugin (PR #978).

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:26:27 -05:00
Cody LeeandClaude Sonnet 4.6 521c2f88bc feat(otelunifi): add OpenTelemetry output plugin (#978)
* feat(otelunifi): add OpenTelemetry output plugin

Adds a new push-based output plugin that exports UniFi metrics to any
OTLP-compatible backend (Grafana Alloy/Mimir, Honeycomb, Datadog via
OTel, New Relic, etc.) using the Go OpenTelemetry SDK v1.42.

Config (default disabled):
  [otel]
  url      = "http://localhost:4318"
  protocol = "http"   # or "grpc"
  interval = "30s"
  timeout  = "10s"
  disable  = false
  api_key  = ""       # optional Bearer auth

Env var prefix: UP_OTEL_*

Exported metrics:
- Sites:   user/guest/IoT counts, AP/GW/SW counts, latency, uptime,
           tx/rx rates per subsystem
- Clients: uptime, rx/tx bytes & rates; signal/noise/RSSI for wireless
- UAP:     up, uptime, CPU/mem, load, per-radio channel/power,
           per-VAP station count/satisfaction/bytes
- USW:     up, uptime, CPU/mem, load, aggregate rx/tx bytes,
           per-port up/speed/bytes/packets/errors/dropped/PoE
- USG:     up, uptime, CPU/mem, load, per-WAN rx/tx bytes/packets/errors
- UDM/UXG: up, uptime, CPU/mem, load averages

Closes #933

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* fix(otelunifi): rename unused ctx parameter to _ in recordGauge

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* fix(otelunifi): replace Disable with Enable (default false)

Plugin is opt-in: set enable=true / UP_OTEL_ENABLE=true to activate.
Closes part of #933.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:19:18 -05:00
Cody LeeandClaude Sonnet 4.6 4c34180047 feat(clients): add MIMO spatial stream metrics for WiFi clients (#977)
* feat(clients): add MIMO spatial stream metrics for WiFi clients

Add tx_nss, rx_nss (spatial stream count) and tx_mcs, rx_mcs (MCS
index) metrics for WiFi clients, sourced from UniFi controller API
fields. These fields are only populated for wireless clients.

- promunifi: adds unifi_client_radio_transmit_spatial_streams,
  unifi_client_radio_receive_spatial_streams,
  unifi_client_radio_transmit_mcs_index, and
  unifi_client_radio_receive_mcs_index gauges
- influxunifi: adds tx_nss, rx_nss, tx_mcs, rx_mcs fields to the
  clients measurement
- go.mod: replace directive to use local unifi library with new fields

Closes #535

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* fix: use published unifi commit for MIMO fields instead of local replace

Remove the local path replace directive for github.com/unpoller/unifi/v5
and pin to the published pseudo-version at commit f363f61cdbe3a863db5fb3176ef1c0fc282c5674
which contains the RxMcs, RxNSS, TxMcs, TxNSS MIMO fields.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 17:56:16 -05:00
Cody LeeandClaude Sonnet 4.6 cedc52fc89 feat(lokiunifi): add richer low-cardinality stream labels (#932) (#975)
- Add job=unpoller to every Loki stream (alarm, anomaly, event, ids,
  system_log, protect_log, protect_thumbnail) for standard Grafana/Loki
  source filtering with {job="unpoller"}
- Add event_type and inner_alert_action labels to IDS streams using
  EventType and InnerAlertAction fields
- Add event_type and inner_alert_action labels to Alarm streams using
  Key and InnerAlertAction fields
- Skip severity/category on Anomaly: the unifi.Anomaly struct has no
  such fields

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:41:20 -05:00
Cody LeeandClaude Sonnet 4.6 117392dd8c feat: export site_to_site_enabled VPN metric (#926) (#976)
Add the site_to_site_enabled FlexBool field from the vpn subsystem
health entry to both InfluxDB and Prometheus outputs. The field was
present in the unifi.Health struct but never exported.

- influxunifi: add site_to_site_enabled to subsystems fields map
- promunifi: add SiteToSiteEnabled gauge descriptor and emit it in
  the vpn case of exportSite
- Update integration_test_expectations.yaml to include the new field

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:39:19 -05:00
Cody LeeandClaude Sonnet 4.6 a95804743d feat(lokiunifi): add extra_labels config for custom Loki stream labels (#691) (#973)
Add an ExtraLabels map[string]string field to the Loki Config struct so
users can define static key=value labels that are merged into the stream
labels of every log line sent to Loki. This allows users to distinguish
streams (e.g., by environment or datacenter) without hardcoding values.

Built-in dynamic labels (application, site_name, source, etc.) always
take precedence over extra labels to preserve existing behavior.

Example config (TOML):
  [loki.extra_labels]
  environment = "production"
  datacenter  = "us-east-1"

Closes #691

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:25:32 -05:00
Cody LeeandClaude Sonnet 4.6 6c5ff5482d feat(promunifi): add unifi_controller_up gauge metric (closes #356) (#974)
Add a per-controller `<namespace>_controller_up` Prometheus GaugeVec with
a `source` label (controller URL or configured ID). The gauge is set to 1
after each successful poll and 0 on failure, giving operators a standard
metric to alert on controller connectivity issues.

Changes:
- pkg/poller/config.go: add ControllerStatus type and ControllerStatuses
  field to Metrics so any output plugin can consume per-controller health.
- pkg/poller/inputs.go: merge ControllerStatuses when AppendMetrics is
  called (multiple input sources).
- pkg/inputunifi/interface.go: populate ControllerStatuses with Up=true
  on success and Up=false (while still continuing) on per-controller error.
- pkg/promunifi/collector.go: declare and register a prometheus.GaugeVec
  `<namespace>_controller_up`; set the gauge for each controller status
  after every Collect cycle.

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:25:00 -05:00
Cody LeeandClaude Sonnet 4.6 8c7f1cb854 fix: remove age==0 guard that silently dropped all rogue AP metrics (#972)
save_rogue = true collected data from the controller but never wrote
any of it to the output backends. All three exporters (InfluxDB, Datadog,
Prometheus) had the same guard:

    if s.Age.Val == 0 { return }

The intent was to drop stale entries, but the logic is inverted: Age==0
means brand-new or (more commonly) that the UniFi controller did not
include an "age" field in the JSON response, causing FlexInt to default
to 0. This silently discarded every rogue AP record.

Remove the guard entirely. The data was just fetched on-demand from the
controller; if the user opted in to save_rogue, they want all of it.

Fixes #405

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 14:53:07 -05:00
Cody LeeandClaude Sonnet 4.6 dcdbef6687 fix(inputunifi): gracefully handle 404s from remote API event endpoints (#971)
* fix(inputunifi): gracefully handle 404s from remote API event endpoints

The UniFi remote API (api.ui.com) does not support legacy event endpoints
such as /stat/event, causing repeated [ERROR] log lines for users who have
save_events = true with a remote controller.

When a remote controller returns an invalid HTTP status code (e.g. 404),
log a warning and continue to the next event collector instead of
propagating the error. This keeps metrics collection working and stops
the noisy error loop.

Fixes #966

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* fix(inputunifi): log unsupported remote API event endpoints at Info not Error

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 14:30:49 -05:00
Cody LeeandClaude Sonnet 4.6 873202ab5b fix(inputunifi): recover from GetActiveDHCPLeasesWithAssociations panic (#969)
Wrap the GetActiveDHCPLeasesWithAssociations call in a deferred recover
so a nil-pointer panic in the unifi library (triggered when 401 errors
cause GetDevices to return nil, which was then dereferenced without a
guard in v5.18.0) can no longer crash the poller process.

Fixes #965

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 15:07:03 -05:00
Cody LeeandClaude Sonnet 4.6 54bb3bfe8e feat(devices): add UDB (UniFi Device Bridge) support (#968)
Adds metrics export for UDB devices (UDB-Switch, UDB-Pro, UDB-Pro-Sector)
to all output backends. UDB-Switch is a hybrid device combining PoE switch
ports with WiFi 7 wireless bridge capability (5GHz + 6GHz radios).

- pkg/promunifi/udb.go: Prometheus metrics exporter for UDB
- pkg/influxunifi/udb.go: InfluxDB batch exporter for UDB
- pkg/datadogunifi/udb.go: Datadog batch exporter for UDB
- Wire UDB into switchExport in all three output plugins
- Add UDB to inputunifi device collection and site name override
- Update integration test expectations for InfluxDB and Datadog
- Fix addUBB() bug: was incorrectly incrementing UCI counter

Resolves #947

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 15:00:18 -05:00
Cody Lee 3eb7c1cf1d Merge pull request #940 from brngates98/feat/sysinfo-metrics
feat: add controller sysinfo metrics (unpoller#927)
2026-01-31 19:27:09 -06:00
Cody Lee bf2d1f7617 Merge pull request #939 from unpoller/upgrade-unifi-5-14-0
upgrade unifi
2026-01-31 10:21:00 -06:00
Cody Lee 9aba3101cd Merge pull request #938 from brngates98/restore-endpoint-discovery-tool
Restore tools/endpoint-discovery as optional Python tool
2026-01-30 20:32:51 -06:00
Cody Lee e3f1a8f7e0 Merge pull request #937 from brngates98/feat/discover-flag 2026-01-30 20:00:31 -06:00
Cody Lee fe23e85a21 Merge pull request #936 from brngates98/feat/endpoint-discovery-tool 2026-01-30 19:16:38 -06:00
Cody Lee 490ae4567a Merge pull request #934 from unpoller/upgrade-unifi-5-12-0
bump unifi version
2026-01-30 11:50:54 -06:00
Cody Lee 11450439fc Merge pull request #925 from brngates98/feat/wan-metrics
feat: Add WAN metrics export to Prometheus, InfluxDB, and Datadog
2026-01-29 16:50:47 -06:00
Cody Lee d178da7c75 Merge pull request #924 from brngates98/feat/dhcp-client-monitoring
feat: Add DHCP lease metrics export to Prometheus
2026-01-29 16:12:31 -06:00
Cody Lee d26d84e8ad Merge pull request #923 from unpoller/issue-921
fix client side log error
2026-01-27 21:16:14 -06:00
Cody Lee a14d5c4150 Merge pull request #922 from brngates98/add-ai-context-files
Add AI context files for major LLMs
2026-01-27 20:51:34 -06:00
Cody Lee 2a44b2f0be Merge pull request #920 from unpoller/issue-742
Fix Homebrew formula for newer Homebrew versions
2026-01-25 12:29:57 -06:00
Cody Lee 037f4563f0 Merge pull request #919 from unpoller/issue-415
Enrich alarms with device names for Loki logs
2026-01-25 12:22:39 -06:00
Cody Lee a35e52c140 Merge pull request #918 from unpoller/issue-417
Populate num_user field for VPN subsystem metrics
2026-01-25 12:10:53 -06:00
Cody Lee 10a43dcf04 Merge pull request #917 from unpoller/issue-425
Allow polling to continue when individual controllers fail
2026-01-25 12:04:38 -06:00
Cody Lee 4e3c823989 Merge pull request #916 from unpoller/issue-904
Fix authentication retry to prevent data gaps after re-auth
2026-01-25 11:55:47 -06:00
Cody Lee 092dd69509 Merge pull request #915 from unpoller/issue-910
Allow PoE-providing ports to be scraped even when disabled
2026-01-25 11:45:57 -06:00
Cody Lee 347467a969 Merge pull request #914 from unpoller/issue-912
Add configuration option to suppress unknown device type messages
2026-01-25 11:28:16 -06:00
Cody Lee 2c20013ac6 Merge pull request #913 from brngates98/master
Add remote API support for UniFi Site Manager
2026-01-25 11:10:09 -06:00
Cody Lee 1df4ba9932 Merge pull request #908 from unpoller/dependabot/go_modules/all-cf2caa1bb8
Bump golang.org/x/crypto from 0.46.0 to 0.47.0 in the all group
2026-01-23 16:10:14 -07:00
Cody Lee f47b463384 Merge pull request #907 from unpoller/dependabot/go_modules/all-0542acbba5 2026-01-13 06:02:42 -06:00
Cody Lee c71cc9a681 Merge pull request #905 from aharper343/fix/nil-dereference 2025-12-24 13:25:50 -06:00
Cody Lee db85517166 Merge pull request #903 from aharper343/feat/traffic-support 2025-12-24 12:55:07 -06:00
Cody Lee bb4a4c823f Merge pull request #902 from svennergr/fix/http-timeout-config 2025-12-23 07:55:44 -06:00
Cody Lee 0d39302c19 Merge pull request #901 from svennergr/feature/protect-logs
feat: add UniFi Protect logs support with Loki integration
2025-12-22 17:14:22 -06:00
Cody Lee 703dff9b1e Merge pull request #900 from svennergr/svennergr/add-syslog 2025-12-22 11:33:22 -06:00
Cody Lee 966cac1053 Merge pull request #899 from unpoller/dependabot/go_modules/all-74468f11a3 2025-12-15 05:56:36 -06:00
Cody Lee 9ba7ddcd11 Merge pull request #898 from unpoller/issue-350-counters
Add byte counters for InfluxDB and Prometheus outputs (issue #350)
2025-12-11 11:02:02 -06:00
Cody Lee f86eb46192 Merge pull request #896 from unpoller/issue-841-fix-multi-wan-speedtests
Fix multi-WAN speed test reporting (issue #841)
2025-12-09 16:53:56 -06:00
Cody Lee 9b5dbef869 Merge pull request #894 from unpoller/enhance-ubb-support-409
Enhance ubb support 409
2025-12-09 11:14:26 -06:00
Cody Lee 750f3f38c2 Merge pull request #893 from unpoller/fix-892-healthcheck-binding
Fix health check port binding conflict (issue #892)
2025-12-09 08:14:48 -06:00
Cody Lee ae4cf462a0 Merge pull request #891 from unpoller/unifi-bump-5-2-0
bump unifi to v5.2.0
2025-12-08 13:59:37 -06:00
Cody Lee 4e6ebee524 Merge pull request #890 from unpoller/docker-healthcheck
Add Docker health check support
2025-12-08 13:25:57 -06:00