mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
* refactor: advanced sensor states mark create_state_index($state_name) as E_USER_DEPRECATED? * fix: minor corrections * fix: mib has partialSync(9) and incompatibleVersion(8) * fix: corrected netagent2upsstate - Sleeping(5) * fix: NetAgent2 upsThreePhaseUPSStatusInverterOperating correction * refactor: array() be gone * Refactoring includes/discovery/sensors/state/extendair.inc.php with arrays And tidying up array formatting in other files * fix: minor typo * standardising array item names removed redundant "if ($state_index_id !== null) {" * workaround: procurve & serverscheck a sensor is causing create_state_index($state) to return null. The updated code doesn't allow for this and thus a hybrid is being used. * standardised naming of state info. Caused a typo $state_name instead of $status_name $state_name is the standard * converted compas to square arrays * Converted APC states using preg_match to new create_state_index() call * Update boss.inc.php
189 lines
7.0 KiB
PHP
189 lines
7.0 KiB
PHP
<?php
|
|
/*
|
|
* LibreNMS
|
|
*
|
|
* Copyright (c) 2016 Peter TKATCHENKO https://github.com/Peter2121/
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation, either version 3 of the License, or (at your
|
|
* option) any later version. Please see LICENSE.txt at the top level of
|
|
* the source code distribution for details.
|
|
*/
|
|
|
|
$oids = snmp_walk($device, 'eqlMemberHealthStatus', '-OQne', 'EQLMEMBER-MIB', 'equallogic');
|
|
|
|
d_echo('Health oids:');
|
|
d_echo($oids."\n");
|
|
|
|
/*
|
|
eqlMemberHealthStatus
|
|
INTEGER {
|
|
unknown (0),
|
|
normal (1),
|
|
warning (2),
|
|
critical (3)
|
|
}
|
|
DESCRIPTION The value of this object is determinted by the severity of the
|
|
health condition state variables. The most severe state will
|
|
be reflected.
|
|
|
|
The LibreNMS generic states is derived from Nagios:
|
|
0 = OK
|
|
1 = Warning
|
|
2 = Critical
|
|
3 = Unknown
|
|
|
|
*/
|
|
|
|
if (!empty($oids)) {
|
|
$descr='Health';
|
|
|
|
$state_name = 'eqlMemberHealthStatus';
|
|
$states = [
|
|
['value' => 0, 'generic' => 3, 'graph' => 0, 'descr' => 'unknown'],
|
|
['value' => 1, 'generic' => 0, 'graph' => 1, 'descr' => 'normal'],
|
|
['value' => 2, 'generic' => 1, 'graph' => 1, 'descr' => 'warning'],
|
|
['value' => 3, 'generic' => 2, 'graph' => 1, 'descr' => 'critical'],
|
|
];
|
|
create_state_index($state_name, $states);
|
|
|
|
foreach (explode("\n", $oids) as $data) {
|
|
$data = trim($data);
|
|
if (!empty($data)) {
|
|
list($oid,$current) = explode(' = ', $data, 2);
|
|
$split_oid = explode('.', $oid);
|
|
$num_index = $split_oid[(count($split_oid) - 1)];
|
|
$index = (int)$num_index+0;
|
|
$low_limit = 0.5;
|
|
$high_limit = 2.5;
|
|
discover_sensor($valid['sensor'], 'state', $device, $oid, $index, $state_name, $descr, 1, 1, $low_limit, $low_limit, $high_limit, $high_limit, $current, 'snmp', $index);
|
|
create_sensor_to_state_index($device, $state_name, $index);
|
|
}
|
|
}
|
|
}
|
|
|
|
$oids1 = snmp_walk($device, 'eqlMemberHealthDetailsPowerSupplyName', '-OQn', 'EQLMEMBER-MIB', 'equallogic');
|
|
|
|
d_echo('PowerSupplyName oids:');
|
|
d_echo($oids1."\n");
|
|
|
|
/*
|
|
.1.3.6.1.4.1.12740.2.1.8.1.2.1.329840783.1 = Power Cooling Module 0
|
|
.1.3.6.1.4.1.12740.2.1.8.1.2.1.329840783.2 = Power Cooling Module 1
|
|
**/
|
|
|
|
$base_oid = '.1.3.6.1.4.1.12740.2.1.8.1.3.1.'; // eqlMemberHealthDetailsPowerSupplyCurrentState
|
|
|
|
if (!empty($oids1)) {
|
|
/*
|
|
eqlMemberHealthDetailsPowerSupplyCurrentState
|
|
INTEGER {
|
|
on-and-operating (1),
|
|
no-ac-power (2),
|
|
failed-or-no-data (3) -- has ac but no dc out or we have no data
|
|
}
|
|
*/
|
|
$state_name = 'eqlMemberPowerSupplyCurrentState';
|
|
$states = [
|
|
['value' => 1, 'generic' => 0, 'graph' => 1, 'descr' => 'on-and-operating'],
|
|
['value' => 2, 'generic' => 1, 'graph' => 1, 'descr' => 'no-ac-power'],
|
|
['value' => 3, 'generic' => 2, 'graph' => 1, 'descr' => 'failed-or-no-data'],
|
|
];
|
|
create_state_index($state_name, $states);
|
|
|
|
foreach (explode("\n", $oids1) as $data) {
|
|
$data = trim($data);
|
|
if (!empty($data)) {
|
|
list($oid,$descr) = explode(' = ', $data, 2);
|
|
$split_oid = explode('.', $oid);
|
|
$num_index = $split_oid[(count($split_oid) - 1)];
|
|
$index = (int)$num_index+0;
|
|
$member_id = $split_oid[(count($split_oid) - 2)];
|
|
$num_index = $member_id.'.'.$num_index;
|
|
$oid = $base_oid.$num_index;
|
|
$extra = snmp_get_multi($device, $oid, '-OQne', 'EQLMEMBER-MIB', 'equallogic');
|
|
d_echo($extra);
|
|
if (!empty($extra)) {
|
|
list($foid,$pstatus) = explode(' = ', $extra, 2);
|
|
$index = (100 + $index);
|
|
$low_limit = 0.5;
|
|
$high_limit = 1.5;
|
|
discover_sensor($valid['sensor'], 'state', $device, $oid, $index, $state_name, $descr, 1, 1, $low_limit, $low_limit, $high_limit, $high_limit, $pstatus, 'snmp', $index);
|
|
create_sensor_to_state_index($device, $state_name, $index);
|
|
}
|
|
}//end if
|
|
}//end foreach
|
|
}//end if empty oids
|
|
|
|
|
|
$oids_disks = snmp_walk($device, 'eqlDiskSerialNumber', '-OQn', 'EQLDISK-MIB', 'equallogic');
|
|
|
|
d_echo('Disk Serials oids:' . PHP_EOL);
|
|
d_echo($oids_disks."\n");
|
|
|
|
$disks_base_oid = '.1.3.6.1.4.1.12740.3.1.1.1.8.1.'; // eqlDiskStatus
|
|
|
|
if (!empty($oids_disks)) {
|
|
$state_name = 'eqlDiskStatus';
|
|
$states = [
|
|
['value' => 1, 'generic' => 0, 'graph' => 1, 'descr' => 'on-line'],
|
|
['value' => 2, 'generic' => 0, 'graph' => 1, 'descr' => 'spare'],
|
|
['value' => 3, 'generic' => 2, 'graph' => 1, 'descr' => 'failed'],
|
|
['value' => 4, 'generic' => 1, 'graph' => 1, 'descr' => 'off-line'],
|
|
['value' => 5, 'generic' => 1, 'graph' => 1, 'descr' => 'alt-sig'],
|
|
['value' => 6, 'generic' => 2, 'graph' => 1, 'descr' => 'too-small'],
|
|
['value' => 7, 'generic' => 0, 'graph' => 1, 'descr' => 'history-of-failures'],
|
|
['value' => 8, 'generic' => 1, 'graph' => 1, 'descr' => 'unsupported-version'],
|
|
];
|
|
create_state_index($state_name, $states);
|
|
|
|
foreach (explode("\n", $oids_disks) as $data) {
|
|
$data = trim($data);
|
|
if (!empty($data)) {
|
|
list($oid,$descr) = explode(' = ', $data, 2);
|
|
$split_oid = explode('.', $oid);
|
|
$disk_index = $split_oid[(count($split_oid) - 1)];
|
|
$member_id = $split_oid[(count($split_oid) - 2)];
|
|
$num_index = $member_id.'.'.$disk_index;
|
|
$oid = $disks_base_oid.$num_index;
|
|
$extra = snmp_get($device, $oid, '-OQne', 'EQLDISK-MIB', 'equallogic');
|
|
d_echo($extra);
|
|
if (!empty($extra)) {
|
|
list($foid,$pstatus) = explode(' = ', $extra, 2);
|
|
$index = 'eqlDiskStatus.'.$disk_index;
|
|
$low_limit = 0.5;
|
|
$high_limit = 1.5;
|
|
discover_sensor($valid['sensor'], 'state', $device, $oid, $index, $state_name, "Disk $disk_index - $descr", 1, 1, $low_limit, $low_limit, $high_limit, $high_limit, $pstatus, 'snmp', $index);
|
|
create_sensor_to_state_index($device, $state_name, $index);
|
|
unset(
|
|
$index,
|
|
$low_limit,
|
|
$high_limit
|
|
);
|
|
}
|
|
unset(
|
|
$split_oid,
|
|
$disk_index,
|
|
$index,
|
|
$member_id,
|
|
$num_index,
|
|
$oid,
|
|
$extra
|
|
);
|
|
}//end if
|
|
unset(
|
|
$data
|
|
);
|
|
}//end foreach
|
|
}//end if empty oids
|
|
|
|
unset(
|
|
$oid_disks,
|
|
$disks_base_oid,
|
|
$disks_state_name,
|
|
$disks_state_index_id,
|
|
$disk_states,
|
|
$insert
|
|
);
|