From 2856a0ccda79b9753c57d0d2bae9e50ba0ae0380 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 22 Jan 2026 13:43:56 -0600 Subject: [PATCH] improved fallabck detection --- lib/towerops/snmp/mib_translator.ex | 257 ++++++++++++++++++++- lib/towerops_web/components/layouts.ex | 165 +++++++++++-- test/towerops/snmp/mib_translator_test.exs | 77 ++++++ 3 files changed, 478 insertions(+), 21 deletions(-) diff --git a/lib/towerops/snmp/mib_translator.ex b/lib/towerops/snmp/mib_translator.ex index 45122dbd..fd45efb9 100644 --- a/lib/towerops/snmp/mib_translator.ex +++ b/lib/towerops/snmp/mib_translator.ex @@ -90,11 +90,266 @@ defmodule Towerops.Snmp.MibTranslator do # Ubiquiti (enterprise 41112) "UBNT-UniFi-MIB::unifiApSystemModel" => "1.3.6.1.4.1.41112.1.6.3.3.0", "UBNT-UniFi-MIB::unifiApSystemVersion" => "1.3.6.1.4.1.41112.1.6.3.6.0", + # UBNT-AirMAX-MIB GPS Info (ubntAirMAX.9 = 1.3.6.1.4.1.41112.1.4.9) + "UBNT-AirMAX-MIB::ubntGpsStatus" => "1.3.6.1.4.1.41112.1.4.9.1", + "UBNT-AirMAX-MIB::ubntGpsStatus.0" => "1.3.6.1.4.1.41112.1.4.9.1.0", + "UBNT-AirMAX-MIB::ubntGpsFix" => "1.3.6.1.4.1.41112.1.4.9.2", + "UBNT-AirMAX-MIB::ubntGpsFix.0" => "1.3.6.1.4.1.41112.1.4.9.2.0", + "UBNT-AirMAX-MIB::ubntGpsLat" => "1.3.6.1.4.1.41112.1.4.9.3", + "UBNT-AirMAX-MIB::ubntGpsLat.0" => "1.3.6.1.4.1.41112.1.4.9.3.0", + "UBNT-AirMAX-MIB::ubntGpsLon" => "1.3.6.1.4.1.41112.1.4.9.4", + "UBNT-AirMAX-MIB::ubntGpsLon.0" => "1.3.6.1.4.1.41112.1.4.9.4.0", + "UBNT-AirMAX-MIB::ubntGpsAltMeters" => "1.3.6.1.4.1.41112.1.4.9.5", + "UBNT-AirMAX-MIB::ubntGpsAltMeters.0" => "1.3.6.1.4.1.41112.1.4.9.5.0", + "UBNT-AirMAX-MIB::ubntGpsAltFeet" => "1.3.6.1.4.1.41112.1.4.9.6", + "UBNT-AirMAX-MIB::ubntGpsAltFeet.0" => "1.3.6.1.4.1.41112.1.4.9.6.0", + "UBNT-AirMAX-MIB::ubntGpsSatsVisible" => "1.3.6.1.4.1.41112.1.4.9.7", + "UBNT-AirMAX-MIB::ubntGpsSatsVisible.0" => "1.3.6.1.4.1.41112.1.4.9.7.0", + "UBNT-AirMAX-MIB::ubntGpsSatsTracked" => "1.3.6.1.4.1.41112.1.4.9.8", + "UBNT-AirMAX-MIB::ubntGpsSatsTracked.0" => "1.3.6.1.4.1.41112.1.4.9.8.0", + "UBNT-AirMAX-MIB::ubntGpsHDOP" => "1.3.6.1.4.1.41112.1.4.9.9", + "UBNT-AirMAX-MIB::ubntGpsHDOP.0" => "1.3.6.1.4.1.41112.1.4.9.9.0", + # UBNT-AirMAX-MIB Host Info (ubntAirMAX.8 = 1.3.6.1.4.1.41112.1.4.8) + "UBNT-AirMAX-MIB::ubntHostLocaltime" => "1.3.6.1.4.1.41112.1.4.8.1", + "UBNT-AirMAX-MIB::ubntHostLocaltime.0" => "1.3.6.1.4.1.41112.1.4.8.1.0", + "UBNT-AirMAX-MIB::ubntHostNetrole" => "1.3.6.1.4.1.41112.1.4.8.2", + "UBNT-AirMAX-MIB::ubntHostNetrole.0" => "1.3.6.1.4.1.41112.1.4.8.2.0", + "UBNT-AirMAX-MIB::ubntHostCpuLoad" => "1.3.6.1.4.1.41112.1.4.8.3", + "UBNT-AirMAX-MIB::ubntHostCpuLoad.0" => "1.3.6.1.4.1.41112.1.4.8.3.0", + "UBNT-AirMAX-MIB::ubntHostTemperature" => "1.3.6.1.4.1.41112.1.4.8.4", + "UBNT-AirMAX-MIB::ubntHostTemperature.0" => "1.3.6.1.4.1.41112.1.4.8.4.0", # Cambium ePMP (enterprise 17713.21) + "CAMBIUM-PMP80211-MIB::cambiumCurrentuImageVersion" => "1.3.6.1.4.1.17713.21.1.1.17", "CAMBIUM-PMP80211-MIB::cambiumCurrentuImageVersion.0" => "1.3.6.1.4.1.17713.21.1.1.17.0", + "CAMBIUM-PMP80211-MIB::cambiumEPMPMSN" => "1.3.6.1.4.1.17713.21.1.1.31", "CAMBIUM-PMP80211-MIB::cambiumEPMPMSN.0" => "1.3.6.1.4.1.17713.21.1.1.31.0", + "CAMBIUM-PMP80211-MIB::cambiumDeviceLatitude" => "1.3.6.1.4.1.17713.21.1.1.18", "CAMBIUM-PMP80211-MIB::cambiumDeviceLatitude.0" => "1.3.6.1.4.1.17713.21.1.1.18.0", - "CAMBIUM-PMP80211-MIB::cambiumDeviceLongitude.0" => "1.3.6.1.4.1.17713.21.1.1.19.0" + "CAMBIUM-PMP80211-MIB::cambiumDeviceLongitude" => "1.3.6.1.4.1.17713.21.1.1.19", + "CAMBIUM-PMP80211-MIB::cambiumDeviceLongitude.0" => "1.3.6.1.4.1.17713.21.1.1.19.0", + # Cambium ePMP status and sensor OIDs (tables, base OIDs without index) + "CAMBIUM-PMP80211-MIB::cambiumEffectiveSyncSource" => "1.3.6.1.4.1.17713.21.1.1.7", + "CAMBIUM-PMP80211-MIB::cambiumDFSStatus" => "1.3.6.1.4.1.17713.21.1.1.6", + "CAMBIUM-PMP80211-MIB::ePMP2000SmartAntennaStatus" => "1.3.6.1.4.1.17713.21.1.1.41", + "CAMBIUM-PMP80211-MIB::sysDFSDetectedCount" => "1.3.6.1.4.1.17713.21.2.1.36", + "CAMBIUM-PMP80211-MIB::sysCPUUsage" => "1.3.6.1.4.1.17713.21.2.1.64", + # Mimosa (enterprise 43356) + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaSerialNumber" => "1.3.6.1.4.1.43356.2.1.2.1.2", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaSerialNumber.0" => "1.3.6.1.4.1.43356.2.1.2.1.2.0", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaFirmwareVersion" => "1.3.6.1.4.1.43356.2.1.2.1.3", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaFirmwareVersion.0" => "1.3.6.1.4.1.43356.2.1.2.1.3.0", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaSatelliteStrength" => "1.3.6.1.4.1.43356.2.1.2.2.5", + # UBNT-AirMAX-MIB Radio Table (ubntAirMAX.1 = 1.3.6.1.4.1.41112.1.4.1) + "UBNT-AirMAX-MIB::ubntRadioMode" => "1.3.6.1.4.1.41112.1.4.1.1.2", + "UBNT-AirMAX-MIB::ubntRadioFreq" => "1.3.6.1.4.1.41112.1.4.1.1.4", + "UBNT-AirMAX-MIB::ubntRadioDfsEnabled" => "1.3.6.1.4.1.41112.1.4.1.1.5", + "UBNT-AirMAX-MIB::ubntRadioTxPower" => "1.3.6.1.4.1.41112.1.4.1.1.6", + "UBNT-AirMAX-MIB::ubntRadioDistance" => "1.3.6.1.4.1.41112.1.4.1.1.7", + # UBNT-AirMAX-MIB Wireless Stats Table (ubntAirMAX.5 = 1.3.6.1.4.1.41112.1.4.5) + "UBNT-AirMAX-MIB::ubntWlStatSsid" => "1.3.6.1.4.1.41112.1.4.5.1.2", + "UBNT-AirMAX-MIB::ubntWlStatSignal" => "1.3.6.1.4.1.41112.1.4.5.1.5", + "UBNT-AirMAX-MIB::ubntWlStatRssi" => "1.3.6.1.4.1.41112.1.4.5.1.6", + "UBNT-AirMAX-MIB::ubntWlStatCcq" => "1.3.6.1.4.1.41112.1.4.5.1.7", + "UBNT-AirMAX-MIB::ubntWlStatNoiseFloor" => "1.3.6.1.4.1.41112.1.4.5.1.8", + "UBNT-AirMAX-MIB::ubntWlStatTxRate" => "1.3.6.1.4.1.41112.1.4.5.1.9", + "UBNT-AirMAX-MIB::ubntWlStatRxRate" => "1.3.6.1.4.1.41112.1.4.5.1.10", + "UBNT-AirMAX-MIB::ubntWlStatChanWidth" => "1.3.6.1.4.1.41112.1.4.5.1.14", + "UBNT-AirMAX-MIB::ubntWlStatStaCount" => "1.3.6.1.4.1.41112.1.4.5.1.15", + # UBNT-AirMAX-MIB AirMax Table (ubntAirMAX.6 = 1.3.6.1.4.1.41112.1.4.6) + "UBNT-AirMAX-MIB::ubntAirMaxEnabled" => "1.3.6.1.4.1.41112.1.4.6.1.2", + "UBNT-AirMAX-MIB::ubntAirMaxQuality" => "1.3.6.1.4.1.41112.1.4.6.1.3", + "UBNT-AirMAX-MIB::ubntAirMaxCapacity" => "1.3.6.1.4.1.41112.1.4.6.1.4", + # UBNT-AirMAX-MIB Station Table (ubntAirMAX.7 = 1.3.6.1.4.1.41112.1.4.7) + "UBNT-AirMAX-MIB::ubntStaName" => "1.3.6.1.4.1.41112.1.4.7.1.2", + "UBNT-AirMAX-MIB::ubntStaSignal" => "1.3.6.1.4.1.41112.1.4.7.1.3", + "UBNT-AirMAX-MIB::ubntStaNoiseFloor" => "1.3.6.1.4.1.41112.1.4.7.1.4", + "UBNT-AirMAX-MIB::ubntStaDistance" => "1.3.6.1.4.1.41112.1.4.7.1.5", + "UBNT-AirMAX-MIB::ubntStaCcq" => "1.3.6.1.4.1.41112.1.4.7.1.6", + "UBNT-AirMAX-MIB::ubntStaTxRate" => "1.3.6.1.4.1.41112.1.4.7.1.11", + "UBNT-AirMAX-MIB::ubntStaRxRate" => "1.3.6.1.4.1.41112.1.4.7.1.12", + # UBNT-AirFiber-MIB (enterprise 41112.1.3) + "UBNT-AirFiber-MIB::txFrequency" => "1.3.6.1.4.1.41112.1.3.2.1.1", + "UBNT-AirFiber-MIB::rxFrequency" => "1.3.6.1.4.1.41112.1.3.2.1.2", + "UBNT-AirFiber-MIB::txPower" => "1.3.6.1.4.1.41112.1.3.2.1.5", + "UBNT-AirFiber-MIB::rxPower0" => "1.3.6.1.4.1.41112.1.3.2.1.6", + "UBNT-AirFiber-MIB::rxPower1" => "1.3.6.1.4.1.41112.1.3.2.1.7", + "UBNT-AirFiber-MIB::txCapacity" => "1.3.6.1.4.1.41112.1.3.2.1.8", + "UBNT-AirFiber-MIB::rxCapacity" => "1.3.6.1.4.1.41112.1.3.2.1.9", + "UBNT-AirFiber-MIB::radioLinkDistM" => "1.3.6.1.4.1.41112.1.3.2.1.10", + "UBNT-AirFiber-MIB::radioTemp" => "1.3.6.1.4.1.41112.1.3.2.1.14", + # Cambium PTP 650 (enterprise 17713.7) + "CAMBIUM-PTP650-MIB::transmitPower" => "1.3.6.1.4.1.17713.7.12.4", + "CAMBIUM-PTP650-MIB::transmitPower.0" => "1.3.6.1.4.1.17713.7.12.4.0", + "CAMBIUM-PTP650-MIB::signalStrengthRatio" => "1.3.6.1.4.1.17713.7.12.9", + "CAMBIUM-PTP650-MIB::signalStrengthRatio.0" => "1.3.6.1.4.1.17713.7.12.9.0", + "CAMBIUM-PTP650-MIB::rawReceivePower" => "1.3.6.1.4.1.17713.7.12.12", + "CAMBIUM-PTP650-MIB::rawReceivePower.0" => "1.3.6.1.4.1.17713.7.12.12.0", + "CAMBIUM-PTP650-MIB::rxModulation" => "1.3.6.1.4.1.17713.7.12.14", + "CAMBIUM-PTP650-MIB::rxModulation.0" => "1.3.6.1.4.1.17713.7.12.14.0", + "CAMBIUM-PTP650-MIB::txModulation" => "1.3.6.1.4.1.17713.7.12.15", + "CAMBIUM-PTP650-MIB::txModulation.0" => "1.3.6.1.4.1.17713.7.12.15.0", + "CAMBIUM-PTP650-MIB::receiveDataRate" => "1.3.6.1.4.1.17713.7.20.1", + "CAMBIUM-PTP650-MIB::receiveDataRate.0" => "1.3.6.1.4.1.17713.7.20.1.0", + "CAMBIUM-PTP650-MIB::transmitDataRate" => "1.3.6.1.4.1.17713.7.20.2", + "CAMBIUM-PTP650-MIB::transmitDataRate.0" => "1.3.6.1.4.1.17713.7.20.2.0", + "CAMBIUM-PTP650-MIB::aggregateDataRate" => "1.3.6.1.4.1.17713.7.20.3", + "CAMBIUM-PTP650-MIB::aggregateDataRate.0" => "1.3.6.1.4.1.17713.7.20.3.0", + "CAMBIUM-PTP650-MIB::masterSlaveMode" => "1.3.6.1.4.1.17713.7.5.1", + "CAMBIUM-PTP650-MIB::masterSlaveMode.0" => "1.3.6.1.4.1.17713.7.5.1.0", + # Cambium PTP 670 (enterprise 17713.11) + "CAMBIUM-PTP670-MIB::transmitPower" => "1.3.6.1.4.1.17713.11.12.4", + "CAMBIUM-PTP670-MIB::transmitPower.0" => "1.3.6.1.4.1.17713.11.12.4.0", + "CAMBIUM-PTP670-MIB::signalStrengthRatio" => "1.3.6.1.4.1.17713.11.12.9", + "CAMBIUM-PTP670-MIB::signalStrengthRatio.0" => "1.3.6.1.4.1.17713.11.12.9.0", + "CAMBIUM-PTP670-MIB::rawReceivePower" => "1.3.6.1.4.1.17713.11.12.12", + "CAMBIUM-PTP670-MIB::rawReceivePower.0" => "1.3.6.1.4.1.17713.11.12.12.0", + "CAMBIUM-PTP670-MIB::rxModulation" => "1.3.6.1.4.1.17713.11.12.14", + "CAMBIUM-PTP670-MIB::rxModulation.0" => "1.3.6.1.4.1.17713.11.12.14.0", + "CAMBIUM-PTP670-MIB::txModulation" => "1.3.6.1.4.1.17713.11.12.15", + "CAMBIUM-PTP670-MIB::txModulation.0" => "1.3.6.1.4.1.17713.11.12.15.0", + "CAMBIUM-PTP670-MIB::receiveDataRate" => "1.3.6.1.4.1.17713.11.20.1", + "CAMBIUM-PTP670-MIB::receiveDataRate.0" => "1.3.6.1.4.1.17713.11.20.1.0", + "CAMBIUM-PTP670-MIB::transmitDataRate" => "1.3.6.1.4.1.17713.11.20.2", + "CAMBIUM-PTP670-MIB::transmitDataRate.0" => "1.3.6.1.4.1.17713.11.20.2.0", + "CAMBIUM-PTP670-MIB::aggregateDataRate" => "1.3.6.1.4.1.17713.11.20.3", + "CAMBIUM-PTP670-MIB::aggregateDataRate.0" => "1.3.6.1.4.1.17713.11.20.3.0", + "CAMBIUM-PTP670-MIB::masterSlaveMode" => "1.3.6.1.4.1.17713.11.5.1", + "CAMBIUM-PTP670-MIB::masterSlaveMode.0" => "1.3.6.1.4.1.17713.11.5.1.0", + "CAMBIUM-PTP670-MIB::hardwareVersion" => "1.3.6.1.4.1.17713.11.1.10", + "CAMBIUM-PTP670-MIB::hardwareVersion.0" => "1.3.6.1.4.1.17713.11.1.10.0", + # Cambium PTP 250 (enterprise 17713.250) + "CAMBIUM-PTP250-MIB::receivePower" => "1.3.6.1.4.1.17713.250.5.1", + "CAMBIUM-PTP250-MIB::receivePower.0" => "1.3.6.1.4.1.17713.250.5.1.0", + "CAMBIUM-PTP250-MIB::transmitPower" => "1.3.6.1.4.1.17713.250.5.3", + "CAMBIUM-PTP250-MIB::transmitPower.0" => "1.3.6.1.4.1.17713.250.5.3.0", + "CAMBIUM-PTP250-MIB::rxModulation" => "1.3.6.1.4.1.17713.250.5.8", + "CAMBIUM-PTP250-MIB::rxModulation.0" => "1.3.6.1.4.1.17713.250.5.8.0", + "CAMBIUM-PTP250-MIB::txModulation" => "1.3.6.1.4.1.17713.250.5.9", + "CAMBIUM-PTP250-MIB::txModulation.0" => "1.3.6.1.4.1.17713.250.5.9.0", + "CAMBIUM-PTP250-MIB::signalStrengthRatio" => "1.3.6.1.4.1.17713.250.5.13", + "CAMBIUM-PTP250-MIB::signalStrengthRatio.0" => "1.3.6.1.4.1.17713.250.5.13.0", + "CAMBIUM-PTP250-MIB::noiseFloor" => "1.3.6.1.4.1.17713.250.5.15", + "CAMBIUM-PTP250-MIB::noiseFloor.0" => "1.3.6.1.4.1.17713.250.5.15.0", + "CAMBIUM-PTP250-MIB::receiveDataRate" => "1.3.6.1.4.1.17713.250.11.1", + "CAMBIUM-PTP250-MIB::receiveDataRate.0" => "1.3.6.1.4.1.17713.250.11.1.0", + "CAMBIUM-PTP250-MIB::transmitDataRate" => "1.3.6.1.4.1.17713.250.11.2", + "CAMBIUM-PTP250-MIB::transmitDataRate.0" => "1.3.6.1.4.1.17713.250.11.2.0", + "CAMBIUM-PTP250-MIB::aggregateDataRate" => "1.3.6.1.4.1.17713.250.11.3", + "CAMBIUM-PTP250-MIB::aggregateDataRate.0" => "1.3.6.1.4.1.17713.250.11.3.0", + "CAMBIUM-PTP250-MIB::masterSlaveMode" => "1.3.6.1.4.1.17713.250.4.1", + "CAMBIUM-PTP250-MIB::masterSlaveMode.0" => "1.3.6.1.4.1.17713.250.4.1.0", + # Cambium PTP 500 (enterprise 17713.5) + "CAMBIUM-PTP500-V2-MIB::receivePower" => "1.3.6.1.4.1.17713.5.12.1", + "CAMBIUM-PTP500-V2-MIB::receivePower.0" => "1.3.6.1.4.1.17713.5.12.1.0", + "CAMBIUM-PTP500-V2-MIB::transmitPower" => "1.3.6.1.4.1.17713.5.12.3", + "CAMBIUM-PTP500-V2-MIB::transmitPower.0" => "1.3.6.1.4.1.17713.5.12.3.0", + "CAMBIUM-PTP500-V2-MIB::signalStrengthRatio" => "1.3.6.1.4.1.17713.5.12.13", + "CAMBIUM-PTP500-V2-MIB::signalStrengthRatio.0" => "1.3.6.1.4.1.17713.5.12.13.0", + "CAMBIUM-PTP500-V2-MIB::receiveDataRate" => "1.3.6.1.4.1.17713.5.20.1", + "CAMBIUM-PTP500-V2-MIB::receiveDataRate.0" => "1.3.6.1.4.1.17713.5.20.1.0", + "CAMBIUM-PTP500-V2-MIB::transmitDataRate" => "1.3.6.1.4.1.17713.5.20.2", + "CAMBIUM-PTP500-V2-MIB::transmitDataRate.0" => "1.3.6.1.4.1.17713.5.20.2.0", + "CAMBIUM-PTP500-V2-MIB::aggregateDataRate" => "1.3.6.1.4.1.17713.5.20.3", + "CAMBIUM-PTP500-V2-MIB::aggregateDataRate.0" => "1.3.6.1.4.1.17713.5.20.3.0", + "CAMBIUM-PTP500-V2-MIB::masterSlaveMode" => "1.3.6.1.4.1.17713.5.5.1", + "CAMBIUM-PTP500-V2-MIB::masterSlaveMode.0" => "1.3.6.1.4.1.17713.5.5.1.0", + # Cambium PTP 600 (enterprise 17713.6) + "CAMBIUM-PTP600-MIB::receivePower" => "1.3.6.1.4.1.17713.6.12.1", + "CAMBIUM-PTP600-MIB::receivePower.0" => "1.3.6.1.4.1.17713.6.12.1.0", + "CAMBIUM-PTP600-MIB::transmitPower" => "1.3.6.1.4.1.17713.6.12.3", + "CAMBIUM-PTP600-MIB::transmitPower.0" => "1.3.6.1.4.1.17713.6.12.3.0", + "CAMBIUM-PTP600-MIB::signalStrengthRatio" => "1.3.6.1.4.1.17713.6.12.13", + "CAMBIUM-PTP600-MIB::signalStrengthRatio.0" => "1.3.6.1.4.1.17713.6.12.13.0", + "CAMBIUM-PTP600-MIB::receiveDataRate" => "1.3.6.1.4.1.17713.6.20.1", + "CAMBIUM-PTP600-MIB::receiveDataRate.0" => "1.3.6.1.4.1.17713.6.20.1.0", + "CAMBIUM-PTP600-MIB::transmitDataRate" => "1.3.6.1.4.1.17713.6.20.2", + "CAMBIUM-PTP600-MIB::transmitDataRate.0" => "1.3.6.1.4.1.17713.6.20.2.0", + "CAMBIUM-PTP600-MIB::aggregateDataRate" => "1.3.6.1.4.1.17713.6.20.3", + "CAMBIUM-PTP600-MIB::aggregateDataRate.0" => "1.3.6.1.4.1.17713.6.20.3.0", + "CAMBIUM-PTP600-MIB::masterSlaveMode" => "1.3.6.1.4.1.17713.6.5.1", + "CAMBIUM-PTP600-MIB::masterSlaveMode.0" => "1.3.6.1.4.1.17713.6.5.1.0", + # Cambium PTP 800 (enterprise 17713.8) + "CAMBIUM-PTP800-MIB::receivePower" => "1.3.6.1.4.1.17713.8.12.1", + "CAMBIUM-PTP800-MIB::receivePower.0" => "1.3.6.1.4.1.17713.8.12.1.0", + "CAMBIUM-PTP800-MIB::transmitPower" => "1.3.6.1.4.1.17713.8.12.3", + "CAMBIUM-PTP800-MIB::transmitPower.0" => "1.3.6.1.4.1.17713.8.12.3.0", + "CAMBIUM-PTP800-MIB::receiveDataRate" => "1.3.6.1.4.1.17713.8.20.1", + "CAMBIUM-PTP800-MIB::receiveDataRate.0" => "1.3.6.1.4.1.17713.8.20.1.0", + "CAMBIUM-PTP800-MIB::transmitDataRate" => "1.3.6.1.4.1.17713.8.20.2", + "CAMBIUM-PTP800-MIB::transmitDataRate.0" => "1.3.6.1.4.1.17713.8.20.2.0", + "CAMBIUM-PTP800-MIB::aggregateDataRate" => "1.3.6.1.4.1.17713.8.20.3", + "CAMBIUM-PTP800-MIB::aggregateDataRate.0" => "1.3.6.1.4.1.17713.8.20.3.0", + # Cambium ePMP additional wireless stats (enterprise 17713.21.1.2) + "CAMBIUM-PMP80211-MIB::cambiumSTAConnectedRFFrequency" => "1.3.6.1.4.1.17713.21.1.2.1", + "CAMBIUM-PMP80211-MIB::cambiumSTAConnectedRFFrequency.0" => "1.3.6.1.4.1.17713.21.1.2.1.0", + "CAMBIUM-PMP80211-MIB::cambiumSTADLRSSI" => "1.3.6.1.4.1.17713.21.1.2.3", + "CAMBIUM-PMP80211-MIB::cambiumSTADLRSSI.0" => "1.3.6.1.4.1.17713.21.1.2.3.0", + "CAMBIUM-PMP80211-MIB::cambiumAPNumberOfConnectedSTA" => "1.3.6.1.4.1.17713.21.1.2.10", + "CAMBIUM-PMP80211-MIB::cambiumAPNumberOfConnectedSTA.0" => "1.3.6.1.4.1.17713.21.1.2.10.0", + "CAMBIUM-PMP80211-MIB::cambiumSTADLSNR" => "1.3.6.1.4.1.17713.21.1.2.18", + "CAMBIUM-PMP80211-MIB::cambiumSTADLSNR.0" => "1.3.6.1.4.1.17713.21.1.2.18.0", + # Cambium cnPilot (enterprise 17713.22) + "CAMBIUM-MIB::cambiumAPTotalClients" => "1.3.6.1.4.1.17713.22.1.1.1.14", + "CAMBIUM-MIB::cambiumAPTotalClients.0" => "1.3.6.1.4.1.17713.22.1.1.1.14.0", + "CAMBIUM-MIB::cambiumRadioTransmitPower" => "1.3.6.1.4.1.17713.22.1.2.1.8", + "CAMBIUM-MIB::cambiumRadioTransmitPower.0" => "1.3.6.1.4.1.17713.22.1.2.1.8.0", + "CAMBIUM-MIB::cambiumRadioNoiseFloor" => "1.3.6.1.4.1.17713.22.1.2.1.16", + "CAMBIUM-MIB::cambiumRadioNoiseFloor.0" => "1.3.6.1.4.1.17713.22.1.2.1.16.0", + "CAMBIUM-MIB::cambiumClientSNR" => "1.3.6.1.4.1.17713.22.1.3.1.11", + "CAMBIUM-MIB::cambiumClientSNR.0" => "1.3.6.1.4.1.17713.22.1.3.1.11.0", + "CAMBIUM-MIB::productName" => "1.3.6.1.4.1.17713.22.1.1.1.1", + "CAMBIUM-MIB::productName.0" => "1.3.6.1.4.1.17713.22.1.1.1.1.0", + "CAMBIUM-MIB::serialNumber" => "1.3.6.1.4.1.17713.22.1.1.1.2", + "CAMBIUM-MIB::serialNumber.0" => "1.3.6.1.4.1.17713.22.1.1.1.2.0", + "CAMBIUM-MIB::hardwareVersion" => "1.3.6.1.4.1.17713.22.1.1.1.3", + "CAMBIUM-MIB::hardwareVersion.0" => "1.3.6.1.4.1.17713.22.1.1.1.3.0", + "CAMBIUM-MIB::cambiumAPHWType" => "1.3.6.1.4.1.17713.22.1.1.1.4", + "CAMBIUM-MIB::cambiumAPHWType.0" => "1.3.6.1.4.1.17713.22.1.1.1.4.0", + "CAMBIUM-MIB::cambiumAPSerialNum" => "1.3.6.1.4.1.17713.22.1.1.1.5", + "CAMBIUM-MIB::cambiumAPSerialNum.0" => "1.3.6.1.4.1.17713.22.1.1.1.5.0", + # Cambium cnMatrix (enterprise 17713.24) - uses LLDP-EXT-MED + "LLDP-EXT-MED-CAMBIUM-MIB::lldpXMedLocModelName" => "1.0.8802.1.1.2.1.5.4795.1.2.2", + "LLDP-EXT-MED-CAMBIUM-MIB::lldpXMedLocModelName.0" => "1.0.8802.1.1.2.1.5.4795.1.2.2.0", + "LLDP-EXT-MED-CAMBIUM-MIB::lldpXMedLocSoftwareRev" => "1.0.8802.1.1.2.1.5.4795.1.2.4", + "LLDP-EXT-MED-CAMBIUM-MIB::lldpXMedLocSoftwareRev.0" => "1.0.8802.1.1.2.1.5.4795.1.2.4.0", + "LLDP-EXT-MED-CAMBIUM-MIB::lldpXMedLocSerialNum" => "1.0.8802.1.1.2.1.5.4795.1.2.5", + "LLDP-EXT-MED-CAMBIUM-MIB::lldpXMedLocSerialNum.0" => "1.0.8802.1.1.2.1.5.4795.1.2.5.0", + # Mimosa B5/PTP Radios - wireless stats (enterprise 43356.2.1.2.6) + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaTxPower" => "1.3.6.1.4.1.43356.2.1.2.6.1.1.2", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaRxPower" => "1.3.6.1.4.1.43356.2.1.2.6.1.1.3", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaRxNoise" => "1.3.6.1.4.1.43356.2.1.2.6.1.1.4", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaSNR" => "1.3.6.1.4.1.43356.2.1.2.6.1.1.5", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaCenterFreq" => "1.3.6.1.4.1.43356.2.1.2.6.1.1.6", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaTxPhy" => "1.3.6.1.4.1.43356.2.1.2.6.2.1.2", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaRxPhy" => "1.3.6.1.4.1.43356.2.1.2.6.2.1.5", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaPerTxRate" => "1.3.6.1.4.1.43356.2.1.2.7.3", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaPerTxRate.0" => "1.3.6.1.4.1.43356.2.1.2.7.3.0", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaPerRxRate" => "1.3.6.1.4.1.43356.2.1.2.7.4", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaPerRxRate.0" => "1.3.6.1.4.1.43356.2.1.2.7.4.0", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaInternalTemp" => "1.3.6.1.4.1.43356.2.1.2.1.8", + "MIMOSA-NETWORKS-BFIVE-MIB::mimosaInternalTemp.0" => "1.3.6.1.4.1.43356.2.1.2.1.8.0", + # Mimosa PTMP (enterprise 43356.2.1.2.9) + "MIMOSA-NETWORKS-PTMP-MIB::mimosaPtmpChPwrCntrFreqCur" => "1.3.6.1.4.1.43356.2.1.2.9.3.3.1.7", + "MIMOSA-NETWORKS-PTMP-MIB::mimosaPtmpChPwrTxPowerCur" => "1.3.6.1.4.1.43356.2.1.2.9.3.3.1.10", + "MIMOSA-NETWORKS-PTMP-MIB::mimosaPtmpChPwrMinRxPower" => "1.3.6.1.4.1.43356.2.1.2.9.3.3.1.12", + # Netonix Switch (enterprise 46242) + "NETONIX-SWITCH-MIB::firmwareVersion" => "1.3.6.1.4.1.46242.1", + "NETONIX-SWITCH-MIB::firmwareVersion.0" => "1.3.6.1.4.1.46242.1.0", + "NETONIX-SWITCH-MIB::fanTable" => "1.3.6.1.4.1.46242.2", + "NETONIX-SWITCH-MIB::tempTable" => "1.3.6.1.4.1.46242.3", + "NETONIX-SWITCH-MIB::voltageTable" => "1.3.6.1.4.1.46242.4", + "NETONIX-SWITCH-MIB::poeTable" => "1.3.6.1.4.1.46242.5", + "NETONIX-SWITCH-MIB::totalPowerConsumption" => "1.3.6.1.4.1.46242.6", + "NETONIX-SWITCH-MIB::totalPowerConsumption.0" => "1.3.6.1.4.1.46242.6.0", + "NETONIX-SWITCH-MIB::dcdcInputCurrent" => "1.3.6.1.4.1.46242.7", + "NETONIX-SWITCH-MIB::dcdcInputCurrent.0" => "1.3.6.1.4.1.46242.7.0", + "NETONIX-SWITCH-MIB::dcdcEfficiency" => "1.3.6.1.4.1.46242.8", + "NETONIX-SWITCH-MIB::dcdcEfficiency.0" => "1.3.6.1.4.1.46242.8.0", + # WHISP legacy OIDs (Cambium/Motorola Canopy - enterprise 161.19.3) + "WHISP-BOX-MIBV2-MIB::whispBoxRssi" => "1.3.6.1.4.1.161.19.3.2.2.21", + "WHISP-BOX-MIBV2-MIB::whispBoxRssi.0" => "1.3.6.1.4.1.161.19.3.2.2.21.0", + "WHISP-BOX-MIBV2-MIB::whispBoxEsn" => "1.3.6.1.4.1.161.19.3.3.1.3", + "WHISP-BOX-MIBV2-MIB::whispBoxEsn.0" => "1.3.6.1.4.1.161.19.3.3.1.3.0" } @doc """ diff --git a/lib/towerops_web/components/layouts.ex b/lib/towerops_web/components/layouts.ex index 8b72bc14..d33e1dd9 100644 --- a/lib/towerops_web/components/layouts.ex +++ b/lib/towerops_web/components/layouts.ex @@ -117,7 +117,7 @@ defmodule ToweropsWeb.Layouts do
<.icon name="hero-exclamation-triangle" class="w-5 h-5" /> - + Impersonating: {@current_scope.user.email}
@@ -126,7 +126,7 @@ defmodule ToweropsWeb.Layouts do method="delete" class="px-3 py-1 bg-white text-yellow-900 hover:bg-yellow-50 rounded font-medium text-sm" > - Exit Impersonation + Exit
@@ -135,14 +135,39 @@ defmodule ToweropsWeb.Layouts do -
+
{render_slot(@inner_block)}
@@ -286,6 +355,28 @@ defmodule ToweropsWeb.Layouts do """ end + attr :navigate, :string, required: true + attr :active, :boolean, default: false + slot :inner_block, required: true + + defp mobile_nav_link(assigns) do + ~H""" + <.link + navigate={@navigate} + class={[ + "flex items-center gap-3 rounded-md px-3 py-2 text-base font-medium", + if(@active, + do: "bg-gray-100 text-gray-900 dark:bg-gray-800 dark:text-white", + else: + "text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-white" + ) + ]} + > + {render_slot(@inner_block)} + + """ + end + @doc """ Shows the flash group with standard titles and content. @@ -407,14 +498,35 @@ defmodule ToweropsWeb.Layouts do
-
+
{render_slot(@inner_block)}
diff --git a/test/towerops/snmp/mib_translator_test.exs b/test/towerops/snmp/mib_translator_test.exs index 4c25ffc6..50226747 100644 --- a/test/towerops/snmp/mib_translator_test.exs +++ b/test/towerops/snmp/mib_translator_test.exs @@ -298,5 +298,82 @@ defmodule Towerops.Snmp.MibTranslatorTest do assert String.contains?(oid, "1.3.6.1.2.1.47.1.1.1.1.2") assert String.ends_with?(oid, ".123") end + + test "uses fallback for Ubiquiti AirMAX GPS OIDs" do + ubnt_gps_oids = [ + {"UBNT-AirMAX-MIB::ubntGpsLat.0", "1.3.6.1.4.1.41112.1.4.9.3.0"}, + {"UBNT-AirMAX-MIB::ubntGpsLon.0", "1.3.6.1.4.1.41112.1.4.9.4.0"}, + {"UBNT-AirMAX-MIB::ubntGpsFix.0", "1.3.6.1.4.1.41112.1.4.9.2.0"}, + {"UBNT-AirMAX-MIB::ubntGpsStatus.0", "1.3.6.1.4.1.41112.1.4.9.1.0"} + ] + + Enum.each(ubnt_gps_oids, fn {mib_name, expected_oid} -> + result = MibTranslator.translate(mib_name) + assert {:ok, oid} = result + assert String.contains?(oid, expected_oid) + end) + end + + test "uses fallback for Ubiquiti AirMAX host OIDs" do + ubnt_host_oids = [ + {"UBNT-AirMAX-MIB::ubntHostCpuLoad.0", "1.3.6.1.4.1.41112.1.4.8.3.0"}, + {"UBNT-AirMAX-MIB::ubntHostTemperature.0", "1.3.6.1.4.1.41112.1.4.8.4.0"}, + {"UBNT-AirMAX-MIB::ubntHostNetrole.0", "1.3.6.1.4.1.41112.1.4.8.2.0"} + ] + + Enum.each(ubnt_host_oids, fn {mib_name, expected_oid} -> + result = MibTranslator.translate(mib_name) + assert {:ok, oid} = result + assert String.contains?(oid, expected_oid) + end) + end + + test "uses fallback for Cambium ePMP OIDs" do + cambium_oids = [ + {"CAMBIUM-PMP80211-MIB::cambiumCurrentuImageVersion.0", "1.3.6.1.4.1.17713.21.1.1.17.0"}, + {"CAMBIUM-PMP80211-MIB::cambiumEPMPMSN.0", "1.3.6.1.4.1.17713.21.1.1.31.0"}, + {"CAMBIUM-PMP80211-MIB::cambiumDeviceLatitude.0", "1.3.6.1.4.1.17713.21.1.1.18.0"}, + {"CAMBIUM-PMP80211-MIB::cambiumDeviceLongitude.0", "1.3.6.1.4.1.17713.21.1.1.19.0"}, + {"CAMBIUM-PMP80211-MIB::cambiumEffectiveSyncSource", "1.3.6.1.4.1.17713.21.1.1.7"}, + {"CAMBIUM-PMP80211-MIB::cambiumDFSStatus", "1.3.6.1.4.1.17713.21.1.1.6"}, + {"CAMBIUM-PMP80211-MIB::sysCPUUsage", "1.3.6.1.4.1.17713.21.2.1.64"} + ] + + Enum.each(cambium_oids, fn {mib_name, expected_oid} -> + result = MibTranslator.translate(mib_name) + assert {:ok, oid} = result + assert String.contains?(oid, expected_oid) + end) + end + + test "uses fallback for Mimosa OIDs" do + mimosa_oids = [ + {"MIMOSA-NETWORKS-BFIVE-MIB::mimosaSerialNumber.0", "1.3.6.1.4.1.43356.2.1.2.1.2.0"}, + {"MIMOSA-NETWORKS-BFIVE-MIB::mimosaFirmwareVersion.0", "1.3.6.1.4.1.43356.2.1.2.1.3.0"}, + {"MIMOSA-NETWORKS-BFIVE-MIB::mimosaSatelliteStrength", "1.3.6.1.4.1.43356.2.1.2.2.5"} + ] + + Enum.each(mimosa_oids, fn {mib_name, expected_oid} -> + result = MibTranslator.translate(mib_name) + assert {:ok, oid} = result + assert String.contains?(oid, expected_oid) + end) + end + + test "uses fallback for Ubiquiti AirMAX wireless stats OIDs" do + ubnt_wireless_oids = [ + {"UBNT-AirMAX-MIB::ubntWlStatSignal", "1.3.6.1.4.1.41112.1.4.5.1.5"}, + {"UBNT-AirMAX-MIB::ubntWlStatRssi", "1.3.6.1.4.1.41112.1.4.5.1.6"}, + {"UBNT-AirMAX-MIB::ubntWlStatCcq", "1.3.6.1.4.1.41112.1.4.5.1.7"}, + {"UBNT-AirMAX-MIB::ubntWlStatNoiseFloor", "1.3.6.1.4.1.41112.1.4.5.1.8"}, + {"UBNT-AirMAX-MIB::ubntWlStatStaCount", "1.3.6.1.4.1.41112.1.4.5.1.15"} + ] + + Enum.each(ubnt_wireless_oids, fn {mib_name, expected_oid} -> + result = MibTranslator.translate(mib_name) + assert {:ok, oid} = result + assert String.contains?(oid, expected_oid) + end) + end end end