ProcessDisco.java 3.31 KB
package com.sitech.ismp.topo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import org.apache.log4j.Logger;

import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;
import com.sitech.topo.bean.HostProcess;
import com.sitech.topo.bean.Node;
import com.sitech.util.JSONUtil;

/**
 * 进程自动发现
 * @author linxc
 *
 */
public class ProcessDisco implements ProcessDiscoMBean {
	private Logger logger = Logger.getLogger(ProcessDisco.class);
	
	private Map<String, ProcessDiscoThread> threadMap = new HashMap<String, ProcessDiscoThread>();

	@SuppressWarnings("unchecked")
	public Vector<TblATO_KPIDETAIL> run(HashMap<String, String> params) {
		String scheduleId = params.get("TASK_ID");
		Map<String, Node> hostMap = new HashMap<String, Node>();
		
		for(String key : params.keySet()){
			if(key.startsWith("PROCESS_")){
				String id = key.substring(key.indexOf("_") + 1);
				
				String value = params.get(key);
				
				Map<String,String> param =  (Map<String, String>) JSONUtil.fromJSON(value);
				
				String ip = param.get("hostIp");
				String username = param.get("userName");
				String password = param.get("passWord");
				String cpuContain = param.get("cpuConst");
				String memContail = param.get("memConst");
				String keyword = param.get("keyWord");
				String log = param.get("NotePath");
				
				Node host = hostMap.get(ip + "_" + username);
				if(host == null){
					host = new Node();
					host.setLoginUser(username);
//					host.setLoginPwd(DES3.decrypt(password));
					host.setLoginPwd(password);
					host.setNodeIp(ip);
					host.setCpuContain(cpuContain);
					host.setMemContain(memContail);
					host.setProcKeyList(new ArrayList<HostProcess>());	
					hostMap.put(ip + "_" + username, host);
				}
				
				List<HostProcess> keyList =  host.getProcKeyList();
				
				
				
				keyList.add(new HostProcess(id, keyword, log));
			}
		}
		
		List<Node> hostList = new ArrayList<Node>();
		for(Node host :hostMap.values()){
			hostList.add(host);
		}
		ProcessDiscoThread thread = threadMap.get(scheduleId);
		if (thread == null || !thread.isRun()) {
			thread = new ProcessDiscoThread(scheduleId, hostList);
			threadMap.put(scheduleId, thread);
			new Thread(thread).start();
		} else {
			logger.info("Task[" + scheduleId + "] is Running, exit!");
		}
		return null;
	}
	
	public static void main(String[] args) {
		HashMap<String, String> params = new HashMap<String, String>();
		params.put("TASK_ID", "D7E36A1C474284FE1E0C2532157C50BB");
		params.put("PROCESS_4a6pUyesySsrThtj0hkFP", "{\"ID\":\"4a6pUyesySsrThtj0hkFP\",\"TASK_ID\":\"D7E36A1C474284FE1E0C2532157C50BB\",\"cfgId\":null,\"chargMan\":\"\",\"cpuConst\":\"10\",\"cpuRate\":null,\"cpuValue\":null,\"daemonKeyWord\":null,\"deviceName\":null,\"diskConst\":\"500\",\"envId\":null,\"hostIp\":\"172.21.1.100\",\"hostUserName\":null,\"isDaemon\":null,\"kbpCaption\":null,\"kbpClass\":null,\"keyWord\":\"=linxc\",\"logModTime\":null,\"logSize\":null,\"loginType\":\"22\",\"memConst\":\"10\",\"memRate\":null,\"memValue\":null,\"notePath\":\"\",\"passId\":\"9\",\"passWord\":\"bnmsapp2\",\"port\":\"ssh\",\"procDesc\":null,\"procNum\":null,\"processId\":null,\"processType\":null,\"processUser\":null,\"updateTime\":null,\"userName\":\"bnmsapp2\"}");
		
		ProcessDisco test = new ProcessDisco();
		test.run(params);
	}
}