Commit graph

327 commits

Author SHA1 Message Date
a4335a047a
allow nonroutable for me 2026-01-23 13:10:12 -06:00
a0ba9285dd
bring in snmpkit 2026-01-23 12:52:17 -06:00
0056d35e9b
ignore more startup errors 2026-01-23 10:08:04 -06:00
3495767b8d
ignore startup errors 2026-01-23 10:06:25 -06:00
80d1864700
mac discovery 2026-01-23 09:22:08 -06:00
7bd3b1f9ec
arp 2026-01-23 08:40:57 -06:00
f402dcb7af
fix mikrotik sensors 2026-01-22 18:07:20 -06:00
639ffd4a2c
better discovery 2026-01-22 17:40:58 -06:00
96fc488023
sanitize snmp data and fix some cpu things 2026-01-22 16:53:01 -06:00
2856a0ccda
improved fallabck detection 2026-01-22 13:43:56 -06:00
17f4558702
implement timescaledb improvements 2026-01-22 13:24:14 -06:00
d401e0b036
mikrotik improvements 2026-01-22 13:05:28 -06:00
218b99972e
more tests 2026-01-22 11:51:35 -06:00
155b38ab94
feat: add APC, Arista, Calix, ADTRAN, Allied Telesis vendor modules
Add 5 new vendor modules for network infrastructure equipment:
- APC: UPS and PDU monitoring (battery, voltage, load, runtime)
- Arista EOS: Data center switches (CPU, memory)
- Calix: GPON/fiber access equipment
- ADTRAN AOS: NetVanta routers and switches
- Allied Telesis: AlliedWare/AlliedWare Plus switches

Total: 53 vendors, 88 profile names

Also cleanup commented AlertNotifier code from previous removal.
2026-01-22 11:00:21 -06:00
aec9807e97
feat: add Meraki/FortiWLC vendors, remove AlertNotifier temporarily
Vendors:
- Add Meraki vendor module (merakimr, merakims, merakimx profiles)
- Add FortiWLC vendor module for Fortinet wireless controllers
- Add cnpilotr profile to existing Cnpilot module
- 48 vendors now covering 77 profile names

Cleanup:
- Remove AlertNotifier module and tests (flaky, to be reimplemented)
2026-01-22 10:40:44 -06:00
74e409d6a6
feat: add Pepwave, Ceragon, Tranzeo, and CMM vendor modules 2026-01-22 10:22:19 -06:00
928055cbe3
feat: add FortiAP, D-Link AP, and Moxa AWK vendor modules 2026-01-22 10:12:49 -06:00
508ad99919
feat(snmp): add 6 more vendor modules (xirrus, alvarion, zyxel_wlc, proxim, altalabs, stellar) 2026-01-22 10:02:42 -06:00
e1bc56e065
feat(snmp): add 6 new vendor modules (cnwave60, cnmatrix, ruckus_sz, deliberant, engenius, grandstream) 2026-01-22 09:53:33 -06:00
7c2014842d
feat: add 5 new SNMP vendor modules
Add vendor-specific SNMP handling for:
- Aerohive (HiveOS wireless APs): client counts, CPU/memory, temperature
- Baicells (LTE CPE): RSRP, RSRQ, SINR, RSSI, tx power, temperature
- Cambium PTP (point-to-point radios): RSL, tx power, data rates, temperature
- Cisco WAP (standalone APs): clients, channel utilization, noise floor
- Netonix (WISP switches): temperatures, fan speed, PSU voltages, PoE power

Each module implements the Vendor behaviour with:
- profile_names/0 for profile matching
- detect_hardware/1 for model identification
- discover_wireless_sensors/1 for sensor discovery
- wireless_oid_defs/0 for debug data collection

All modules registered in vendor registry with comprehensive tests.
2026-01-22 09:42:48 -06:00
0a4482f974
feat: add 5 new vendor modules and fix dialyzer issues
Vendor modules added:
- Aviat (WTM microwave radios)
- Aruba (wireless controllers and APs)
- CiscoWLC (Cisco wireless LAN controllers)
- Teltonika (RUTOS LTE routers)
- Sub10 (mmWave backhaul radios)

Dialyzer fixes:
- Fix unknown type Devices.t/0 in alert.ex and device.ex
- Fix unmatched_return warnings across multiple files
- Add :exq to PLT for Exq function detection
- Remove dead code in base.ex, dynamic.ex, vendor.ex
- Fix Device.t() type spec to allow nil name field

Tests: 1437 tests, 0 failures
Dialyzer: 0 errors
Credo: no issues
2026-01-22 09:34:50 -06:00
8f1752e59c
feat: add more vendor modules and fix sensor discovery
New vendor modules for WISP equipment:
- Ruckus: ZoneDirector, SmartZone, Unleashed controllers
- DragonWave: Horizon Compact/Duo/Quantum microwave
- AirFiber: Ubiquiti AF 5/24/60 series (split from Airos)
- Racom: RAy and RAy3 microwave radios
- Exalt: ExtendAir microwave radios
- SIAE: ALFO 80HD microwave radios

Also fixes:
- sensor_value -> last_value consistency in YAML sensor discovery
- Test warnings (assert defs != [] -> assert [_ | _] = defs)

Total: 17 vendor modules, 162 tests passing
2026-01-22 08:59:50 -06:00
a83e63b3ad
feat: add vendor-specific SNMP modules for WISP equipment
Add 8 new vendor modules for wireless sensor discovery:
- PMP: Cambium PMP 450/430/100 and PTP series
- Mimosa: B5/B5c PTP and A5/A5c PTMP radios
- Siklu: EtherHaul mmWave radios
- Radwin: WinLink and JET series
- UniFi: Ubiquiti UniFi Access Points
- LigoOS: LigoWave and Deliberant devices
- cnPilot: Cambium cnPilot E and R series
- SAF: SAF Tehnika Integra/Lumina/CFIP series

Each module implements the Vendor behaviour with:
- profile_names/0: OS profile identifiers
- detect_hardware/1: device model detection
- wireless_oid_defs/0: sensor OID definitions
- discover_wireless_sensors/1: sensor discovery

Includes comprehensive tests for all modules (104 tests).
2026-01-22 08:48:38 -06:00
56bb855996
refactor: extract vendor-specific SNMP discovery to modules
Mirrors LibreNMS architecture where vendor-specific discovery logic
lives in OS PHP classes. Creates modular vendor system with:

- Vendor behaviour defining callbacks for profile_names, detect_hardware,
  discover_wireless_sensors, wireless_oid_defs
- Epmp vendor module for Cambium ePMP devices
- Airos vendor module for Ubiquiti AirOS devices
- Routeros vendor module for MikroTik devices with table-based discovery
- Registry module for dispatching to appropriate vendor by profile name

Removes 250+ lines of inline vendor code from dynamic.ex.
2026-01-22 08:34:35 -06:00
28a9517a1f
fix: use last_value field so sensor values are saved to database
- Change sensor_value to last_value to match Sensor schema
- Make wireless sensor_index unique using OID suffix
- Values now persist and can be graphed
2026-01-21 17:29:23 -06:00
985e3533df
feat: add additional ePMP sensors matching LibreNMS
Add all sensors that LibreNMS Epmp.php collects:
- GPS tracked/visible satellites
- Transmit power
- Channel width
- Network entry attempts/success/auth failures
2026-01-21 17:25:48 -06:00
605f8c09ec
feat: add discovered sensors table to debug tab
Display discovered sensors in a parsed table format showing type,
description, OID, value with unit, and state description for state
sensors.
2026-01-21 17:18:44 -06:00
74c9544688
feat: add wireless sensor discovery and fix YAML sensor parsing
- Add wireless sensor discovery for ePMP and AirOS devices
- Implement vendor-specific OIDs matching LibreNMS PHP discovery
- Fix table/state sensor discovery to handle map format from Client.walk
- Add discovered_sensors to debug data with values and state descriptions
- ePMP: frequency, clients, rssi, snr (rssi/snr for SM only)
- AirOS: frequency, capacity, ccq, clients, distance, noise-floor, power, quality, rate, rssi, utilization
2026-01-21 17:15:00 -06:00
12875d7f48
fix device table 2026-01-21 14:44:16 -06:00
c26e379dd7
fix device update handler 2026-01-21 14:42:55 -06:00
7656ac7212
import yamls 2026-01-21 14:30:04 -06:00
d68991c484
fix discovery issue 2026-01-21 13:07:30 -06:00
1b7c4f6a6a
update 2026-01-21 12:31:01 -06:00
f8c417a338
feat: add Cisco VTP VLAN discovery
- Add discover_vlans/1 to Cisco profile for VTP MIB discovery
- VTP OIDs: vtpVlanName, vtpVlanState, vtpVlanType
- Falls back to Q-BRIDGE-MIB when VTP not available
- Maps VTP states (operational, suspended, mtuTooBig)
- Maps VTP types (ethernet, fddi, tokenRing, etc.)
- Validates VLAN ID range (1-4094)
2026-01-21 11:32:18 -06:00
7e1fc35f2c
feat: add state sensor polling alongside numeric sensors
- Added state_sensors association to Snmp.Device schema
- Updated get_device_with_associations to preload state_sensors
- Added update_state_sensor and list_state_sensors functions to Snmp context
- Added state sensor polling task in PollerWorker parallel polling
- Poll state sensors via ENTITY-STATE-MIB OIDs every polling interval
- Detect and broadcast state changes (ok/warning/critical/unknown)
- State changes emit device events for real-time UI updates
2026-01-21 11:23:26 -06:00
ba5464332b
fix: use system ping command instead of raw ICMP sockets
- Rewrote Ping module to use system ping binary instead of raw ICMP
  sockets which required CAP_NET_RAW privileges
- Added iputils-ping package to Docker images for production
- Added proper IP address validation before executing ping command
- Updated tests to account for 1 second minimum timeout of system ping
- System ping binary is setuid root and works without elevated privileges
2026-01-21 11:15:59 -06:00
8509a4a64c
feat: display neighbor IP address in device neighbors tab 2026-01-21 11:01:48 -06:00
1fc066d95b
feat: add memory pool and storage discovery (Phase 1.5)
- Add snmp_memory_pools table and MemoryPool schema
- Add snmp_storage table and Storage schema
- Add discover_memory_pools/1 for HOST-RESOURCES-MIB RAM/swap
- Add discover_storage/1 for HOST-RESOURCES-MIB disk storage
- Add comprehensive tests for schema validation and discovery
- Completes Phase 1 of discovery improvements
2026-01-21 10:57:08 -06:00
45ddcdac80
feat: add physical inventory discovery (Phase 1.4)
- Create snmp_physical_entities table with migration
- Add PhysicalEntity schema with entity_class validation
- Support parent/child hierarchy via parent_entity_id
- Implement discover_physical_entities/1 in Base profile
- Discover chassis, modules, PSUs, fans from ENTITY-MIB
- Map entity class integers to string names
- Add 10 schema tests and 4 discovery tests
- Fix flaky AlertNotifier test with unique names and mailbox clearing
2026-01-21 10:46:27 -06:00
1cf6f327ea
feat: add IP address discovery (Phase 1.3)
- Create snmp_ip_addresses table with migration
- Add IpAddress schema with ip_type validation (ipv4/ipv6)
- Add prefix_length validation based on ip_type
- Implement discover_ip_addresses/1 in Base profile
- Extract IP addresses from IP-MIB ipAdEntTable
- Support multiple IPs per interface with subnet masks
- Add 12 schema tests and 4 discovery tests
2026-01-21 10:36:19 -06:00
579a7bac21
add VLAN schema, migration, and discovery 2026-01-21 10:31:21 -06:00
c3e26a44d6
add state sensor schema, migration, and discovery 2026-01-21 10:25:01 -06:00
7c660169b7
better mib handling and tests 2026-01-21 10:07:07 -06:00
3abd70e133
use password for user regi 2026-01-21 09:13:08 -06:00
1d45699240
discovery no longer deletes historical data 2026-01-20 17:29:58 -06:00
c54b5d81bb
more dark mode 2026-01-20 17:23:11 -06:00
fbad8c64b2
dark mode 2026-01-20 16:56:49 -06:00
23c92b2c44
more tests 2026-01-20 16:38:53 -06:00
a0c6889a22
refactor: improve code quality in ApiTokens.update_last_used
Reduced nesting and extracted helper functions to address credo
warnings. The logic remains the same:
- Test environment: synchronous update
- Production: async Task with sandbox support

Fixes credo warnings:
- Reduced function body nesting (was 3, now 2)
- Extracted spawn_async_update and helper functions
2026-01-20 15:38:07 -06:00
a32a50a5fd
fix: make ApiTokens.update_last_used synchronous in test env
The async Task.start pattern was causing DBConnection.Ownership errors
when tests finished before the spawned Task could complete its database
update. By making the update synchronous in test environment, we ensure
the database connection is properly managed within the test process.

In production, we still use the async Task.start to avoid blocking
requests when updating last_used_at timestamps.

Fixes all "owner #PID<...> exited" errors in test suite.
2026-01-20 15:30:14 -06:00