AgentSyncService.java 11.9 KB
package com.sitech.ibnms.config.sync.service;

import java.sql.SQLException;
import java.text.ParseException;
import java.util.*;

import com.sitech.ibnms.config.sync.db.dao.UploadModuleDao;
import com.sitech.ibnms.util.Formater;
import com.sitech.ibnms.util.RandomGUID;

import org.apache.log4j.Logger;

import com.sitech.ibnms.config.sync.SyncType;
import com.sitech.ibnms.config.sync.db.dao.AgentSyncDao;
import com.sitech.ibnms.config.sync.db.dao.TbTuopuDiscoDao;
import com.sitech.ibnms.config.sync.db.domain.AgentDetail;
import com.sitech.ibnms.config.sync.db.domain.MQDetail;
import com.sitech.ibnms.config.sync.db.domain.TbCfgEvent;
import com.sitech.ibnms.config.sync.db.domain.TbTuopuDiscoTask;
import com.sitech.ibnms.config.sync.db.domain.TbTuopuDiscoTaskParam;
import com.sitech.ismp.messageObject.AgentSyncObject;
import com.sitech.ismp.messageObject.AlarmEventConfig;
import com.sitech.ismp.messageObject.AlarmEventConfigSyncObject;
import com.sitech.util.mq.MQSender;
import com.sitech.util.mq.MQSenderFactory;

public class AgentSyncService {
	private static Logger logger = Logger.getLogger("LOGGER");
	
	private AgentSyncDao dao = new AgentSyncDao();

    private UploadModuleDao umDao = new UploadModuleDao();

	public AgentDetail getAgentDetail(String agentId) {
		return dao.selectAgentDetail(agentId);
	}

	public List<MQDetail> getMqDetailList() {
        ResourceBundle bmcConfig = ResourceBundle.getBundle("config");
        String BMCServerType = bmcConfig.getString("BMCServerType");
		return dao.selectMqDetailList(BMCServerType);
	}

	public List<String> getAgentIdByUnitId(String unitId) {
		return dao.queryAgentIdByUnitId(unitId);
	}

	private MQSender getMqSender(String agentId) {
		MQDetail mq = dao.selectMqDetailByAgentId(agentId);
		return MQSenderFactory.createMQSender(mq.getIP(), mq.getPORT(),
				"Q_AGENT_" + agentId);
	}

    public void uploadModuleVerInfo(Map<String, String> moduleInfo){
        String buildTime = moduleInfo.get("BUILD_TIME");
        Date date = null;
        try {
            date = Formater.stringToDate(buildTime, "yyyyMMddHHmm");
            buildTime = Formater.datetimeToString(date,"yyyy-MM-dd HH:mm");
            moduleInfo.put("BUILD_TIME",buildTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //插入版本信息
        if(null!=moduleInfo){
            umDao.insertOrUpdateModuleVersionInfo(moduleInfo);
            logger.info("Successfully update ModuleVersionInfo!");
        }
    }

	public void syncAgentAll(String agentId) {
		MQSender mqSender = getMqSender(agentId);

		List<AgentSyncObject> collCfgList = new ArrayList<AgentSyncObject>();
		collCfgList.addAll(getDevCollList(agentId));
		collCfgList.addAll(getBusiCollList(agentId));

//		collCfgList.addAll(getCheckList(agentId));
//		collCfgList.addAll(getTopoDiscoList(agentId));
        if("Y".equals(SyncType.CAN_SYNC_LINKCOLL)){
            collCfgList.addAll(getLinkCollList(agentId));
    		collCfgList.addAll(getConSchList(agentId));
        }


		for (AgentSyncObject obj : collCfgList) {
			obj.setAgentId(agentId);
			obj.setType(SyncType.ADD);

			mqSender.writeData(obj);
		}
		logger.info("-- Save [" + collCfgList.size()
				+ "] COLL_SCHEDULE to temp tunnel " + "Q_AGENT_" + agentId);

		AlarmEventConfigSyncObject eventCfgs = getEventCfgList(agentId);
		List<AlarmEventConfig> list = eventCfgs.getConfigList();
		
		// 告警配置数量太多,拆分成多条发送
		if (list != null && list.size() > 0) {
			for (int i = 0; i < (list.size() / 50 + 1); i++) {
				List<AlarmEventConfig> tmp = new ArrayList<AlarmEventConfig>();
				for (int j = i * 50; j < (i + 1) * 50 && j < list.size(); j++) {
					tmp.add(list.get(j));
				}
				
				AlarmEventConfigSyncObject obj = new AlarmEventConfigSyncObject();
				obj.setAgentId(eventCfgs.getAgentId());
				obj.setSyncType(SyncType.UPDATE);
				obj.setConfigList(tmp);
				
				mqSender.writeData(obj);
			}
		}

		logger.info("-- Save [" + eventCfgs.getConfigList().size()
				+ "] EVENT_CONF to temp tunnel " + "Q_AGENT_" + agentId);

		mqSender.start();
	}

	/**
	 * 查询crontab调度(北京移动crontab调度平台)
	 * @param agentId
	 * @return
	 */
	private List<AgentSyncObject> getConSchList(String agentId) {
		List<AgentSyncObject> msgList = new ArrayList<AgentSyncObject>();
		try{
			List<HashMap<String, String>> list = dao.selectCronTask(agentId);
			for(HashMap<String, String> sch : list){
				AgentSyncObject obj = new AgentSyncObject();
				msgList.add(obj);
				
				obj.setAgentId(agentId);
	            obj.setScheduleId(sch.get("SCHEDULE_ID"));
	            obj.setMbeanId(sch.get("MBEAN_ID"));
	            obj.setClassName(sch.get("CLASS_NAME"));
	            obj.setObjectName(sch.get("OBJECT_NAME"));
	            obj.setCrontab(sch.get("CRONTAB"));
	            obj.setFunction(sch.get("FUNCTION"));
	            obj.setInterval(0);
	            obj.setRepeatCount(0);
	            obj.setAgentId(agentId);
	            obj.setType(SyncType.ADD);

	            String version = sch.get("CURR_VERSION");
	            String requestId = RandomGUID.getRandomGUID();
	            String triggerType = "AUTO";
	            obj.setRequestId(requestId);
	            obj.setOperateType(SyncType.OPERATE_TYPE_MODIFY);
	            obj.setTriggerType(triggerType);

	            HashMap<String,String> params = new HashMap<String, String>();
                params.put("UNIT_ID",getCronAgentUnitId(agentId));
	            params.put("SCHEDULE_ID", sch.get("SCHEDULE_ID"));
	            params.put("OPERATE_TYPE", SyncType.OPERATE_TYPE_MODIFY);
	            params.put("REQUEST_ID",requestId);
	            params.put("TRIGGER_TYPE",triggerType);
	            params.put("SHELL_CONTENT",getShellContent(version));
	            params.put("SHELL_NAME",sch.get("SCRIPT_NAME"));
                obj.setParams(params);

			}
		}catch(Exception e){
			logger.error("Exception while getConSchList:" + agentId, e);
		}
		
		return msgList;
	}

    private String getCronAgentUnitId(String agentId){
        String unitId = "";
        AgentDetail detail = dao.selectAgentDetail(agentId);
        if(null!=detail){
            unitId = detail.getUNIT_ID().trim();
        }
        return unitId;
    }

	private String getShellContent(String version) throws SQLException {
		List<String> list = dao.selectCronTaskContent(version);
		StringBuffer sb = new StringBuffer();
		for(String line : list){
			sb.append(line + "\n");
		}
		return sb.toString();
	}

	/**
	 * 平台采集配置增量同步
	 */
	public void syncAgentDevCollCfg(String agentId, String modelId,
			String deviceId, int syncType) {
		MQSender mqSender = getMqSender(agentId);
		List<AgentSyncObject> list = dao.selectDevCollCfgSpec(agentId, modelId,
				deviceId);

		for (AgentSyncObject obj : list) {
			obj.setAgentId(agentId);
			obj.setType(syncType);

			logger.info("-- Save [" + obj.toString()
					+ "] to temp tunnel " + "Q_AGENT_" + agentId);
			mqSender.writeData(obj);
		}

		mqSender.writeData(getEventCfgList(agentId));

		mqSender.start();
	}

	public void syncAgentBusiCollCfg(String agentId, String scheduleId,
			int syncType) {
		MQSender mqSender = getMqSender(agentId);

		List<AgentSyncObject> list = dao.selectBusiCollCfgSpec(agentId,
				scheduleId);
		for (AgentSyncObject obj : list) {
			obj.setAgentId(agentId);
			obj.setType(syncType);
			mqSender.writeData(obj);
		}

		mqSender.writeData(getEventCfgList(agentId));

		mqSender.start();
	}

	public void syncAgentCheckCfg(String agentId, int syncType) {
		MQSender mqSender = getMqSender(agentId);
		List<AgentSyncObject> list = dao.selectCheckCfgSpec(agentId);
		for (AgentSyncObject obj : list) {
			obj.setAgentId(agentId);
			obj.setType(syncType);
			mqSender.writeData(obj);
		}

		mqSender.writeData(getEventCfgList(agentId));

		mqSender.start();
	}

	public void syncTopoDiscoTask(AgentSyncObject obj) {
		MQSender mqSender = getMqSender(obj.getAgentId());

		mqSender.writeData(obj);

		mqSender.start();
	}

	public void syncAgentEventCfg(TbCfgEvent tbCfgEvent, int syncType) {
		List<TbCfgEvent> tbCfgEventList = new ArrayList<TbCfgEvent>();
		tbCfgEventList.add(tbCfgEvent);

		String extUnitId = tbCfgEvent.getEXT_UNIT_ID();
		List<String> agentIdList = dao.queryAgentIdByUnitId(extUnitId);

		for (String agentId : agentIdList) {
			MQSender mqSender = getMqSender(agentId);
			AlarmEventConfigSyncObject jmsOjbect = getEventSyncObject(agentId,
					syncType, tbCfgEventList);

			mqSender.writeData(jmsOjbect);

			mqSender.start();
		}
	}

	public void syncAgentEventCfg(String agentId, int syncType,
			List<TbCfgEvent> eventList) {
		AlarmEventConfigSyncObject jmsOjbect = getEventSyncObject(agentId,
				syncType, eventList);

		MQSender mqSender = getMqSender(agentId);
		mqSender.writeData(jmsOjbect);

		mqSender.start();
	}

	private AlarmEventConfigSyncObject getEventSyncObject(String agentId,
			int type, List<TbCfgEvent> tbCfgEventList) {
		AlarmEventConfigSyncObject obj = new AlarmEventConfigSyncObject();
		obj.setAgentId(agentId);
		obj.setSyncType(type);
		List<AlarmEventConfig> list = new ArrayList<AlarmEventConfig>();
		obj.setConfigList(list);

		for (TbCfgEvent elem : tbCfgEventList) {
			AlarmEventConfig config = new AlarmEventConfig();
			String guid = elem.getGUID();
			String kpiId = elem.getKPI_ID();
			String unitId = elem.getUNIT_ID();
			String expression = elem.getEXPRESSION() == null ? "" : elem
					.getEXPRESSION();
			String expression1 = elem.getEXPRESSION1() == null ? "" : elem
					.getEXPRESSION1();
			String expression2 = elem.getEXPRESSION2() == null ? "" : elem
					.getEXPRESSION2();
			String expression3 = elem.getEXPRESSION3() == null ? "" : elem
					.getEXPRESSION3();
			String expression4 = elem.getEXPRESSION4() == null ? "" : elem
					.getEXPRESSION4();
			String expression5 = elem.getEXPRESSION5() == null ? "" : elem
					.getEXPRESSION5();
			String expression6 = elem.getEXPRESSION6() == null ? "" : elem
					.getEXPRESSION6();
			int enable = Integer.parseInt(elem.getENABLE());
			String extUnitId = elem.getEXT_UNIT_ID() == null ? "" : elem
					.getEXT_UNIT_ID();

			config.setGuid(guid);
			config.setKpiId(kpiId);
			config.setUnitId(unitId);
			config.setExpression(expression);
			config.setExpression1(expression1);
			config.setExpression2(expression2);
			config.setExpression3(expression3);
			config.setExpression4(expression4);
			config.setExpression5(expression5);
			config.setExpression6(expression6);
			config.setEnable(enable);
			config.setExtUnitId(extUnitId);

			list.add(config);
		}
		return obj;
	}

	private AlarmEventConfigSyncObject getEventCfgList(String agentId) {
		return dao.selectEventCfgList(agentId);
	}

	private List<AgentSyncObject> getDevCollList(String agentId) {
		return dao.selectDevCollList(agentId);
	}

	private List<AgentSyncObject> getBusiCollList(String agentId) {
		return dao.selectBusiCollList(agentId);
	}

    private List<AgentSyncObject> getLinkCollList(String agentId) {
        return dao.selectLinkCollList(agentId);
    }



	public List<AgentSyncObject> getTopoDiscoList(String agentId) {
		List<AgentSyncObject> result = new ArrayList<AgentSyncObject>();

		List<TbTuopuDiscoTask> list = new TbTuopuDiscoDao()
				.selectTopoDiscoTaskList(agentId);

		if (list == null || list.size() == 0) {
			return result;
		}

		for (TbTuopuDiscoTask task : list) {
			AgentSyncObject obj = new AgentSyncObject();

			String taskId = task.getTASK_ID();

			obj.setAgentId(agentId);
			obj.setScheduleId(taskId);
			obj.setMbeanId(task.getMBEAN_ID());
			obj.setClassName(task.getCLASS_NAME());
			obj.setObjectName(task.getOBJECT_NAME());
			obj.setCrontab(task.getCRONTABTODO());
			obj.setFunction(task.getFUNCTION());
			obj.setRepeatCount(-1);
			obj.setParams(new HashMap<String, String>());

			Map<String, String> params = obj.getParams();
			List<TbTuopuDiscoTaskParam> paramList = new TbTuopuDiscoDao()
					.findDiscoTaskParamById(taskId);
			for (TbTuopuDiscoTaskParam param : paramList) {
				params.put(param.getPARAM_NAME(), param.getPARAM_VALUE());
			}

			result.add(obj);
		}

		return result;
	}
}