mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Remove load_os and load_discovery functions (#13345)
* Remove load_os and load_discovery functions Put bits where they belong and use $os * remove extra line return * OS loading code in the wrong place * fixes * line
This commit is contained in:
@@ -251,14 +251,15 @@ class Processor extends Model implements DiscoveryModule, PollerModule, Discover
|
||||
|
||||
public static function processYaml(OS $os)
|
||||
{
|
||||
$device = $os->getDeviceArray();
|
||||
if (empty($device['dynamic_discovery']['modules']['processors'])) {
|
||||
$discovery = $os->getDiscovery('processors');
|
||||
|
||||
if (empty($discovery)) {
|
||||
d_echo("No YAML Discovery data.\n");
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
return YamlDiscovery::discover($os, get_class(), $device['dynamic_discovery']['modules']['processors']);
|
||||
return YamlDiscovery::discover($os, get_class(), $discovery);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -90,7 +90,7 @@ class YamlDiscovery
|
||||
// determine numeric oid automatically if not specified
|
||||
if (! isset($data['num_oid'])) {
|
||||
try {
|
||||
$data['num_oid'] = static::computeNumericalOID($device, $data);
|
||||
$data['num_oid'] = static::computeNumericalOID($os, $data);
|
||||
} catch (\Exception $e) {
|
||||
d_echo('Error: We cannot find a numerical OID for ' . $data['value'] . '. Skipping this one...');
|
||||
continue;
|
||||
@@ -126,14 +126,16 @@ class YamlDiscovery
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $device Device we are working on
|
||||
* @param \LibreNMS\OS $os OS/device we areworking on
|
||||
* @param array $data Array derived from YAML
|
||||
* @return string
|
||||
*
|
||||
* @throws \LibreNMS\Exceptions\InvalidOidException
|
||||
*/
|
||||
public static function computeNumericalOID($device, $data)
|
||||
public static function computeNumericalOID(OS $os, array $data): string
|
||||
{
|
||||
d_echo('Info: Trying to find a numerical OID for ' . $data['value'] . '.');
|
||||
$search_mib = $device['dynamic_discovery']['mib'];
|
||||
$search_mib = $os->getDiscovery()['mib'];
|
||||
$mib_prefix_data_oid = Str::before($data['oid'], '::');
|
||||
if (! empty($mib_prefix_data_oid) && empty(Str::before($data['value'], '::'))) {
|
||||
// We should search value in this mib first, as it is explicitely specified
|
||||
@@ -141,7 +143,7 @@ class YamlDiscovery
|
||||
}
|
||||
|
||||
try {
|
||||
$num_oid = static::oidToNumeric($data['value'], $device, $search_mib, $device['mib_dir']);
|
||||
$num_oid = static::oidToNumeric($data['value'], $os->getDeviceArray(), $search_mib);
|
||||
} catch (\Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
@@ -278,9 +280,9 @@ class YamlDiscovery
|
||||
return $pre_cache;
|
||||
}
|
||||
|
||||
if (! empty($device['dynamic_discovery']['modules'])) {
|
||||
if (! empty($os->getDiscovery()['modules'])) {
|
||||
echo 'Caching data: ';
|
||||
foreach ($device['dynamic_discovery']['modules'] as $module => $discovery_data) {
|
||||
foreach ($os->getDiscovery()['modules'] as $module => $discovery_data) {
|
||||
echo "$module ";
|
||||
foreach ($discovery_data as $key => $data_array) {
|
||||
// find the data array, we could already be at for simple modules
|
||||
@@ -309,7 +311,7 @@ class YamlDiscovery
|
||||
Config::set('os.' . $os->getName() . '.snmp_bulk', (bool) $data['snmp_bulk']);
|
||||
}
|
||||
|
||||
$mib = $device['dynamic_discovery']['mib'];
|
||||
$mib = $os->getDiscovery()['mib'];
|
||||
$pre_cache[$oid] = snmpwalk_cache_oid($device, $oid, $pre_cache[$oid] ?? [], $mib, null, $snmp_flag);
|
||||
|
||||
Config::set('os.' . $os->getName() . '.snmp_bulk', $saved_nobulk);
|
||||
@@ -378,22 +380,21 @@ class YamlDiscovery
|
||||
* @param string $oid
|
||||
* @param array|null $device
|
||||
* @param string $mib
|
||||
* @param string|null $mibdir
|
||||
* @return string numeric oid
|
||||
*
|
||||
* @throws \LibreNMS\Exceptions\InvalidOidException
|
||||
*/
|
||||
public static function oidToNumeric($oid, $device = null, $mib = 'ALL', $mibdir = null)
|
||||
public static function oidToNumeric($oid, $device = null, $mib = 'ALL')
|
||||
{
|
||||
if (self::oidIsNumeric($oid)) {
|
||||
return $oid;
|
||||
}
|
||||
$key = 'YamlDiscovery:oidToNumeric:' . $mibdir . '/' . $mib . '/' . $oid;
|
||||
$key = 'YamlDiscovery:oidToNumeric:' . $mib . '/' . $oid;
|
||||
if (Cache::has($key)) {
|
||||
$numeric_oid = Cache::get($key);
|
||||
} else {
|
||||
foreach (explode(':', $mib) as $mib_name) {
|
||||
$numeric_oid = snmp_translate($oid, $mib_name, $mibdir, null, $device);
|
||||
$numeric_oid = snmp_translate($oid, $mib_name, null, null, $device);
|
||||
if ($numeric_oid) {
|
||||
break;
|
||||
}
|
||||
|
@@ -203,23 +203,33 @@ class OS implements ProcessorDiscovery, OSDiscovery, MempoolsDiscovery
|
||||
*/
|
||||
public static function make(&$device)
|
||||
{
|
||||
$class = str_to_class($device['os'], 'LibreNMS\\OS\\');
|
||||
d_echo('Attempting to initialize OS: ' . $device['os'] . PHP_EOL);
|
||||
if (class_exists($class)) {
|
||||
d_echo("OS initialized: $class\n");
|
||||
if (isset($device['os'])) {
|
||||
// load os definition and populate os_group
|
||||
\LibreNMS\Util\OS::loadDefinition($device['os']);
|
||||
if ($os_group = Config::get("os.{$device['os']}.group")) {
|
||||
$device['os_group'] = $os_group;
|
||||
} else {
|
||||
unset($device['os_group']);
|
||||
}
|
||||
|
||||
return new $class($device);
|
||||
}
|
||||
|
||||
// If not a specific OS, check for a group one.
|
||||
if (isset($device['os_group'])) {
|
||||
$class = str_to_class($device['os_group'], 'LibreNMS\\OS\\Shared\\');
|
||||
d_echo('Attempting to initialize OS: ' . $device['os_group'] . PHP_EOL);
|
||||
$class = str_to_class($device['os'], 'LibreNMS\\OS\\');
|
||||
d_echo('Attempting to initialize OS: ' . $device['os'] . PHP_EOL);
|
||||
if (class_exists($class)) {
|
||||
d_echo("OS initialized: $class\n");
|
||||
|
||||
return new $class($device);
|
||||
}
|
||||
|
||||
// If not a specific OS, check for a group one.
|
||||
if ($os_group) {
|
||||
$class = str_to_class($device['os_group'], 'LibreNMS\\OS\\Shared\\');
|
||||
d_echo('Attempting to initialize OS: ' . $device['os_group'] . PHP_EOL);
|
||||
if (class_exists($class)) {
|
||||
d_echo("OS initialized: $class\n");
|
||||
|
||||
return new $class($device);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
d_echo("OS initialized as Generic\n");
|
||||
|
@@ -959,38 +959,6 @@ function get_sql_filter_min_severity($min_severity, $alert_rules_name)
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the os definition for the device and set type and os_group
|
||||
* $device['os'] must be set
|
||||
*
|
||||
* @param array $device
|
||||
*/
|
||||
function load_os(&$device)
|
||||
{
|
||||
if (! isset($device['os'])) {
|
||||
d_echo("No OS to load\n");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
\LibreNMS\Util\OS::loadDefinition($device['os']);
|
||||
|
||||
// Set type to a predefined type for the OS if it's not already set
|
||||
$loaded_os_type = Config::get("os.{$device['os']}.type");
|
||||
$model = DeviceCache::get($device['device_id']);
|
||||
if (! $model->getAttrib('override_device_type') && $loaded_os_type != $model->type) {
|
||||
$model->type = $loaded_os_type;
|
||||
$model->save();
|
||||
Log::debug("Device type changed to $loaded_os_type!");
|
||||
}
|
||||
|
||||
if ($os_group = Config::get("os.{$device['os']}.group")) {
|
||||
$device['os_group'] = $os_group;
|
||||
} else {
|
||||
unset($device['os_group']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts fahrenheit to celsius (with 2 decimal places)
|
||||
* if $scale is not fahrenheit, it assumes celsius and returns the value
|
||||
|
@@ -28,9 +28,15 @@ if ($deviceModel->isDirty('os')) {
|
||||
echo 'Changed ';
|
||||
}
|
||||
|
||||
// Set type to a predefined type for the OS if it's not already set
|
||||
$loaded_os_type = Config::get("os.{$device['os']}.type");
|
||||
if (! $deviceModel->getAttrib('override_device_type') && $loaded_os_type != $deviceModel->type) {
|
||||
$deviceModel->type = $loaded_os_type;
|
||||
Log::debug("Device type changed to $loaded_os_type!");
|
||||
}
|
||||
|
||||
$deviceModel->save();
|
||||
load_os($device);
|
||||
load_discovery($device);
|
||||
|
||||
$os = OS::make($device);
|
||||
|
||||
echo 'OS: ' . Config::getOsSetting($device['os'], 'text') . " ({$device['os']})\n\n";
|
||||
|
@@ -17,6 +17,7 @@ use LibreNMS\Config;
|
||||
use LibreNMS\Device\YamlDiscovery;
|
||||
use LibreNMS\Exceptions\HostExistsException;
|
||||
use LibreNMS\Exceptions\InvalidIpException;
|
||||
use LibreNMS\OS;
|
||||
use LibreNMS\Util\IP;
|
||||
use LibreNMS\Util\IPv6;
|
||||
|
||||
@@ -100,21 +101,6 @@ function discover_new_device($hostname, $device = [], $method = '', $interface =
|
||||
}
|
||||
//end discover_new_device()
|
||||
|
||||
/**
|
||||
* @param $device
|
||||
*/
|
||||
function load_discovery(&$device)
|
||||
{
|
||||
$yaml_discovery = Config::get('install_dir') . '/includes/definitions/discovery/' . $device['os'] . '.yaml';
|
||||
if (file_exists($yaml_discovery)) {
|
||||
$device['dynamic_discovery'] = Symfony\Component\Yaml\Yaml::parse(
|
||||
file_get_contents($yaml_discovery)
|
||||
);
|
||||
} else {
|
||||
unset($device['dynamic_discovery']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $device The device to poll
|
||||
* @param bool $force_module Ignore device module overrides
|
||||
@@ -862,22 +848,25 @@ function ignore_storage($os, $descr)
|
||||
|
||||
/**
|
||||
* @param $valid
|
||||
* @param $device
|
||||
* @param OS $os
|
||||
* @param $sensor_type
|
||||
* @param $pre_cache
|
||||
*/
|
||||
function discovery_process(&$valid, $device, $sensor_class, $pre_cache)
|
||||
function discovery_process(&$valid, $os, $sensor_class, $pre_cache)
|
||||
{
|
||||
if (! empty($device['dynamic_discovery']['modules']['sensors'][$sensor_class]) && ! can_skip_sensor($device, $sensor_class, '')) {
|
||||
$discovery = $os->getDiscovery('sensors');
|
||||
$device = $os->getDeviceArray();
|
||||
|
||||
if (! empty($discovery[$sensor_class]) && ! can_skip_sensor($device, $sensor_class, '')) {
|
||||
$sensor_options = [];
|
||||
if (isset($device['dynamic_discovery']['modules']['sensors'][$sensor_class]['options'])) {
|
||||
$sensor_options = $device['dynamic_discovery']['modules']['sensors'][$sensor_class]['options'];
|
||||
if (isset($discovery[$sensor_class]['options'])) {
|
||||
$sensor_options = $discovery[$sensor_class]['options'];
|
||||
}
|
||||
|
||||
d_echo("Dynamic Discovery ($sensor_class): ");
|
||||
d_echo($device['dynamic_discovery']['modules']['sensors'][$sensor_class]);
|
||||
d_echo($discovery[$sensor_class]);
|
||||
|
||||
foreach ($device['dynamic_discovery']['modules']['sensors'][$sensor_class]['data'] as $data) {
|
||||
foreach ($discovery[$sensor_class]['data'] as $data) {
|
||||
$tmp_name = $data['oid'];
|
||||
$raw_data = (array) $pre_cache[$tmp_name];
|
||||
|
||||
@@ -921,7 +910,7 @@ function discovery_process(&$valid, $device, $sensor_class, $pre_cache)
|
||||
// Check if we have a "num_oid" value. If not, we'll try to compute it from textual OIDs with snmptranslate.
|
||||
if (empty($data['num_oid'])) {
|
||||
try {
|
||||
$data['num_oid'] = YamlDiscovery::computeNumericalOID($device, $data);
|
||||
$data['num_oid'] = YamlDiscovery::computeNumericalOID($os, $data);
|
||||
} catch (\Exception $e) {
|
||||
d_echo('Error: We cannot find a numerical OID for ' . $data['value'] . '. Skipping this one...');
|
||||
$skippedFromYaml = true;
|
||||
@@ -994,11 +983,12 @@ function discovery_process(&$valid, $device, $sensor_class, $pre_cache)
|
||||
|
||||
/**
|
||||
* @param $types
|
||||
* @param $device
|
||||
* @param OS $os
|
||||
* @param array $pre_cache
|
||||
*/
|
||||
function sensors($types, $device, $valid, $pre_cache = [])
|
||||
function sensors($types, $os, $valid, $pre_cache = [])
|
||||
{
|
||||
$device = &$os->getDeviceArray();
|
||||
foreach ((array) $types as $sensor_class) {
|
||||
echo ucfirst($sensor_class) . ': ';
|
||||
$dir = Config::get('install_dir') . '/includes/discovery/sensors/' . $sensor_class . '/';
|
||||
@@ -1014,7 +1004,7 @@ function sensors($types, $device, $valid, $pre_cache = [])
|
||||
include $dir . '/rfc1628.inc.php';
|
||||
}
|
||||
}
|
||||
discovery_process($valid, $device, $sensor_class, $pre_cache);
|
||||
discovery_process($valid, $os, $sensor_class, $pre_cache);
|
||||
d_echo($valid['sensor'][$sensor_class] ?? []);
|
||||
check_valid_sensors($device, $sensor_class, $valid['sensor']);
|
||||
echo "\n";
|
||||
|
@@ -80,7 +80,7 @@ $run_sensors = [
|
||||
// filter submodules
|
||||
$run_sensors = array_intersect($run_sensors, Config::get('discovery_submodules.sensors', $run_sensors));
|
||||
|
||||
sensors($run_sensors, $device, $valid, $pre_cache);
|
||||
sensors($run_sensors, $os, $valid, $pre_cache);
|
||||
unset(
|
||||
$pre_cache,
|
||||
$run_sensors,
|
||||
|
@@ -240,7 +240,6 @@ function poll_device($device, $force_module = false)
|
||||
$attribs = $deviceModel->getAttribs();
|
||||
$device['attribs'] = $attribs;
|
||||
|
||||
load_os($device);
|
||||
$os = \LibreNMS\OS::make($device);
|
||||
|
||||
unset($array);
|
||||
|
Reference in New Issue
Block a user