elixir-snmp
Have you tried to integrate SNMP in your application but afraid of OTP
snmp documentation ? elixir-snmp may
be the answer.
Installation
The package can be installed by adding elixir_snmp to your list of dependencies in mix.exs :
def deps do
[
{:elixir_snmp, "~> 0.1.0"}
]
endThe docs can be found at https://hexdocs.pm/elixir_snmp.
Quickstart
elixir_snmp provides DSL and macros for easily:
- Instrumenting MIBs, ie creates functions that map MIB variables accesses to elixir code;
- Describing SNMP agent and its configuration.
Instrumenting MIB
- Instrument a MIB with generic (mnesia) functions:
defmodule MyMib do
use Snmp.Mib,
name: "MY-MIB",
instrumentation: Snmp.Instrumentation.Generic
end- Instrument a MIB with your own functions (see Definition of Instrumentation Functions for signature):
defmodule MyMib do
use Snmp.Mib,
name: "MY-MIB"
def my_variable(:get), do: {:value, "value"}
def my_rw_variable(:get), do: {:value, "value"}
def my_rw_variable(:set, val), do: :noError
endSee Snmp.Mib documentation for advanced instructions.
Defining Agent
defmodule Agent do
use Snmp.Agent
# Mandatory MIBs
mib MyApp.Mib.Standard
mib MyApp.Mib.Framework
# Application MIBs
mib MyMib
# VACM model
view :public do
include [1, 3, 6, 1, 2, 1]
end
view :private do
include [1, 3, 6]
end
access :public,
versions: [:v1, :v2c, :usm],
level: :noAuthNoPriv,
read_view: :public
access :secure,
versions: [:usm],
level: :authPriv,
read_view: :private,
write_view: :private,
notify_view: :private
endThen, in your application env, defines some users:
config :my_app, Agent,
versions: [:v1, :v2, :v3],
port: "SNMP_PORT" |> System.get_env("4000") |> String.to_integer(),
transports: ["127.0.0.1"],
security: [
[user: "public", access: :public]
[user: "admin", password: "adminpassword", access: [:public, :secure]]
]See Snmp.Agent for advanced Agent DSL usage and configuration.