[ 'sensor_descr' => '', 'state_descr' => 'Temperature', 'class' => 'temperature', 'scale' => 0.001, ], 'txbiasCurrent' => [ 'sensor_descr' => 'Tx Bias', 'state_descr' => 'Tx Bias', 'class' => 'current', 'scale' => 0.000001, ], 'txPower' => [ 'sensor_descr' => 'Tx', 'state_descr' => 'Tx Power', 'class' => 'dbm', 'scale' => 0.001, ], 'rxPower' => [ 'sensor_descr' => 'Rx', 'state_descr' => 'Rx Power', 'class' => 'dbm', 'scale' => 0.001, ], 'laserTemperature' => [ 'sensor_descr' => 'Laser', 'state_descr' => 'Laser Temperature', 'class' => 'temperature', 'scale' => 0.01, ], ]; // Disabling DDM for an interface (port) will make all sensors and alarms for that port read 0. // Disabling DDM for the device will do exactly the same for every interface (port). However, // in any case it will be useful to know the list of transceivers and DDM configuration. $oid = 'raisecomOpticalTransceiverDDMEnable.0'; $device_ddm = snmp_get_oid($device, $oid, $mib); $oid_num = snmp_translate($oid, $mib); discover_status($device, $oid_num, $oid, 'raisecom-enablevar-state', 'Device DDM', $device_ddm, ['entPhysicalClass' => 'device']); foreach ($cache as $index => $data) { if (!is_numeric($index)) // Consider the unusually indexed OIDs a derived and optional information of the normal OIDs. { continue; } $port = sprintf('Port %2u', $index); // Enforce natural sort order. $skip_sensors = FALSE; $prop = 'raisecomOpticalTransceiverPortDDMEnable'; if (array_key_exists($prop, $data)) { $oid = "{$prop}.{$index}"; $oid_num = snmp_translate($oid, $mib); discover_status($device, $oid_num, $oid, 'raisecom-enablevar-state', "{$port} DDM", $data[$prop], ['entPhysicalClass' => 'port']); if ($data[$prop] != 'enable') { $skip_sensors = TRUE; } } $prop = 'raisecomOpticalTransceiverHwInfoAbsStatus'; if (array_key_exists($prop, $data)) { $oid = "{$prop}.{$index}"; $oid_num = snmp_translate($oid, $mib); discover_status($device, $oid_num, $oid, 'raisecom-present-state', "{$port} Transceiver Hardware", $data[$prop], ['entPhysicalClass' => 'port']); if ($data[$prop] != 'present') { continue; } } $prop = 'raisecomOpticalTransceiverDDM'; if (array_key_exists($prop, $data)) { $oid = "{$prop}.{$index}"; $oid_num = snmp_translate($oid, $mib); discover_status($device, $oid_num, $oid, 'raisecom-support-state', "{$port} Transceiver DDM", $data[$prop], ['entPhysicalClass' => 'port']); if ($data[$prop] != 'support') { $skip_sensors = TRUE; } } if ($device_ddm != 'enable' || $skip_sensors) { continue; } foreach ($sensors as $prop => $sensor) { $descr = "{$port} Transceiver"; if ($sensor['sensor_descr'] != '') { $descr .= " {$sensor['sensor_descr']}"; } $val_key = 'raisecomOpticalTransceiverParameterValue'; $readings = $cache["{$index}.{$prop}"]; $oid_num = snmp_translate("{$val_key}.{$index}.{$prop}", $mib); $options = [ 'limit_low' => $sensor['scale'] * $readings['raisecomOpticalTransceiverParamLowAlarmThresh'], 'limit_high' => $sensor['scale'] * $readings['raisecomOpticalTransceiverParamHighAlarmThresh'], 'limit_low_warn' => $sensor['scale'] * $readings['raisecomOpticalTransceiverParamLowWarningThresh'], 'limit_high_warn' => $sensor['scale'] * $readings['raisecomOpticalTransceiverParamHighWarningThresh'], 'entPhysicalClass' => 'port', ]; $value = $readings[$val_key]; discover_sensor($sensor['class'], $device, $oid_num, "{$index}.{$prop}", $mib, $descr, $sensor['scale'], $value, $options); $descr = "{$port} Transceiver"; if ($sensor['state_descr'] != '') { $descr .= " {$sensor['state_descr']}"; } $val_key = 'raisecomOpticalTransceiverParamAlarmStatus'; $oid_num = snmp_translate("{$val_key}.{$index}.{$prop}", $mib); $value = $readings[$val_key]; discover_status($device, $oid_num, "{$index}.{$prop}", 'raisecom-alarm-state', $descr, $value, ['entPhysicalClass' => 'port']); } // foreach ($sensors) } // foreach ($cache) unset ($mib, $cache, $oids, $sensors, $oid, $value, $oid_num, $device_ddm, $index, $data, $port, $prop, $sensor, $descr, $options, $val_key); // EOF