SNMPトラップ受信を実践に向けて(1)

先日作成した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 を格納する部分は、次回。。