Observium_CE/includes/discovery/processors.inc.php

87 lines
3.3 KiB
PHP

<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage discovery
* @copyright (C) Adam Armstrong
*
*/
// 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
foreach (get_device_mibs_permitted($device) as $mib) {
if (!is_array($config['mibs'][$mib]['processor'])) {
continue;
}
print_cli_data_field("$mib");
foreach ($config['mibs'][$mib]['processor'] as $entry_name => $entry) {
$entry['found'] = FALSE;
$entry['object'] = $entry_name;
// CLEANME. Remove compat when all static convert!
if ($entry['type'] === 'static') {
print_debug("Static processor discovery: $entry_name\n");
print_debug_vars($entry);
// Get index
$index = explode('.', $entry['oid'], 2)[1];
foreach (array_keys($entry) as $key) {
if (str_starts_with($key, 'oid_') && str_ends_with($entry[$key], '.' . $index)) {
$entry[$key] = explode('.', $entry[$key], 2)[0];
}
}
$entry['indexes'] = [ $index => [ 'descr' => $entry['descr'] ] ];
unset($entry['type']);
print_warning("Convert static processor definition to common!");
print_debug_vars($entry);
} elseif (isset($entry['indexes'])) {
print_debug("Forced snmpget by indexes");
$entry['type'] = 'indexes';
}
$entry['found'] = discover_processor_definition($device, $mib, $entry);
if (isset($entry['stop_if_found']) && $entry['stop_if_found'] && $entry['found']) {
break;
} // Stop loop if processor found
}
print_cli(PHP_EOL); // Close MIB entry line.
}
// Remove processors which weren't redetected here
foreach (dbFetchRows('SELECT * FROM `processors` WHERE `device_id` = ?', [ $device['device_id'] ]) as $test_processor) {
$processor_index = $test_processor['processor_index'];
$processor_type = $test_processor['processor_type'];
$processor_descr = $test_processor['processor_descr'];
print_debug($processor_index . " -> " . $processor_type);
if (!$valid['processor'][$processor_type][$processor_index]) {
$GLOBALS['module_stats'][$module]['deleted']++; //echo('-');
dbDelete('processors', '`processor_id` = ?', [ $test_processor['processor_id'] ]);
// Delete attribs, currently only for ucd-raw (very rare case)
//if (dbExist('entity_attribs', '`device_id` = ? AND `entity_type` = ? AND `entity_id` = ?`', [ $device['device_id'], 'processor', $test_processor['processor_id'] ])) {
if ($processor_type === 'ucd-raw') {
dbDelete('entity_attribs', '`device_id` = ? AND `entity_type` = ? AND `entity_id` = ?`', [ $device['device_id'], 'processor', $test_processor['processor_id'] ]);
}
log_event("Processor removed: type " . $processor_type . " index " . $processor_index . " descr " . $processor_descr, $device, 'processor', $test_processor['processor_id']);
}
unset($processor_oid, $processor_type);
}
$GLOBALS['module_stats'][$module]['status'] = safe_count($valid['processor']);
if (OBS_DEBUG && $GLOBALS['module_stats'][$module]['status']) {
print_vars($valid['processor']);
}
// EOF