229 lines
10 KiB
PHP
229 lines
10 KiB
PHP
<?php
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage discovery
|
|
* @copyright (C) Adam Armstrong
|
|
*
|
|
*/
|
|
|
|
# Input Sensors
|
|
|
|
// EPPC-MIB::upsESystemConfigInputVoltage.0 = INTEGER: 2300
|
|
// EPPC-MIB::upsESystemConfigInputFrequence.0 = INTEGER: 500
|
|
// EPPC-MIB::upsESystemInputSourceNum.0 = INTEGER: 1
|
|
// EPPC-MIB::upsESystemInputLineBads.0 = Counter32: 0
|
|
// EPPC-MIB::upsESystemInputNumPhases.0 = INTEGER: 1
|
|
// EPPC-MIB::upsESystemInputFrequency.1 = INTEGER: 500
|
|
// EPPC-MIB::upsESystemInputVoltage.1 = INTEGER: 2301
|
|
// EPPC-MIB::upsESystemInputCurrent.1 = INTEGER: -1
|
|
// EPPC-MIB::upsESystemInputWatts.1 = INTEGER: -1
|
|
$input_phases = snmp_get_oid($device, 'upsESystemInputNumPhases.0', $mib);
|
|
if ($input_phases > 0) {
|
|
echo('upsESystemInputTable (' . $input_phases . ' phases)');
|
|
|
|
$scale = 0.1;
|
|
$ups_array = snmpwalk_cache_oid($device, 'upsESystemInputTable', [], $mib);
|
|
$input_voltage = snmp_get_oid($device, 'upsESystemConfigInputVoltage.0', $mib) * $scale;
|
|
if ($input_voltage > 0) {
|
|
$voltage_limits = [
|
|
'limit_high' => sensor_limit_high('voltage', $input_voltage), 'limit_high_warn' => sensor_limit_high_warn('voltage', $input_voltage),
|
|
'limit_low' => sensor_limit_low('voltage', $input_voltage), 'limit_low_warn' => sensor_limit_low_warn('voltage', $input_voltage)
|
|
];
|
|
} else {
|
|
$voltage_limits = [];
|
|
}
|
|
$input_frequency = snmp_get_oid($device, 'upsESystemConfigInputFrequence.0', $mib) * $scale;
|
|
if ($input_frequency > 0) {
|
|
$frequency_limits = [
|
|
'limit_high' => sensor_limit_high('frequency', $input_frequency), 'limit_high_warn' => sensor_limit_high_warn('frequency', $input_frequency),
|
|
'limit_low' => sensor_limit_low('frequency', $input_frequency), 'limit_low_warn' => sensor_limit_low_warn('frequency', $input_frequency)
|
|
];
|
|
} else {
|
|
$frequency_limits = [];
|
|
}
|
|
|
|
foreach ($ups_array as $phase => $entry) {
|
|
$descr = 'Input';
|
|
if ($input_phases > 1) {
|
|
$descr .= ' (Phase ' . $phase . ')';
|
|
}
|
|
|
|
$oid_name = 'upsESystemInputVoltage';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.16.1.3.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
$options = $voltage_limits;
|
|
$options['rename_rrd'] = "eppc-mib-upsESystemInputVoltage.%index%";
|
|
discover_sensor_ng($device, 'voltage', $mib, $oid_name, $oid_num, $phase, $descr, $scale, $value, $options);
|
|
|
|
if ($entry['upsESystemInputFrequency'] > 0) {
|
|
$oid_name = 'upsESystemInputFrequency';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.16.1.2.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
$options = $frequency_limits;
|
|
$options['rename_rrd'] = "eppc-mib-upsESystemInputFrequency.%index%";
|
|
|
|
discover_sensor_ng($device, 'frequency', $mib, $oid_name, $oid_num, $phase, $descr, $scale, $value, $options);
|
|
}
|
|
|
|
if ($entry['upsESystemInputCurrent'] > 0) {
|
|
$oid_name = 'upsESystemInputCurrent';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.16.1.4.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_sensor_ng($device, 'current', $mib, $oid_name, $oid_num, $phase, $descr, $scale, $value);
|
|
}
|
|
|
|
if ($entry['upsESystemInputWatts'] > 0) {
|
|
$oid_name = 'upsESystemInputWatts';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.16.1.5.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_sensor_ng($device, 'power', $mib, $oid_name, $oid_num, $phase, $descr, 1, $value);
|
|
}
|
|
}
|
|
}
|
|
|
|
# Output Sensors
|
|
// EPPC-MIB::upsESystemConfigOutputVoltage.0 = INTEGER: -1
|
|
// EPPC-MIB::upsESystemConfigOutputFrequency.0 = INTEGER: -1
|
|
// EPPC-MIB::upsESystemConfigOutputVA.0 = INTEGER: -1
|
|
// EPPC-MIB::upsESystemConfigOutputPower.0 = INTEGER: -1
|
|
// EPPC-MIB::upsESystemConfigOutputLoadHighSetPoint.0 = INTEGER: 90
|
|
// EPPC-MIB::upsESystemOutputNumPhase.0 = INTEGER: 1
|
|
// EPPC-MIB::upsESystemOutputFrequency.1 = INTEGER: 500
|
|
// EPPC-MIB::upsESystemOutputVoltage.1 = INTEGER: 2299
|
|
// EPPC-MIB::upsESystemOutputCurrent.1 = INTEGER: 64
|
|
// EPPC-MIB::upsESystemOutputWatts.1 = INTEGER: 1300
|
|
// EPPC-MIB::upsESystemOutputVA.1 = INTEGER: 1400
|
|
// EPPC-MIB::upsESystemOutputLoad.1 = INTEGER: 24
|
|
|
|
$output_phases = snmp_get_oid($device, 'upsESystemOutputNumPhase.0', $mib);
|
|
if ($output_phases > 0) {
|
|
echo('upsESystemOutputTable (' . $output_phases . ' phases)');
|
|
|
|
$scale = 0.1;
|
|
$ups_array = snmpwalk_cache_oid($device, 'upsESystemOutputTable', [], $mib);
|
|
|
|
$output_voltage = snmp_get_oid($device, 'upsESystemConfigOutputVoltage.0', $mib) * $scale;
|
|
if ($output_voltage > 0) {
|
|
$voltage_limits = [
|
|
'limit_high' => sensor_limit_high('voltage', $output_voltage), 'limit_high_warn' => sensor_limit_high_warn('voltage', $output_voltage),
|
|
'limit_low' => sensor_limit_low('voltage', $output_voltage), 'limit_low_warn' => sensor_limit_low_warn('voltage', $output_voltage)
|
|
];
|
|
} else {
|
|
// Keep input voltage limits
|
|
//$voltage_limits = [];
|
|
}
|
|
|
|
$output_frequency = snmp_get_oid($device, 'upsESystemConfigOutputFrequency.0', $mib) * $scale;
|
|
if ($output_frequency > 0) {
|
|
$frequency_limits = [
|
|
'limit_high' => sensor_limit_high('frequency', $output_frequency), 'limit_high_warn' => sensor_limit_high_warn('frequency', $output_frequency),
|
|
'limit_low' => sensor_limit_low('frequency', $output_frequency), 'limit_low_warn' => sensor_limit_low_warn('frequency', $output_frequency)
|
|
];
|
|
} else {
|
|
// Keep input frequency limits
|
|
//$frequency_limits = [];
|
|
}
|
|
|
|
foreach ($ups_array as $phase => $entry) {
|
|
$descr = 'Output';
|
|
if ($input_phases > 1) {
|
|
$descr .= ' (Phase ' . $phase . ')';
|
|
}
|
|
|
|
$oid_name = 'upsESystemOutputVoltage';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.18.1.3.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
$options = $voltage_limits;
|
|
$options['rename_rrd'] = "eppc-mib-upsESystemOutputVoltage.%index%";
|
|
discover_sensor_ng($device, 'voltage', $mib, $oid_name, $oid_num, $phase, $descr, $scale, $value, $options);
|
|
|
|
$oid_name = 'upsESystemOutputFrequency';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.18.1.2.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
$options = $frequency_limits;
|
|
$options['rename_rrd'] = "eppc-mib-upsESystemOutputFrequency.%index%";
|
|
discover_sensor_ng($device, 'frequency', $mib, $oid_name, $oid_num, $phase, $descr, $scale, $value, $options);
|
|
|
|
$oid_name = 'upsESystemOutputLoad';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.18.1.7.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
$options = ['limit_high' => 90, 'limit_high_warn' => 75];
|
|
$options['rename_rrd'] = "eppc-mib-upsESystemOutputLoad.%index%";
|
|
discover_sensor_ng($device, 'load', $mib, $oid_name, $oid_num, $phase, $descr, 1, $value, $options);
|
|
|
|
if ($entry['upsESystemOutputCurrent'] > 0) {
|
|
$oid_name = 'upsESystemOutputCurrent';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.18.1.4.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_sensor_ng($device, 'current', $mib, $oid_name, $oid_num, $phase, $descr, $scale, $value);
|
|
}
|
|
|
|
if ($entry['upsESystemOutputWatts'] > 0) {
|
|
$oid_name = 'upsESystemOutputWatts';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.18.1.5.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_sensor_ng($device, 'power', $mib, $oid_name, $oid_num, $phase, $descr, 1, $value);
|
|
}
|
|
|
|
if ($entry['upsESystemOutputVA'] > 0) {
|
|
$oid_name = 'upsESystemOutputVA';
|
|
$oid_num = '.1.3.6.1.4.1.935.10.1.1.2.18.1.6.' . $phase;
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_sensor_ng($device, 'apower', $mib, $oid_name, $oid_num, $phase, $descr, 1, $value);
|
|
}
|
|
}
|
|
}
|
|
|
|
# bypass sensors
|
|
// EPPC-MIB::upsESystemBypassNumPhase.0 = INTEGER: -1
|
|
$bypass_phases = snmp_get_oid($device, 'upsESystemBypassNumPhase.0', $mib);
|
|
if ($bypass_phases > 0) {
|
|
echo('upsESystemBypassTable (' . $bypass_phases . ' phases)');
|
|
$ups_array = snmpwalk_cache_oid($device, 'upsESystemBypassTable', [], $mib);
|
|
}
|
|
|
|
/* FIXME Sensors below are a definite candidate for definition-based discovery
|
|
|
|
$descr = 'Charge Remaining';
|
|
$oid = '.1.3.6.1.4.1.935.10.1.1.3.4.0'; # EPPC-MIB:upsEBatteryEstimatedChargeRemaining
|
|
$value = snmp_get($device, 'upsEBatteryEstimatedChargeRemaining.0', '-OQv', $mib);
|
|
$limits = array('limit_high' => 100, 'limit_low_warn' => 10, 'limit_low' => 0);
|
|
discover_sensor('capacity', $device, $oid, 'upsEBatteryEstimatedChargeRemaining', 'eppc-mib', $descr, 1, $value, $limits); // FIXME should be upsEBatteryEstimatedChargeRemaining.0
|
|
|
|
$descr = 'Seconds on Battery';
|
|
$oid = '.1.3.6.1.4.1.935.10.1.1.3.2.0'; # EPPC-MIB:upsESecondsOnBattery
|
|
$value = snmp_get($device, 'upsESecondsOnBattery.0', '-OQv', $mib);
|
|
discover_sensor('runtime', $device, $oid, 'upsESecondsOnBattery.0', 'eppc-mib', $descr, 1, $value);
|
|
|
|
$descr = 'Runtime Remaining (minutes)';
|
|
$oid = '.1.3.6.1.4.1.935.10.1.1.3.3.0'; # EPPC-MIB:upsEBatteryEstimatedMinutesRemaining
|
|
$value = snmp_get($device, 'upsEBatteryEstimatedMinutesRemaining.0', '-OQv', $mib);
|
|
$limits = array('limit_high' => 100, 'limit_high_warn' => 99, 'limit_low_warn' => 25, 'limit_low' => 0);
|
|
discover_sensor('runtime', $device, $oid, 'upsEBatteryEstimatedMinutesRemaining.0', 'eppc-mib', $descr, 1, $value, $limts);
|
|
|
|
$descr = 'Temperature';
|
|
$oid = '.1.3.6.1.4.1.935.10.1.1.2.2.0'; # EPPC-MIB:upsESystemTemperature
|
|
$value = snmp_get($device, 'upsESystemTemperature.0', '-OQv', $mib);
|
|
$high = snmp_get($device, 'upsEEnvironmentTemperatureHighSetPoint.0', '-OQv', $mib);
|
|
$low = snmp_get($device, 'upsEEnvironmentTemperatureLowSetPoint.0', '-OQv', $mib);
|
|
$limits = array('limit_high' => $high * $scale, 'limit_high_warn' => ($high * $scale) * .75, 'limit_low' => $low * $scale);
|
|
discover_sensor('temperature', $device, $oid, 'upsESystemTemperature', 'eppc-mib', $descr, $scale, $value, $limits); // FIXME should be upsESystemTemperature.0
|
|
*/
|
|
unset($limits, $ups_array);
|
|
|
|
// EOF
|