又遇SNMP

差点被SNMP给整疯了……

先是要从QoS中提取指定信息,要导出到SNMP。这看似简单但做起来相当麻烦,基本上就是左手拿着表格查对应的行和列,右手拿着QoS输出对比,然后脑子里要思考如何提取正则表达式。总共50多项,我是一项一项对出来的,哎,没办法,这根本不可能由机器完成(瞧瞧计算机有多笨!!不过它要是聪明到这种程度我们这些程序员就该失业啦~!)。

然后要考虑整个程序的构架,看似一个简单的程序,如果什么都不考虑直接去写肯定也可以,50多个函数嘛,可问题是怎么把代码组织得更和逻辑?这确实得下一番功夫。一开始我想出一个颇为简洁的构架,后来发现不行,经过修改最后居然保持住了简洁,纯属侥幸~~最后再看看整个程序的构架,依然简洁而又合理,先得意一下。;-)

最后测试时又出问题了,因为我几乎把SNMP忘干净了(Dr. Chen,我对不起你啊~~~!),然后翻怎么才能查询到对应的表项,满头大汗……不过最后终于完成了,还好,挑了几个经典的项放进去测试了一下,一切正常。不过,上头要求把50多项全部放进SNMP里测,我晕,难道我还得一个一个把它们手工输入到snmp配置文件里???岂有此理!我怒了,端出如下一行命令搞定一切:

sed -ne ‘/cmd_map/,/#EOF/ p’ qosscript | grep ‘=>’ | awk -F’=>’ ‘{print $1}’ | while read EN; do echo exec $EN /eos/qosscript $EN; done | sed -e ‘s/‘“‘“‘//g’ >> /etc/snmp/snmpd.conf

任务结束,世界安静了许多。:-)

另外记一下在写这个脚本时用到的一个技巧——用Perl正则表达式匹配多行文本:

local $/;
$output = <$fd> ;

然后就可以这么匹配了:

$output =~ m/class htb . root rate ([0-9]+)Kbit .nsSent ([0-9]+) bytes ([0-9]+) pkt (dropped ([0-9]+).ns*rate ([0-9]+)bit/m