使用apache velocity,我正在对网络设备执行SNMP轮询以获取已接收的数据包。目标是获得每秒接收的数据包(PPS),但网络设备仅返回累积值。
所以我的计划是每秒运行一次snmp投票,我可以从新值中减去旧值以获得PPS。
我找不到任何睡眠或等待功能的apache速度,可以将轮询延迟一秒。
以下是我的脚本供参考。
#device($defensePro, 'type=defensePro', 'lazyConnect=true')
#param($output, 'type=string', 'direction=out')
#set($dp = $defensePro.readAllBeans('RsACCStatEntry'))
#result('text/text')
#foreach($x in $dp)
#if($x.id.toString().equals('RECEIVED'))
#set($id = $x.id)
#set($value = $x.value)
$date.get('H:m:s') Poll $velocityCount: $id $value
#end
#end
#end
输出
18:33:53 Poll 1: RECEIVED 18878707
如果有apache速度的睡眠功能或任何其他达到预期效果的方式,有人可以告诉我吗
答案 0 :(得分:0)
我不确定这是正确的方法,但Velocity可以拨打java methods
添加方法(例如,对你的defensePro)
public void sleep() { Thread.sleep(1000) }
从模板
调用它$defensePro.sleep();
中找到了一个非常古老的答案
Thread.sleep应该可以工作。它会暂停给定的当前线程 时间量
答案 1 :(得分:0)
感谢您的回复,以下为我工作
#device($defensePro, 'type=defensePro', 'lazyConnect=true')
#param($output, 'type=string', 'direction=out')
#set($dp = $defensePro.readAllBeans('RsACCStatEntry'))
#macro(sleepX, $seconds)
#set($duration = $seconds * 1000)
#set($class = $class.inspect('java.lang.Thread'))
$class.type.sleep($duration)
#end
#foreach($i in [1..6])
#foreach($x in $dp)
#if($x.id.toString().equals('RECEIVED'))
#set($id = $x.id)
#set($value = $x.value)
$date.get('H:m:s') Poll $i: $id $value
#sleepX(1)
#end #end #end
示例输出
17:4:10 Poll 1: RECEIVED 0
17:4:12 Poll 2: RECEIVED 0
17:4:13 Poll 3: RECEIVED 0
17:4:14 Poll 4: RECEIVED 0
17:4:15 Poll 5: RECEIVED 0
17:4:16 Poll 6: RECEIVED 0