/*
|
* 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.controller;
|
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
import com.alibaba.csp.sentinel.util.StringUtil;
|
import com.alibaba.csp.sentinel.command.vo.NodeVo;
|
|
import com.alibaba.csp.sentinel.dashboard.domain.ResourceTreeNode;
|
import com.alibaba.csp.sentinel.dashboard.client.SentinelApiClient;
|
import com.alibaba.csp.sentinel.dashboard.domain.Result;
|
import com.alibaba.csp.sentinel.dashboard.domain.vo.ResourceVo;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
/**
|
* @author Carpenter Lee
|
*/
|
@RestController
|
@RequestMapping(value = "/resource")
|
public class ResourceController {
|
|
private static Logger logger = LoggerFactory.getLogger(ResourceController.class);
|
|
@Autowired
|
private SentinelApiClient httpFetcher;
|
|
/**
|
* Fetch real time statistics info of the machine.
|
*
|
* @param ip ip to fetch
|
* @param port port of the ip
|
* @param type one of [root, default, cluster], 'root' means fetching from tree root node, 'default' means
|
* fetching from tree default node, 'cluster' means fetching from cluster node.
|
* @param searchKey key to search
|
* @return node statistics info.
|
*/
|
@GetMapping("/machineResource.json")
|
public Result<List<ResourceVo>> fetchResourceChainListOfMachine(String ip, Integer port, String type,
|
String searchKey) {
|
if (StringUtil.isEmpty(ip) || port == null) {
|
return Result.ofFail(-1, "invalid param, give ip, port");
|
}
|
final String ROOT = "root";
|
final String DEFAULT = "default";
|
if (StringUtil.isEmpty(type)) {
|
type = ROOT;
|
}
|
if (ROOT.equalsIgnoreCase(type) || DEFAULT.equalsIgnoreCase(type)) {
|
List<NodeVo> nodeVos = httpFetcher.fetchResourceOfMachine(ip, port, type);
|
if (nodeVos == null) {
|
return Result.ofSuccess(null);
|
}
|
ResourceTreeNode treeNode = ResourceTreeNode.fromNodeVoList(nodeVos);
|
treeNode.searchIgnoreCase(searchKey);
|
return Result.ofSuccess(ResourceVo.fromResourceTreeNode(treeNode));
|
} else {
|
// Normal (cluster node).
|
List<NodeVo> nodeVos = httpFetcher.fetchClusterNodeOfMachine(ip, port, true);
|
if (nodeVos == null) {
|
return Result.ofSuccess(null);
|
}
|
if (StringUtil.isNotEmpty(searchKey)) {
|
nodeVos = nodeVos.stream().filter(node -> node.getResource()
|
.toLowerCase().contains(searchKey.toLowerCase()))
|
.collect(Collectors.toList());
|
}
|
return Result.ofSuccess(ResourceVo.fromNodeVoList(nodeVos));
|
}
|
}
|
}
|