erlang, snmp manager для мониторинга трапов (notifications/snmp traps)

Написал на основе Erlang-овского snmp manager-а и примера 
snmp-4.21.4/examples/ex2/snmp_ex2_manager.erl
простенькое приложение для мониторинга устройств по SNMP (v1, v2). Устройства должны быть настроены на отправку трапов на сервер, на котором запущено это приложение.
В качестве БД для сохранения полученных трапов от оборудования используется PostgreSQL.
(*модуль для сохранения в БД нужно будет переписать, т.к. сейчас на каждый трап открывается соединение с БД, осуществляется запись и соединение закрывается.)

Код на Erlang:
http://github.com/avico/snmp_mon
Web-морда на Python/Django:
http://github.com/avico/snmpview


==================================================
Конфиги в manager/conf характерны для snmpm (как минимум там нужно прописать свои параметры - IP, port и абсолютные пути к manager/conf и manager/db).
В etc/ расположены конф. файлы:
etc/ne.conf
содержит список узлов (в терминологии эрланговской реализации snmpm - это agent-ы), которые настроены на отправку трапов. Пример и формат см. в самом конфиг. файле. Чтобы агенты регистрировались при старте приложения - их нужно указать в конфиге manager/conf/agents.conf. В данной реализации агенты (из etc/ne.conf) регистрируются динамически по мере получения трапов от узлов.
etc/unknown_traps.conf
если по каким-либо причинам не получается скомпилировать MIB файл (в директории mib находятся и загружаются при старте заранее скомпилированные командой erlc или в shell командой snmpc:compile/1 MIB файлы), или, например, нужно добавить только определенный(е) трап(ы) и нет желания компилировать и подгружать MIB, можно сформировать файл etc/unknown_traps.conf (пример формата см. ниже).
Для этого будем использовать MIB converter:
http://www.ibr.cs.tu-bs.de/projects/libsmi/smidump.html
(online MIB converter: http://www.ibr.cs.tu-bs.de/bin/smitools.cgi)
Пример использования:
smidump -k -f identifiers mibs/SUN-HW-TRAP-MIB.mib > \
SUN-HW-TRAP-MIB.mib.identifiers 2>report.txt

Скрипт mib_notif_to_erl_term.sh с помощью библиотеки libsmi и программы 
smidump преобразует MIB файл в формат вида
MIB_name Object_name Type OID
например:
SUN-HW-TRAP-MIB sunHwTrapFanSpeedNonCritThresholdExceeded notification 1.3.6.1.4.1.42.2.175.103.2.0.23 SUN-HW-TRAP-MIB sunHwTrapFanSpeedOk notification 1.3.6.1.4.1.42.2.175.103.2.0.24 SUN-HW-TRAP-MIB sunHwTrapSensorFatalThresholdExceeded notification 1.3.6.1.4.1.42.2.175.103.2.0.25
и затем преобразует в формат, понятный эрланговскому file:consult 
(формат файла etc/unknown_traps.conf), например:
{[1,3,6,1,4,1,42,2,175,103,2,0,23], sunHwTrapFanSpeedNonCritThresholdExceeded}. {[1,3,6,1,4,1,42,2,175,103,2,0,24], sunHwTrapFanSpeedOk}. {[1,3,6,1,4,1,42,2,175,103,2,0,25], sunHwTrapSensorFatalThresholdExceeded}.
("выдергивается" только тип notification ("| grep notification" в скрипте)).
Сам скрипт:

#!/bin/bash if [ -n "$1" ] then smidump -k -f identifiers $1 |grep notification \
|awk '{ system("echo \"{[\""$4"\"],\"|tr \".\" \",\" | tr \"\\n\" \" \"");print $2 "}."}' fi

Использование:
./mib_notif_to_erl_term.sh mib/SUN-HW-TRAP-MIB.mib >> etc/unknown_traps.conf
или для нескольких файлов с использованием bash for:
for i in `ls mib/SUN-*`; do ./mib_notif_to_erl_term.sh $i; done >> etc/unknown_traps.conf