如何解决Groovy后处理snmpget结果?
我在groovy中有一个脚本,它实际上是在轮询某些VLAN STP的最新拓扑更改。如果我执行普通的SNMP退出脚本,它将以滴答为单位返回值:
但是,当我在Groovy上执行完全相同的snmpget时,它将以可读格式返回结果:
我正在使用一个监视工具,该工具仅期望以刻度为单位的值(而不是实际的可读时间)。因此,我想了解为什么要对结果进行“处理”。
MyScript:
import com.santaba.agent.groovyapi.expect.Expect;
import com.santaba.agent.groovyapi.snmp.Snmp;
import com.santaba.agent.groovyapi.http.*;
import com.santaba.agent.groovyapi.jmx.*;
import org.xbill.DNS.*;
import com.santaba.agent.groovyapi.snmp.Snmp;
//array to store the interfaces
array_vlans = [];
//OID variables
stpTCN=".1.3.6.1.2.1.17.2.3.0" //get the actual TCN for the STP (for each VLAN)
vlan_indexes = ".1.3.6.1.4.1.9.9.46.1.3.1.1.3" //CISCO VLAN MIB
//device variables
deviceIP = hostProps.get("system.hostname");
snmpCommunity_raw = hostProps.get("snmp.community");
snmpVersion = hostProps.get("snmp.version");
interfaceWalk = Snmp.walk(deviceIP,vlan_indexes)
interfaceWalk.eachLine() {
line ->
vlanType= line.minus(vlan_indexes + ".").split(" = ")[1] //get the content of the specific OID
vlanNumber_raw= line.minus(vlan_indexes + ".").split(" = ")[0] //get the actual extra OID portion that was added (since that's the actual VLAN ID)
vlanNumber = vlanNumber_raw.replace("1.",""); //remove the WEIRD '1.' that get's added to the OID
if(vlanType != "1"){
//doNothing (since we only care about type==1 [ethernet])
}else{
//DEBUG print
/*println "####"
println "VLAN Type -> " +vlanType
println "VLAN Number -> " +vlanNumber*/
array_vlans.push(vlanNumber); //add VLANS(s) to the array
}
}
//iterate over the VLAN array & do the SNMP GET per vlan (to retrieve the TopologyChange metric)
array_vlans.each(){
vlanID=it
snmpCommunity=snmpCommunity_raw+"@"+vlanID
getVlan_TCN= Snmp.get(deviceIP,snmpCommunity,snmpVersion,stpTCN);
println vlanID+".LastTopologyChange="+getVlan_TCN
}
感谢帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。