2010-07-29 20:34:31 +00:00
|
|
|
<?php
|
|
|
|
|
2015-07-10 13:36:21 +02:00
|
|
|
if ($device['os_group'] == 'cisco') {
|
|
|
|
echo ' CISCO-ENTITY-SENSOR: ';
|
|
|
|
|
|
|
|
$oids = array();
|
|
|
|
echo 'Caching OIDs:';
|
|
|
|
|
2015-07-13 20:10:26 +02:00
|
|
|
if (!is_array($entity_array)) {
|
2015-07-10 13:36:21 +02:00
|
|
|
$entity_array = array();
|
|
|
|
echo ' entPhysicalDescr';
|
|
|
|
$entity_array = snmpwalk_cache_multi_oid($device, 'entPhysicalDescr', $entity_array, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
echo ' entPhysicalName';
|
|
|
|
$entity_array = snmpwalk_cache_multi_oid($device, 'entPhysicalName', $entity_array, 'CISCO-ENTITY-SENSOR-MIB');
|
2010-07-29 20:34:31 +00:00
|
|
|
}
|
|
|
|
|
2015-07-10 13:36:21 +02:00
|
|
|
echo ' entSensorType';
|
|
|
|
$oids = snmpwalk_cache_multi_oid($device, 'entSensorType', $oids, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
echo ' entSensorScale';
|
|
|
|
$oids = snmpwalk_cache_multi_oid($device, 'entSensorScale', $oids, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
echo ' entSensorValue';
|
|
|
|
$oids = snmpwalk_cache_multi_oid($device, 'entSensorValue', $oids, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
echo ' entSensorMeasuredEntity';
|
|
|
|
$oids = snmpwalk_cache_multi_oid($device, 'entSensorMeasuredEntity', $oids, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
echo ' entSensorPrecision';
|
|
|
|
$oids = snmpwalk_cache_multi_oid($device, 'entSensorPrecision', $oids, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
|
|
|
|
$t_oids = array();
|
|
|
|
echo ' entSensorThresholdSeverity';
|
|
|
|
$t_oids = snmpwalk_cache_twopart_oid($device, 'entSensorThresholdSeverity', $t_oids, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
echo ' entSensorThresholdRelation';
|
|
|
|
$t_oids = snmpwalk_cache_twopart_oid($device, 'entSensorThresholdRelation', $t_oids, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
echo ' entSensorThresholdValue';
|
|
|
|
$t_oids = snmpwalk_cache_twopart_oid($device, 'entSensorThresholdValue', $t_oids, 'CISCO-ENTITY-SENSOR-MIB');
|
|
|
|
|
2015-08-20 15:59:43 +02:00
|
|
|
d_echo($oids);
|
2015-07-10 13:36:21 +02:00
|
|
|
|
|
|
|
$entitysensor['voltsDC'] = 'voltage';
|
|
|
|
$entitysensor['voltsAC'] = 'voltage';
|
|
|
|
$entitysensor['amperes'] = 'current';
|
|
|
|
$entitysensor['watt'] = 'power';
|
|
|
|
$entitysensor['hertz'] = 'freq';
|
|
|
|
$entitysensor['percentRH'] = 'humidity';
|
|
|
|
$entitysensor['rpm'] = 'fanspeed';
|
|
|
|
$entitysensor['celsius'] = 'temperature';
|
|
|
|
$entitysensor['watts'] = 'power';
|
|
|
|
$entitysensor['dBm'] = 'dbm';
|
|
|
|
|
|
|
|
if (is_array($oids)) {
|
2015-07-13 20:10:26 +02:00
|
|
|
foreach ($oids as $index => $entry) {
|
2015-07-10 13:36:21 +02:00
|
|
|
// echo("[" . $entry['entSensorType'] . "|" . $entry['entSensorValue']. "|" . $index . "]");
|
|
|
|
if ($entitysensor[$entry['entSensorType']] && is_numeric($entry['entSensorValue']) && is_numeric($index)) {
|
|
|
|
$entPhysicalIndex = $index;
|
|
|
|
if ($entity_array[$index]['entPhysicalName'] || $device['os'] == 'iosxr') {
|
2016-01-14 20:50:08 +01:00
|
|
|
$descr = rewrite_entity_descr($entity_array[$index]['entPhysicalName']);
|
2015-07-10 13:36:21 +02:00
|
|
|
}
|
|
|
|
else {
|
2016-01-14 20:50:08 +01:00
|
|
|
$descr = rewrite_entity_descr($entity_array[$index]['entPhysicalDescr']);
|
2015-07-10 13:36:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Set description based on measured entity if it exists
|
|
|
|
if (is_numeric($entry['entSensorMeasuredEntity']) && $entry['entSensorMeasuredEntity']) {
|
|
|
|
$measured_descr = $entity_array[$entry['entSensorMeasuredEntity']]['entPhysicalName'];
|
|
|
|
if (!$measured_descr) {
|
|
|
|
$measured_descr = $entity_array[$entry['entSensorMeasuredEntity']]['entPhysicalDescr'];
|
|
|
|
}
|
|
|
|
|
|
|
|
$descr = $measured_descr.' - '.$descr;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bit dirty also, clean later
|
|
|
|
$descr = str_replace('Temp: ', '', $descr);
|
|
|
|
$descr = str_ireplace('temperature ', '', $descr);
|
|
|
|
|
|
|
|
$oid = '.1.3.6.1.4.1.9.9.91.1.1.1.1.4.'.$index;
|
|
|
|
$current = $entry['entSensorValue'];
|
|
|
|
$type = $entitysensor[$entry['entSensorType']];
|
|
|
|
|
|
|
|
// echo("$index : ".$entry['entSensorScale']."|");
|
|
|
|
// FIXME this stuff is foul
|
|
|
|
if ($entry['entSensorScale'] == 'nano') {
|
|
|
|
$divisor = '1000000000';
|
|
|
|
$multiplier = '1';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($entry['entSensorScale'] == 'micro') {
|
|
|
|
$divisor = '1000000';
|
|
|
|
$multiplier = '1';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($entry['entSensorScale'] == 'milli') {
|
|
|
|
$divisor = '1000';
|
|
|
|
$multiplier = '1';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($entry['entSensorScale'] == 'units') {
|
|
|
|
$divisor = '1';
|
|
|
|
$multiplier = '1';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($entry['entSensorScale'] == 'kilo') {
|
|
|
|
$divisor = '1';
|
|
|
|
$multiplier = '1000';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($entry['entSensorScale'] == 'mega') {
|
|
|
|
$divisor = '1';
|
|
|
|
$multiplier = '1000000';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($entry['entSensorScale'] == 'giga') {
|
|
|
|
$divisor = '1';
|
|
|
|
$multiplier = '1000000000';
|
|
|
|
}
|
|
|
|
|
|
|
|
if (is_numeric($entry['entSensorPrecision']) && $entry['entSensorPrecision'] > '0') {
|
|
|
|
$divisor = $divisor.str_pad('', $entry['entSensorPrecision'], '0');
|
|
|
|
}
|
|
|
|
|
|
|
|
$current = ($current * $multiplier / $divisor);
|
|
|
|
|
|
|
|
// Set thresholds to null
|
|
|
|
$limit = null;
|
|
|
|
$low_limit = null;
|
|
|
|
$warn_limit = null;
|
|
|
|
$warn_limit_low = null;
|
|
|
|
|
|
|
|
// Check thresholds for this entry (bit dirty, but it works!)
|
|
|
|
if (is_array($t_oids[$index])) {
|
|
|
|
foreach ($t_oids[$index] as $t_index => $entry) {
|
|
|
|
// Critical Limit
|
|
|
|
if ($entry['entSensorThresholdSeverity'] == 'major' && $entry['entSensorThresholdRelation'] == 'greaterOrEqual') {
|
|
|
|
$limit = ($entry['entSensorThresholdValue'] * $multiplier / $divisor);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($entry['entSensorThresholdSeverity'] == 'major' && $entry['entSensorThresholdRelation'] == 'lessOrEqual') {
|
|
|
|
$limit_low = ($entry['entSensorThresholdValue'] * $multiplier / $divisor);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Warning Limit
|
|
|
|
if ($entry['entSensorThresholdSeverity'] == 'minor' && $entry['entSensorThresholdRelation'] == 'greaterOrEqual') {
|
|
|
|
$warn_limit = ($entry['entSensorThresholdValue'] * $multiplier / $divisor);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($entry['entSensorThresholdSeverity'] == 'minor' && $entry['entSensorThresholdRelation'] == 'lessOrEqual') {
|
|
|
|
$warn_limit_low = ($entry['entSensorThresholdValue'] * $multiplier / $divisor);
|
|
|
|
}
|
|
|
|
}//end foreach
|
|
|
|
}//end if
|
|
|
|
|
|
|
|
// End Threshold code
|
|
|
|
$ok = true;
|
|
|
|
|
|
|
|
if ($current == '-127') {
|
|
|
|
$ok = false;
|
|
|
|
} //end if
|
|
|
|
// if ($type == "temperature" && $current < 1) { $ok = FALSE; } // False reading. Temperature <1 :)
|
|
|
|
if ($descr == '') {
|
|
|
|
$ok = false;
|
|
|
|
} //end if
|
|
|
|
|
|
|
|
if ($ok) {
|
|
|
|
discover_sensor($valid['sensor'], $type, $device, $oid, $index, 'cisco-entity-sensor', $descr, $divisor, $multiplier, $limit_low, $warn_limit_low, $warn_limit, $limit, $current, 'snmp', $entPhysicalIndex, $entry['entSensorMeasuredEntity']);
|
2015-08-11 16:35:29 +02:00
|
|
|
#Cisco IOS-XR : add a fake sensor to graph as dbm
|
2016-03-27 18:22:25 +02:00
|
|
|
if ($type == "power" and $device['os'] == "iosxr" and preg_match ("/power (R|T)x/i", $descr) ) {
|
2015-08-11 16:35:29 +02:00
|
|
|
// convert Watts to dbm
|
|
|
|
$type = "dbm";
|
|
|
|
$limit_low = 10 * log10($limit_low*1000);
|
|
|
|
$warn_limit_low = 10 * log10($warn_limit_low*1000);
|
|
|
|
$warn_limit = 10 * log10($warn_limit*1000);
|
|
|
|
$limit = 10 * log10($limit*1000);
|
|
|
|
$current = round(10 * log10($current*1000),3);
|
|
|
|
$multiplier = 1;
|
|
|
|
$divisor = 1;
|
|
|
|
//echo("\n".$valid['sensor'].", $type, $device, $oid, $index, 'cisco-entity-sensor', $descr, $divisor, $multiplier, $limit_low, $warn_limit_low, $warn_limit, $limit, $current");
|
|
|
|
discover_sensor($valid['sensor'], $type, $device, $oid, $index, 'cisco-entity-sensor', $descr, $divisor, $multiplier, $limit_low, $warn_limit_low, $warn_limit, $limit, $current, 'snmp', $entPhysicalIndex, $entry['entSensorMeasuredEntity']);
|
|
|
|
}
|
2015-07-10 13:36:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
$cisco_entity_temperature = 1;
|
|
|
|
unset($limit, $limit_low, $warn_limit, $warn_limit_low);
|
|
|
|
}//end if
|
|
|
|
}//end foreach
|
|
|
|
}//end if
|
|
|
|
}//end if
|