package org.infosec.ismp.manager.ping;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.infosec.ismp.manager.model.PingResultEntity;
import org.infosec.ismp.util.ThreadCategory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class pingMessageListener implements MessageListener {
private final static SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
private PingResultService m_pingResultService;
private PingLocator m_pingLocator;
@Autowired(required = true)
public void setPingResultService(PingResultService pingResultService) {
m_pingResultService = pingResultService;
}
@Autowired(required = true)
public void setPingLocator(PingLocator pingLocator) {
m_pingLocator = pingLocator;
}
@Override
public void onMessage(Message message) {
MapMessage map = (MapMessage) message;
try {
String nodeid = map.getString("nodeid");
String ipAddr = map.getString("ipAddr");
Long responseTime = map.getLong("responseTime");
String pingFlag = map.getString("pingFlag");
String pingTime = map.getString("pingTime");
String domain = m_pingLocator.getDomainByNodeid(nodeid);
if (domain != null) {
PingResultEntity entity = new PingResultEntity();
entity.setNodeid(nodeid);
entity.setIpaddr(ipAddr);
entity.setResponseTime(responseTime);
entity.setStatus(pingFlag);
try {
Date time = format.parse(pingTime);
entity.setTime(time);
} catch (Throwable e) {
e.printStackTrace();
}
m_pingResultService.savePingResult(entity);
m_pingLocator.setPingResult(nodeid, entity);
}else{
log().warn("该ping结果没有找到对应的域,抛弃,该nodeid:"+nodeid);
}
} catch (JMSException e) {
e.printStackTrace();
} catch (Throwable t) {
t.printStackTrace();
}
}
ThreadCategory log(){
return ThreadCategory.getInstance(getClass());
}
}