mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	git-svn-id: http://www.observium.org/svn/observer/trunk@3014 61d68cd4-352d-0410-923a-c4978735b2b8
		
			
				
	
	
		
			153 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| if ($device['os_group'] == "cisco")
 | |
| {
 | |
|   echo(" CISCO-ENTITY-SENSOR: ");
 | |
| 
 | |
|   $oids = array();
 | |
|   echo("Caching OIDs:");
 | |
| 
 | |
|   if (!is_array($entity_array))
 | |
|   {
 | |
|     $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");
 | |
|   }
 | |
| 
 | |
|   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");
 | |
| 
 | |
|   if ($debug) { print_r($oids); }
 | |
| 
 | |
|   $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))
 | |
|   {
 | |
|     foreach ($oids as $index => $entry)
 | |
|     {
 | |
|       #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")
 | |
|         {
 | |
|           $descr = rewrite_entity_descr($entity_array[$index]['entPhysicalName']) . " - " . rewrite_entity_descr($entity_array[$index]['entPhysicalDescr']);
 | |
|         } else {
 | |
|           $descr = $entity_array[$index]['entPhysicalDescr'];
 | |
|           $descr = rewrite_entity_descr($descr);
 | |
|         }
 | |
| 
 | |
|         ## 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 Threshold code
 | |
| 
 | |
|         $ok = TRUE;
 | |
| 
 | |
|         if ($current == "-127") { $ok = FALSE; }                              ## False reading
 | |
| #        if ($type == "temperature" && $current < 1) { $ok = FALSE; }        ## False reading. Temperature <1 :)
 | |
|         if ($descr == "") { $ok = FALSE; }                                ## Invalid description. Lots of these on Nexus
 | |
| 
 | |
|         if ($ok) {
 | |
| #          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']);
 | |
|         }
 | |
|         $cisco_entity_temperature = 1;
 | |
|         unset($limit, $limit_low, $warn_limit, $warn_limit_low);
 | |
| 
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| ?>
 |