package org.infosec.ismp.manager.scm;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.infosec.ismp.manager.agent.servicecheck.ServiceCheckLocator;
import org.infosec.ismp.manager.model.ServiceCheckResultEntity;
import org.infosec.ismp.manager.rmi.scm.model.PollStatus;
import org.infosec.ismp.manager.rmi.scm.service.ServiceMonitor;
import org.infosec.ismp.util.ThreadCategory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author geilivable
* @date 2010-12-7 上午09:56:14
*
* 服务检测默认实现类,客户端可通过此实现类来注册一个检测服务。
* 如:HTTP SERVICE,POP3 SERVICE.
* <code>Status</code> 用于存储服务检测响应结果集,返回给调用的客户端程序。
*/
@Component
public class ServiceMonitorImpl implements ServiceMonitor {
private ServiceCheckLocator serviceCheckLocator;
@Autowired(required=true)
public void setServiceCheckLocator(ServiceCheckLocator serviceCheckLocator) {
this.serviceCheckLocator = serviceCheckLocator;
}
@Override
public void removeServiceMonitor(String nodeid) {
if(log().isDebugEnabled())
log().info("sart MonitorService remove args:"+nodeid);
serviceCheckLocator.removeServiceCheckNode(nodeid);
log().debug("ServiceCheck注册成功!");
log().debug("nodeid:"+nodeid);
}
public ThreadCategory log(){
return ThreadCategory.getInstance(getClass());
}
@Override
public PollStatus getServiceMonitorState(String nodeId) {
ServiceCheckResultEntity entity = serviceCheckLocator.getServiceCheckResult(nodeId);
if(entity==null){
return PollStatus.unknown();
}else{
if ("Up".equalsIgnoreCase(entity.getServiceCheckStatus())){
return PollStatus.available((double)entity.getResponseTime());
}else{
return PollStatus.unavailable();
}
}
}
@Override
public void pauseServiceMonitor(String nodeId) {
// TODO Auto-generated method stub
}
@Override
public void registerServiceMonitor(String domain, String nodeid,
String serviceType, String ipAddr, long interval,
Map<String, String> parameters) {
if(log().isDebugEnabled())
log().info("sart MonitorService remove args:"+nodeid);
serviceCheckLocator.addServiceCheckNode(domain, nodeid, serviceType, ipAddr, interval, parameters);
log().debug("ServiceCheck注册成功!");
log().debug("domain:"+domain);
log().debug("nodeid:"+nodeid);
log().debug("serviceType:"+serviceType);
log().debug("ipAddr:"+ipAddr);
log().debug("interval:"+interval);
Set<String> keyset = parameters.keySet();
int i =1;
for (Iterator<String> iterator = keyset.iterator(); iterator.hasNext();) {
String key = iterator.next();
log().debug("parameters "+i+" key:"+key );
log().debug("parameters "+i+" value:"+parameters.get(key) );
i++;
}
}
}