package com.nms.server.service;

import java.util.Date;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.nms.server.bean.SetInfo;
import com.nms.server.common.Common;
import com.nms.server.common.Constants;
import com.nms.server.thread.monitor.MonitorManagerThread;

public class ThreadService{
	private static Logger logger = Logger.getLogger(ThreadService.class);
	public ThreadService(){

	}

	/**
	 * 更新主动监测线程操作
	 * 关闭旧线程，创建新线程
	 * @time Sep 12, 2012-4:44:03 PM
	 * @param nm
	 * @param info
	 */
	public void updateThread(SetInfo info) {
		
		//- 计算启动后第一次检测时间 默认即时启动
		long initialDelay = Constants.HANDSHANK_DELAY_TIME;
		if(info.getPlanCheckTime()!=null){
			initialDelay = info.getPlanCheckTime().longValue() - (new Date().getTime());
			initialDelay = initialDelay > 0l ? initialDelay : 0l;
		}
		
		//- 设置名称
		String processIden = StringUtils.isEmpty(info.getProcessIden())?"":info.getProcessIden();
		
		//-线程名称
		String runnableName = info.getCheckTypeName()+"_"+processIden;
		
		//- 撤销旧监测线程
		Common.cancelRunnableAtOnce(runnableName);	//撤销 旧任务
		
		//- 监测设置状态无效 结束操作--对于变更，如果修改为无效，则不再启动新监测
		if(StringUtils.isEmpty(info.getCheckState()) || "0".equals(info.getCheckState())){//0无效；1有效
			return;
		}
		
		//- 监测方式 非主动 结束操作--为了严谨
		if(StringUtils.isEmpty(info.getCheckWay()) || "1".equals(info.getCheckWay())){//0主动，1被动
			return;
		}
		logger.info("主动监测设置启动 "+runnableName);
		
		//- 创建线程
		Runnable runnable = new MonitorManagerThread(runnableName,info);
		
		//- 添加到 定时线程池
		ScheduledFuture<?> future = Common.scheduled.scheduleAtFixedRate(runnable, initialDelay/1000, info.getCheckGap()*60, TimeUnit.SECONDS);
		//- 注册线程
		Common.registRunnable(runnableName, future);
		
	}
	
	
}
