towerops/lib
Graham McIntire 1c0cccdf25
feat: add UniFi channel-to-frequency dynamic conversion
Add TIER 3 MEDIUM priority dynamic frequency sensor discovery for Ubiquiti UniFi APs.
Implements channel-to-frequency conversion matching LibreNMS behavior exactly.

Implementation:
- discover_frequency_sensors/1: Orchestrates discovery with `with` for flat control flow
- fetch_channels/1: Walks channel OID (.1.3.6.1.4.1.41112.1.6.1.2.1.4)
- fetch_radio_names/1: Walks radio name OID (.1.3.6.1.4.1.41112.1.6.1.2.1.1)
- build_frequency_sensors/2: Converts channels to frequency sensors
- channel_to_frequency/1: Module attribute map lookup (29 Wi-Fi channels)
  - 2.4GHz: Channels 1-14 → 2412-2484 MHz
  - 5GHz: Channels 34-165 → 5170-5825 MHz
  - Unknown channels filtered out (return 0 → rejected)
- Frequency sensors added alongside static sensors
- Per-radio sensors with descriptive names (e.g., "Frequency (ng)")

Code Quality:
- Refactored to reduce cyclomatic complexity (map lookup vs case statements)
- Extracted helper functions to reduce nesting depth
- Pattern matching in tests instead of length/1 checks
- All Credo checks passing without disabling rules

Testing:
- Added comprehensive test coverage (16 tests, all passing)
- Tests 2.4GHz channel conversion (1, 6, 11)
- Tests 5GHz channel conversion (36, 149, 165)
- Tests unknown channel filtering (999 → filtered out)
- Tests integration with static sensors (10 static + 2 frequency = 12 total)
- Tests graceful handling of channel walk failures
- Mox-based SNMP adapter mocking

Impact:
- Dynamic frequency monitoring enables accurate channel tracking
- Handles AP channel changes (auto-DFS, manual config changes)
- Static OID approach was inaccurate (channel changes not reflected)

Source:
- LibreNMS LibreNMS/OS/Unifi.php discoverWirelessFrequency/pollWirelessFrequency
- LibreNMS LibreNMS/Modules/Wireless.php channelToFrequency lookup table

Priority: TIER 3 MEDIUM (3-5 hour effort, vendor module enhancement)
Gap Status: UniFi parity 80% → 90%
Result: TIER 3 COMPLETE - All Ubiquiti platform gaps resolved

Files:
- lib/towerops/snmp/profiles/vendors/unifi.ex
- test/towerops/snmp/profiles/vendors/unifi_test.exs
- CHANGELOG.txt
2026-02-12 09:05:00 -06:00
..
mix/tasks Remove debugging logs, fix Mix.env call 2026-02-04 12:10:48 -06:00
snmpkit security: fix critical vulnerabilities and atom exhaustion risks 2026-02-08 10:30:30 -06:00
towerops feat: add UniFi channel-to-frequency dynamic conversion 2026-02-12 09:05:00 -06:00
towerops_web test: expand agent channel coverage from 8% to 66% 2026-02-11 16:52:12 -06:00
snmp_lib.ex bring in snmpkit 2026-01-23 12:52:17 -06:00
snmp_mgr.ex credo fixes 2026-01-23 14:01:52 -06:00
snmpkit.ex complete overhaul of snmp engine 2026-01-30 10:41:07 -06:00
towerops.ex init 2025-12-21 11:10:43 -06:00
towerops_native.ex complete overhaul of snmp engine to C nif 2026-01-30 12:27:12 -06:00
towerops_web.ex feat: implement gettext infrastructure (Phase 1) 2026-02-02 09:40:32 -06:00