* * This file is part of Observium. * * @package observium * @subpackage discovery * @author Adam Armstrong <*****@*****.**> * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ print_cli_data_field("Discovering MIBs", 3); // Include all discovery modules by supported MIB $include_dir = "includes/discovery/processors"; include "includes/include-dir-mib.inc.php"; // Detect processors by simple MIB-based discovery : // FIXME - this should also be extended to understand multiple entries in a table, and take descr from an OID but this is all I need right now :) foreach (get_device_mibs($device) as $mib) { if (is_array($config['mibs'][$mib]['processor'])) { echo "{$mib} "; foreach ($config['mibs'][$mib]['processor'] as $entry_name => $entry) { //echo($entry_name.' '); $entry['found'] = FALSE; if ($entry['type'] == 'table') { $processors_array = snmpwalk_cache_oid($device, $entry['table'], array(), $mib); if ($entry['table_descr']) { // If descr in separate table with same indexes $processors_array = snmpwalk_cache_oid($device, $entry['table_descr'], $processors_array, $mib); } $i = 1; // Used in descr as $i++ foreach ($processors_array as $index => $processor) { $dot_index = '.' . $index;
function is_device_mib($device, $mib, $check_permissions = TRUE) { global $config; $mib_permitted = in_array($mib, get_device_mibs($device)); // Check if mib available for device if ($check_permissions && $mib_permitted && (!isset($config['mibs'][$mib]) || $config['mibs'][$mib])) { // Check if MIB permitted by config $mib_permitted = $mib_permitted && (!isset($config['mibs'][$mib]) || $config['mibs'][$mib]); // Check if MIB disabled by web interface or polling process $attribs = get_dev_attribs($device['device_id']); $mib_permitted = $mib_permitted && (!isset($attribs['mib_' . $mib]) || $attribs['mib_' . $mib] != 0); } return $mib_permitted; }
$capabilities_mibs[$mib][] = $entry['sysORID']; } else { // This is just for info in output $capabilities_unused[$entry['sysORID']] = $mib; } } } // Skip walking the entire MIB array if the device has no response for sysORID if (count($advertised_mibs)) { if (OBS_DEBUG > 1) { print_vars($advertised_mibs); print_vars($capabilities_mibs); } unset($use_fastpath_new); // See below $device_mibs = get_device_mibs($device, FALSE); $device_mibs_bl = get_device_mibs_blacklist($device); // Cycle all known MIBs and see if the device reports supporting any of them $found_mibs = array(); foreach ($config['mibs'] as $mib => $mibdata) { if (isset($mibdata['identity_num']) && !empty($mibdata['identity_num'])) { // Search sysORID in identies $identity_found = FALSE; $mibdata['identity_num'] = (array) $mibdata['identity_num']; // Convert to simple array foreach ($mibdata['identity_num'] as $identity_num) { if ($identity_found = in_array($identity_num, $advertised_mibs)) { $found_mibs = array_merge($found_mibs, $mibdata['identity_num']); // Add all oids as found break; }
foreach ($config[$e] as $entry) { if (is_array($entry['mibs'])) { $detect_mibs = array_merge($detect_mibs, $entry['mibs']); } } } $config['os'][$device['os']]['mibs'] = array_unique($detect_mibs); var_dump($config['os'][$device['os']]['mibs']); } */ // This is an include so that we don't lose variable scope. $include_lib = isset($include_lib) && $include_lib; if (!isset($include_order)) { // Order for include MIBs definitions, default: 'model,os,group,default' $include_order = NULL; } foreach (get_device_mibs($device, TRUE, $include_order) as $mib) { $inc_dir = $config['install_dir'] . '/' . $include_dir . '/' . strtolower($mib); $inc_file = $inc_dir . '.inc.php'; if (is_device_mib($device, $mib)) { if (is_file($inc_file)) { echo "{$mib} "; include $inc_file; if ($include_lib && is_file($inc_dir . '.lib.php')) { // separated functions include, for exclude fatal redeclare errors include_once $inc_dir . '.lib.php'; } } else { if (is_dir($inc_dir)) { if (OBS_DEBUG) { echo "[[{$mib}]]"; }
/** * @dataProvider providerGetDeviceMibsOrder * @group mibs */ public function testGetDeviceMibsOrder($device, $order, $result) { $mibs = array_values(get_device_mibs($device, FALSE, $order)); // Use array_values for reset keys $this->assertEquals($result, $mibs); }