Commit graph

204 commits

Author SHA1 Message Date
8752dfec49 fix: netbox url field type, gaiia ipRange→block, remove unknown webhook log 2026-02-14 17:44:01 -06:00
a3730db579 i18n: add Spanish locale with full translations, language selector, and locale hook 2026-02-14 17:44:01 -06:00
29c2039832 Auto-resolve device_up recovery alerts on creation
device_up alerts are informational recovery events, not ongoing issues.
Previously they were created without resolved_at, inflating the
unresolved alert count. Now they're born resolved.

Includes a data migration to fix existing stale device_up alerts.
2026-02-14 14:53:17 -06:00
61f803afe5 Add language user setting (default: English) 2026-02-14 14:53:17 -06:00
db40a3e5b7 feat: show human-readable sync status messages for integrations
- Added last_sync_message field to integrations schema
- Gaiia sync: shows item counts on success, friendly error on failure
- Preseem sync: shows AP/device counts on success, friendly error on failure
- Error messages translated from technical errors to user-friendly text
- Message displayed on integration card next to status badge
- Exposed in REST API response
2026-02-14 14:11:02 -06:00
5df5c97c45 feat: add geographic location to sites with geocoding, address fields, and Leaflet.js network map 2026-02-14 13:07:14 -06:00
c37ae76ceb fix: device index uses device_role instead of nonexistent device_type, last_checked_at instead of last_seen_at; make TimescaleDB migrations conditional for dev/test 2026-02-14 10:13:03 -06:00
9e7ee5099d refactor: fix all credo strict issues, format all code, fix broken routes
- Fix broken route paths in dashboard (/discovery, /subscribers/trace, /config-changes)
- Fix insights empty state settings link (org-scoped route)
- Add underscores to all 86400 literals across 6 files
- Alphabetize aliases in search.ex and agent_channel.ex
- Extract changelog parser helper to reduce nesting
- Extract dashboard impact calculation to reduce nesting
- Refactor agent_channel config change detection (pattern match, extract function)
- Combine double Enum.reject into single call in trace.ex
- Fix line length in trace.ex search query
- Replace length/1 > 0 with != [] in trace_live
- Run mix format on all files
2026-02-13 19:34:40 -06:00
b07c322dc9 docs: update changelogs with navigation and visual polish 2026-02-13 19:18:36 -06:00
5a6643c6aa docs: update changelogs with UX polish and activity feed improvements 2026-02-13 19:13:32 -06:00
dec6f0f271 feat: rewrite marketing landing page for WISP operators
- Pain point section: disconnected tools, slow impact assessment
- WISP-specific features: impact dashboard, subscriber trace, alert triage, config tracking
- Pricing tiers: Starter (free/10 devices), Pro (/dev/mo), Business (/dev/mo)
- Use case sections: NOC, Help Desk, Owner perspectives
- Tech details: 786 device profiles, secure agent arch, SNMP v1/v2c/v3
- Updated both changelogs
2026-02-13 19:07:04 -06:00
5fb585d4fd docs: update changelogs with all new features 2026-02-13 18:59:25 -06:00
9c266e57ff feat: wire up Trace and Activity Feed routes + nav 2026-02-13 18:50:28 -06:00
c512f30e5a feat: add device list health indicators
- Health status dot (green/yellow/red/gray) from worst-case check state
- Relative 'last seen' with color-coded staleness thresholds
- Response time badge from latest monitoring check
- Subscriber count badge from Gaiia inventory items
- Batch queries to avoid N+1: Monitoring.get_device_health_summary/1,
  Monitoring.get_device_latest_response_times/1,
  Gaiia.get_device_subscriber_counts/1
2026-02-13 18:14:29 -06:00
5a3ede1f71 feat: config change → performance correlation system (Roadmap #2)
- New config_change_events table linking backup diffs to time windows
- ConfigChanges context with record/list functions and date filters
- Auto-detect changed sections from MikroTik config diffs
- Agent channel emits change events after backup creation
- Correlator engine: 2h before / 4h after QoE metric comparison
- Creates suspect_config_change insights on significant degradation
- Config Timeline LiveView with chart data, change list, detail view
- Device page: Config Timeline tab + Recent Config Changes card
- Dashboard: Recent Config Changes section with impact indicators
- Fix pre-existing integrations_live.html.heex scope bug
2026-02-13 17:56:55 -06:00
02f837ca5b
fix: replace em-dashes with hyphens in changelog to avoid encoding issues 2026-02-13 17:48:07 -06:00
314d93f3ab
docs: update changelogs for impact dashboard and integration nav improvements 2026-02-13 16:45:45 -06:00
872bef3512
feat: add 12/24-hour time format setting with consistent timezone display
wire time_format into scope, add settings UI selector, change defaults
to 24h, and replace all user-facing Calendar.strftime calls with
centralized TimeHelpers using the user's timezone and time format.
2026-02-13 15:16:29 -06:00
a6d5563b41
docs: update changelogs for command center dashboard feature 2026-02-13 14:56:01 -06:00
20f5f48372
feat: command center dashboard with unified insights and contextual enrichment
Transform the dashboard into a single-pane-of-glass command center that
blends operational metrics with business context from Gaiia subscriber data.

- Extend insight schema with multi-source support (snmp, gaiia, system)
- Add Oban workers for automated insight generation (device health, system, gaiia)
- New Dashboard context with health score computation and site summaries
- Rewrite dashboard LiveView with health overview, alert/insight feeds, site grid
- Add source filter pills for insights with URL state management
- Add metrics bar to site detail pages (device count, alerts, subscribers, MRR)
- Add subscriber/MRR context to alert list site links
- Add subscriber badges to device list site headers
- Real-time PubSub updates for alerts on dashboard
2026-02-13 14:52:49 -06:00
ee277a457e
update changelogs for gaiia integration 2026-02-13 13:29:54 -06:00
934ee5bb86
add gaiia outage impact analysis (stage 5)
Computes subscriber impact when device alerts fire. Three analysis
layers: device-level (inventory item -> direct subscriber) and
site-level (network site -> all subscribers at tower). Impact data
stored as JSONB on alert records and displayed as badges on alert list.
2026-02-13 11:21:59 -06:00
3cd2303b6f
add gaiia integration stages 1-2: sync engine and entity mapping UI
Stage 1 - Foundation:
- GraphQL client with Relay cursor pagination and rate limiting
- 4 Ecto schemas: accounts, network sites, inventory items, billing subscriptions
- Gaiia context with upsert operations preserving user mappings
- Sync module orchestrating full organization sync
- Oban cron worker running every 15 minutes
- Migration creating 4 tables with org-scoped unique constraints

Stage 2 - Entity Mapping:
- GaiiaMappingLive with two tabs (Network Sites / Inventory Items)
- Match suggestion engine (IP/name matching with confidence levels)
- Inline search and link/unlink UI following Preseem devices pattern
- Filter by all/mapped/unmapped with URL-driven state
- Amber suggestion badges for potential matches
2026-02-13 10:31:32 -06:00
860fb7c3b6
Merge remote-tracking branch 'origin/main' into feature/preseem-integration
# Conflicts:
#	lib/towerops_web/live/device_live/show.ex
#	lib/towerops_web/live/device_live/show.html.heex
2026-02-13 09:11:45 -06:00
9a19b9b0a5
add preseem insights schema, generation, and queries 2026-02-13 08:53:01 -06:00
df2ca42404
add preseem device baselines and fleet profiles schemas 2026-02-13 08:31:15 -06:00
4174987a88 feat: complete DevicePollerWorker to CheckExecutorWorker migration
Completes full migration from device-level polling to per-check polling.

Migration Changes:
- Removed DevicePollerWorker scheduling from device lifecycle
- Checks automatically scheduled when created
- Discovery creates and schedules checks atomically

New Functions:
- Monitoring.stop_device_checks/1: Cancel all check jobs for device
- Monitoring.disable_device_checks/1: Disable checks when SNMP off

Discovery Integration:
- All create_*_check functions now schedule checks after creation

JobHealthCheckWorker Updates:
- Removed DevicePollerWorker recovery logic
- Only recovers DeviceMonitorWorker jobs now

Test Updates:
- Marked DevicePollerWorkerTest as skipped (deprecated)
- Updated JobHealthCheckWorkerTest expectations

All 6953 tests passing, 0 failures

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 17:52:33 -06:00
5118b7eb56
add preseem subscriber metrics schema and migration 2026-02-12 17:12:53 -06:00
26e19b00f7
add preseem sync logs schema and migration 2026-02-12 17:12:19 -06:00
5f17d5aed1
add preseem access points schema and migration 2026-02-12 17:11:36 -06:00
75d64d8772
feat: add check creation from discovery and backfill tool (Phase 5)
Completes Phase 5 of the unified checks system by enabling automatic check
creation during SNMP discovery and providing a backfill tool for existing devices.

Discovery Integration:
- create_checks_from_discovery/2: Creates checks for all discovered entities
  (sensors, interfaces, processors, storage) after SNMP discovery completes
- Links each check to its source entity via source_id for data lookup
- Returns detailed results with counts per type and error tracking
- Logs creation results with total counts and any failures

Helper Functions:
- create_sensor_check/2: Creates snmp_sensor checks with config
- create_interface_check/2: Creates snmp_interface checks
- create_processor_check/2: Creates snmp_processor checks
- create_storage_check/2: Creates snmp_storage checks

All checks configured with:
- 60-second poll intervals (default)
- Auto-discovery source type
- Enabled by default
- Type-specific configuration in JSONB config field

Backfill Tool:
- mix backfill.checks: Creates checks for existing SNMP-enabled devices
- Supports --dry-run mode for preview
- Shows counts per device (sensors, interfaces, processors, storage)
- Reports success/failure counts and detailed errors
- Safely handles devices without discovery data
- Reduced nesting depth using cond and helper functions for credo compliance

This enables the unified monitoring system to work with both new discoveries
and existing devices, ensuring all SNMP data can be monitored through the
unified checks interface.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 17:04:06 -06:00
d7741cdc0e
feat: implement unified checks system (Phase 1-4)
This commit implements the unified checks architecture that consolidates
SNMP monitoring with HTTP/TCP/DNS checks under a single "check" abstraction,
enabling consistent graphing, alerting, and management across all check types.

Database Changes:
- Add source_type and source_id to checks table for tracking auto-discovered
  vs manually created checks
- Add value field to check_results for storing numeric sensor readings
- Maintain backward compatibility with existing check_results data

New SNMP Executors:
- SnmpSensorExecutor: Poll sensor OIDs and return formatted values with
  status determination (OK/WARNING/CRITICAL based on limits)
- SnmpInterfaceExecutor: Poll interface stats (bandwidth, packets, errors)
- SnmpProcessorExecutor: Poll CPU/processor usage
- SnmpStorageExecutor: Poll disk/memory usage with percentage calculations

Check Execution Worker:
- CheckExecutorWorker: Unified Oban worker that dispatches to appropriate
  executor based on check_type (snmp_sensor, snmp_interface, http, tcp, etc.)
- Self-schedules next execution with distributed polling offsets
- Records results in check_results TimescaleDB hypertable
- Updates check state (OK/WARNING/CRITICAL/UNKNOWN)

Discovery Integration:
- Auto-creates checks during SNMP discovery for sensors, interfaces,
  processors, and storage
- Links checks to source entities via source_id for data lookup
- Enables/disables checks based on discovery results

UI Enhancements:
- Checks tab on device detail page with grouped display
- FormComponent for adding manual HTTP/TCP/DNS checks
- Empty state with "Run Discovery" prompt
- Check status badges and last checked times

Graphing:
- Update GraphLive to accept check_id parameter
- Query check_results table for time-series data
- Support all check types (SNMP, HTTP response times, etc.)

Testing:
- Comprehensive test suite for SnmpSensorExecutor (5 tests)
- Test suite for CheckExecutorWorker (7 tests)
- Test coverage for discovery check creation (6 tests)
- Remove deprecated monitoring_test.exs testing old API

Bug Fixes:
- Fix SNMP executors reading credentials from correct Device schema fields
  (device.snmp_version instead of device.snmp_device.version)
- Update agent channel test to query MonitoringCheck table directly

Code Quality:
- Extract add_snmp_credentials helper to reduce cyclomatic complexity
- Use map-based lookups for sensor formatting and check type grouping
- Apply pattern matching in dispatcher to reduce complexity
- All credo checks passing with no issues

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 16:58:40 -06:00
39f0ffe253
add integrations schema with encrypted credentials 2026-02-12 16:54:14 -06:00
291ecd1054
feat: add full-featured monitoring platform (HTTP/TCP/DNS checks)
Implements Icinga2-style generic check system for comprehensive monitoring.

Phoenix Backend:
- Generic checks table with JSONB config for all check types
- TimescaleDB check_results hypertable for time-series data
- Check executors (HTTP, TCP, DNS)
- CheckWorker with self-scheduling and state transitions
- Extended alerts system for check-based alerting

Check Types: HTTP/HTTPS, TCP, DNS
Architecture: Icinga2 Checkable pattern, soft/hard states, flapping detection

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 14:05:31 -06:00
00c366ac9a
feat: add LLDP, CDP, MAC, and ARP evidence collectors
LLDP/CDP evidence (0.95 confidence) from snmp_neighbors.
MAC evidence (0.7) cross-references MAC tables with device
interface MACs. ARP evidence (0.6) matches by IP and MAC.
Self-links excluded. Unmatched entries tracked as discovered.
2026-02-12 12:55:39 -06:00
c6b271d204
docs: update changelogs for BruteForceProtection fix 2026-02-12 12:54:25 -06:00
cd6f2153ce
fix: reload device stream when switching back to existing devices tab 2026-02-12 12:47:30 -06:00
3abcbebdd9
feat: add topology inference database tables
Add device_role/device_role_source to devices table.
Create device_links and device_link_evidence tables for
persistent topology model.
2026-02-12 12:45:36 -06:00
4e58bf24dd
docs: update changelogs for graceful shutdown handling 2026-02-12 12:18:15 -06:00
19ceae0b4e
feat: Phase 1 Quick Wins - 11 vendor profiles implemented
Completed Phase 1 of comprehensive coverage analysis, adding support for 11
vendor profiles across 6 vendors in ~24 hours of implementation time.

**New Vendor Modules:**
- VyOS (vyos.ex) - VyOS and Vyatta router support
- Edgeswitch (edgeswitch.ex) - Ubiquiti EdgeSwitch/EdgePoint/USW series
- Omnitron (omnitron.ex) - Omnitron iConverter optical networking

**Enhanced Vendor Modules:**
- Adva (adva.ex) - Added adva-alm profile, now 7 total profiles
- Unifi (unifi.ex) - Added unifi-usp (SmartPower) profile
- APC (apc.ex) - Added aos-emu2 (Environmental Monitoring Unit) profile
- HP (hp.ex) - Added comware and procurve profiles, now 11 total
- Dell (dell.ex) - Added powerconnect profile
- Powervault (powervault.ex) - Added powervault profile variant

**New YAML Profiles:**
- adva-fsp150cp.yaml - ADVA FSP150CP optical transport
- Plus corresponding os_detection profiles for all new vendors

**Updated YAML Profiles:**
- comware.yaml, procurve.yaml - Comprehensive HP legacy switch support
- powerconnect.yaml, powervault.yaml - Dell legacy product support
- adva-alm.yaml - Enhanced Adva optical support

**Test Coverage:**
- 54 new tests across all new modules
- All 6857 tests passing
- Comprehensive coverage for each vendor module

**Profiles Added (11 total):**
1. vyos, vyatta (VyOS routers)
2. adva-alm (Adva optical)
3. edgeswitch, unifi-usp (Ubiquiti)
4. comware, procurve (HP legacy switches)
5. powerconnect, powervault (Dell legacy)
6. aos-emu2 (APC environmental)
7. omnitron-iconverter (Omnitron optical)

**Impact:**
- Closes 11-profile gap from coverage analysis
- Improves enterprise switch coverage (HP/Dell legacy)
- Enhances optical networking support (Adva, Omnitron)
- Strengthens Ubiquiti portfolio (EdgeSwitch, USP)
- Adds network router support (VyOS)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 10:52:51 -06:00
f44510bf47
docs: update user-facing changelog and document changelog maintenance
Updated priv/static/changelog.txt with all recent changes from CHANGELOG.txt
in concise, user-facing format. Enhanced CLAUDE.md to document the dual
changelog system (technical CHANGELOG.txt vs user-facing priv/static/changelog.txt)
with clear guidelines on what to include in each and when to update them.
2026-02-12 10:38:27 -06:00
aa1bac0d46
perf: batch inserts, selective LiveView reloading, and database indexes for scale
Replace individual Repo.insert() with Repo.insert_all() for sensor readings,
interface stats, processor readings, and storage readings in agent channel and
device poller worker. Add partial/composite database indexes for common query
patterns. Dashboard now uses GROUP BY aggregation instead of loading all devices.
DeviceLive.Show only reloads data for the active tab on PubSub events.
DeviceLive.Index debounces status changes and skips quota queries on updates.
Agent polling preloads filtered to monitored sensors/interfaces only.
2026-02-12 10:16:10 -06:00
dd3a6234cb
feat: complete WISP vendor coverage (ePMP, Raisecom, Netonix)
**1. Consolidated ePMP YAML profiles:**
- Merged enhancements from cambium-epmp.yaml into epmp.yaml
- Added GPS satellite count sensors (tracked/visible)
- Added proper state_name fields for state sensors
- Improved field naming (descr vs type, divisor vs precision)
- Deleted duplicate cambium-epmp.yaml file

**2. Implemented Raisecom vendor module:**
- Created lib/towerops/snmp/profiles/vendors/raisecom.ex
- Fills major 0% coverage gap for Asia-Pacific WISP market
- Hardware detection via RAISECOM-SYSTEM-MIB with sysDescr fallback
- Sensor discovery handled by existing YAML profiles (15+ sensors):
  - CPU utilization, memory pools
  - Fan speed and state monitoring
  - Voltage sensors with thresholds
  - Power supply state monitoring
  - Config load state tracking
- Comprehensive test coverage (8 tests, all passing)

**3. Verified Netonix coverage:**
- YAML profile matches LibreNMS 100% (PoE status, voltage, temp, fan, power, current)
- Vendor module provides additional scalar sensors beyond LibreNMS
- Coverage exceeds LibreNMS baseline

**4. Investigated Tarana:**
- No SNMP support in LibreNMS (newer vendor, likely cloud-managed)
- Would require vendor MIBs and documentation to implement

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 09:55:21 -06:00
d84a685878
fix: sync UserSettingsLive modal state to URL for browser navigation
Update UserSettingsLive to properly handle browser back/forward buttons
by syncing all modal state to URL parameters.

Changes:
- Update handle_params/3 to read modal param and set modal states
- Add build_settings_path/2 helper to construct URLs with preserved params
- Update all modal show/close handlers to use push_patch instead of assign:
  - add_token modal
  - token_created modal (shown after creating token)
  - revoke_all modal
  - add_device modal (TOTP)
  - device_qr modal (shown after creating device)
  - recovery_codes modal

Behavior:
- Browser back button now closes modals without navigating away
- URL reflects current modal state (?modal=add_token, etc.)
- Tab and page params preserved when opening/closing modals
- Bookmarkable URLs restore exact modal state

Follows idiomatic Phoenix LiveView pattern using push_patch/2 and
handle_params/3 as documented in CLAUDE.md.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 09:26:45 -06:00
156d1a4fad
feat: add AirFiber AF-LTU optical power sensors (per-chain RX power, TX EIRP)
Add TIER 3 MEDIUM priority optical power sensors for comprehensive AF-LTU link diagnostics.
Per-chain monitoring enables detection of imbalanced signals and fiber issues.

AirFiber AF-LTU additions:
- RX Power Chain 0: Received optical power chain 0 in dBm
  OID: .1.3.6.1.4.1.41112.1.10.1.4.1.5
- RX Power Chain 1: Received optical power chain 1 in dBm
  OID: .1.3.6.1.4.1.41112.1.10.1.4.1.6
- RX Ideal Power Chain 0: Ideal received power chain 0 in dBm
  OID: .1.3.6.1.4.1.41112.1.10.1.4.1.7
- RX Ideal Power Chain 1: Ideal received power chain 1 in dBm
  OID: .1.3.6.1.4.1.41112.1.10.1.4.1.8
- TX EIRP: Transmit effective isotropic radiated power in dBm
  OID: .1.3.6.1.4.1.41112.1.10.1.2.6

Impact:
- Per-chain monitoring detects imbalanced signal levels across RF chains
- RX Ideal Power comparison identifies suboptimal alignment or hardware issues
- TX EIRP monitoring ensures regulatory compliance and proper power output
- Enables proactive fiber and optical component troubleshooting

Implementation:
- All sensors use dbm sensor type for dBm units
- OIDs match LibreNMS LibreNMS/OS/AirosAfLtu.php exactly
- No divisors needed (values already in dBm)

Priority: TIER 3 MEDIUM (6-8 hour effort, enhanced diagnostics)
Gap Status: AF-LTU parity 80% → 90%
Remaining: UniFi channel-to-frequency conversion (requires vendor module work)

Files:
- priv/profiles/os_discovery/airos-af-ltu.yaml
- CHANGELOG.txt
2026-02-12 08:54:50 -06:00
1ec3ca16ae
feat: add AirFiber wireless metrics (frequency, distance, capacity, RSSI, SNR)
Add TIER 2 HIGH priority wireless metrics for comprehensive AirFiber point-to-point monitoring.
These sensors enable capacity planning, link budget analysis, and interference detection.

AirFiber AF60 additions:
- Frequency: Operating frequency in MHz (OID: .1.3.6.1.4.1.41112.1.11.1.1.2)
- Distance: Link distance in km, divisor 1000 (OID: .1.3.6.1.4.1.41112.1.11.1.3.1.15)
- TX Capacity: Transmit capacity in Mbps, divisor 1000 (OID: .1.3.6.1.4.1.41112.1.11.1.3.1.7)
- RX Capacity: Receive capacity in Mbps, divisor 1000 (OID: .1.3.6.1.4.1.41112.1.11.1.3.1.8)
- Local RSSI: Local received signal strength in dBm (OID: .1.3.6.1.4.1.41112.1.11.1.3.1.3)
- Remote RSSI: Remote received signal strength in dBm (OID: .1.3.6.1.4.1.41112.1.11.1.3.1.18)
- Local SNR: Local signal-to-noise ratio in dB (OID: .1.3.6.1.4.1.41112.1.11.1.3.1.4)
- Remote SNR: Remote signal-to-noise ratio in dB (OID: .1.3.6.1.4.1.41112.1.11.1.3.1.19)

AirFiber AF-LTU additions:
- Frequency: Operating frequency in MHz (OID: .1.3.6.1.4.1.41112.1.10.1.2.2)
- Distance: Link distance in km, divisor 1000 (OID: .1.3.6.1.4.1.41112.1.10.1.4.1.23)
- TX Capacity: Transmit capacity in Mbps, divisor 1000 (OID: .1.3.6.1.4.1.41112.1.10.1.4.1.3)
- RX Capacity: Receive capacity in Mbps, divisor 1000 (OID: .1.3.6.1.4.1.41112.1.10.1.4.1.4)

Impact:
- Distance enables link budget analysis and alignment verification
- RSSI/SNR enable interference detection and signal quality monitoring
- Capacity metrics enable throughput monitoring and bandwidth planning
- Frequency confirms correct channel selection

Implementation:
- All sensor definitions match LibreNMS exactly
- Divisors applied for proper unit conversion (1000 for distance/capacity)
- Source: LibreNMS LibreNMS/OS/AirosAf60.php, LibreNMS/OS/AirosAfLtu.php

Priority: TIER 2 HIGH (4-6 hour effort, capacity planning and troubleshooting)
Gap Status: AF60 parity 50% → 80%, AF-LTU parity 60% → 80%
Next: TIER 3 - UniFi channel-to-frequency conversion, AF-LTU optical power sensors

Files:
- priv/profiles/os_discovery/airos-af60.yaml
- priv/profiles/os_discovery/airos-af-ltu.yaml
- CHANGELOG.txt
2026-02-12 08:52:49 -06:00
b0458d1923
feat: add critical AirFiber MCS/modulation rate state sensors
Add TIER 1 CRITICAL link quality state sensors for Ubiquiti AirFiber point-to-point radios.
These sensors are essential for diagnosing link quality degradation on PtP wireless links.

AirFiber AF60 additions:
- TX MCS Rate: 9 states (1X-9X) showing transmit modulation level
  OID: .1.3.6.1.4.1.41112.1.11.1.3.1.5
  States: 1-2 warning, 3-4 degraded, 5-9 ok
- RX MCS Rate: 9 states (1X-9X) showing receive modulation level
  OID: .1.3.6.1.4.1.41112.1.11.1.3.1.6
  States: 1-2 warning, 3-4 degraded, 5-9 ok
- Active Link: 2 states (Main/Backup) showing active link selection
  OID: .1.3.6.1.4.1.41112.1.11.1.3.1.2
  States: 1=Main ok, 2=Backup degraded

AirFiber AF-LTU additions:
- TX Modulation Rate: 7 QAM states (1X QPSK+SFBC through 12X 4096QAM)
  OID: .1.3.6.1.4.1.41112.1.10.1.4.1.1
  States: 1-2 warning (QPSK), 4-6 degraded (16/64QAM), 8-12 ok (256/1024/4096QAM)
- RX Modulation Rate: 7 QAM states (1X QPSK+SFBC through 12X 4096QAM)
  OID: .1.3.6.1.4.1.41112.1.10.1.4.1.2
  States: 1-2 warning, 4-6 degraded, 8-12 ok

Impact:
- MCS/modulation rate is THE key indicator of point-to-point link health
- Without these sensors, operators cannot diagnose why throughput changed
- Links drop from high QAM to low QAM due to interference or alignment issues
- Production monitoring gaps for PtP wireless now resolved

Implementation:
- State sensor definitions match LibreNMS exactly
- Uses generic values for alerting: 0=ok, 1=degraded, 2=warning/critical
- Source: LibreNMS includes/discovery/sensors/state/airos-af*.inc.php

Priority: TIER 1 CRITICAL (2-4 hour effort, production impact)
Gap Status: AF60 parity 35% → 50%, AF-LTU parity 40% → 60%
Next: TIER 2 - Add RSSI, SNR, frequency, distance, capacity sensors

Files:
- priv/profiles/os_discovery/airos-af60.yaml
- priv/profiles/os_discovery/airos-af-ltu.yaml
- CHANGELOG.txt
2026-02-12 08:49:15 -06:00
e3c43898ff
feat: add Dell UPS power sensor and HP BladeSystem/Moonshot complete monitoring
Completed Tier 3/4 implementation. Added Dell UPS power consumption tracking and
comprehensive HP BladeSystem/Moonshot blade chassis monitoring. Discovery: Dell
Enterprise Servers (iDRAC) already have excellent sensor coverage.

Files Changed:
- priv/profiles/os_discovery/dell-ups.yaml (enhanced)
  Added Dell UPS power consumption sensor:
  OID: .1.3.6.1.4.1.674.10902.2.120.2.6.0 (physicalOutputPresentConsumption)
  MIB: DELL-SNMP-UPS-MIB
  Gap: MEDIUM (missing power tracking) → RESOLVED
  Parity: 80% → 100%

- priv/profiles/os_discovery/hpblmos.yaml (enhanced)
  Created comprehensive HP BladeSystem/Moonshot sensor profile (4 sensor types):
  Temperature:
    - Walk OID: .1.3.6.1.4.1.232.22.2.3.1.2.1.5 (description)
    - Value OID: .1.3.6.1.4.1.232.22.2.3.1.2.1.6 (temperature reading)
  Power:
    - Presence: .1.3.6.1.4.1.232.22.2.5.1.1.1.16
    - Current: .1.3.6.1.4.1.232.22.2.5.1.1.1.10 (PSU output wattage)
    - High limit: .1.3.6.1.4.1.232.22.2.5.1.1.1.9 (max wattage)
  Fan State:
    - Presence: .1.3.6.1.4.1.232.22.2.3.1.3.1.8
    - Status: .1.3.6.1.4.1.232.22.2.3.1.3.1.11
    - States: other, ok, degraded, failed
  PSU State:
    - Presence: .1.3.6.1.4.1.232.22.2.5.1.1.1.16
    - Status: .1.3.6.1.4.1.232.22.2.5.1.1.1.17
    - States: other, ok, degraded, failed
  Skip logic: Only monitors present components (presence != 2)
  Gap: CRITICAL (zero sensor coverage) → RESOLVED
  Parity: 0% → 80%

- CHANGELOG.txt (updated)
  Documented Tier 3/4 completion and Dell server discovery

Analysis Discovery - Dell Enterprise Servers:
- Found existing drac.yaml profile with comprehensive sensor coverage:
  - Temperature: 4 types (chassis, CMC ambient, CMC processor, temperature probes)
  - Voltage: 2 types (PSU voltage, input voltage)
  - Current: 3 types (chassis, PSU, amperage probes filtered for wattage)
  - Power: 5 types (current, peak, potential, idle, max)
  - Fanspeed: Cooling device monitoring with thresholds
  - State: Extensive monitoring (global, IDSDM card, intrusion, IOM, etc.)
- Previous gap analysis incorrectly reported 0% parity
- Actual parity: 95%+ (Dell iDRAC/OpenManage fully supported)

Impact:
- Dell UPS: Complete monitoring capability (state + runtime + power)
- HP BladeSystem/Moonshot: Hardware monitoring for blade chassis
- Dell Servers: Confirmed excellent existing coverage

Business Value:
- Blade chassis monitoring for HP c-Class/Moonshot environments
- UPS capacity planning and load tracking
- Dell rack/blade/tower servers already fully monitored via iDRAC

Parity Achievement:
- Tier 3/4 Complete: Dell UPS (80→100%), HP hpblmos (0→80%)
- Dell Servers: Already 95%+ (existing drac.yaml profile)

Remaining: Dell PowerVault (requires text parsing in vendor module - future work)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 08:24:42 -06:00
95e3870fec
feat: add Force10 FTOS and optical transceiver monitoring (ProCurve, Comware)
Completed Tier 1 (critical network switches) and Tier 2 (optical transceiver monitoring)
from Phase 3 implementation plan. All major network switches now have comprehensive sensor
coverage including temperature and fiber optic link diagnostics.

Files Changed:
- priv/profiles/os_discovery/ftos.yaml (enhanced)
  Added Dell Force10 FTOS temperature monitoring for all 3 series:
  - S-Series: Stack unit temperature (chStackUnitTemp)
    OID: .1.3.6.1.4.1.6027.3.10.1.2.2.1.14
    MIB: F10-S-SERIES-CHASSIS-MIB
  - C-Series: Card temperature (chSysCardTemp)
    OID: .1.3.6.1.4.1.6027.3.8.1.2.1.1.5
    MIB: F10-C-SERIES-CHASSIS-MIB
  - E-Series: Card upper + lower temperature (chSysCardUpperTemp, chSysCardLowerTemp)
    OIDs: .1.3.6.1.4.1.6027.3.1.1.2.3.1.8-9
    MIB: F10-CHASSIS-MIB
  Gap: CRITICAL (no sensors) → RESOLVED
  Parity: 0% → 90%

- priv/profiles/os_discovery/procurve.yaml (enhanced)
  Added HP ProCurve transceiver optical monitoring (5 sensor types):
  MIB: HP-ICF-TRANSCEIVER-MIB::hpicfXcvrInfoTable
  Sensors:
    - Temperature: hpicfXcvrTemp (OID .1.3.6.1.4.1.11.2.14.11.5.1.82.1.1.1.1.11, divisor 1000)
    - Bias Current: hpicfXcvrBias (OID .1.3.6.1.4.1.11.2.14.11.5.1.82.1.1.1.1.13, divisor 1000)
    - Supply Voltage: hpicfXcvrVoltage (OID .1.3.6.1.4.1.11.2.14.11.5.1.82.1.1.1.1.12, divisor 1000)
    - RX Power (dBm): hpicfXcvrRxPower (OID .1.3.6.1.4.1.11.2.14.11.5.1.82.1.1.1.1.14, divisor 10)
    - TX Power (dBm): hpicfXcvrTxPower (OID .1.3.6.1.4.1.11.2.14.11.5.1.82.1.1.1.1.15, divisor 10)
  Gap: HIGH (missing transceivers) → RESOLVED
  Parity: 60% → 100%

- priv/profiles/os_discovery/comware.yaml (enhanced)
  Added HP Comware transceiver optical monitoring (5 sensor types):
  MIB: HH3C-TRANSCEIVER-INFO-MIB::hh3cTransceiverInfoTable
  Sensors:
    - Temperature: hh3cTransceiverTemperature (OID .1.3.6.1.4.1.25506.2.70.1.1.1.15)
    - Bias Current: hh3cTransceiverBiasCurrent (OID .1.3.6.1.4.1.25506.2.70.1.1.1.17)
    - Supply Voltage: hh3cTransceiverVoltage (OID .1.3.6.1.4.1.25506.2.70.1.1.1.16)
    - RX Power (dBm): hh3cTransceiverCurRXPower (OID .1.3.6.1.4.1.25506.2.70.1.1.1.9, divisor 100)
    - TX Power (dBm): hh3cTransceiverCurTXPower (OID .1.3.6.1.4.1.25506.2.70.1.1.1.12, divisor 100)
  Gap: HIGH (missing transceivers) → RESOLVED
  Parity: 60% → 95%

- test/towerops_web/controllers/api/mobile_controller_test.exs (fixed)
  Fixed Credo warning: replaced length/1 with empty list comparison

- CHANGELOG.txt (updated)
  Documented Tier 1 + Tier 2 completion

Impact:
- Force10 FTOS: Complete temperature monitoring for S/C/E-Series data center switches
- ProCurve: Full optical transceiver diagnostics (SFP/SFP+ monitoring)
- Comware: Full optical transceiver diagnostics (completes sensor coverage)

Business Value:
- All major network switch platforms now have fundamental temperature monitoring
- Fiber optic link health monitoring enabled for ProCurve and Comware
- Data center switches (Force10 FTOS) fully supported
- Enables proactive maintenance (detect failing transceivers before link failure)

Parity Achievement:
- Tier 1 Complete: HP Comware (60→95%), Dell PowerConnect (0→80%), Dell SONiC (0→95%),
  Dell Force10 FTOS (0→90%)
- Tier 2 Complete: HP ProCurve (60→100%), HP Comware (95% - transceivers added)

Next Steps: Tier 3 (storage/compute platforms: PowerVault, Dell Servers, hpblmos)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 08:19:12 -06:00
aa9ed52bff
feat: add critical network switch sensor support (HP Comware, Dell PowerConnect, Dell SONiC)
Implemented top 3 critical network switch sensor gaps identified in Phase 3 analysis.
Restores fundamental temperature monitoring for common enterprise switch platforms.

Files Changed:
- priv/profiles/os_discovery/comware.yaml (enhanced)
  Added HP Comware chassis temperature monitoring via HH3C-ENTITY-EXT-MIB
  OID: 1.3.6.1.4.1.25506.2.6.1.1.1.1.12 (hh3cEntityExtTemperature)
  Uses entPhysicalName for sensor descriptions
  Gap: CRITICAL (broke fundamental monitoring) → RESOLVED
  Parity: 40% → 60%

- priv/profiles/os_discovery/powerconnect.yaml (enhanced)
  Added Dell PowerConnect/DNOS CPU temperature monitoring
  OID: 1.3.6.1.4.1.674.10895.5000.2.6132.1.1.43.1.8.1.5
  MIB: FASTPATH-BOXSERVICES-PRIVATE-MIB
  Gap: CRITICAL (no sensors) → RESOLVED
  Parity: 0% → 80%

- priv/profiles/os_discovery/dell-sonic.yaml (new)
  Created comprehensive Dell SONiC sensor profile
  MIB: NETGEAR-BOXSERVICES-PRIVATE-MIB (Quanta-based)
  Sensors:
    - Temperature: boxServicesTempSensorState (OID .1.3.6.1.4.1.4413.1.1.43.1.8.1.4)
    - Fan Speed: boxServicesFanSpeed (OID .1.3.6.1.4.1.4413.1.1.43.1.6.1.4)
    - PSU State: boxServicesPowSupplyItemState (OID .1.3.6.1.4.1.4413.1.1.43.1.7.1.3)
      States: other, notpresent, operational, failed, powering, nopower,
              notpowering, incompatible
  Gap: CRITICAL (OS detected, no sensors) → RESOLVED
  Parity: 0% → 95%

- test/towerops_web/plugs/brute_force_protection_test.exs (fixed)
  Fixed Credo warning: replaced length/1 with empty list comparison

- CHANGELOG.txt (updated)
  Documented Phase 3 analysis completion and critical fix implementation

Impact:
- HP Comware: Enables overheating alerts (fundamental monitoring restored)
- Dell PowerConnect: First sensor support for common access switches
- Dell SONiC: Complete hardware monitoring for modern data center platform

Business Value:
- Resolves production blockers for customers with HP Comware switches
- Adds support for very common Dell enterprise access switches
- Enables monitoring for Dell's modern SONiC-based data center switches

Next Steps: Remaining Tier 1 switches (Dell Force10 FTOS), then Tier 2
(optical transceiver monitoring for ProCurve/Comware).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 17:36:45 -06:00