/* * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.csp.sentinel.dashboard.domain; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.alibaba.csp.sentinel.command.vo.NodeVo; /** * @author leyou */ public class ResourceTreeNode { private String id; private String parentId; private String resource; private Integer threadNum; private Long passQps; private Long blockQps; private Long totalQps; private Long averageRt; private Long successQps; private Long exceptionQps; private Long oneMinutePass; private Long oneMinuteBlock; private Long oneMinuteException; private Long oneMinuteTotal; private boolean visible = true; private List children = new ArrayList<>(); public static ResourceTreeNode fromNodeVoList(List nodeVos) { if (nodeVos == null || nodeVos.isEmpty()) { return null; } ResourceTreeNode root = null; Map map = new HashMap<>(); for (NodeVo vo : nodeVos) { ResourceTreeNode node = fromNodeVo(vo); map.put(node.id, node); // real root if (node.parentId == null || node.parentId.isEmpty()) { root = node; } else if (map.containsKey(node.parentId)) { map.get(node.parentId).children.add(node); } else { // impossible } } return root; } public static ResourceTreeNode fromNodeVo(NodeVo vo) { ResourceTreeNode node = new ResourceTreeNode(); node.id = vo.getId(); node.parentId = vo.getParentId(); node.resource = vo.getResource(); node.threadNum = vo.getThreadNum(); node.passQps = vo.getPassQps(); node.blockQps = vo.getBlockQps(); node.totalQps = vo.getTotalQps(); node.averageRt = vo.getAverageRt(); node.successQps = vo.getSuccessQps(); node.exceptionQps = vo.getExceptionQps(); node.oneMinutePass = vo.getOneMinutePass(); node.oneMinuteBlock = vo.getOneMinuteBlock(); node.oneMinuteException = vo.getOneMinuteException(); node.oneMinuteTotal = vo.getOneMinuteTotal(); return node; } public void searchIgnoreCase(String searchKey) { search(this, searchKey); } /** * This node is visible only when searchKey matches this.resource or at least * one of this's children is visible */ private boolean search(ResourceTreeNode node, String searchKey) { // empty matches all if (searchKey == null || searchKey.isEmpty() || node.resource.toLowerCase().contains(searchKey.toLowerCase())) { node.visible = true; } else { node.visible = false; } boolean found = false; for (ResourceTreeNode c : node.children) { found |= search(c, searchKey); } node.visible |= found; return node.visible; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } public String getResource() { return resource; } public void setResource(String resource) { this.resource = resource; } public Integer getThreadNum() { return threadNum; } public void setThreadNum(Integer threadNum) { this.threadNum = threadNum; } public Long getPassQps() { return passQps; } public void setPassQps(Long passQps) { this.passQps = passQps; } public Long getBlockQps() { return blockQps; } public void setBlockQps(Long blockQps) { this.blockQps = blockQps; } public Long getTotalQps() { return totalQps; } public void setTotalQps(Long totalQps) { this.totalQps = totalQps; } public Long getAverageRt() { return averageRt; } public void setAverageRt(Long averageRt) { this.averageRt = averageRt; } public Long getSuccessQps() { return successQps; } public void setSuccessQps(Long successQps) { this.successQps = successQps; } public Long getExceptionQps() { return exceptionQps; } public void setExceptionQps(Long exceptionQps) { this.exceptionQps = exceptionQps; } public Long getOneMinutePass() { return oneMinutePass; } public void setOneMinutePass(Long oneMinutePass) { this.oneMinutePass = oneMinutePass; } public Long getOneMinuteBlock() { return oneMinuteBlock; } public void setOneMinuteBlock(Long oneMinuteBlock) { this.oneMinuteBlock = oneMinuteBlock; } public Long getOneMinuteException() { return oneMinuteException; } public void setOneMinuteException(Long oneMinuteException) { this.oneMinuteException = oneMinuteException; } public Long getOneMinuteTotal() { return oneMinuteTotal; } public void setOneMinuteTotal(Long oneMinuteTotal) { this.oneMinuteTotal = oneMinuteTotal; } public boolean isVisible() { return visible; } public void setVisible(boolean visible) { this.visible = visible; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } }