package com.sohu.cache.machine.impl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Strings; import com.sohu.cache.dao.MachineDao; import com.sohu.cache.dao.MachineStatsDao; import com.sohu.cache.dao.ServerStatusDao; import com.sohu.cache.entity.MachineInfo; import com.sohu.cache.machine.MachineCenter; import com.sohu.cache.machine.MachineDeployCenter; /** * 机器部署相关 * @author leifu * changed @Date 2016-4-24 * @Time 下午5:07:30 */ public class MachineDeployCenterImpl implements MachineDeployCenter { private Logger logger = LoggerFactory.getLogger(MachineDeployCenterImpl.class); private MachineDao machineDao; private MachineCenter machineCenter; private MachineStatsDao machineStatsDao; private ServerStatusDao serverStatusDao; /** * 将机器加入资源池并统计、监控 * * @param machineInfo * @return */ @Override public boolean addMachine(MachineInfo machineInfo) { boolean success = true; if (machineInfo == null || Strings.isNullOrEmpty(machineInfo.getIp())) { logger.error("machineInfo is null or ip is valid."); return false; } // 将机器信息保存到db中 try { machineDao.saveMachineInfo(machineInfo); } catch (Exception e) { logger.error("save machineInfo: {} to db error.", machineInfo.toString(), e); return false; } // 为机器添加统计和监控的定时任务 try { MachineInfo thisMachine = machineDao.getMachineInfoByIp(machineInfo.getIp()); if (thisMachine != null) { long hostId = thisMachine.getId(); String ip = thisMachine.getIp(); if (!machineCenter.deployMachineCollection(hostId, ip)) { logger.error("deploy machine collection error, machineInfo: {}", thisMachine.toString()); success = false; } if (!machineCenter.deployMachineMonitor(hostId, ip)) { logger.error("deploy machine monitor error, machineInfo: {}", thisMachine.toString()); success = false; } if(thisMachine.getCollect() == 1) { if (!machineCenter.deployServerCollection(hostId, ip)) { logger.error("deploy server monitor error, machineInfo: {}", thisMachine.toString()); success = false; } } else { if (!machineCenter.unDeployServerCollection(hostId, ip)) { logger.error("undeploy server monitor error, machineInfo: {}", thisMachine.toString()); success = false; } } } } catch (Exception e) { logger.error("query machineInfo from db error, ip: {}", machineInfo.getIp(), e); } if (success) { logger.info("save and deploy machine ok, machineInfo: {}", machineInfo.toString()); } return success; } /** * 删除机器,并删除相关的定时任务 * * @param machineInfo * @return */ @Override public boolean removeMachine(MachineInfo machineInfo) { if (machineInfo == null || Strings.isNullOrEmpty(machineInfo.getIp())) { logger.warn("machineInfo is null or ip is empty."); return false; } String machineIp = machineInfo.getIp(); //从quartz中删除相关的定时任务 try { MachineInfo thisMachine = machineDao.getMachineInfoByIp(machineIp); long hostId = thisMachine.getId(); if (!machineCenter.unDeployMachineCollection(hostId, machineIp)) { logger.error("remove trigger for machine error: {}", thisMachine.toString()); return false; } if (!machineCenter.unDeployMachineMonitor(hostId, machineIp)) { logger.error("remove trigger for machine monitor error: {}", thisMachine.toString()); return false; } if (!machineCenter.unDeployServerCollection(hostId, machineIp)) { logger.error("remove trigger for server monitor error: {}", thisMachine.toString()); return false; } } catch (Exception e) { logger.error("query machineInfo from db error: {}", machineInfo.toString()); } // 从db中删除machine和相关统计信息 try { machineDao.removeMachineInfoByIp(machineIp); machineStatsDao.deleteMachineStatsByIp(machineIp); serverStatusDao.deleteServerInfo(machineIp); } catch (Exception e) { logger.error("remove machineInfo from db error, machineInfo: {}", machineInfo.toString(), e); return false; } logger.info("remove and undeploy machine ok: {}", machineInfo.toString()); return true; } public void setMachineDao(MachineDao machineDao) { this.machineDao = machineDao; } public void setMachineCenter(MachineCenter machineCenter) { this.machineCenter = machineCenter; } public void setMachineStatsDao(MachineStatsDao machineStatsDao) { this.machineStatsDao = machineStatsDao; } public void setServerStatusDao(ServerStatusDao serverStatusDao) { this.serverStatusDao = serverStatusDao; } }