先日作成したCometHashMap 一定時間経過で削除されるマップを利用して
SNMPトラップ受信マップを作る。
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import jp.jsuite.util.comet.CometHashMap;
import jp.jsuite.util.comet.CometMapper;
/**
* トラップ受信マップ
*/
public final class TrapRecvMap extends CometHashMap{
private static final long serialVersionUID = 1L;
private static TrapRecvMap inst;
@Inject
private TrapRecvMap(long checkTime,CometMapper mapper){
super(checkTime,mapper);
}
public final static synchronized TrapRecvMap bind(){
if (inst==null){
Injector injector = Guice.createInjector(new AbstractModule(){
@Override
protected void configure(){
/****************************************************
* 受信チェック時間間隔と、
* トラップ受信時アクション処理 を ここで指定する!
*/
// 受信チェック時間間隔
binder().bind(long.class).toInstance(10 * 1000L);
// トラップ受信時アクション処理
binder().bind(CometMapper.class).to(TrapRecvAction.class);
}
}
);
inst = injector.getInstance(TrapRecvMap.class);
}
return inst;
}
@SuppressWarnings("unchecked")
public Object put(String key,TrapInfo value){
return super.put(key,value);
}
}
------------------------------------------------------
import jp.jsuite.util.comet.CometMapper;
import org.apache.log4j.Logger;
/**
* トラップ受信時アクション処理
*/
public class TrapRecvAction implements CometMapper{
private Logger logger;
public TrapRecvAction(){
this.logger = Logger.getLogger(this.getClass());
}
@Override
public void checkIn(Object k,Object v){
String key = (String)k;
TrapInfo info = (TrapInfo)v;
this.logger.info("## key = "+key+"\t### time : "+info.recvTime+" IP="+info.targetIP
+" type="+info.genericType+" no="+info.number);
// 受信状況など。。
TrapRecvMap map = TrapRecvMap.bind();
this.logger.debug("#### map size = "+map.size());
for(Object o : map.keySet()){
String keyStr = (String)o;
this.logger.debug("###### key="+keyStr+" value="+map.get(keyStr));
}
}
}
-----------------------------------------------------
import java.util.Date;
import jp.jsuite.util.DateUtils;
/**
* トラップ受信情報
*/
public class TrapInfo{
public String recvTime;
public String targetIP;
public int genericType;
public int number; // trap no.
public TrapInfo(long recvtime,String targetIP,int genericType,int number){
this.recvTime = DateUtils.dateToString(new Date(recvtime),DateUtils.YMDHMS_FORM+".SSS");
this.targetIP = targetIP;
this.genericType = genericType;
this.number = number;
}
@Override
public String toString(){
StringBuffer sb = new StringBuffer("TrapInfo[");
sb.append("recvTime="+this.recvTime);
sb.append(" targetIP="+this.targetIP);
sb.append(" genericType="+this.genericType);
sb.append(" number="+this.number+"]");
return sb.toString();
}
}
---------------------------------------------------
今日はここまで。。SNMPトラップ受信して
TrapRecvMap にTrapInfo を格納する部分は、次回。。