/** * Project: doris.admin.service.common-0.1.0-SNAPSHOT * * File Created at 2011-5-24 * $Id$ * * Copyright 1999-2100 Alibaba.com Corporation Limited. * All rights reserved. * * This software is the confidential and proprietary information of * Alibaba Company. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Alibaba.com. */ package com.alibaba.doris.admin.service.failover.node.check; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.alibaba.doris.admin.dataobject.PhysicalNodeDO; import com.alibaba.doris.admin.service.common.migrate.manager.PostMigrateStatusManager; import com.alibaba.doris.admin.service.common.migrate.status.MigrateStatusWatcher; import com.alibaba.doris.admin.service.common.migrate.status.PostMigrateStatus; import com.alibaba.doris.admin.service.common.node.NodesManager; import com.alibaba.doris.common.NodeRouteStatus; import com.alibaba.doris.common.StoreNode; /** * TODO Comment of NodeStatusManager * * @author mian.hem */ public class NodeStatusManager { private static final Log log = LogFactory.getLog(NodeStatusManager.class); private static final NodeStatusManager instance = new NodeStatusManager(); private MigrateStatusWatcher migrateStatusWatcher = MigrateStatusWatcher .getInstance(); private NodesManager nodesManager = NodesManager.getInstance(); private NodeCheckManager nodeCheckManager = NodeCheckManager.getInstance(); private NodeStatusManager() { super(); } public static NodeStatusManager getInstance() { return instance; } public NodeAdminStatusWrapper getNodeAdminStatus(String nodePhysicalId) { NodeAdminStatusWrapper nodeAdminStatus = new NodeAdminStatusWrapper(); nodeAdminStatus.setMigrateStatus(migrateStatusWatcher.getMigerateStatus(nodePhysicalId)); nodeAdminStatus.setMigrateStatusDetail(migrateStatusWatcher .getMigerateStatusDetail(nodePhysicalId)); nodeAdminStatus.setMigrateProgress(migrateStatusWatcher.getMigerateProgress(nodePhysicalId)); PhysicalNodeDO pNode = NodesManager.getInstance().getNode(nodePhysicalId); NodeRouteStatus routeStatus = NodeRouteStatus.getTypeByValue(pNode.getStatus()); nodeAdminStatus.setNodeRouteStatus(routeStatus); Map<String, NodeHealth> allNodeHealth = nodeCheckManager.getNodeHealthStatuses(); NodeHealth nodeHealth = allNodeHealth.get(nodePhysicalId); if (nodeHealth == null) { nodeHealth = nodeCheckManager.checkNode(nodePhysicalId); } nodeAdminStatus.setNodeHealth(nodeHealth); StoreNode node = nodesManager.getStoreNode(nodePhysicalId); nodeAdminStatus.setStoreNode(node); PostMigrateStatusManager postMigrateStatus = PostMigrateStatusManager.getInstance(); PostMigrateStatus status = postMigrateStatus.getPostMigrateStatus(nodePhysicalId); if (status != null) { if (log.isDebugEnabled()) { log.debug("in the progress:clean up." + status + "pid=" +nodePhysicalId); } nodeAdminStatus.setMigrateStatus(status.getStatus()); nodeAdminStatus.setMigrateStatusDetail(status.toString()); nodeAdminStatus.setMigrateProgress(status.getSchedule()); } return nodeAdminStatus; } public List<NodeAdminStatusWrapper> getAllNodeAdminStatus() { List<NodeAdminStatusWrapper> nodeAdminStatuses = new ArrayList<NodeAdminStatusWrapper>(); Collection<PhysicalNodeDO> allNodes = nodesManager.getAllNodeList(); for (PhysicalNodeDO pNode : allNodes) { NodeAdminStatusWrapper statusWrapper = getNodeAdminStatus(pNode.getPhysicalId()); nodeAdminStatuses.add(statusWrapper); } return nodeAdminStatuses; } }