fix: correct SNMP OIDs for 7 vendor modules to match MIB definitions
Cambium PTP: Rx Power .12.6→.12.12 (rawReceivePower), Tx Power .12.3→.12.4, data rates from .12 subtree→.20 subtree, renamed Link Loss→Signal Strength Ratio, added aggregate rate Ceragon: TX/RX power OIDs from .10.4.1.11→.10.5.1.1 subtree (genEquipRfuStatusTxLevel/RxLevel), removed SNR and link status Aviat: RSL→.9.15 (RXPERFORMANCE-MIB), Tx Power/SNR→.9.33 (RXPERFORMANCE-EX-MIB), capacity→.9.3 (MODEM-MIB), removed temperature DragonWave: SNR column .2.3→.2.8, RSL column .2.2→.2.4, removed temperature Exalt: frequencies .1.7/.1.8→.57.4/.57.5 (ExtendAirG2), Tx Power .1.9→.57.1, RSL .2.1→.2.4.3.1.3 (locCurrentRSL), removed SNR Teltonika: RSSI column 7→12, RSRP 8→20, SINR 9→19, RSRQ 10→21, Connection Type 3→16, SIM Status 2→9, temperature .1.7→.2.2.1.17 SIAE: Tx Power/RSSI/Frequency→.39.2.1 subtree (Alfo80hd MIB), added Tx/Rx rate from .15.4.1.17/.18, removed SNR
This commit is contained in:
parent
835b38c4de
commit
5e5da89f3a
14 changed files with 426 additions and 299 deletions
44
lib/towerops/snmp/profiles/vendors/aviat.ex
vendored
44
lib/towerops/snmp/profiles/vendors/aviat.ex
vendored
|
|
@ -13,6 +13,12 @@ defmodule Towerops.Snmp.Profiles.Vendors.Aviat do
|
|||
- WTM 4500
|
||||
- WTM 4800
|
||||
- CTR 8540
|
||||
|
||||
OIDs sourced from Aviat MIBs:
|
||||
- RSL: AVIAT-RXPERFORMANCE-MIB - aviatRxPerformRslReadingCurrent (.9.15.2.2.1.4)
|
||||
- Tx Power: AVIAT-RXPERFORMANCE-EX-MIB - aviatRxPerformTxpowReadingCurrent (.9.33.2.2.1.7)
|
||||
- SNR: AVIAT-RXPERFORMANCE-EX-MIB - aviatRxPerformCinrReadingCurrent (.9.33.2.2.1.3)
|
||||
- Capacity: AVIAT-MODEM-MIB - aviatModemCurCapacity Tx/Rx (.9.3.2.1.1.11/.12)
|
||||
"""
|
||||
|
||||
@behaviour Towerops.Snmp.Profiles.Vendors.Vendor
|
||||
|
|
@ -45,44 +51,44 @@ defmodule Towerops.Snmp.Profiles.Vendors.Aviat do
|
|||
@impl true
|
||||
def wireless_oid_defs do
|
||||
[
|
||||
# Radio Temperature
|
||||
# RSL (Receive Signal Level) - aviatRxPerformRslReadingCurrent (divide by 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2509.9.6.2.3.1.1.5.1",
|
||||
sensor_type: "temperature",
|
||||
sensor_descr: "ODU Temperature",
|
||||
sensor_unit: "C",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# RSL (Receive Signal Level)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2509.9.6.2.2.1.1.7.1",
|
||||
oid: "1.3.6.1.4.1.2509.9.15.2.2.1.4.1",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "RSL",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Transmit Power
|
||||
# Transmit Power - aviatRxPerformTxpowReadingCurrent (divide by 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2509.9.6.2.2.1.1.5.1",
|
||||
oid: "1.3.6.1.4.1.2509.9.33.2.2.1.7.1",
|
||||
sensor_type: "power",
|
||||
sensor_descr: "Tx Power",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Modem SNR
|
||||
# Modem SNR - aviatRxPerformCinrReadingCurrent (divide by 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2509.9.6.2.2.1.1.12.1",
|
||||
oid: "1.3.6.1.4.1.2509.9.33.2.2.1.3.1",
|
||||
sensor_type: "snr",
|
||||
sensor_descr: "SNR",
|
||||
sensor_unit: "dB",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Link Capacity (Mbps)
|
||||
# TX Capacity - aviatModemCurCapacityTx (kbps, multiplied by 1000 in LibreNMS)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2509.9.6.2.2.1.1.15.1",
|
||||
sensor_type: "capacity",
|
||||
sensor_descr: "Link Capacity",
|
||||
sensor_unit: "Mbps",
|
||||
oid: "1.3.6.1.4.1.2509.9.3.2.1.1.11.1",
|
||||
sensor_type: "rate",
|
||||
sensor_descr: "Tx Capacity",
|
||||
sensor_unit: "kbps",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# RX Capacity - aviatModemCurCapacityRx (kbps, multiplied by 1000 in LibreNMS)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2509.9.3.2.1.1.12.1",
|
||||
sensor_type: "rate",
|
||||
sensor_descr: "Rx Capacity",
|
||||
sensor_unit: "kbps",
|
||||
sensor_divisor: 1
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@ defmodule Towerops.Snmp.Profiles.Vendors.CambiumPtp do
|
|||
- PTP 670
|
||||
- PTP 700
|
||||
- PTP 800
|
||||
|
||||
OIDs sourced from CAMBIUM-PTP650-MIB:
|
||||
- Radio status: 1.3.6.1.4.1.17713.7.12 (transmitPower, rawReceivePower, signalStrengthRatio)
|
||||
- Data rates: 1.3.6.1.4.1.17713.7.20 (receiveDataRate, transmitDataRate, aggregateDataRate)
|
||||
"""
|
||||
|
||||
@behaviour Towerops.Snmp.Profiles.Vendors.Vendor
|
||||
|
|
@ -45,60 +49,52 @@ defmodule Towerops.Snmp.Profiles.Vendors.CambiumPtp do
|
|||
@impl true
|
||||
def wireless_oid_defs do
|
||||
[
|
||||
# Receive Power (RSL)
|
||||
# Transmit Power - transmitPower.0 (entry 4, divide by 10 for dBm)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.17713.7.12.6.0",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "Receive Power",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Transmit Power
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.17713.7.12.3.0",
|
||||
oid: "1.3.6.1.4.1.17713.7.12.4.0",
|
||||
sensor_type: "power",
|
||||
sensor_descr: "Transmit Power",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Vector Error
|
||||
# Receive Power (RSL) - rawReceivePower.0 (entry 12, divide by 10 for dBm)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.17713.7.12.8.0",
|
||||
sensor_type: "snr",
|
||||
sensor_descr: "Vector Error",
|
||||
sensor_unit: "dB",
|
||||
oid: "1.3.6.1.4.1.17713.7.12.12.0",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "Receive Power",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Link Loss
|
||||
# Signal Strength Ratio - signalStrengthRatio.0 (entry 9, divide by 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.17713.7.12.9.0",
|
||||
sensor_type: "quality",
|
||||
sensor_descr: "Link Loss",
|
||||
sensor_type: "ssr",
|
||||
sensor_descr: "Signal Strength Ratio",
|
||||
sensor_unit: "dB",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Receive Data Rate
|
||||
# Receive Data Rate - receiveDataRate.0 (kbps)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.17713.7.12.14.0",
|
||||
sensor_type: "capacity",
|
||||
oid: "1.3.6.1.4.1.17713.7.20.1.0",
|
||||
sensor_type: "rate",
|
||||
sensor_descr: "Rx Data Rate",
|
||||
sensor_unit: "kbps",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Transmit Data Rate
|
||||
# Transmit Data Rate - transmitDataRate.0 (kbps)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.17713.7.12.15.0",
|
||||
sensor_type: "capacity",
|
||||
oid: "1.3.6.1.4.1.17713.7.20.2.0",
|
||||
sensor_type: "rate",
|
||||
sensor_descr: "Tx Data Rate",
|
||||
sensor_unit: "kbps",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Radio Temperature
|
||||
# Aggregate Data Rate - aggregateDataRate.0 (kbps)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.17713.7.13.1.0",
|
||||
sensor_type: "temperature",
|
||||
sensor_descr: "Radio Temperature",
|
||||
sensor_unit: "C",
|
||||
oid: "1.3.6.1.4.1.17713.7.20.3.0",
|
||||
sensor_type: "rate",
|
||||
sensor_descr: "Aggregate Data Rate",
|
||||
sensor_unit: "kbps",
|
||||
sensor_divisor: 1
|
||||
}
|
||||
]
|
||||
|
|
|
|||
29
lib/towerops/snmp/profiles/vendors/ceragon.ex
vendored
29
lib/towerops/snmp/profiles/vendors/ceragon.ex
vendored
|
|
@ -8,6 +8,9 @@ defmodule Towerops.Snmp.Profiles.Vendors.Ceragon do
|
|||
- FibeAir IP-10 series
|
||||
- FibeAir IP-20 series
|
||||
- FibeAir RFU-C/H series
|
||||
|
||||
OIDs sourced from MWRM-RADIO-MIB:
|
||||
- RFU status table: 1.3.6.1.4.1.2281.10.5.1 (genEquipRfuStatusTxLevel, genEquipRfuStatusRxLevel)
|
||||
"""
|
||||
|
||||
@behaviour Towerops.Snmp.Profiles.Vendors.Vendor
|
||||
|
|
@ -37,36 +40,20 @@ defmodule Towerops.Snmp.Profiles.Vendors.Ceragon do
|
|||
@impl true
|
||||
def wireless_oid_defs do
|
||||
[
|
||||
# TX Power
|
||||
# TX Power - genEquipRfuStatusTxLevel (MWRM-RADIO-MIB)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2281.10.4.1.11.1.1.1",
|
||||
oid: "1.3.6.1.4.1.2281.10.5.1.1.3.1",
|
||||
sensor_type: "power",
|
||||
sensor_descr: "TX Power",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# RX Level
|
||||
# RX Level - genEquipRfuStatusRxLevel (MWRM-RADIO-MIB)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2281.10.4.1.11.1.2.1",
|
||||
oid: "1.3.6.1.4.1.2281.10.5.1.1.2.1",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "RX Level",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# SNR
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2281.10.4.1.11.1.3.1",
|
||||
sensor_type: "snr",
|
||||
sensor_descr: "Signal to Noise Ratio",
|
||||
sensor_unit: "dB",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Link Status (1=up, 2=down)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.2281.10.4.1.11.1.4.1",
|
||||
sensor_type: "state",
|
||||
sensor_descr: "Link Status",
|
||||
sensor_unit: "",
|
||||
sensor_divisor: 1
|
||||
}
|
||||
]
|
||||
|
|
|
|||
25
lib/towerops/snmp/profiles/vendors/dragonwave.ex
vendored
25
lib/towerops/snmp/profiles/vendors/dragonwave.ex
vendored
|
|
@ -9,6 +9,11 @@ defmodule Towerops.Snmp.Profiles.Vendors.Dragonwave do
|
|||
- Horizon Compact Plus
|
||||
- Horizon Duo
|
||||
- Horizon Quantum
|
||||
|
||||
OIDs sourced from Horizon ODU MIB:
|
||||
- SNR: .7262.2.2.5.1.2.8 (column 8, divide by 10)
|
||||
- RSL: .7262.2.2.5.1.2.4 (column 4, divide by 10)
|
||||
- Tx Power: .7262.2.2.5.1.3.2 (column 2, divide by 10)
|
||||
"""
|
||||
|
||||
@behaviour Towerops.Snmp.Profiles.Vendors.Vendor
|
||||
|
|
@ -40,31 +45,23 @@ defmodule Towerops.Snmp.Profiles.Vendors.Dragonwave do
|
|||
@impl true
|
||||
def wireless_oid_defs do
|
||||
[
|
||||
# Radio Temperature (divide by 10)
|
||||
# Modem SNR (column 8, divide by 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.7262.2.2.5.1.3.6.0",
|
||||
sensor_type: "temperature",
|
||||
sensor_descr: "Radio Temperature",
|
||||
sensor_unit: "C",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Modem SNR (divide by 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.7262.2.2.5.1.2.3.0",
|
||||
oid: "1.3.6.1.4.1.7262.2.2.5.1.2.8.0",
|
||||
sensor_type: "snr",
|
||||
sensor_descr: "Modem SNR",
|
||||
sensor_descr: "SNR",
|
||||
sensor_unit: "dB",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# RSL (Receive Signal Level)
|
||||
# RSL (Receive Signal Level, column 4, divide by 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.7262.2.2.5.1.2.2.0",
|
||||
oid: "1.3.6.1.4.1.7262.2.2.5.1.2.4.0",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "RSL",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Transmit Power
|
||||
# Transmit Power (column 2, divide by 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.7262.2.2.5.1.3.2.0",
|
||||
sensor_type: "power",
|
||||
|
|
|
|||
35
lib/towerops/snmp/profiles/vendors/exalt.ex
vendored
35
lib/towerops/snmp/profiles/vendors/exalt.ex
vendored
|
|
@ -7,6 +7,11 @@ defmodule Towerops.Snmp.Profiles.Vendors.Exalt do
|
|||
Supported devices:
|
||||
- ExtendAir series
|
||||
- ExploreAir series
|
||||
|
||||
OIDs sourced from ExtendAirG2 and ExaltComProducts MIBs:
|
||||
- Frequency: ExtendAirG2::extendAirG2TXfrequency (.57.4), extendAirG2RXfrequency (.57.5)
|
||||
- Tx Power: ExtendAirG2::extendAirG2TxPower (.57.1)
|
||||
- RSL: ExaltComProducts::locCurrentRSL (.2.4.3.1.3)
|
||||
"""
|
||||
|
||||
@behaviour Towerops.Snmp.Profiles.Vendors.Vendor
|
||||
|
|
@ -31,48 +36,38 @@ defmodule Towerops.Snmp.Profiles.Vendors.Exalt do
|
|||
|
||||
@impl true
|
||||
def wireless_oid_defs do
|
||||
# EXALT-MIB OIDs
|
||||
# Enterprise OID: 1.3.6.1.4.1.25651
|
||||
[
|
||||
# Tx Frequency (kHz, divide by 1000 for MHz)
|
||||
# Tx Frequency - extendAirG2TXfrequency (kHz, divide by 1000 for MHz)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.25651.1.2.3.1.1.7.0",
|
||||
oid: "1.3.6.1.4.1.25651.1.2.3.1.57.4.0",
|
||||
sensor_type: "frequency",
|
||||
sensor_descr: "Tx Frequency",
|
||||
sensor_unit: "MHz",
|
||||
sensor_divisor: 1000
|
||||
},
|
||||
# Rx Frequency (kHz, divide by 1000 for MHz)
|
||||
# Rx Frequency - extendAirG2RXfrequency (kHz, divide by 1000 for MHz)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.25651.1.2.3.1.1.8.0",
|
||||
oid: "1.3.6.1.4.1.25651.1.2.3.1.57.5.0",
|
||||
sensor_type: "frequency",
|
||||
sensor_descr: "Rx Frequency",
|
||||
sensor_unit: "MHz",
|
||||
sensor_divisor: 1000
|
||||
},
|
||||
# Tx Power (dBm * 10)
|
||||
# Tx Power - extendAirG2TxPower (dBm * 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.25651.1.2.3.1.1.9.0",
|
||||
oid: "1.3.6.1.4.1.25651.1.2.3.1.57.1.0",
|
||||
sensor_type: "power",
|
||||
sensor_descr: "Tx Power",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# RSL (Receive Signal Level, dBm * 10)
|
||||
# Signal Level (RSL) - locCurrentRSL
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.25651.1.2.3.1.2.1.0",
|
||||
oid: "1.3.6.1.4.1.25651.1.2.4.3.1.3.0",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "RSL",
|
||||
sensor_descr: "Signal Level",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# SNR (dB * 10)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.25651.1.2.3.1.2.3.0",
|
||||
sensor_type: "snr",
|
||||
sensor_descr: "SNR",
|
||||
sensor_unit: "dB",
|
||||
sensor_divisor: 10
|
||||
sensor_divisor: 1
|
||||
}
|
||||
]
|
||||
end
|
||||
|
|
|
|||
48
lib/towerops/snmp/profiles/vendors/siae.ex
vendored
48
lib/towerops/snmp/profiles/vendors/siae.ex
vendored
|
|
@ -7,6 +7,10 @@ defmodule Towerops.Snmp.Profiles.Vendors.Siae do
|
|||
Supported devices:
|
||||
- ALFO 80HD series
|
||||
- ALFOplus series
|
||||
|
||||
OIDs sourced from SIAE MIBs (Alfo80hd/SmOs):
|
||||
- Radio config: 1.3.6.1.4.1.3373.1103.39.2.1 (Tx Power, RSSI, Frequency)
|
||||
- Link capacity: 1.3.6.1.4.1.3373.1103.15.4.1 (Tx/Rx Rate)
|
||||
"""
|
||||
|
||||
@behaviour Towerops.Snmp.Profiles.Vendors.Vendor
|
||||
|
|
@ -31,40 +35,46 @@ defmodule Towerops.Snmp.Profiles.Vendors.Siae do
|
|||
|
||||
@impl true
|
||||
def wireless_oid_defs do
|
||||
# SIAE ALFO MIB OIDs
|
||||
# Enterprise OID: 1.3.6.1.4.1.3373
|
||||
[
|
||||
# Tx Power
|
||||
# Tx Power (dBm)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.3373.1103.80.1.1.11.1",
|
||||
oid: "1.3.6.1.4.1.3373.1103.39.2.1.13.1",
|
||||
sensor_type: "power",
|
||||
sensor_descr: "Tx Power",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Rx Power (RSL)
|
||||
# RSSI (Rx Power)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.3373.1103.80.1.1.12.1",
|
||||
oid: "1.3.6.1.4.1.3373.1103.39.2.1.12.1",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "Rx Power",
|
||||
sensor_descr: "RSSI",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 10
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# SNR
|
||||
# Tx Frequency (kHz, divide by 1000 for MHz)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.3373.1103.80.1.1.14.1",
|
||||
sensor_type: "snr",
|
||||
sensor_descr: "SNR",
|
||||
sensor_unit: "dB",
|
||||
sensor_divisor: 10
|
||||
},
|
||||
# Frequency
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.3373.1103.80.1.1.3.1",
|
||||
oid: "1.3.6.1.4.1.3373.1103.39.2.1.2.1",
|
||||
sensor_type: "frequency",
|
||||
sensor_descr: "Tx Frequency",
|
||||
sensor_unit: "MHz",
|
||||
sensor_divisor: 1000
|
||||
},
|
||||
# Tx Rate (kbps, multiplied by 1000 in display)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.3373.1103.15.4.1.17.1",
|
||||
sensor_type: "rate",
|
||||
sensor_descr: "Tx Rate",
|
||||
sensor_unit: "kbps",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Rx Rate (kbps, multiplied by 1000 in display)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.3373.1103.15.4.1.18.1",
|
||||
sensor_type: "rate",
|
||||
sensor_descr: "Rx Rate",
|
||||
sensor_unit: "kbps",
|
||||
sensor_divisor: 1
|
||||
}
|
||||
]
|
||||
end
|
||||
|
|
|
|||
35
lib/towerops/snmp/profiles/vendors/teltonika.ex
vendored
35
lib/towerops/snmp/profiles/vendors/teltonika.ex
vendored
|
|
@ -9,6 +9,9 @@ defmodule Towerops.Snmp.Profiles.Vendors.Teltonika do
|
|||
- RUT200, RUT240, RUT241, RUT360
|
||||
- RUT950, RUT955, RUT956
|
||||
- TRB140, TRB145, TRB255, TRB500
|
||||
|
||||
OIDs sourced from TELTONIKA-RUTX-MIB:
|
||||
- Modem table: 1.3.6.1.4.1.48690.2.2.1 (mSignal, mRSRP, mRSRQ, mSINR, etc.)
|
||||
"""
|
||||
|
||||
@behaviour Towerops.Snmp.Profiles.Vendors.Vendor
|
||||
|
|
@ -40,49 +43,49 @@ defmodule Towerops.Snmp.Profiles.Vendors.Teltonika do
|
|||
@impl true
|
||||
def wireless_oid_defs do
|
||||
[
|
||||
# Mobile Signal Strength (RSSI)
|
||||
# Mobile Signal Strength (RSSI) - mSignal (column 12)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.7.1",
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.12.1",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "Mobile Signal (RSSI)",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Mobile RSRP (Reference Signal Received Power)
|
||||
# Mobile RSRP (Reference Signal Received Power) - mRSRP (column 20)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.8.1",
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.20.1",
|
||||
sensor_type: "rssi",
|
||||
sensor_descr: "RSRP",
|
||||
sensor_unit: "dBm",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Mobile RSRQ (Reference Signal Received Quality)
|
||||
# Mobile RSRQ (Reference Signal Received Quality) - mRSRQ (column 21)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.10.1",
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.21.1",
|
||||
sensor_type: "quality",
|
||||
sensor_descr: "RSRQ",
|
||||
sensor_unit: "dB",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Mobile SINR (Signal to Interference plus Noise Ratio)
|
||||
# Mobile SINR (Signal to Interference plus Noise Ratio) - mSINR (column 19)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.9.1",
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.19.1",
|
||||
sensor_type: "snr",
|
||||
sensor_descr: "SINR",
|
||||
sensor_unit: "dB",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Connection Type (LTE/3G/2G)
|
||||
# Connection Type (LTE/3G/2G) - mConnectionType (column 16)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.3.1",
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.16.1",
|
||||
sensor_type: "state",
|
||||
sensor_descr: "Connection Type",
|
||||
sensor_unit: "",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# SIM Card Status
|
||||
# SIM Card Status - mSimState (column 9)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.2.1",
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.9.1",
|
||||
sensor_type: "state",
|
||||
sensor_descr: "SIM Status",
|
||||
sensor_unit: "",
|
||||
|
|
@ -96,13 +99,13 @@ defmodule Towerops.Snmp.Profiles.Vendors.Teltonika do
|
|||
sensor_unit: "",
|
||||
sensor_divisor: 1
|
||||
},
|
||||
# Device Temperature
|
||||
# Modem Temperature - mTemperature (column 17)
|
||||
%{
|
||||
oid: "1.3.6.1.4.1.48690.1.7.0",
|
||||
oid: "1.3.6.1.4.1.48690.2.2.1.17.1",
|
||||
sensor_type: "temperature",
|
||||
sensor_descr: "Device Temperature",
|
||||
sensor_descr: "Modem Temperature",
|
||||
sensor_unit: "C",
|
||||
sensor_divisor: 10
|
||||
sensor_divisor: 1
|
||||
}
|
||||
]
|
||||
end
|
||||
|
|
|
|||
|
|
@ -45,40 +45,63 @@ defmodule Towerops.Snmp.Profiles.Vendors.AviatTest do
|
|||
defs = Aviat.wireless_oid_defs()
|
||||
|
||||
assert is_list(defs)
|
||||
assert [_ | _] = defs
|
||||
assert length(defs) == 5
|
||||
end
|
||||
|
||||
test "includes temperature sensor" do
|
||||
defs = Aviat.wireless_oid_defs()
|
||||
temp = Enum.find(defs, &(&1.sensor_type == "temperature"))
|
||||
|
||||
assert temp
|
||||
assert temp.sensor_descr == "ODU Temperature"
|
||||
end
|
||||
|
||||
test "includes RSL sensor" do
|
||||
test "RSL uses aviatRxPerformRslReadingCurrent OID (.9.15.2.2.1.4)" do
|
||||
defs = Aviat.wireless_oid_defs()
|
||||
rssi = Enum.find(defs, &(&1.sensor_type == "rssi"))
|
||||
|
||||
assert rssi
|
||||
assert rssi.oid == "1.3.6.1.4.1.2509.9.15.2.2.1.4.1"
|
||||
assert rssi.sensor_descr == "RSL"
|
||||
assert rssi.sensor_unit == "dBm"
|
||||
assert rssi.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "includes SNR sensor" do
|
||||
test "Tx Power uses aviatRxPerformTxpowReadingCurrent OID (.9.33.2.2.1.7)" do
|
||||
defs = Aviat.wireless_oid_defs()
|
||||
tx = Enum.find(defs, &(&1.sensor_type == "power"))
|
||||
|
||||
assert tx.oid == "1.3.6.1.4.1.2509.9.33.2.2.1.7.1"
|
||||
assert tx.sensor_descr == "Tx Power"
|
||||
assert tx.sensor_unit == "dBm"
|
||||
assert tx.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "SNR uses aviatRxPerformCinrReadingCurrent OID (.9.33.2.2.1.3)" do
|
||||
defs = Aviat.wireless_oid_defs()
|
||||
snr = Enum.find(defs, &(&1.sensor_type == "snr"))
|
||||
|
||||
assert snr
|
||||
assert snr.oid == "1.3.6.1.4.1.2509.9.33.2.2.1.3.1"
|
||||
assert snr.sensor_descr == "SNR"
|
||||
assert snr.sensor_unit == "dB"
|
||||
assert snr.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "includes capacity sensor" do
|
||||
test "Tx capacity uses aviatModemCurCapacityTx OID (.9.3.2.1.1.11)" do
|
||||
defs = Aviat.wireless_oid_defs()
|
||||
capacity = Enum.find(defs, &(&1.sensor_type == "capacity"))
|
||||
tx_rate = Enum.find(defs, &(&1.sensor_descr == "Tx Capacity"))
|
||||
|
||||
assert capacity
|
||||
assert capacity.sensor_unit == "Mbps"
|
||||
assert tx_rate.oid == "1.3.6.1.4.1.2509.9.3.2.1.1.11.1"
|
||||
assert tx_rate.sensor_type == "rate"
|
||||
assert tx_rate.sensor_unit == "kbps"
|
||||
end
|
||||
|
||||
test "Rx capacity uses aviatModemCurCapacityRx OID (.9.3.2.1.1.12)" do
|
||||
defs = Aviat.wireless_oid_defs()
|
||||
rx_rate = Enum.find(defs, &(&1.sensor_descr == "Rx Capacity"))
|
||||
|
||||
assert rx_rate.oid == "1.3.6.1.4.1.2509.9.3.2.1.1.12.1"
|
||||
assert rx_rate.sensor_type == "rate"
|
||||
assert rx_rate.sensor_unit == "kbps"
|
||||
end
|
||||
|
||||
test "no duplicate OIDs" do
|
||||
defs = Aviat.wireless_oid_defs()
|
||||
oids = Enum.map(defs, & &1.oid)
|
||||
|
||||
assert length(oids) == length(Enum.uniq(oids)),
|
||||
"Found duplicate OIDs: #{inspect(oids -- Enum.uniq(oids))}"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -86,11 +109,11 @@ defmodule Towerops.Snmp.Profiles.Vendors.AviatTest do
|
|||
test "discovers sensors when SNMP responds" do
|
||||
expect(SnmpMock, :get, 5, fn _, oid, _ ->
|
||||
cond do
|
||||
String.contains?(oid, "2509.9.6.2.3.1.1.5.1") -> {:ok, 45}
|
||||
String.contains?(oid, "2509.9.6.2.2.1.1.7.1") -> {:ok, -550}
|
||||
String.contains?(oid, "2509.9.6.2.2.1.1.5.1") -> {:ok, 200}
|
||||
String.contains?(oid, "2509.9.6.2.2.1.1.12.1") -> {:ok, 280}
|
||||
String.contains?(oid, "2509.9.6.2.2.1.1.15.1") -> {:ok, 400}
|
||||
String.contains?(oid, "2509.9.15.2.2.1.4.1") -> {:ok, -550}
|
||||
String.contains?(oid, "2509.9.33.2.2.1.7.1") -> {:ok, 200}
|
||||
String.contains?(oid, "2509.9.33.2.2.1.3.1") -> {:ok, 280}
|
||||
String.contains?(oid, "2509.9.3.2.1.1.11.1") -> {:ok, 350_000}
|
||||
String.contains?(oid, "2509.9.3.2.1.1.12.1") -> {:ok, 350_000}
|
||||
true -> {:error, :no_such_object}
|
||||
end
|
||||
end)
|
||||
|
|
|
|||
|
|
@ -51,67 +51,85 @@ defmodule Towerops.Snmp.Profiles.Vendors.CambiumPtpTest do
|
|||
defs = CambiumPtp.wireless_oid_defs()
|
||||
|
||||
assert is_list(defs)
|
||||
assert [_ | _] = defs
|
||||
assert length(defs) == 6
|
||||
end
|
||||
|
||||
test "includes receive power (RSL) sensor" do
|
||||
defs = CambiumPtp.wireless_oid_defs()
|
||||
rsl = Enum.find(defs, &(&1.sensor_descr == "Receive Power"))
|
||||
|
||||
assert rsl
|
||||
assert rsl.sensor_type == "rssi"
|
||||
assert rsl.sensor_unit == "dBm"
|
||||
assert rsl.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "includes transmit power sensor" do
|
||||
test "transmit power uses correct OID (.12.4)" do
|
||||
defs = CambiumPtp.wireless_oid_defs()
|
||||
tx = Enum.find(defs, &(&1.sensor_descr == "Transmit Power"))
|
||||
|
||||
assert tx
|
||||
assert tx.oid == "1.3.6.1.4.1.17713.7.12.4.0"
|
||||
assert tx.sensor_type == "power"
|
||||
assert tx.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "includes vector error sensor" do
|
||||
test "receive power uses rawReceivePower OID (.12.12)" do
|
||||
defs = CambiumPtp.wireless_oid_defs()
|
||||
ve = Enum.find(defs, &(&1.sensor_descr == "Vector Error"))
|
||||
rx = Enum.find(defs, &(&1.sensor_descr == "Receive Power"))
|
||||
|
||||
assert ve
|
||||
assert ve.sensor_type == "snr"
|
||||
assert rx.oid == "1.3.6.1.4.1.17713.7.12.12.0"
|
||||
assert rx.sensor_type == "rssi"
|
||||
assert rx.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "includes data rate sensors" do
|
||||
test "signal strength ratio uses correct OID (.12.9)" do
|
||||
defs = CambiumPtp.wireless_oid_defs()
|
||||
ssr = Enum.find(defs, &(&1.sensor_descr == "Signal Strength Ratio"))
|
||||
|
||||
assert ssr.oid == "1.3.6.1.4.1.17713.7.12.9.0"
|
||||
assert ssr.sensor_type == "ssr"
|
||||
assert ssr.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "receive data rate uses correct OID from subtree .20 (.20.1)" do
|
||||
defs = CambiumPtp.wireless_oid_defs()
|
||||
rx_rate = Enum.find(defs, &(&1.sensor_descr == "Rx Data Rate"))
|
||||
tx_rate = Enum.find(defs, &(&1.sensor_descr == "Tx Data Rate"))
|
||||
|
||||
assert rx_rate
|
||||
assert rx_rate.sensor_type == "capacity"
|
||||
assert tx_rate
|
||||
assert tx_rate.sensor_type == "capacity"
|
||||
assert rx_rate.oid == "1.3.6.1.4.1.17713.7.20.1.0"
|
||||
assert rx_rate.sensor_type == "rate"
|
||||
assert rx_rate.sensor_unit == "kbps"
|
||||
assert rx_rate.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "includes temperature sensor" do
|
||||
test "transmit data rate uses correct OID from subtree .20 (.20.2)" do
|
||||
defs = CambiumPtp.wireless_oid_defs()
|
||||
temp = Enum.find(defs, &(&1.sensor_type == "temperature"))
|
||||
tx_rate = Enum.find(defs, &(&1.sensor_descr == "Tx Data Rate"))
|
||||
|
||||
assert temp
|
||||
assert temp.sensor_descr == "Radio Temperature"
|
||||
assert tx_rate.oid == "1.3.6.1.4.1.17713.7.20.2.0"
|
||||
assert tx_rate.sensor_type == "rate"
|
||||
assert tx_rate.sensor_unit == "kbps"
|
||||
assert tx_rate.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "aggregate data rate uses correct OID (.20.3)" do
|
||||
defs = CambiumPtp.wireless_oid_defs()
|
||||
agg = Enum.find(defs, &(&1.sensor_descr == "Aggregate Data Rate"))
|
||||
|
||||
assert agg.oid == "1.3.6.1.4.1.17713.7.20.3.0"
|
||||
assert agg.sensor_type == "rate"
|
||||
assert agg.sensor_unit == "kbps"
|
||||
assert agg.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "no duplicate OIDs" do
|
||||
defs = CambiumPtp.wireless_oid_defs()
|
||||
oids = Enum.map(defs, & &1.oid)
|
||||
|
||||
assert length(oids) == length(Enum.uniq(oids)),
|
||||
"Found duplicate OIDs: #{inspect(oids -- Enum.uniq(oids))}"
|
||||
end
|
||||
end
|
||||
|
||||
describe "discover_wireless_sensors/1" do
|
||||
test "discovers sensors when SNMP responds" do
|
||||
expect(SnmpMock, :get, 7, fn _, oid, _ ->
|
||||
expect(SnmpMock, :get, 6, fn _, oid, _ ->
|
||||
cond do
|
||||
String.contains?(oid, "17713.7.12.6.0") -> {:ok, -550}
|
||||
String.contains?(oid, "17713.7.12.3.0") -> {:ok, 230}
|
||||
String.contains?(oid, "17713.7.12.8.0") -> {:ok, 350}
|
||||
String.contains?(oid, "17713.7.12.9.0") -> {:ok, 15}
|
||||
String.contains?(oid, "17713.7.12.14.0") -> {:ok, 350_000}
|
||||
String.contains?(oid, "17713.7.12.15.0") -> {:ok, 350_000}
|
||||
String.contains?(oid, "17713.7.13.1.0") -> {:ok, 42}
|
||||
String.contains?(oid, "17713.7.12.12.0") -> {:ok, -550}
|
||||
String.contains?(oid, "17713.7.12.4.0") -> {:ok, 230}
|
||||
String.contains?(oid, "17713.7.12.9.0") -> {:ok, 150}
|
||||
String.contains?(oid, "17713.7.20.1.0") -> {:ok, 350_000}
|
||||
String.contains?(oid, "17713.7.20.2.0") -> {:ok, 350_000}
|
||||
String.contains?(oid, "17713.7.20.3.0") -> {:ok, 700_000}
|
||||
true -> {:error, :no_such_object}
|
||||
end
|
||||
end)
|
||||
|
|
@ -119,11 +137,15 @@ defmodule Towerops.Snmp.Profiles.Vendors.CambiumPtpTest do
|
|||
sensors = CambiumPtp.discover_wireless_sensors(@client_opts)
|
||||
|
||||
assert is_list(sensors)
|
||||
assert length(sensors) == 7
|
||||
assert length(sensors) == 6
|
||||
|
||||
rx = Enum.find(sensors, &(&1.sensor_type == "rssi"))
|
||||
assert rx.sensor_oid == "1.3.6.1.4.1.17713.7.12.12.0"
|
||||
assert rx.last_value == -550.0
|
||||
end
|
||||
|
||||
test "returns empty list when no sensors respond" do
|
||||
expect(SnmpMock, :get, 7, fn _, _, _ ->
|
||||
expect(SnmpMock, :get, 6, fn _, _, _ ->
|
||||
{:error, :no_such_object}
|
||||
end)
|
||||
|
||||
|
|
|
|||
|
|
@ -45,37 +45,44 @@ defmodule Towerops.Snmp.Profiles.Vendors.CeragonTest do
|
|||
defs = Ceragon.wireless_oid_defs()
|
||||
|
||||
assert is_list(defs)
|
||||
assert [_ | _] = defs
|
||||
assert length(defs) == 2
|
||||
end
|
||||
|
||||
test "includes TX and RX power sensors" do
|
||||
test "TX power uses genEquipRfuStatusTxLevel OID (.10.5.1.1.3)" do
|
||||
defs = Ceragon.wireless_oid_defs()
|
||||
tx = Enum.find(defs, &(&1.sensor_descr == "TX Power"))
|
||||
rx = Enum.find(defs, &(&1.sensor_descr == "RX Level"))
|
||||
|
||||
assert tx
|
||||
assert tx.oid == "1.3.6.1.4.1.2281.10.5.1.1.3.1"
|
||||
assert tx.sensor_type == "power"
|
||||
assert rx
|
||||
assert rx.sensor_type == "rssi"
|
||||
assert tx.sensor_unit == "dBm"
|
||||
assert tx.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "includes SNR sensor" do
|
||||
test "RX level uses genEquipRfuStatusRxLevel OID (.10.5.1.1.2)" do
|
||||
defs = Ceragon.wireless_oid_defs()
|
||||
snr = Enum.find(defs, &(&1.sensor_descr == "Signal to Noise Ratio"))
|
||||
rx = Enum.find(defs, &(&1.sensor_descr == "RX Level"))
|
||||
|
||||
assert snr
|
||||
assert snr.sensor_type == "snr"
|
||||
assert rx.oid == "1.3.6.1.4.1.2281.10.5.1.1.2.1"
|
||||
assert rx.sensor_type == "rssi"
|
||||
assert rx.sensor_unit == "dBm"
|
||||
assert rx.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "no duplicate OIDs" do
|
||||
defs = Ceragon.wireless_oid_defs()
|
||||
oids = Enum.map(defs, & &1.oid)
|
||||
|
||||
assert length(oids) == length(Enum.uniq(oids)),
|
||||
"Found duplicate OIDs: #{inspect(oids -- Enum.uniq(oids))}"
|
||||
end
|
||||
end
|
||||
|
||||
describe "discover_wireless_sensors/1" do
|
||||
test "discovers sensors when SNMP responds" do
|
||||
expect(SnmpMock, :get, 4, fn _, oid, _ ->
|
||||
expect(SnmpMock, :get, 2, fn _, oid, _ ->
|
||||
cond do
|
||||
String.contains?(oid, "2281.10.4.1.11.1.1.1") -> {:ok, 200}
|
||||
String.contains?(oid, "2281.10.4.1.11.1.2.1") -> {:ok, -450}
|
||||
String.contains?(oid, "2281.10.4.1.11.1.3.1") -> {:ok, 320}
|
||||
String.contains?(oid, "2281.10.4.1.11.1.4.1") -> {:ok, 1}
|
||||
String.contains?(oid, "2281.10.5.1.1.3.1") -> {:ok, 20}
|
||||
String.contains?(oid, "2281.10.5.1.1.2.1") -> {:ok, -45}
|
||||
true -> {:error, :no_such_object}
|
||||
end
|
||||
end)
|
||||
|
|
@ -83,11 +90,11 @@ defmodule Towerops.Snmp.Profiles.Vendors.CeragonTest do
|
|||
sensors = Ceragon.discover_wireless_sensors(@client_opts)
|
||||
|
||||
assert is_list(sensors)
|
||||
assert length(sensors) == 4
|
||||
assert length(sensors) == 2
|
||||
end
|
||||
|
||||
test "returns empty list when no sensors respond" do
|
||||
expect(SnmpMock, :get, 4, fn _, _, _ ->
|
||||
expect(SnmpMock, :get, 2, fn _, _, _ ->
|
||||
{:error, :no_such_object}
|
||||
end)
|
||||
|
||||
|
|
|
|||
|
|
@ -50,41 +50,53 @@ defmodule Towerops.Snmp.Profiles.Vendors.DragonwaveTest do
|
|||
defs = Dragonwave.wireless_oid_defs()
|
||||
|
||||
assert is_list(defs)
|
||||
assert [_ | _] = defs
|
||||
assert length(defs) == 3
|
||||
end
|
||||
|
||||
test "includes temperature sensor with divisor" do
|
||||
defs = Dragonwave.wireless_oid_defs()
|
||||
temp = Enum.find(defs, &(&1.sensor_type == "temperature"))
|
||||
|
||||
assert temp
|
||||
assert temp.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "includes SNR sensor" do
|
||||
test "SNR uses correct OID column 8 (.2.8)" do
|
||||
defs = Dragonwave.wireless_oid_defs()
|
||||
snr = Enum.find(defs, &(&1.sensor_type == "snr"))
|
||||
|
||||
assert snr
|
||||
assert snr.oid == "1.3.6.1.4.1.7262.2.2.5.1.2.8.0"
|
||||
assert snr.sensor_descr == "SNR"
|
||||
assert snr.sensor_unit == "dB"
|
||||
assert snr.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "includes RSSI sensor" do
|
||||
test "RSL uses correct OID column 4 (.2.4)" do
|
||||
defs = Dragonwave.wireless_oid_defs()
|
||||
rssi = Enum.find(defs, &(&1.sensor_type == "rssi"))
|
||||
|
||||
assert rssi
|
||||
assert rssi.oid == "1.3.6.1.4.1.7262.2.2.5.1.2.4.0"
|
||||
assert rssi.sensor_descr == "RSL"
|
||||
assert rssi.sensor_unit == "dBm"
|
||||
assert rssi.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "Tx Power uses correct OID (.3.2) - unchanged" do
|
||||
defs = Dragonwave.wireless_oid_defs()
|
||||
tx = Enum.find(defs, &(&1.sensor_type == "power"))
|
||||
|
||||
assert tx.oid == "1.3.6.1.4.1.7262.2.2.5.1.3.2.0"
|
||||
assert tx.sensor_descr == "Tx Power"
|
||||
assert tx.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "no duplicate OIDs" do
|
||||
defs = Dragonwave.wireless_oid_defs()
|
||||
oids = Enum.map(defs, & &1.oid)
|
||||
|
||||
assert length(oids) == length(Enum.uniq(oids)),
|
||||
"Found duplicate OIDs: #{inspect(oids -- Enum.uniq(oids))}"
|
||||
end
|
||||
end
|
||||
|
||||
describe "discover_wireless_sensors/1" do
|
||||
test "discovers sensors when SNMP responds" do
|
||||
expect(SnmpMock, :get, 4, fn _, oid, _ ->
|
||||
expect(SnmpMock, :get, 3, fn _, oid, _ ->
|
||||
cond do
|
||||
String.contains?(oid, "7262.2.2.5.1.3.6.0") -> {:ok, 450}
|
||||
String.contains?(oid, "7262.2.2.5.1.2.3.0") -> {:ok, 280}
|
||||
String.contains?(oid, "7262.2.2.5.1.2.2.0") -> {:ok, -550}
|
||||
String.contains?(oid, "7262.2.2.5.1.2.8.0") -> {:ok, 280}
|
||||
String.contains?(oid, "7262.2.2.5.1.2.4.0") -> {:ok, -550}
|
||||
String.contains?(oid, "7262.2.2.5.1.3.2.0") -> {:ok, 180}
|
||||
true -> {:error, :no_such_object}
|
||||
end
|
||||
|
|
@ -93,11 +105,11 @@ defmodule Towerops.Snmp.Profiles.Vendors.DragonwaveTest do
|
|||
sensors = Dragonwave.discover_wireless_sensors(@client_opts)
|
||||
|
||||
assert is_list(sensors)
|
||||
assert length(sensors) == 4
|
||||
assert length(sensors) == 3
|
||||
end
|
||||
|
||||
test "returns empty list when no sensors respond" do
|
||||
expect(SnmpMock, :get, 4, fn _, _, _ ->
|
||||
expect(SnmpMock, :get, 3, fn _, _, _ ->
|
||||
{:error, :no_such_object}
|
||||
end)
|
||||
|
||||
|
|
|
|||
|
|
@ -33,52 +33,66 @@ defmodule Towerops.Snmp.Profiles.Vendors.ExaltTest do
|
|||
defs = Exalt.wireless_oid_defs()
|
||||
|
||||
assert is_list(defs)
|
||||
assert [_ | _] = defs
|
||||
assert length(defs) == 4
|
||||
end
|
||||
|
||||
test "includes frequency sensors with kHz divisor" do
|
||||
test "Tx frequency uses ExtendAirG2 OID (.57.4.0)" do
|
||||
defs = Exalt.wireless_oid_defs()
|
||||
freq_sensors = Enum.filter(defs, &(&1.sensor_type == "frequency"))
|
||||
tx_freq = Enum.find(defs, &(&1.sensor_descr == "Tx Frequency"))
|
||||
|
||||
assert length(freq_sensors) == 2
|
||||
# Exalt returns frequency in kHz
|
||||
assert Enum.all?(freq_sensors, &(&1.sensor_divisor == 1000))
|
||||
assert tx_freq.oid == "1.3.6.1.4.1.25651.1.2.3.1.57.4.0"
|
||||
assert tx_freq.sensor_type == "frequency"
|
||||
assert tx_freq.sensor_unit == "MHz"
|
||||
assert tx_freq.sensor_divisor == 1000
|
||||
end
|
||||
|
||||
test "includes power sensor" do
|
||||
test "Rx frequency uses ExtendAirG2 OID (.57.5.0)" do
|
||||
defs = Exalt.wireless_oid_defs()
|
||||
rx_freq = Enum.find(defs, &(&1.sensor_descr == "Rx Frequency"))
|
||||
|
||||
assert rx_freq.oid == "1.3.6.1.4.1.25651.1.2.3.1.57.5.0"
|
||||
assert rx_freq.sensor_type == "frequency"
|
||||
assert rx_freq.sensor_unit == "MHz"
|
||||
assert rx_freq.sensor_divisor == 1000
|
||||
end
|
||||
|
||||
test "Tx power uses ExtendAirG2 OID (.57.1.0)" do
|
||||
defs = Exalt.wireless_oid_defs()
|
||||
power = Enum.find(defs, &(&1.sensor_type == "power"))
|
||||
|
||||
assert power
|
||||
assert power.oid == "1.3.6.1.4.1.25651.1.2.3.1.57.1.0"
|
||||
assert power.sensor_descr == "Tx Power"
|
||||
assert power.sensor_unit == "dBm"
|
||||
assert power.sensor_divisor == 10
|
||||
end
|
||||
|
||||
test "includes RSSI sensor" do
|
||||
test "RSL uses locCurrentRSL OID (.2.4.3.1.3.0)" do
|
||||
defs = Exalt.wireless_oid_defs()
|
||||
rssi = Enum.find(defs, &(&1.sensor_type == "rssi"))
|
||||
|
||||
assert rssi
|
||||
assert rssi.sensor_descr == "RSL"
|
||||
assert rssi.oid == "1.3.6.1.4.1.25651.1.2.4.3.1.3.0"
|
||||
assert rssi.sensor_descr == "Signal Level"
|
||||
assert rssi.sensor_unit == "dBm"
|
||||
assert rssi.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "includes SNR sensor" do
|
||||
test "no duplicate OIDs" do
|
||||
defs = Exalt.wireless_oid_defs()
|
||||
snr = Enum.find(defs, &(&1.sensor_type == "snr"))
|
||||
oids = Enum.map(defs, & &1.oid)
|
||||
|
||||
assert snr
|
||||
assert snr.sensor_unit == "dB"
|
||||
assert length(oids) == length(Enum.uniq(oids)),
|
||||
"Found duplicate OIDs: #{inspect(oids -- Enum.uniq(oids))}"
|
||||
end
|
||||
end
|
||||
|
||||
describe "discover_wireless_sensors/1" do
|
||||
test "discovers sensors when SNMP responds" do
|
||||
expect(SnmpMock, :get, 5, fn _, oid, _ ->
|
||||
expect(SnmpMock, :get, 4, fn _, oid, _ ->
|
||||
cond do
|
||||
String.contains?(oid, "25651.1.2.3.1.1.7.0") -> {:ok, 71_000_000}
|
||||
String.contains?(oid, "25651.1.2.3.1.1.8.0") -> {:ok, 81_000_000}
|
||||
String.contains?(oid, "25651.1.2.3.1.1.9.0") -> {:ok, 200}
|
||||
String.contains?(oid, "25651.1.2.3.1.2.1.0") -> {:ok, -550}
|
||||
String.contains?(oid, "25651.1.2.3.1.2.3.0") -> {:ok, 280}
|
||||
String.contains?(oid, "25651.1.2.3.1.57.4.0") -> {:ok, 71_000_000}
|
||||
String.contains?(oid, "25651.1.2.3.1.57.5.0") -> {:ok, 81_000_000}
|
||||
String.contains?(oid, "25651.1.2.3.1.57.1.0") -> {:ok, 200}
|
||||
String.contains?(oid, "25651.1.2.4.3.1.3.0") -> {:ok, -55}
|
||||
true -> {:error, :no_such_object}
|
||||
end
|
||||
end)
|
||||
|
|
@ -86,11 +100,11 @@ defmodule Towerops.Snmp.Profiles.Vendors.ExaltTest do
|
|||
sensors = Exalt.discover_wireless_sensors(@client_opts)
|
||||
|
||||
assert is_list(sensors)
|
||||
assert length(sensors) == 5
|
||||
assert length(sensors) == 4
|
||||
end
|
||||
|
||||
test "returns empty list when no sensors respond" do
|
||||
expect(SnmpMock, :get, 5, fn _, _, _ ->
|
||||
expect(SnmpMock, :get, 4, fn _, _, _ ->
|
||||
{:error, :no_such_object}
|
||||
end)
|
||||
|
||||
|
|
|
|||
|
|
@ -33,52 +33,75 @@ defmodule Towerops.Snmp.Profiles.Vendors.SiaeTest do
|
|||
defs = Siae.wireless_oid_defs()
|
||||
|
||||
assert is_list(defs)
|
||||
assert [_ | _] = defs
|
||||
assert length(defs) == 5
|
||||
end
|
||||
|
||||
test "includes power sensor" do
|
||||
test "Tx Power uses correct ALFO80HD OID (.39.2.1.13)" do
|
||||
defs = Siae.wireless_oid_defs()
|
||||
power = Enum.find(defs, &(&1.sensor_type == "power"))
|
||||
|
||||
assert power
|
||||
assert power.oid == "1.3.6.1.4.1.3373.1103.39.2.1.13.1"
|
||||
assert power.sensor_descr == "Tx Power"
|
||||
assert power.sensor_divisor == 10
|
||||
assert power.sensor_unit == "dBm"
|
||||
assert power.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "includes RSSI sensor" do
|
||||
test "RSSI uses correct ALFO80HD OID (.39.2.1.12)" do
|
||||
defs = Siae.wireless_oid_defs()
|
||||
rssi = Enum.find(defs, &(&1.sensor_type == "rssi"))
|
||||
|
||||
assert rssi
|
||||
assert rssi.sensor_descr == "Rx Power"
|
||||
assert rssi.oid == "1.3.6.1.4.1.3373.1103.39.2.1.12.1"
|
||||
assert rssi.sensor_descr == "RSSI"
|
||||
assert rssi.sensor_unit == "dBm"
|
||||
assert rssi.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "includes SNR sensor" do
|
||||
defs = Siae.wireless_oid_defs()
|
||||
snr = Enum.find(defs, &(&1.sensor_type == "snr"))
|
||||
|
||||
assert snr
|
||||
assert snr.sensor_unit == "dB"
|
||||
end
|
||||
|
||||
test "includes frequency sensor" do
|
||||
test "Frequency uses correct ALFO80HD OID (.39.2.1.2)" do
|
||||
defs = Siae.wireless_oid_defs()
|
||||
freq = Enum.find(defs, &(&1.sensor_type == "frequency"))
|
||||
|
||||
assert freq
|
||||
# SIAE frequency in kHz
|
||||
assert freq.oid == "1.3.6.1.4.1.3373.1103.39.2.1.2.1"
|
||||
assert freq.sensor_descr == "Tx Frequency"
|
||||
assert freq.sensor_unit == "MHz"
|
||||
assert freq.sensor_divisor == 1000
|
||||
end
|
||||
|
||||
test "Tx Rate uses correct OID (.15.4.1.17)" do
|
||||
defs = Siae.wireless_oid_defs()
|
||||
tx_rate = Enum.find(defs, &(&1.sensor_descr == "Tx Rate"))
|
||||
|
||||
assert tx_rate.oid == "1.3.6.1.4.1.3373.1103.15.4.1.17.1"
|
||||
assert tx_rate.sensor_type == "rate"
|
||||
assert tx_rate.sensor_unit == "kbps"
|
||||
end
|
||||
|
||||
test "Rx Rate uses correct OID (.15.4.1.18)" do
|
||||
defs = Siae.wireless_oid_defs()
|
||||
rx_rate = Enum.find(defs, &(&1.sensor_descr == "Rx Rate"))
|
||||
|
||||
assert rx_rate.oid == "1.3.6.1.4.1.3373.1103.15.4.1.18.1"
|
||||
assert rx_rate.sensor_type == "rate"
|
||||
assert rx_rate.sensor_unit == "kbps"
|
||||
end
|
||||
|
||||
test "no duplicate OIDs" do
|
||||
defs = Siae.wireless_oid_defs()
|
||||
oids = Enum.map(defs, & &1.oid)
|
||||
|
||||
assert length(oids) == length(Enum.uniq(oids)),
|
||||
"Found duplicate OIDs: #{inspect(oids -- Enum.uniq(oids))}"
|
||||
end
|
||||
end
|
||||
|
||||
describe "discover_wireless_sensors/1" do
|
||||
test "discovers sensors when SNMP responds" do
|
||||
expect(SnmpMock, :get, 4, fn _, oid, _ ->
|
||||
expect(SnmpMock, :get, 5, fn _, oid, _ ->
|
||||
cond do
|
||||
String.contains?(oid, "3373.1103.80.1.1.11.1") -> {:ok, 180}
|
||||
String.contains?(oid, "3373.1103.80.1.1.12.1") -> {:ok, -450}
|
||||
String.contains?(oid, "3373.1103.80.1.1.14.1") -> {:ok, 250}
|
||||
String.contains?(oid, "3373.1103.80.1.1.3.1") -> {:ok, 71_000_000}
|
||||
String.contains?(oid, "3373.1103.39.2.1.13.1") -> {:ok, 18}
|
||||
String.contains?(oid, "3373.1103.39.2.1.12.1") -> {:ok, -45}
|
||||
String.contains?(oid, "3373.1103.39.2.1.2.1") -> {:ok, 71_000_000}
|
||||
String.contains?(oid, "3373.1103.15.4.1.17.1") -> {:ok, 350_000}
|
||||
String.contains?(oid, "3373.1103.15.4.1.18.1") -> {:ok, 350_000}
|
||||
true -> {:error, :no_such_object}
|
||||
end
|
||||
end)
|
||||
|
|
@ -86,11 +109,11 @@ defmodule Towerops.Snmp.Profiles.Vendors.SiaeTest do
|
|||
sensors = Siae.discover_wireless_sensors(@client_opts)
|
||||
|
||||
assert is_list(sensors)
|
||||
assert length(sensors) == 4
|
||||
assert length(sensors) == 5
|
||||
end
|
||||
|
||||
test "returns empty list when no sensors respond" do
|
||||
expect(SnmpMock, :get, 4, fn _, _, _ ->
|
||||
expect(SnmpMock, :get, 5, fn _, _, _ ->
|
||||
{:error, :no_such_object}
|
||||
end)
|
||||
|
||||
|
|
|
|||
|
|
@ -45,42 +45,74 @@ defmodule Towerops.Snmp.Profiles.Vendors.TeltonikaTest do
|
|||
defs = Teltonika.wireless_oid_defs()
|
||||
|
||||
assert is_list(defs)
|
||||
assert [_ | _] = defs
|
||||
assert length(defs) == 8
|
||||
end
|
||||
|
||||
test "includes RSSI sensor" do
|
||||
test "RSSI uses mSignal OID column 12" do
|
||||
defs = Teltonika.wireless_oid_defs()
|
||||
rssi = Enum.find(defs, &(&1.sensor_descr == "Mobile Signal (RSSI)"))
|
||||
|
||||
assert rssi
|
||||
assert rssi.oid == "1.3.6.1.4.1.48690.2.2.1.12.1"
|
||||
assert rssi.sensor_type == "rssi"
|
||||
assert rssi.sensor_unit == "dBm"
|
||||
end
|
||||
|
||||
test "includes RSRP sensor" do
|
||||
test "RSRP uses mRSRP OID column 20" do
|
||||
defs = Teltonika.wireless_oid_defs()
|
||||
rsrp = Enum.find(defs, &(&1.sensor_descr == "RSRP"))
|
||||
|
||||
assert rsrp
|
||||
assert rsrp.oid == "1.3.6.1.4.1.48690.2.2.1.20.1"
|
||||
assert rsrp.sensor_type == "rssi"
|
||||
end
|
||||
|
||||
test "includes SINR sensor" do
|
||||
test "RSRQ uses mRSRQ OID column 21" do
|
||||
defs = Teltonika.wireless_oid_defs()
|
||||
rsrq = Enum.find(defs, &(&1.sensor_descr == "RSRQ"))
|
||||
|
||||
assert rsrq.oid == "1.3.6.1.4.1.48690.2.2.1.21.1"
|
||||
assert rsrq.sensor_type == "quality"
|
||||
end
|
||||
|
||||
test "SINR uses mSINR OID column 19" do
|
||||
defs = Teltonika.wireless_oid_defs()
|
||||
sinr = Enum.find(defs, &(&1.sensor_descr == "SINR"))
|
||||
|
||||
assert sinr
|
||||
assert sinr.oid == "1.3.6.1.4.1.48690.2.2.1.19.1"
|
||||
assert sinr.sensor_type == "snr"
|
||||
assert sinr.sensor_unit == "dB"
|
||||
end
|
||||
|
||||
test "includes temperature sensor" do
|
||||
test "Connection Type uses mConnectionType OID column 16" do
|
||||
defs = Teltonika.wireless_oid_defs()
|
||||
conn = Enum.find(defs, &(&1.sensor_descr == "Connection Type"))
|
||||
|
||||
assert conn.oid == "1.3.6.1.4.1.48690.2.2.1.16.1"
|
||||
assert conn.sensor_type == "state"
|
||||
end
|
||||
|
||||
test "SIM Status uses mSimState OID column 9" do
|
||||
defs = Teltonika.wireless_oid_defs()
|
||||
sim = Enum.find(defs, &(&1.sensor_descr == "SIM Status"))
|
||||
|
||||
assert sim.oid == "1.3.6.1.4.1.48690.2.2.1.9.1"
|
||||
assert sim.sensor_type == "state"
|
||||
end
|
||||
|
||||
test "Temperature uses mTemperature OID column 17" do
|
||||
defs = Teltonika.wireless_oid_defs()
|
||||
temp = Enum.find(defs, &(&1.sensor_type == "temperature"))
|
||||
|
||||
assert temp
|
||||
assert temp.sensor_descr == "Device Temperature"
|
||||
assert temp.sensor_divisor == 10
|
||||
assert temp.oid == "1.3.6.1.4.1.48690.2.2.1.17.1"
|
||||
assert temp.sensor_descr == "Modem Temperature"
|
||||
assert temp.sensor_divisor == 1
|
||||
end
|
||||
|
||||
test "no duplicate OIDs" do
|
||||
defs = Teltonika.wireless_oid_defs()
|
||||
oids = Enum.map(defs, & &1.oid)
|
||||
|
||||
assert length(oids) == length(Enum.uniq(oids)),
|
||||
"Found duplicate OIDs: #{inspect(oids -- Enum.uniq(oids))}"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -90,14 +122,14 @@ defmodule Towerops.Snmp.Profiles.Vendors.TeltonikaTest do
|
|||
# (Connection Type, SIM Status, Network Operator) that return strings won't be collected
|
||||
expect(SnmpMock, :get, 8, fn _, oid, _ ->
|
||||
cond do
|
||||
String.contains?(oid, "48690.2.2.1.7.1") -> {:ok, -65}
|
||||
String.contains?(oid, "48690.2.2.1.8.1") -> {:ok, -85}
|
||||
String.contains?(oid, "48690.2.2.1.10.1") -> {:ok, -10}
|
||||
String.contains?(oid, "48690.2.2.1.9.1") -> {:ok, 15}
|
||||
String.contains?(oid, "48690.2.2.1.3.1") -> {:ok, "LTE"}
|
||||
String.contains?(oid, "48690.2.2.1.2.1") -> {:ok, "inserted"}
|
||||
String.contains?(oid, "48690.2.2.1.12.1") -> {:ok, -65}
|
||||
String.contains?(oid, "48690.2.2.1.20.1") -> {:ok, -85}
|
||||
String.contains?(oid, "48690.2.2.1.21.1") -> {:ok, -10}
|
||||
String.contains?(oid, "48690.2.2.1.19.1") -> {:ok, 15}
|
||||
String.contains?(oid, "48690.2.2.1.16.1") -> {:ok, "LTE"}
|
||||
String.contains?(oid, "48690.2.2.1.9.1") -> {:ok, "inserted"}
|
||||
String.contains?(oid, "48690.2.2.1.4.1") -> {:ok, "T-Mobile"}
|
||||
String.contains?(oid, "48690.1.7.0") -> {:ok, 450}
|
||||
String.contains?(oid, "48690.2.2.1.17.1") -> {:ok, 45}
|
||||
true -> {:error, :no_such_object}
|
||||
end
|
||||
end)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue