mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
newdevice: Added more health information for APC units (#6619)
* fix: Fixed apc state support emsOutput * newdevice: Added more health information for APC devices * update schema file * schema file renamed
This commit is contained in:
@@ -187,7 +187,7 @@ function discover_device(&$device, $options = null)
|
||||
// Discover sensors
|
||||
|
||||
|
||||
function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, $divisor = 1, $multiplier = 1, $low_limit = null, $low_warn_limit = null, $warn_limit = null, $high_limit = null, $current = null, $poller_type = 'snmp', $entPhysicalIndex = null, $entPhysicalIndex_measured = null)
|
||||
function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, $divisor = 1, $multiplier = 1, $low_limit = null, $low_warn_limit = null, $warn_limit = null, $high_limit = null, $current = null, $poller_type = 'snmp', $entPhysicalIndex = null, $entPhysicalIndex_measured = null, $user_func = null)
|
||||
{
|
||||
|
||||
$low_limit = set_null($low_limit);
|
||||
@@ -241,6 +241,7 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr,
|
||||
'sensor_current' => $current,
|
||||
'entPhysicalIndex' => $entPhysicalIndex,
|
||||
'entPhysicalIndex_measured' => $entPhysicalIndex_measured,
|
||||
'user_func' => $user_func,
|
||||
);
|
||||
|
||||
foreach ($insert as $key => $val_check) {
|
||||
@@ -324,7 +325,8 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr,
|
||||
$multiplier == $sensor_entry['sensor_multiplier'] &&
|
||||
$divisor == $sensor_entry['sensor_divisor'] &&
|
||||
$entPhysicalIndex_measured == $sensor_entry['entPhysicalIndex_measured'] &&
|
||||
$entPhysicalIndex == $sensor_entry['entPhysicalIndex']
|
||||
$entPhysicalIndex == $sensor_entry['entPhysicalIndex'] &&
|
||||
$user_func == $sensor_entry['user_func']
|
||||
) {
|
||||
echo '.';
|
||||
} else {
|
||||
@@ -335,6 +337,7 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr,
|
||||
'sensor_divisor' => $divisor,
|
||||
'entPhysicalIndex' => $entPhysicalIndex,
|
||||
'entPhysicalIndex_measured' => $entPhysicalIndex_measured,
|
||||
'user_func' => $user_func,
|
||||
);
|
||||
$updated = dbUpdate($update, 'sensors', '`sensor_id` = ?', array($sensor_entry['sensor_id']));
|
||||
echo 'U';
|
||||
|
@@ -39,3 +39,14 @@ foreach (array_keys($apc_env_data) as $index) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($pre_cache['mem_sensors_status'] as $index => $data) {
|
||||
$cur_oid = '.1.3.6.1.4.1.318.1.1.10.4.2.3.1.6.' . $index;
|
||||
$descr = $data['memSensorsStatusSensorName'] . ' - ' . $data['memSensorsStatusSensorLocation'];
|
||||
$divisor = 1;
|
||||
$multiplier = 1;
|
||||
$value = $data['memSensorsHumidity'];
|
||||
if (is_numeric($value)) {
|
||||
discover_sensor($valid['sensor'], 'humidity', $device, $cur_oid, 'memSensorsHumidity.' . $index, 'apc', $descr, $divisor, $multiplier, null, null, null, null, $value);
|
||||
}
|
||||
}
|
||||
|
@@ -25,5 +25,11 @@
|
||||
echo 'coolingUnitStatusAnalogEntry ';
|
||||
$pre_cache['cooling_unit_analog'] = snmpwalk_cache_oid($device, 'coolingUnitStatusAnalogEntry', array(), 'PowerNet-MIB');
|
||||
|
||||
echo 'upsPhaseNumInputPhases';
|
||||
echo 'upsPhaseNumInputPhases ';
|
||||
$pre_cache['apcups_phase_count'] = snmp_get($device, 'upsPhaseNumInputPhases.1', '-OQv', 'PowerNet-MIB');
|
||||
|
||||
echo 'memSensorsStatusTable ';
|
||||
$pre_cache['mem_sensors_status'] = snmpwalk_cache_oid($device, 'memSensorsStatusTable', array(), 'PowerNet-MIB', null, '-OQUse');
|
||||
|
||||
echo 'memSensorsStatusSysTempUnits ';
|
||||
$pre_cache['memSensorsStatusSysTempUnits'] = snmp_get($device, 'memSensorsStatusSysTempUnits.0', '-OQv', 'PowerNet-MIB');
|
||||
|
@@ -131,8 +131,8 @@ foreach ($relays as $index => $data) {
|
||||
}
|
||||
$current = apc_relay_state($data['emsOutputRelayControlOutputRelayCommand']);
|
||||
if (is_numeric($current)) {
|
||||
discover_sensor($valid['sensor'], 'state', $device, $cur_oid, $cur_oid, 'apc', $state_name, '1', '1', null, null, null, null, $current);
|
||||
create_sensor_to_state_index($device, $state_name, $index);
|
||||
discover_sensor($valid['sensor'], 'state', $device, $cur_oid, $cur_oid, $state_name, $state_name, '1', '1', null, null, null, null, $current);
|
||||
create_sensor_to_state_index($device, $state_name, $cur_oid);
|
||||
}
|
||||
}
|
||||
unset(
|
||||
@@ -165,8 +165,8 @@ foreach ($switched as $index => $data) {
|
||||
}
|
||||
$current = apc_relay_state($data['emsOutletControlOutletCommand']);
|
||||
if (is_numeric($current)) {
|
||||
discover_sensor($valid['sensor'], 'state', $device, $cur_oid, $cur_oid, 'apc', $state_name, '1', '1', null, null, null, null, $current);
|
||||
create_sensor_to_state_index($device, $state_name, $index);
|
||||
discover_sensor($valid['sensor'], 'state', $device, $cur_oid, $cur_oid, $state_name, $state_name, '1', '1', null, null, null, null, $current);
|
||||
create_sensor_to_state_index($device, $state_name, $cur_oid);
|
||||
}
|
||||
}
|
||||
unset(
|
||||
@@ -174,3 +174,67 @@ unset(
|
||||
$index,
|
||||
$data
|
||||
);
|
||||
|
||||
foreach ($pre_cache['mem_sensors_status'] as $index => $data) {
|
||||
if ($data['memSensorsCommStatus']) {
|
||||
$cur_oid = '.1.3.6.1.4.1.318.1.1.10.4.2.3.1.7.' . $index;
|
||||
$state_name = 'memSensorsCommStatus';
|
||||
$state_index_id = create_state_index($state_name);
|
||||
if ($state_index_id !== null) {
|
||||
$states = array(
|
||||
array($state_index_id,'notInstalled',0,1,1),
|
||||
array($state_index_id,'commsOK',0,2,0),
|
||||
array($state_index_id,'commsLost',0,3,2),
|
||||
);
|
||||
foreach ($states as $value) {
|
||||
$insert = array(
|
||||
'state_index_id' => $value[0],
|
||||
'state_descr' => $value[1],
|
||||
'state_draw_graph' => $value[2],
|
||||
'state_value' => $value[3],
|
||||
'state_generic_value' => $value[4]
|
||||
);
|
||||
dbInsert($insert, 'state_translations');
|
||||
}
|
||||
}
|
||||
$current = $data['memSensorsCommStatus'];
|
||||
}
|
||||
$descr = $data['memSensorsStatusSensorName'] . ' - ' . $data['memSensorsStatusSensorLocation'];
|
||||
$divisor = 1;
|
||||
$multiplier = 1;
|
||||
if (is_numeric($current)) {
|
||||
discover_sensor($valid['sensor'], 'state', $device, $cur_oid, $state_name . '.' . $index, $state_name, $state_name, '1', '1', null, null, null, null, $current);
|
||||
create_sensor_to_state_index($device, $state_name, $state_name . '.' . $index);
|
||||
}
|
||||
|
||||
if ($data['memSensorsAlarmStatus']) {
|
||||
$cur_oid = '.1.3.6.1.4.1.318.1.1.10.4.2.3.1.8.' . $index;
|
||||
$state_name = 'memSensorsAlarmStatus';
|
||||
$state_index_id = create_state_index($state_name);
|
||||
if ($state_index_id !== null) {
|
||||
$states = array(
|
||||
array($state_index_id,'memNormal',0,1,0),
|
||||
array($state_index_id,'memWarning',0,2,1),
|
||||
array($state_index_id,'memCritical',0,3,2),
|
||||
);
|
||||
foreach ($states as $value) {
|
||||
$insert = array(
|
||||
'state_index_id' => $value[0],
|
||||
'state_descr' => $value[1],
|
||||
'state_draw_graph' => $value[2],
|
||||
'state_value' => $value[3],
|
||||
'state_generic_value' => $value[4]
|
||||
);
|
||||
dbInsert($insert, 'state_translations');
|
||||
}
|
||||
}
|
||||
$current = $data['memSensorsAlarmStatus'];
|
||||
}
|
||||
$descr = $data['memSensorsStatusSensorName'] . ' - ' . $data['memSensorsStatusSensorLocation'];
|
||||
$divisor = 1;
|
||||
$multiplier = 1;
|
||||
if (is_numeric($current)) {
|
||||
discover_sensor($valid['sensor'], 'state', $device, $cur_oid, $state_name . '.' . $index, $state_name, $state_name, '1', '1', null, null, null, null, $current);
|
||||
create_sensor_to_state_index($device, $state_name, $state_name . '.' . $index);
|
||||
}
|
||||
}
|
||||
|
@@ -157,3 +157,18 @@ foreach ($cooling_unit_analog as $index => $data) {
|
||||
discover_sensor($valid['sensor'], 'temperature', $device, $cur_oid, $cur_oid, 'apc', $descr, $scale, 1, null, null, null, null, $value);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($pre_cache['mem_sensors_status'] as $index => $data) {
|
||||
$cur_oid = '.1.3.6.1.4.1.318.1.1.10.4.2.3.1.5.' . $index;
|
||||
$descr = $data['memSensorsStatusSensorName'] . ' - ' . $data['memSensorsStatusSensorLocation'];
|
||||
$divisor = 1;
|
||||
$multiplier = 1;
|
||||
$value = $data['memSensorsTemperature'];
|
||||
if (is_numeric($value)) {
|
||||
$user_func = null;
|
||||
if ($pre_cache['memSensorsStatusSysTempUnits'] === 'fahrenheit') {
|
||||
$user_func = 'convert_to_celsius';
|
||||
}
|
||||
discover_sensor($valid['sensor'], 'temperature', $device, $cur_oid, 'memSensorsTemperature.' . $index, 'apc', $descr, $divisor, $multiplier, null, null, null, null, $value, 'snmp', null, null, $user_func);
|
||||
}
|
||||
}
|
||||
|
@@ -65,6 +65,9 @@ function poll_sensor($device, $class)
|
||||
require 'includes/polling/sensors/'. $class .'/'. $device['os'] .'.inc.php';
|
||||
}
|
||||
|
||||
if (isset($sensor['user_func']) && function_exists($sensor['user_func'])) {
|
||||
$sensor_value = $sensor['user_func']($sensor_value);
|
||||
}
|
||||
|
||||
if ($class == 'temperature') {
|
||||
preg_match('/[\d\.\-]+/', $sensor_value, $temp_response);
|
||||
@@ -578,3 +581,9 @@ function update_application($app, $response, $current = '')
|
||||
}
|
||||
dbUpdate($data, 'applications', '`app_id` = ?', array($app['app_id']));
|
||||
}
|
||||
|
||||
function convert_to_celsius($value)
|
||||
{
|
||||
$value = ($value - 32) / 1.8;
|
||||
return sprintf('%.02f', $value);
|
||||
}
|
||||
|
@@ -1319,6 +1319,7 @@ sensors:
|
||||
sensor_oid: { Field: sensor_oid, Type: varchar(255), 'Null': false, Default: null, Extra: '' }
|
||||
sensor_prev: { Field: sensor_prev, Type: float, 'Null': true, Default: null, Extra: '' }
|
||||
sensor_type: { Field: sensor_type, Type: varchar(255), 'Null': false, Default: null, Extra: '' }
|
||||
user_func: { Field: user_func, Type: varchar(100), 'Null': true, Default: null, Extra: '' }
|
||||
Indexes:
|
||||
PRIMARY: { Name: PRIMARY, Columns: [sensor_id], Unique: true, Type: BTREE }
|
||||
sensor_host: { Name: sensor_host, Columns: [device_id], Unique: false, Type: BTREE }
|
||||
|
1
sql-schema/192.sql
Normal file
1
sql-schema/192.sql
Normal file
@@ -0,0 +1 @@
|
||||
ALTER TABLE `sensors` ADD `user_func` VARCHAR(100) NULL;
|
Reference in New Issue
Block a user