* 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
* mempools to modern module
quick hacky hrstorage port
* port ucd-snmp-mib to Mempools
* Populate DB for ucd
Prep for yaml
* initial yaml attempt
* more complex conversions
fixes to YamlDiscovery, make leading $ optional and allow mib::oid format
* walk full tables and skip values
normalize percentages above 100
* handle precent only ones (specify total as 100)
* Move default polling out of YamlMempoolsDiscovery
* fixes
* Update test data hrstorage should be correct.
* perc_warn for hrstorage
* Host Resources, record buffer, cached, and shared
* Host Resources is always better, don't do both HR and UCD
* fix unix, include warning levels
* variable size
* consolidate skip_values
* define mempools schema
* number instead of integer
* more schema refactor
* one more skip_values reference
* throw error for invalid oid translation
aos6
* a* and Cisco
* updated test data
* update almost all hrstorage data files
* b*
* c* with test data
use standard cache for hrStorage
* use cache for storage module too
* hand bsnmp properly
* bdcom
* exclude total oid from yaml so it is not polled
May add a way to ignore this behavior and poll it, but I don't know if that is needed.
* automatically handle percent only values
* ciscowlc
* only poll used or free if we have used, free, and total.
* fix skipping
* the dlinkoning
fix find value when value "name" is numeric
* support numeric oids
* dnos/ftos attempt
* I guess we can't filter on total > 0
* edgecos
* e*
* f WIP
* f*
* gwd (aka g*)
* h* + procurve
* i*
* j*
* m*
* support 0% used memory (however unlikely)
* n*
* CISCO-PROCESS-MIB memory, share cache with processors module
* ignore mempools with invalid total
* p*
* quanta
* r*
fix raisecom mibs terribly broken
* s-z
* style fixes
* Move VRP back to PHP and make it actually work
* fix zynos
* update schema
* Update Cisco processor data for description bug fixes
* fix comware processors
* comware mempools with memory size
default precision to 1
* sophos-xg updated data
* hrstorage use ram size for buffers, cache, and shared
* Show memory available instead of free in device overview
* UCD, use same rrd format, store available instead of free in the db.
* Calculate availability for HOST-RESOURCES-MIB
* Convert UCD to standard polling
* rename old rrd files
* initial graph work
* graph WIP
* Graph looking decent
* Graph looking decent for hr
* remove old ucd_graph code
* handle availability mempool
more graph cleanup
* color adjustments
* remove accidental free calculation
* Update test data and fix corner cases
* fis pfsense
* update schema
* add default value for mempool_class
* fix whitespace
* update schema
* update schema correctly
* one more time
* fortigate_1500d-sensors missing oids
* Update docs.
* fix indent
* add implements MempoolsDiscovery explicitly to OS
* remove ucd_memory graph references
remove unused device_memory graph
* remove unused functions
* set devices with mempools to rediscover to prevent/minimize gaps
* use a subquery
* add overview graph
* port health mempools table
* Update device mempool
* only show overview if multiple
* Don't override user set warn percentages in discovery
* fix missed usage
* fix style
* Safety check to not rename rrd files incorrectly if migration has not been run.
* Fix overview percent bar and represent available and used on the bar
* missed an item to convert to mempool_class
* percent on the wrong side
* removing $graphs global
* remove unused things
* fix some additional graphs
* Fix graphs persisting too soon
* correct name for poller module performance graph
* only one type of graph is used here
* modifies find_device_id
* Removed host name validation check for RFC. Some devices and OS allow you
to set a name that contains characters that are prohibited by the RFC.
Such devices can be added using their IP address, their sysName will be
written to the database. If the device is already in the database, then it
should be possible to find it, even if the name is unacceptable according
to RFC requirements.
* Additional search options for sysName have been added using the default
domain. This was needed to improve LLDP detection - a short name was used in
the PDU, and the full name with the domain was stored in the sysName field
in the database.
* modifies find_device_id
* reordering checks
* handling situations with duplicate sysName
* modifies find_device_id (fix style errors)
* Update functions.inc.php
Skip changing the high limit threshold to low limit threshold value when high limit threshold doesn't exist for a sensor. If low limit threshold value was set by discovery process or manually, the same value would be also set for high limit threshold.
* Update cisco-entity-sensor.inc.php
Skip invalid sensor threshold values, which some Cisco ASR devices (probably other families too) return.
* Add snmprec data for Cisco ASR9010
* Create iosxr_asr9010.josr
* Create iosxr_asr9010.json
* Delete iosxr_asr9010.josr
* Update iosxr_asr9010.json
* Update iosxr_asr9010.json
Co-authored-by: Tony Murray <murraytony@gmail.com>
Co-authored-by: PipoCanaja <38363551+PipoCanaja@users.noreply.github.com>
* Ping only device doesn't display
if os was set to something, ping os wasn't loaded and we try to get overview graphs from it.
* Fix snmp_disable device page load error
When other os is set.
* Revamp os setting loading
the only safe way to access is Config::getOsSetting()
* Remove getOsSetting fallback behavior
Most instances don't use it and it can have unexpected results Config::getOsSetting('blah', 'group') == 'librenms'
* refactor and remove unneeded load_os/loadOs calls now since getOsSetting automatically loads it.
* restore unix overview graphs, they are different
small cleanups
* fix
* Minor addition to find_device_id, such that we match LLDP hosts presenting with FQDN with devices where $hostname + $config['mydomain'] is a match.
This yields clickable links in the neighbor overview.
* Modified to comply with comments in code review
* Implement OS specific information discovery
That way it doesn't have to be fetched during polling
Also improve discovery process, os is only detected once, in the core module.
EXA is the test os, a couple improvements there.
* Use local variable, then unset it so we don't pollute.
* fix style issues
* test and other fixes
* attribute update fixes
* Update exa data, need new source data
* null missing "os" values
* fix ftos odd character
* fix ftos odd character
* only null for new style or we will reset to null every discovery
* Move device observer to own class
* Handle location, relocate event logging
* update exa e7-2 data
* update ird test data, apparently unicode is now working.
* update Linux ntc, now uses correct icon
* Only load all os on the web, also, we can't load existing the the database isn't connected.
* only for devices that have a location
* revert ftos test data apparently
* revert ird
* Migrate ironware sensor discovery from php to yaml.
* More sensors, add grouping.
* dynamic_discovery_get_value() becomes getValueFromData()
* Target a specific index with skip_values.
* Improve Brocade BGP session discovery/polling
This commit allows for the correct discovery of BGP sessions
with 32-bit ASNs, IPv6 neighbors using the BGP4V2-MIB which is
based on draft-ietf-idr-bgp4-mibv2-11 and also polls for IPv4
unicast received routes through the FOUNDRY-SN-BGP4-GROUP-MIB.
Copied most of the code from PR#8877 by @Mikeburke14, cleaned
up the code a little bit to match the normal LibreNMS style,
and fixed bgpPeers_cbgp discovery as well as polling for the
ipv4.unicast neighbors.
Note that older Brocade IronWare firmware versions are known
to have multiple defects relating to the BGP4V2-MIB which
might result in certain missing non-established neighbors.
Related vendor defect numbers:
- DEFECT000633962
-- Symptom: The OID bgp4V2PeerAdminStatus does not return the
correct value
-- Reported: NI 05.7.00
-- Resolved: NI 05.8.00g
- DEFECT000583319
-- Symptom: SNMP polling on bgp4V2PeerTable (OID brcdIp.3.5.1.1.2)
does not display all the BGP entries
-- Reported: NI 05.6.00
-- Resolved: NI 05.8.00e
- DEFECT000550309
-- Symptom: SNMP polling on bgp4V2PeerTable (OID brcdIp.3.5.1.1.2)
does not display the full information
-- Reported: NI 05.7.00
-- Resolved: NI 05.8.00c
* Add ironware CER & ICX platform test data.
* Re-add ironware.json compatible with current master branch.
* Device Cache
also some additional device related models
* attribs from cache
* replace common attribute functions
* remove legacy cache usage
tidy up some collection manipulation
remove some unused or single use functions
* cleanup some items
* always return a device, to prevent bugs
* clear device cache when testing after each test
* fix double assignment
* Clean up function to take advantage of null object
* add ability to discover percent warning on mempools discovery
* remove wierd charachters from json
* remove database defaults, add defaults for Linux and Vmware
* update db schema
* update test data
* adapt hrstorage mempools
* rebase
* do not discover dbm sensors on shutdown ports
* rename confusing name from $sensor_type to $sensor_class
* Revert "do not discover dbm sensors on shutdown ports"
This reverts commit 46963f746a.
* Default to null for group yaml discovery.
* Update test data for a154bda yaml group null fix.
* Changes to guessed limit functions for sensors.
Original behaviour
===================
The file `includes/discovery/functions.inc.php` contains
`sensor_limit_low()` and `sensor_limit()` which both attempt to
guess a sane value for sensors when no explicitly defined
low_limit or high_limit can be found during discovery.
Both switch control structures used in those two functions
have empty case statements which means that if one of those matches,
it's going to fall through and run the code for each subsequent
case until a `break` is reached.
For example, when we call `function sensor_low_limit(dbm, -13.036)`
it will return the value `-12.3842` instead of `null`. That is
because there will be a match at `case 'dbm':` which falls through
all the way to `case 'cooling':`, where it performs
`$limit = -13.036 * 0.95` before hitting a `break`.
Changed behaviour
===================
Removed `power_consumed` and `count` guessed low_limit and
high_limit, I personally added those sensor classes in PR #9471
when I didn't understand that a switch control structure has
fall-through behaviour so I can guarantee that guessing limits for
those is a mistake on my behalf. It should not be there, only
power_factor can have guessed limits. Apologies for the issue,
I'm still a beginning programmer!
Furthermore, I removed guessed high_limit values for `current`
and `power` because these are supposed to draw higher values as
more devices or components are installed on for example a PDU or
a chassis.
Finally, I removed guessed low_limit and high_limit for `dbm`
sensors, there is a much too large variance in power budget on
commercially available optical transceivers for there to be a
sensible window where you can guess these values.
* Documentation on adding sensor classes.
* Update test data - sensor limit changes @ 30212d2
* Dynamic entPhysicalIndex values for YamlDiscovery
* Use degree symbol when displaying temperature values
* Adjust SNMP options for new snmp_get_multi()
The OS polling module for mrv-od was using snmpget commands with
-Ovqs, rather than -OQUs, which meant that the equal sign was
stripped in the snmpget output. But that equal sign is now used
as the explode() delimiter so it broke the construction of the
returned array for the snmp_get_multi() function.
Additionally, I removed the NBS-CMMC-MIB:: prefix which is no
longer returned by snmp_get_multi() as part of the OID. Now,
the mrv-od.inc.php OS polling module is retrieving data from
positions in the array with actual content.
* Convert mrv-od to yaml, improve sensors discovery
Converted sensors discovery for mrv-od to yaml, retaining all
functionality for pre-cache, dbm, and temperature. Replaced specific
SFF-8472 Digital Diagnostics state sensors with generic ones, given that
we are now reading out detailed values through new dbm, current, voltage
sensors.
Reasoning: the generic Digital Diagnostics state sensors report state
diagsOk, or else the worst severity level measured among all of the
Digital Diagnostics values for that optical data point. You'd really
only want to set a generic "alarm" so the box can report that it
thinks something is wrong, whereafter a human can look at the graphs
and/or the CLI to draw their conclusions about the alarm. Otherwise,
things would quickly become too spammy as you are essentially duplicating
every sensor across both regular measurements and state measurements.
Further changes:
- Increase maximum number of detected PSUs from 4 to 8 per the MIB.
- State sensor to detect (in)sufficient power budget for all modules.
- Use skip_values to hide state sensors with the notSupported value.
- Use skip_values to hide sensors which are unsupported per the MIB,
signified by the device returning special values -1 or -2147483648.
- Add dBm, temperature "over" graphs to the mrv-od device header bar.
* Add mrv-od entity-physical support
MRV does not use the ENTITY-MIB data format, so we had to reconstruct
the inventory from their proprietary format using the following tables
from their NBS-CMMC-MIB:
- nbsCmmcChassisTable
- nbsCmmcSlotTable
- nbsCmmcPortTable
Additionally, since sensors didn't have their own ifindex in the
NBS-CMMC-MIB, I went ahead and appended the last OID digit to
the "containing" ifindex create a unique number. The same was
done for the sensors in the yaml-discovery.
* Test data for mrv-od, fix 2* pre-commit.php issues
* Fix entPhysicalIndex returning 0 instead of null
Some unit test breakage was caused by 62167ebcb which changed
the code to return 0 instead of null when {{ $index }} was
set as the entPhysicalIndex in the YamlDiscovery. So now we
detect if it returns some value which may be interpreted as
false, and if so we set null rather than 0.
* Automatic sensor limits are now optional. Set ['discovery']['sensors']['autolimit'] = false to disable.
* Changing new config variable name from discovery.sensors.autolimit to sensors.guess_limits
* Updated documentation: ['sensors']['guess_limits'] value added
PR #9546 has resulted in Platform being detected as
"Juniper Virtual Chassis Switch" when a set of devices
is stacked. Hence, no more possibility to see whether
it is for example an EX2300 or EX3400 virtual-chassis.
This commit falls back to using rewrite_junos_hardware()
if the "Juniper Virtual Chassis Switch" string is detected
in boxDescr, resulting in usable hardware data.
Caveat - it's possible to build a virtual-chassis of
multiple switch models, but only for higher end hardware:
https://www.juniper.net/documentation/en_US/junos/topics/concept/virtual-chassis-ex4200-overview.html#jd0e75
Example SNMP output:
mschmidt@nlrtm1-librenms1:~$ snmpwalk -v2c -cremoved -m JUNIPER-MIB -M /opt/librenms/mibs hostname jnxBoxDescr
JUNIPER-MIB::jnxBoxDescr.0 = STRING: Juniper Virtual Chassis Switch
Also reported previously via the community forums:
https://community.librenms.org/t/pr-9546-results-in-junos-platform-detection-quirks-in-combination-with-virtual-chassis/6537
* Fix some comment and documentation typos.
* Fix various entphysical page display issues.
- Resolve flickering during loading (missing liClosed for nested items).
- Clicking a sensor actually takes you to the matching graph now.
* Add a few nicecase() calls to clean up html page display.
* Create discover_entity_physical() function
- Add discover_entity_physical() function into includes/discovery/functions.inc.php
- This allows for an easy implementation of OS-specific entity-physical discovery.
- Update includes/discovery/entity-physical/entity-physical.inc.php to use the new function.
* Add power_consumed and power_factor sensors.
* Two new icons, make more entPhysical data visible.
* Pre-commit fix: blank line found at end of control structure.
* Add Schleifenbauer OS support.
* Now really fix the comment typo.
* Fix parsing mistakes.
* Add a generic count sensor.
* Make the Schleifenbauer discovery use count instead of state sensors.
* Don't place count sensor at the top, add sane limits for Schleifenbauer
* Finetuning the rrd_options, changing Schleifenbauer sensor names.
* Update schleifenbauer.svg
* optimize logo too
* add test data
* fix sensor value display (spaces break it)
* update entPhysicalIndex
* add group to sensor initial discovery and use dynamic_discovery_get_value template syntax on them
* spaces
* switching to YamlDiscovery::replaceValues
* testdata from ibmc
* testdata from nxos
* testdata from omnitron-iconverter
* testdata from vrp
* adapt discovery_schema to accept variables
* remove pattern
* Update discovery_schema.json