Files
librenms-librenms/includes/discovery/sensors/state/equallogic.inc.php
Tony Murray 61316ce2cc PHP 8 fixes (#12528)
* port related errors

* more fixes

* fix storage count

* add tests for php8

* style

* only need not empty

* aix fixes....

* storage WIP

* fix aix discovering hrstorage
fix db test adding .gitkeep
fix os modules when discovery only

* fix aos processors wrong oid

* fix mempool number casting

* fix aos7 cpu

* use + 0 cast instead of floatval()

* more verbose error on invalid json

* remove invalid data in json

* actually fix the json

* correct json error fix

* cast_number() function
fix aruba-instant and aos6 bugs exposed by new function, probably more...

* fix a-f
fix inadequate sort for component data

* fix global port poll time

* fix mempools precent 0, route count, ntp const

* fix schleifenbauer liberal current usage

* further number casting refinement

* vrp

* fix tests

* fix arbos

* warn cleanups adjust to :: change

* fix ciena-sds

* fix drac

* fix dell-rpdu anddlink

* fix and improve arubaos
better error when getting an array in Processor

* fix atenpdu, add missing arubaos files

* aruba-instant to yaml
apparently I didn't need to do this, the diff just looks really odd
It did add ranged sub-index replacements

* docker app, was completely wrong... fixed

* fix sentry4 divide by 0...

* fixed root issue, remove check

* nicer cidr in ipv6 code

* remove bogus enuxus battery bank skip_values

* Fix InfluxDB tests

* remove extra import

* fix other style issues.

* influx "style" fixes
2021-03-12 18:10:14 -06:00

188 lines
6.9 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)) {
[$oid,$current] = explode(' = ', $data, 2);
$split_oid = explode('.', $oid);
$num_index = $split_oid[(count($split_oid) - 1)];
$index = (int) cast_number($num_index);
$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)) {
[$oid,$descr] = explode(' = ', $data, 2);
$split_oid = explode('.', $oid);
$num_index = $split_oid[(count($split_oid) - 1)];
$index = (int) cast_number($num_index);
$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)) {
[$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)) {
[$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)) {
[$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
);