Observium_CE/includes/discovery/sensors/oap-pseudo-mib.inc.php

316 lines
9.7 KiB
PHP

<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage discovery
* @copyright (C) Adam Armstrong
*
*/
/**
*
* This file maps the following MIBs into a single virtual OAP-PSEUDO-MIB:
*
* OAP-C1-EDFA
* OAP-C2-EDFA
* OAP-C3-EDFA
* OAP-C4-EDFA
* OAP-C5-EDFA
* OAP-C6-EDFA
* OAP-C7-EDFA
* OAP-C8-EDFA
* OAP-C9-EDFA
* OAP-C10-EDFA
* OAP-C11-EDFA
* OAP-C12-EDFA
* OAP-C13-EDFA
* OAP-C14-EDFA
* OAP-C15-EDFA
* OAP-C16-EDFA
* OAP-C1-OEO
* OAP-C2-OEO
* OAP-C3-OEO
* OAP-C4-OEO
* OAP-C5-OEO
* OAP-C6-OEO
* OAP-C7-OEO
* OAP-C8-OEO
* OAP-C9-OEO
* OAP-C10-OEO
* OAP-C11-OEO
* OAP-C12-OEO
* OAP-C13-OEO
* OAP-C14-OEO
* OAP-C15-OEO
* OAP-C16-OEO
*/
// -EDFA
$edfa_sensor_map = [
8 => [ // vWorkMode
'oid_name' => 'vWorkMode',
'sensor_descr' => 'Work Mode',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-vWorkMode',
],
9 => [ // vPUMPSwitch
'oid_name' => 'vPUMPSwitch',
'sensor_descr' => 'Pump Switch',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-vPUMPSwitch',
],
16 => [ // vInputPowerState
'oid_name' => 'vInputPowerState',
'sensor_descr' => 'Input Power Alarm',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-alarm',
],
17 => [ // vOutputPowerState
'oid_name' => 'vOutputPowerState',
'sensor_descr' => 'Output Power Alarm',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-alarm',
],
18 => [ // vModuleTemperatureState
'oid_name' => 'vModuleTemperatureState',
'sensor_descr' => 'Module Temperature Alarm',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-alarm',
],
19 => [ // vPUMPTemperatureState
'oid_name' => 'vPUMPTemperatureState',
'sensor_descr' => 'Pump Temperature Alarm',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-alarm',
],
20 => [ // vPUMPCurrentState
'oid_name' => 'vPUMPCurrentState',
'sensor_descr' => 'Pump Current Alarm',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-alarm',
],
21 => [ // vGainOrOutputPower
'sensor_descr' => 'Target Gain',
'sensor_class' => 'dbm',
'scale' => 0.01,
],
22 => [ // vModuleTemperature
'sensor_descr' => 'Module',
'sensor_class' => 'temperature',
'scale' => 0.01,
],
23 => [ // vModuleVoltage
'sensor_descr' => 'Module',
'sensor_class' => 'voltage',
'scale' => 0.01,
],
24 => [ // vPUMPPower
'sensor_descr' => 'Pump Power',
'sensor_class' => 'dbm',
'scale' => 0.01,
],
25 => [ // vPUMPTemperature
'sensor_descr' => 'Pump',
'sensor_class' => 'temperature',
'scale' => 0.01,
],
26 => [ // vPUMPCurrent
'sensor_descr' => 'Pump',
'sensor_class' => 'current',
'scale' => 0.00001,
],
27 => [ // vTECCurrent
'sensor_descr' => 'Refrigeration',
'sensor_class' => 'current',
'scale' => 0.00001,
],
28 => [ // vInput
'sensor_descr' => 'Input',
'sensor_class' => 'dbm',
'scale' => 0.01,
],
29 => [ // vOutput
'sensor_descr' => 'Output',
'sensor_class' => 'dbm',
'scale' => 0.01,
],
];
// -OEO
$oeo_port_map = [
11 => 'A1',
12 => 'A2',
13 => 'B1',
14 => 'B2',
15 => 'C1',
16 => 'C2',
17 => 'D1',
18 => 'D2',
];
$oeo_sensor_map = [
1 => [ // State
'oid_name' => 'State',
'sensor_descr' => '',
'sensor_class' => 'state',
'sensor_type' => 'oap-oeo-State',
],
2 => [ // WorkMode
'oid_name' => 'WorkMode',
'sensor_descr' => 'Work Mode',
'sensor_class' => 'state',
'sensor_type' => 'oap-oeo-WorkMode',
],
3 => [ // TxPowerControl
'oid_name' => 'TxPowerControl',
'sensor_descr' => 'Tx Power Control',
'sensor_class' => 'state',
'sensor_type' => 'oap-oeo-TxPowerControl',
],
4 => [ // TxPower
'sensor_descr' => 'Tx Power',
'sensor_class' => 'dbm',
'scale' => 0.01,
],
5 => [ // RxPower
'sensor_descr' => 'Rx Power',
'sensor_class' => 'dbm',
'scale' => 0.01,
],
9 => [ // ModeTemperature
'sensor_descr' => '',
'sensor_class' => 'temperature',
'scale' => 0.01,
],
10 => [ // TxPowerAlarm
'oid_name' => 'TxPowerAlarm',
'sensor_descr' => 'Tx Power Alarm',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-alarm',
],
11 => [ // RxPowerAlarm
'oid_name' => 'RxPowerAlarm',
'sensor_descr' => 'Rx Power Alarm',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-alarm',
],
12 => [ // ModeTemperatureAlarm
'oid_name' => 'ModeTemperatureAlarm',
'sensor_descr' => 'Temperature Alarm',
'sensor_class' => 'state',
'sensor_type' => 'oap-edfa-alarm',
],
];
// For the worker module sensors map the indices because they are not unique
// because the manufacturer had defined a MIB for every combination of module
// type and slot number.
for ($slot_no = 1; $slot_no <= 16; $slot_no++) {
$pfx = ".1.3.6.1.4.1.40989.10.16.{$slot_no}";
if (snmp_get_oid($device, "{$pfx}.1.2.0") == 'EDFA') {
foreach ($edfa_sensor_map as $index => $sensor) {
//$pseudo_index = 1000 * $slot_no + $index;
$full_index = "{$slot_no}.1.{$index}.0";
$oid_num = "{$pfx}.1.{$index}.0";
$value = snmp_get_oid($device, $oid_num);
$descr = "Slot {$slot_no} EDFA";
if ($sensor['sensor_descr'] != '') {
$descr .= ' ' . $sensor['sensor_descr'];
}
$options = [];
if ($sensor['sensor_class'] == 'state') {
// Status
discover_status($device, $oid_num, $sensor['oid_name'] . '.' . $full_index, $sensor['sensor_type'], $descr, $value, $options);
} else {
// Sensor
$sensor_type = 'oap-pseudo';
$scale = $sensor['scale'];
// Limits
switch ($index) {
/*
// This is currently useless as the device has it hardcoded to -55~70.
case 22: // vModuleTemperature
$options = array(
'limit_high' => $scale * snmp_get_oid($device, "{$pfx}.1.12.0"), // vModuleTemperatureUpperLimit
'limit_low' => $scale * snmp_get_oid($device, "{$pfx}.1.13.0"), // vModuleTemperatureLowerLimit
);
break;
*/
case 25: // vPUMPTemperature
$options = [
'limit_high' => $scale * snmp_get_oid($device, "{$pfx}.1.14.0"), // vPUMPTemperatureUpperLimit
'limit_low' => $scale * snmp_get_oid($device, "{$pfx}.1.15.0"), // vPUMPTemperatureLowerLimit
];
break;
case 28: // vInput
$options = [
'limit_low' => $scale * snmp_get_oid($device, "{$pfx}.1.10.0"), // vInputPowerALM
];
break;
case 29: // vOutput
$options = [
'limit_low' => $scale * snmp_get_oid($device, "{$pfx}.1.11.0"), // vOutputPowerALM
];
break;
}
discover_sensor($sensor['sensor_class'], $device, $oid_num, $full_index, $sensor_type, $descr, $scale, $value, $options);
}
} // foreach $edfa_sensor_map
} // if EDFA
elseif (snmp_get_oid($device, "{$pfx}.2.2.0") == 'OEO') {
foreach ($oeo_port_map as $port_index => $port_name) {
foreach ($oeo_sensor_map as $obj_index => $sensor) {
//$pseudo_index = 1000 * $slot_no + 100 * ($port_index - 10) + $obj_index;
$full_index = "{$slot_no}.2.{$port_index}.{$obj_index}.0";
$oid_num = "{$pfx}.2.{$port_index}.{$obj_index}.0";
$value = snmp_get_oid($device, $oid_num);
$descr = "Slot {$slot_no} OEO Port {$port_name}";
if ($sensor['sensor_descr'] != '') {
$descr .= ' ' . $sensor['sensor_descr'];
}
$options = [];
if ($sensor['sensor_class'] == 'state') {
// Status
discover_status($device, $oid_num, $sensor['oid_name'] . '.' . $full_index, $sensor['sensor_type'], $descr, $value, $options);
} else {
// Sensor
$sensor_type = 'oap-pseudo';
$scale = $sensor['scale'];
discover_sensor($sensor['sensor_class'], $device, $oid_num, $full_index, $sensor_type, $descr, $scale, $value);
}
// When the port state is off (0) all the other objects for that port are missing.
if ($obj_index == 1 && $value == 0) {
break;
}
} // foreach $oeo_sensor_map
} // foreach $oeo_port_map
} // if OEO
} // for each slot number
// EOF