Files
librenms-librenms/includes/discovery/sensors/state/equallogic.inc.php
KodApa85 7f104d4fd9 Advanced state sensors (#9881)
* 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
2019-03-04 11:31:17 -06:00

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
);