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:
Graham McIntire 2026-03-10 17:07:43 -05:00
parent 835b38c4de
commit 5e5da89f3a
No known key found for this signature in database
14 changed files with 426 additions and 299 deletions

View file

@ -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
}
]

View file

@ -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
}
]

View file

@ -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
}
]

View file

@ -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",

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)