package org.infosec.ismp.servicecheck;
import org.infosec.ismp.model.poller.PollStatus;
import org.infosec.ismp.model.poller.ServiceMonitor;
import org.infosec.ismp.util.ThreadCategory;
import org.infosec.ismp.util.scheduler.ReadyRunnable;
import org.infosec.ismp.util.scheduler.Schedule;
public class ServiceCheckService implements ReadyRunnable {
private boolean isReady = true;
private Schedule schedule;
private ServiceCheckMessageSend messageSend;
private ServiceCheckModel model;
public ServiceCheckMessageSend getMessageSend() {
return messageSend;
}
public void setMessageSend(ServiceCheckMessageSend messageSend) {
this.messageSend = messageSend;
}
public ServiceCheckModel getModel() {
return model;
}
public void setModel(ServiceCheckModel model) {
this.model = model;
}
public Schedule getSchedule() {
return schedule;
}
public void setSchedule(Schedule schedule) {
this.schedule = schedule;
}
public void setReady(boolean isReady) {
this.isReady = isReady;
}
public boolean isReady() {
return isReady;
}
public void run() {
// System.out.println("++++++++++++++++++++++++++");
doServiceCheck();
log().debug(
"ServiceCheck消息发送MQ完毕!nodeId:" + model.getNodeid() + "URL:"
+ model.getIpAddr());
}
/**
* 服务检测主方法
*/
private void doServiceCheck()
{
ServiceMonitor monitor = model.getMonitor();
monitor.initialize(model.getParameters());
ServiceCheckMonitoredService svc = new ServiceCheckMonitoredService(model.getIpAddr());
PollStatus status = monitor.poll(svc, model.getParameters());
// System.out.println("status is : " + status);
System.out
.println("response time is : " + status.getResponseTime());
model.setPingStatus(status.getStatusName());
if("Up".equalsIgnoreCase(status.getStatusName()))//如果状态正常,则获取检测返回时间
{
model.setResponseTime(status.getResponseTime());
}else
{
model.setResponseTime(-1);
}
try {
// System.out.println("nodeid:"+model.getNodeid());
// System.out.println("ipaddr:"+model.getIpAddr());
// System.out.println("serviceType:"+model.getType());
// System.out.println("status:"+model.getPingStatus());
// System.out.println("responseTime:"+model.getResponseTime());
messageSend.springSend(model);
log().debug(
"nodeId:" + model.getNodeid() + "URL:"
+ model.getIpAddr() + "发功MQ队列消息成功!");
} catch (Exception e) {
log().fatal(
"ServiceCheckService类doServiceCheck()方法发送MQ信息失败!nodeId:"
+ model.getNodeid() + "URL:"
+ model.getIpAddr(), e);
}
}
/**
* 将该服务放入调度池中
*/
public void schedule() {
if (schedule == null)
throw new IllegalStateException(
"Cannot schedule a service whose schedule is set to null");
schedule.schedule();
log().debug(
"ServiceCheck该服务放入调度池中!nodeId:" + model.getNodeid() + "URL:"
+ model.getIpAddr());
}
/**
* 取消该服务
*/
public void delete() {
if (schedule == null)
throw new IllegalStateException(
"Cannot unschedule a service whose schedule is set to null");
schedule.unschedule();
log().debug(
"ServiceCheck取消该服务!nodeId:" + model.getNodeid() + "URL:"
+ model.getIpAddr());
}
private ThreadCategory log() {
return ThreadCategory.getInstance(getClass());
}
}