SnmpKit.SnmpMgr.Engine (snmpkit v1.4.0)
High-performance streaming PDU engine with request routing and connection pooling.
This module provides the core infrastructure for handling large volumes of SNMP requests efficiently through connection pooling, request batching, and intelligent routing strategies.
Summary
Functions
Returns a specification to start this module under a supervisor.
Gets connection pool status.
Gets engine statistics and metrics.
Starts the streaming PDU engine.
Gracefully shuts down the engine.
Submits multiple requests as a batch.
Submits a request to the engine for processing.
Types
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec get_pool_status(GenServer.server()) :: [map()]
Gets connection pool status.
@spec get_stats(GenServer.server()) :: map()
Gets engine statistics and metrics.
@spec start_link(keyword()) :: GenServer.on_start()
Starts the streaming PDU engine.
Options
:pool_size- Number of UDP socket connections to maintain (default: 10):max_rps- Maximum requests per second (default: 100):request_timeout- Individual request timeout in ms (default: 5000):batch_size- Maximum requests per batch (default: 50):batch_timeout- Maximum time to wait for batch in ms (default: 100):circuit_breaker- Per-target circuit breaker, off unless configured.[threshold: n, recovery_timeout: ms]opens a target afternconsecutive failures (timeouts / send errors) and fails requests to it with{:error, :circuit_breaker_open}forrecovery_timeoutms (default 30_000) before letting one request through to probe it.
Examples
{:ok, engine} = SnmpKit.SnmpMgr.Engine.start_link(
pool_size: 20,
max_rps: 200,
batch_size: 100
)
@spec stop(GenServer.server()) :: :ok
Gracefully shuts down the engine.
@spec submit_batch(GenServer.server(), [request()], keyword()) :: {:ok, [result()]} | {:error, term()}
Submits multiple requests as a batch.
Parameters
engine- Engine PID or namerequests- List of request specification mapsopts- Batch options
Examples
requests = [
%{type: :get, target: "device1", oid: "sysDescr.0"},
%{type: :get, target: "device2", oid: "sysDescr.0"}
]
{:ok, batch_ref} = SnmpKit.SnmpMgr.Engine.submit_batch(engine, requests)
@spec submit_request(GenServer.server(), request(), keyword()) :: result()
Submits a request to the engine for processing.
Parameters
engine- Engine PID or namerequest- Request specification mapopts- Request options
Examples
request = %{
type: :get,
target: "192.168.1.1",
oid: "1.3.6.1.2.1.1.1.0",
community: "public"
}
{:ok, ref} = SnmpKit.SnmpMgr.Engine.submit_request(engine, request)