We have mastered the various ways of querying the MIB view
in our get, getnext, getbulk,
and fetch examples. But in real life, the aggressive
SNMP polling may impose a great burden on the equipment's CPU and
may lead to service degradation or, even, the loss
of connectivity. Likely, Gufo SNMP offers the easy way to limit
the rate of the outgoing requests to adjust the impact.
First, we need to create SnmpSession object which wraps the client's session.
The SnmpSession may be used as an instance directly or operated as async context manager
with the async with clause. When used as a context manager,
the client automatically closes all connections on the exit of context,
so its lifetime is defined explicitly.
We can use allow_bulk parameter to enable bulk requests whenever the protocol
version allows it or to deny bulk requests in any case. See fetch examples
for details.
The only difference from fetch example is the limit_rps option which
urges Gufo SNMP to limit outgoing requests. The parameter holds the limit of the
outgoing requests per second. In out example we will send no more than 10 requests
per second while iterating over the MIB. If you need to send every request in several
seconds, use the fractions. i.e. 0.25 means one request per each 4 seconds.
SnmpSession constructor offers lots of configuration variables for fine-tuning. Refer to the
SnmpSession reference
for further details. In our example, we set the agent's address and SNMP community
to the given values.
We use SnmpSession.fetch() function to iterate within base OID just like the
SnmpSession.getnext() and SnmpSession.getbulk().
The function is an asynchronous
iterator returning pairs of (OID, value), so we use async for construction to iterate over the values.
See SnmpSession.getbulk() reference
for further details.