elixir-snmp

CircleCI

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"}
]
end

The docs can be found at https://hexdocs.pm/elixir_snmp.

Quickstart

elixir_snmp provides DSL and macros for easily:

Instrumenting MIB

defmodule MyMib do
use Snmp.Mib,
name: "MY-MIB",
instrumentation: Snmp.Instrumentation.Generic
end
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
end

See 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
end

Then, 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.