package com.alibaba.doris.admin.web.configer.module.screen; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import com.alibaba.citrus.turbine.Context; import com.alibaba.doris.admin.core.AdminServiceLocator; import com.alibaba.doris.admin.dataobject.PhysicalNodeDO; import com.alibaba.doris.admin.service.AdminNodeService; import com.alibaba.doris.admin.service.failover.node.check.NodeCheckManager; import com.alibaba.doris.admin.service.failover.node.check.NodeHealth; import com.alibaba.doris.admin.web.configer.support.NodeForView; import com.alibaba.doris.admin.web.configer.util.SequenceUtil; import com.alibaba.doris.admin.web.configer.util.WebConstant; import com.alibaba.doris.common.StoreNode; import com.alibaba.doris.common.StoreNodeSequenceEnum; /** * @project :Doris * @author : len.liu * @datetime : 2011-6-2 下午04:54:00 * @version :0.1 * @Modification: */ public class NewNodesPreview { private AdminNodeService adminNodeService = null; private NodeCheckManager nodeCheckManager = null; private AdminNodeService getAdminNodeService() { if (adminNodeService == null) { adminNodeService = AdminServiceLocator.getAdminNodeService(); } return adminNodeService; } private NodeCheckManager getNodeCheckManager() { if (nodeCheckManager == null) { nodeCheckManager = NodeCheckManager.getInstance(); } return nodeCheckManager; } /** * @param context */ public void execute(Context context, HttpServletRequest request) { String isPreview = request.getParameter("isPreview"); String nodes = request.getParameter("nodes"); Map<String, List<NodeForView>> nodemap = new LinkedHashMap<String, List<NodeForView>>(); boolean hasNodeNG = false; if ("0".equals(isPreview) && StringUtils.isNotBlank(nodes)) { for (String pair : nodes.split(",")) { String[] sequeceAndNode = pair.split("#"); PhysicalNodeDO nodeDo = getAdminNodeService().queryPhysicalNodeByPhysicalId( sequeceAndNode[0]); StoreNode sn = new StoreNode(); sn.setIp(nodeDo.getIp()); sn.setLogicId(nodeDo.getLogicalId()); sn.setPhId(nodeDo.getPhysicalId()); sn.setPort(nodeDo.getPort()); StoreNodeSequenceEnum seq = StoreNodeSequenceEnum.getTypeByValue(Integer .parseInt(sequeceAndNode[1])); sn.setSequence(seq); NodeHealth nodeHealth = getNodeCheckManager().checkNode(sn, true); NodeForView view = new NodeForView(); view.setPhysicalNodeDO(nodeDo); //临时借用这个字段, 只是显示用 if (nodeHealth == NodeHealth.OK) { view.setHealthStatus("OK"); } else { //NG view.setHealthStatus("NG"); hasNodeNG = true; } nodeDo.setSerialId(Integer.parseInt(sequeceAndNode[1])); if (nodemap.get(sequeceAndNode[1]) == null) { List<NodeForView> viewList = new ArrayList<NodeForView>(); viewList.add(view); nodemap.put(sequeceAndNode[1], viewList); } else { nodemap.get(sequeceAndNode[1]).add(view); } } } Map<Integer, String> allSequenceMap = SequenceUtil.getAllSequenceMap(); context.put("nodes", nodes); context.put("nodemap", nodemap); context.put("isPreview", "1"); context.put("hasNodeNG", hasNodeNG); if (hasNodeNG) { context.put("errorResult", "有状态为NG的节点,请检查"); } context.put(WebConstant.ALL_SEQUENCE_IDS_KEY, allSequenceMap); } }