. * * @link http://librenms.org * @copyright 2018 Tony Murray * @author Tony Murray */ namespace LibreNMS\OS\Traits; use LibreNMS\Device\Processor; trait HostResources { /** * Discover processors. * Returns an array of LibreNMS\Device\Processor objects that have been discovered * * @return array Processors */ public function discoverProcessors() { echo 'Host Resources: '; $processors = []; try { $hrProcessorLoad = $this->getCacheByIndex('hrProcessorLoad', 'HOST-RESOURCES-MIB'); if (empty($hrProcessorLoad)) { // no hr data, return return []; } $hrDeviceDescr = $this->getCacheByIndex('hrDeviceDescr', 'HOST-RESOURCES-MIB'); } catch (\Exception $e) { return []; } foreach ($hrProcessorLoad as $index => $usage) { $usage_oid = '.1.3.6.1.2.1.25.3.3.1.2.' . $index; $descr = $hrDeviceDescr[$index]; if (! is_numeric($usage)) { continue; } $device = $this->getDeviceArray(); if ($device['os'] == 'arista-eos' && $index == '1') { continue; } if (empty($descr) || $descr == 'Unknown Processor Type' // Windows: Unknown Processor Type || $descr == 'An electronic chip that makes the computer work.' ) { $descr = 'Processor'; } else { // Make the description a bit shorter $remove_strings = [ 'GenuineIntel: ', 'AuthenticAMD: ', 'CPU ', '(TM)', '(R)', ]; $descr = str_replace($remove_strings, '', $descr); $descr = str_replace(' ', ' ', $descr); } $old_name = ['hrProcessor', $index]; $new_name = ['processor', 'hr', $index]; rrd_file_rename($this->getDeviceArray(), $old_name, $new_name); $processor = Processor::discover( 'hr', $this->getDeviceId(), $usage_oid, $index, $descr, 1, $usage, null, null, $index ); if ($processor->isValid()) { $processors[] = $processor; } } return $processors; } }