/* * 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> 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 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 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)); } } }