126 lines
3.9 KiB
PHP
126 lines
3.9 KiB
PHP
<?php
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage discovery
|
|
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2020 Observium Limited
|
|
*
|
|
*/
|
|
|
|
$cache_snmp = array();
|
|
$valid['sensor'] = array();
|
|
$valid['status'] = array();
|
|
$valid['counter'] = array();
|
|
|
|
// Sensor, Status and Counter entities are discovered together since they are often in the same MIBs.
|
|
// Definitions discovery first
|
|
|
|
foreach (get_device_mibs_permitted($device) as $mib) {
|
|
// Detect sensors by definitions
|
|
if (is_array($config['mibs'][$mib]['sensor'])) {
|
|
print_cli_data_field($mib);
|
|
foreach ($config['mibs'][$mib]['sensor'] as $oid_data) {
|
|
discover_sensor_definition($device, $mib, $oid_data);
|
|
}
|
|
print_cli(PHP_EOL);
|
|
}
|
|
|
|
// Detect statuses by definitions
|
|
if (is_array($config['mibs'][$mib]['status'])) {
|
|
print_cli_data_field($mib);
|
|
foreach ($config['mibs'][$mib]['status'] as $oid_data) {
|
|
discover_status_definition($device, $mib, $oid_data);
|
|
}
|
|
print_cli(PHP_EOL);
|
|
}
|
|
|
|
// Detect counters by definitions
|
|
if (is_array($config['mibs'][$mib]['counter'])) {
|
|
print_cli_data_field($mib);
|
|
foreach ($config['mibs'][$mib]['counter'] as $oid_data) {
|
|
discover_counter_definition($device, $mib, $oid_data);
|
|
}
|
|
print_cli(PHP_EOL);
|
|
}
|
|
}
|
|
|
|
// Run sensor discovery scripts (also discovers state sensors as status entities)
|
|
$include_dir = "includes/discovery/sensors";
|
|
include($config['install_dir']."/includes/include-dir-mib.inc.php");
|
|
|
|
// Run status-specific discovery scripts
|
|
$include_dir = "includes/discovery/status";
|
|
include($config['install_dir']."/includes/include-dir-mib.inc.php");
|
|
|
|
// Run counter-specific discovery scripts
|
|
$include_dir = "includes/discovery/counter";
|
|
include($config['install_dir']."/includes/include-dir-mib.inc.php");
|
|
|
|
// Detect static sensors
|
|
|
|
if (is_array($config['sensors']['static'])) {
|
|
|
|
print_cli_data_field('STATIC SENSORS');
|
|
|
|
foreach($config['sensors']['static'] as $sensor) {
|
|
if ($sensor['device_id'] == $device['device_id']) {
|
|
$value = snmp_get_oid($device, $sensor['oid']);
|
|
if (snmp_status()) {
|
|
$value = snmp_fix_numeric($value);
|
|
if (is_numeric($value)) {
|
|
$options = array();
|
|
$fields = array('limit', 'limit_low', 'limit_warn', 'limit_low_warn');
|
|
foreach($fields as $field) {
|
|
if (isset($sensor[$field])) { $options[$field] = $sensor[$field]; }
|
|
}
|
|
|
|
discover_sensor_ng($device, $sensor['class'], 'STATIC', 'static', $sensor['oid'], $sensor['oid'], 'static', $sensor['descr'], $sensor['multiplier'], $value, $options);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Detect static counters
|
|
|
|
if (is_array($config['counters']['static'])) {
|
|
print_cli_data_field('Static Counters');
|
|
foreach($config['counters']['static'] as $counter) {
|
|
if ($counter['device_id'] == $device['device_id']) {
|
|
$value = snmp_get_oid($device, $counter['oid']);
|
|
if (snmp_status()) {
|
|
$value = snmp_fix_numeric($value);
|
|
if (is_numeric($value)) {
|
|
$options = array();
|
|
$fields = array('counter_unit', 'limit_auto', 'limit', 'limit_low', 'limit_warn', 'limit_low_warn');
|
|
foreach($fields as $field) {
|
|
if (isset($counter[$field])) { $options[$field] = $counter[$field]; }
|
|
}
|
|
if (!isset($counter['class'])) { $counter['class'] = 'counter'; }
|
|
|
|
discover_counter($device, $counter['class'], 'STATIC', 'static', $counter['oid'], $counter['oid'], $counter['descr'], $counter['multiplier'], $value, $options);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
print_debug_vars($valid['sensor']);
|
|
foreach (array_keys($config['sensor_types']) as $type) {
|
|
check_valid_sensors($device, $type, $GLOBALS['valid']['sensor']);
|
|
}
|
|
|
|
print_debug_vars($valid['status']);
|
|
check_valid_status($device, $GLOBALS['valid']['status']);
|
|
|
|
print_debug_vars($valid['counter']);
|
|
check_valid_counter($device);
|
|
|
|
echo(PHP_EOL);
|
|
|
|
// EOF
|