package com.nms.server.thread;

import java.io.File;
import java.io.IOException;
import org.apache.log4j.Logger;
import com.nms.server.common.Common;
import com.nms.server.common.Constants;
import com.nms.server.dao.CommonDao;
import com.nms.server.service.ChangeService;
import com.nms.server.util.CommandExecUtil;

public class ResetServerThread implements Runnable{
	private  Logger logger = Logger.getLogger(ResetServerThread.class);
	private Integer model = -1;		//缺省为-1 
	
	public ResetServerThread(Integer model){
		this.model = model==null?this.model:model;
	}
	
	@Override
	public void run() {

//		Thread.currentThread().setName("程序整理线程");
		Thread.currentThread().setName("Program Manage Thread");
		CommonDao dao = null;
		try {
			dao = new CommonDao();
			ChangeService service = new ChangeService(dao);
			switch (model) {
			case 1:		//更新自身参数信息
				//NMSServer参数获取失败后，结束程序初始化
				
				//- 系统信息初始化（监测类型和表、数据字段、告警、ip主机映射等）
				if(!Constants.flag_init){//新安装DC：DC没在web的管理范围内，初始化失败
					logger.info("启动失败，再次启动");
					Common.service.submit(new InitServerThread());
				}else{
					logger.info("启动成功，仅更新参数");
					service.initServerParams();//web端修改DC信息(管理范围修改)时执行
					new InitServerThread().initCommonInfo(dao);
					logger.info("参数更新完成");
				}
				/*业务重新梳理
				 * List<NodeModel> list = service.getAllEffectiveNodeInfo();
				if(list!= null && list.size()>0){
					Iterator<NodeModel> ite = list.iterator();
					while(ite.hasNext()){
						NodeModel model = ite.next();
						Common.runChangeRunnable(new SSLClient(model.getNodeIp(), Constants.SSL_CLIENT_PORT,"char:reInit","init"));
					}
				}*/
			
				break;
//			case 2://重启DC
//				String os = System.getProperty("os.name");
//				if (os.startsWith("Windows")) {//重启服务
////					String path = new File(Constants.SYSTEM_PATH).getParent()+File.separator+Constants.COMMON_TEMP_DIR+File.separator+Constants.COMMON_RUNTIME_PID_FILE;
////					String processName = "DataController.exe";
////					String path = System.getProperty("user.dir")+"/"+processName;
////					String serverName = "DataController";
//					
//					logger.info("web端超周期无监测数据，开始开始重启DC。。。");
//					
//					//不行------自己把自己杀了，就没法把自己重启了
////					if(!CommandExecUtil.killProcess(processName)){/* 删除已存在的进程 */
////						logger.info("程序停止失败");
////					}else if(CommandExecUtil.processRunningCheck(processName)){/* 校验程序是否已停止 */
////						logger.info("程序停止失败,请手动关闭进程["+processName+"]");
////					}else if(!CommandExecUtil.startNetService(serverName)){/* 启动进程 */
////						logger.info("程序启动失败");
////					}else if(CommandExecUtil.processRunningCheck(processName)){/* 校验程序是否已启动 */
////						logger.info("程序启动成功");
////					}else{
////						logger.info("程序启动失败");
////					}
//					
//				} else if (os.startsWith("Linux")) {//执行restart.sh脚本
//					String path =  new File(System.getProperty("user.dir")).getParentFile().getAbsolutePath()+"/shell/restart.sh";
//					logger.info("linux下，重启DC的restart.sh脚本路径为："+path+"，开始重启DC。。。");
//					CommandExecUtil.execLinuxCmd(path);
//				} else {
//					throw new IOException("unknown operating system: " + os);
//				}
//				break;
			case -1:	//预留操作
				//执行系统清理 （监测结果集合、任务结果集合、重启线程池，重启通讯）
				System.gc();
				service.deleteEventRecordOldInfo();//超过4天的变更就删除：NC没启动，就一直执行不成功；(或者给服务器节点发送只有交换机才有的)
				logger.info("执行gc操作");
				break;
			default:
				logger.warn("Indeterminate mode parameter, no operation");
				return;
			}
		
		} catch (Exception e) {
			logger.error("NmsServer initialization failure",e);
		}finally{
			if(dao!=null){
				dao.close();
				dao=null;
			}
			logger.debug("启动程序dao已关闭");
		}
	}
}
