/*
|
* 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<ResourceTreeNode> children = new ArrayList<>();
|
|
public static ResourceTreeNode fromNodeVoList(List<NodeVo> nodeVos) {
|
if (nodeVos == null || nodeVos.isEmpty()) {
|
return null;
|
}
|
ResourceTreeNode root = null;
|
Map<String, ResourceTreeNode> 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<ResourceTreeNode> getChildren() {
|
return children;
|
}
|
|
public void setChildren(List<ResourceTreeNode> children) {
|
this.children = children;
|
}
|
}
|