在javaeye看到一篇文章:小小网管,其中部分代码项目中要用到,提取出来,进行了整合,网元状态监控的原理是周期性的ping该网元,ping不通,则上报告警,产生告警后,该网元则会展现不同的告警级别,之后如果ping通,则进行告警清楚;主要代码如下:
Thread linkCheckThread = new Thread() {
@Override
public void run() {
while (true) {
try {
//System.out.println("进入网元监控");
Thread.sleep(3000);
for (int i = 0; i < list.size(); i++) {
TemporaryNode tn = (TemporaryNode) list.get(i);
final String ipaddress = tn.getNodeIP();
System.out.println("ip:" + ipaddress);
final boolean pingOK = ping(ipaddress);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (!pingOK) {
Alarm alarm = new Alarm();
alarm.setElementID(ipaddress);
alarm
.setProbableCause(AlarmProbableCause.LINE_INTERFACE_FAILURE);
System.out.println("机器连接失败,产生告警");
alarm
.setAlarmSeverity(AlarmSeverity.CRITICAL);
network.getDataBox().getAlarmModel()
.addAlarm(alarm);
} else {
System.out.println("告警清楚....");
Collection alarms = network
.getDataBox()
.getAlarmModel()
.getAlarmsByElement(
network
.getDataBox()
.getElementByID(
ipaddress));
for (Iterator it = alarms.iterator(); it
.hasNext();) {
network.getDataBox()
.getAlarmModel()
.removeAlarm(
(Alarm) it.next());
}
}
}
});
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
};
linkCheckThread.start();
以下是ping的方法:
/**
* 使用InetAddress的isReachable方法实现ping
*
* @param ip
* @return
*/
public static boolean ping(String ip) {
try {
InetAddress ipaddress = InetAddress.getByName(ip);
return ipaddress.isReachable(2000);
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}