This commit is contained in:
wangliwen 2022-08-25 14:00:11 +08:00
parent a87bb573e9
commit f4939b34f4
1 changed files with 44 additions and 51 deletions

View File

@ -1,8 +1,6 @@
package io.renren.modules.gateway.controller; package io.renren.modules.gateway.controller;
import cn.hutool.core.net.URLEncoder;
import cn.hutool.core.util.URLUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.renren.modules.gateway.service.MonitorServiceV2; import io.renren.modules.gateway.service.MonitorServiceV2;
@ -15,19 +13,16 @@ import io.renren.modules.sys.dao.SysDeptDao;
import io.renren.modules.sys.entity.SysDeptEntity; import io.renren.modules.sys.entity.SysDeptEntity;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*; import org.springframework.http.HttpEntity;
import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Controller; import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.HttpMessageConverterExtractor;
import org.springframework.web.client.RequestCallback;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
@ -66,14 +61,14 @@ public class MonitorController {
@Autowired @Autowired
private MonitorServiceV2 monitorServiceV2; private MonitorServiceV2 monitorServiceV2;
// @RequestMapping("/metrics/**") // @RequestMapping("/metrics/**")
void forward(HttpServletRequest request, HttpServletResponse response) throws IOException { void forward(HttpServletRequest request, HttpServletResponse response) throws IOException {
//类似nginx匹配前缀 //类似nginx匹配前缀
String location = "/juapi"; String location = "/juapi";
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
requestURI = requestURI.replace( context_path,""); requestURI = requestURI.replace(context_path, "");
String url = gatewayDomain + location + requestURI ; String url = gatewayDomain + location + requestURI;
if (StringUtils.isNotBlank(request.getQueryString())) { if (StringUtils.isNotBlank(request.getQueryString())) {
url = url + "?" + request.getQueryString(); url = url + "?" + request.getQueryString();
} }
@ -81,7 +76,7 @@ public class MonitorController {
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
Enumeration<String> headerNames = request.getHeaderNames(); Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){ while (headerNames.hasMoreElements()) {
String element = headerNames.nextElement(); String element = headerNames.nextElement();
headers.add(element, request.getHeader(element)); headers.add(element, request.getHeader(element));
} }
@ -89,17 +84,17 @@ public class MonitorController {
InputStream in = request.getInputStream(); InputStream in = request.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = 1024; int len = 1024;
byte tmp [] = new byte[len]; byte tmp[] = new byte[len];
int i ; int i;
while((i=in.read(tmp, 0, len))>0){ while ((i = in.read(tmp, 0, len)) > 0) {
baos.write(tmp, 0, i); baos.write(tmp, 0, i);
} }
HttpEntity<byte[]> httpEntity = null; HttpEntity<byte[]> httpEntity = null;
if (baos.size() > 0){ if (baos.size() > 0) {
httpEntity = new HttpEntity(baos.toByteArray(), headers); httpEntity = new HttpEntity(baos.toByteArray(), headers);
}else { } else {
httpEntity = new HttpEntity(headers); httpEntity = new HttpEntity(headers);
} }
@ -118,13 +113,13 @@ public class MonitorController {
@GetMapping("/metrics/**") @GetMapping("/metrics/**")
@ApiOperation("前端访问图片请求转发") @ApiOperation("前端访问图片请求转发")
public void ford(HttpServletRequest request, HttpServletResponse response){ public void ford(HttpServletRequest request, HttpServletResponse response) {
String location = "/juapi"; String location = "/juapi";
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
requestURI = requestURI.replace( context_path,""); requestURI = requestURI.replace(context_path, "");
String fordUrl = gatewayDomain + location + requestURI ; String fordUrl = gatewayDomain + location + requestURI;
if (StringUtils.isNotBlank(request.getQueryString())) { if (StringUtils.isNotBlank(request.getQueryString())) {
fordUrl = fordUrl + "?" + request.getQueryString(); fordUrl = fordUrl + "?" + request.getQueryString();
} }
@ -157,34 +152,34 @@ public class MonitorController {
len = inputStream.read(buffer); len = inputStream.read(buffer);
} }
inputStream.close(); inputStream.close();
}catch(Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@GetMapping("/gateway-monitor/queryGroupByAbility") @GetMapping("/gateway-monitor/queryGroupByAbility")
@ApiOperation("统计数据按能力归集") @ApiOperation("统计数据按能力归集")
public Result queryGroupByAbility(String query, String time){ public Result queryGroupByAbility(String query, String time) {
String url = gatewayDomain + "/juapi/metrics/api/v1/query?query={query}" + "&time=" + time; String url = gatewayDomain + "/juapi/metrics/api/v1/query?query={query}" + "&time=" + time;
ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query); ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query);
HashMap body = entity.getBody(); HashMap body = entity.getBody();
HashMap data = (HashMap) body.get("data"); HashMap data = (HashMap) body.get("data");
if (data != null){ if (data != null) {
List<HashMap> result = (List) data.get("result"); List<HashMap> result = (List) data.get("result");
ArrayList<Map> results = new ArrayList<>(); ArrayList<Map> results = new ArrayList<>();
ArrayList<Long> abilityIds = new ArrayList<>(); ArrayList<Long> abilityIds = new ArrayList<>();
for (HashMap hashMap : result) { for (HashMap hashMap : result) {
Map metric = (Map) hashMap.get("metric"); Map metric = (Map) hashMap.get("metric");
if (metric != null && metric.get("groupInfo") != null){ if (metric != null && metric.get("groupInfo") != null) {
List value = (List) hashMap.get("value"); List value = (List) hashMap.get("value");
if (value.size() == 2){ if (value.size() == 2) {
metric.put("count", value.get(1)); metric.put("count", value.get(1));
try{ try {
Long groupInfo = Long.valueOf((String) metric.get("groupInfo")); Long groupInfo = Long.valueOf((String) metric.get("groupInfo"));
abilityIds.add(groupInfo); abilityIds.add(groupInfo);
metric.put("groupInfo", groupInfo); metric.put("groupInfo", groupInfo);
results.add(metric); results.add(metric);
}catch (Exception e) { } catch (Exception e) {
//忽略 //忽略
} }
@ -211,9 +206,9 @@ public class MonitorController {
map.put("type", resourceEntity.getType()); map.put("type", resourceEntity.getType());
map.put("apiUrl", resourceEntity.getApiUrl()); map.put("apiUrl", resourceEntity.getApiUrl());
LambdaQueryWrapper<AttrEntity> attrQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<AttrEntity> attrQueryWrapper = new LambdaQueryWrapper<>();
attrQueryWrapper.select(AttrEntity::getAttrType,AttrEntity::getAttrValue) attrQueryWrapper.select(AttrEntity::getAttrType, AttrEntity::getAttrValue)
.eq(AttrEntity::getDataResourceId,groupInfo) .eq(AttrEntity::getDataResourceId, groupInfo)
.eq(AttrEntity::getAttrType,"服务商名") .eq(AttrEntity::getAttrType, "服务商名")
.eq(AttrEntity::getDelFlag, 0); .eq(AttrEntity::getDelFlag, 0);
AttrEntity attrEntity = attrDao.selectOne(attrQueryWrapper); AttrEntity attrEntity = attrDao.selectOne(attrQueryWrapper);
if (attrEntity.getAttrValue() != null) { if (attrEntity.getAttrValue() != null) {
@ -234,27 +229,27 @@ public class MonitorController {
@GetMapping("/gateway-monitor/queryGroupByDepartment") @GetMapping("/gateway-monitor/queryGroupByDepartment")
@ApiOperation("统计数据按部门归集") @ApiOperation("统计数据按部门归集")
public Result queryGroupByDepartment(String query, String time){ public Result queryGroupByDepartment(String query, String time) {
String url = gatewayDomain + "/juapi/metrics/api/v1/query?query={query}" + "&time=" + time; String url = gatewayDomain + "/juapi/metrics/api/v1/query?query={query}" + "&time=" + time;
ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query); ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query);
HashMap body = entity.getBody(); HashMap body = entity.getBody();
HashMap data = (HashMap) body.get("data"); HashMap data = (HashMap) body.get("data");
if (data != null){ if (data != null) {
List<HashMap> result = (List) data.get("result"); List<HashMap> result = (List) data.get("result");
ArrayList<Map> results = new ArrayList<>(); ArrayList<Map> results = new ArrayList<>();
ArrayList<Long> abilityIds = new ArrayList<>(); ArrayList<Long> abilityIds = new ArrayList<>();
for (HashMap hashMap : result) { for (HashMap hashMap : result) {
Map metric = (Map) hashMap.get("metric"); Map metric = (Map) hashMap.get("metric");
if (metric != null && metric.get("deptInfo") != null){ if (metric != null && metric.get("deptInfo") != null) {
List value = (List) hashMap.get("value"); List value = (List) hashMap.get("value");
if (value.size() == 2){ if (value.size() == 2) {
metric.put("count", value.get(1)); metric.put("count", value.get(1));
try { try {
Long groupInfo = Long.valueOf((String) metric.get("deptInfo")); Long groupInfo = Long.valueOf((String) metric.get("deptInfo"));
abilityIds.add(groupInfo); abilityIds.add(groupInfo);
metric.put("deptInfo", groupInfo); metric.put("deptInfo", groupInfo);
results.add(metric); results.add(metric);
}catch (Exception e) { } catch (Exception e) {
//忽略 //忽略
} }
@ -264,7 +259,7 @@ public class MonitorController {
if (!results.isEmpty()) { if (!results.isEmpty()) {
LambdaQueryWrapper<SysDeptEntity> queryWrapper = new QueryWrapper<SysDeptEntity>().lambda(); LambdaQueryWrapper<SysDeptEntity> queryWrapper = new QueryWrapper<SysDeptEntity>().lambda();
queryWrapper.select(SysDeptEntity::getName,SysDeptEntity::getId) queryWrapper.select(SysDeptEntity::getName, SysDeptEntity::getId)
.in(SysDeptEntity::getId, abilityIds); .in(SysDeptEntity::getId, abilityIds);
List<SysDeptEntity> entities = sysDeptDao.selectList(queryWrapper); List<SysDeptEntity> entities = sysDeptDao.selectList(queryWrapper);
for (Map map : results) { for (Map map : results) {
@ -287,7 +282,7 @@ public class MonitorController {
@GetMapping("/gateway-monitor/queryGroupByDeptInRange") @GetMapping("/gateway-monitor/queryGroupByDeptInRange")
@ApiOperation("统计数据按部门显示趋势") @ApiOperation("统计数据按部门显示趋势")
public Result queryGroupByDeptInRange(String query, String start, String end, String step){ public Result queryGroupByDeptInRange(String query, String start, String end, String step) {
String url = gatewayDomain + "/juapi/metrics/api/v1/query_range?query={query}" + String url = gatewayDomain + "/juapi/metrics/api/v1/query_range?query={query}" +
"&start=" + start + "&start=" + start +
"&end=" + end + "&end=" + end +
@ -296,34 +291,32 @@ public class MonitorController {
ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query); ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query);
HashMap body = entity.getBody(); HashMap body = entity.getBody();
HashMap data = (HashMap) body.get("data"); HashMap data = (HashMap) body.get("data");
if (data != null){ if (data != null) {
List<HashMap> result = (List) data.get("result"); List<HashMap> result = (List) data.get("result");
ArrayList<HashMap> results = new ArrayList<>(result.size()); ArrayList<HashMap> results = new ArrayList<>(result.size());
for (HashMap hashMap : result) { for (HashMap hashMap : result) {
Map metric = (Map) hashMap.get("metric"); Map metric = (Map) hashMap.get("metric");
if (metric != null && metric.get("deptInfo") != null){ if (metric != null && metric.get("deptInfo") != null) {
try{ try {
Long filterId = Long.valueOf((String) metric.get("deptInfo")); Long filterId = Long.valueOf((String) metric.get("deptInfo"));
SysDeptEntity sysDeptEntity = sysDeptDao.selectById(filterId); SysDeptEntity sysDeptEntity = sysDeptDao.selectById(filterId);
if (sysDeptEntity != null && StringUtils.isNotBlank(sysDeptEntity.getName())){ if (sysDeptEntity != null && StringUtils.isNotBlank(sysDeptEntity.getName())) {
metric.put("name", sysDeptEntity.getName()); metric.put("name", sysDeptEntity.getName());
results.add(hashMap); results.add(hashMap);
} }
}catch (Exception e){ } catch (Exception e) {
log.warn("数据异常忽略", e); log.warn("数据异常忽略:{}", e.getMessage());
} }
} }
} }
return Result.success(results); return Result.success(results);
} }
return Result.success(Collections.emptyList()); return Result.success(Collections.emptyList());
} }
@GetMapping("/gateway-monitor/queryGroupCount") @GetMapping("/gateway-monitor/queryGroupCount")
@ApiOperation("查询总api数量") @ApiOperation("查询总api数量")
public Result queryGroupCount(){ public Result queryGroupCount() {
LambdaQueryWrapper<ResourceEntity> queryWrapper = new QueryWrapper<ResourceEntity>().lambda(); LambdaQueryWrapper<ResourceEntity> queryWrapper = new QueryWrapper<ResourceEntity>().lambda();
queryWrapper.isNotNull(ResourceEntity::getGroupId).eq(ResourceEntity::getDelFlag, 0); queryWrapper.isNotNull(ResourceEntity::getGroupId).eq(ResourceEntity::getDelFlag, 0);
Integer selectCount = resourceDao.selectCount(queryWrapper); Integer selectCount = resourceDao.selectCount(queryWrapper);
@ -332,23 +325,23 @@ public class MonitorController {
@GetMapping("/gateway-monitor/getCallCount") @GetMapping("/gateway-monitor/getCallCount")
@ApiOperation("查询总api调用总量") @ApiOperation("查询总api调用总量")
public Result getCallCount(){ public Result getCallCount() {
Long callCount = monitorServiceV2.getCallCount(); Long callCount = monitorServiceV2.getCallCount();
return Result.success(callCount); return Result.success(callCount);
} }
@GetMapping("/gateway-monitor/test/get") @GetMapping("/gateway-monitor/test/get")
public Result testGet(){ public Result testGet() {
return Result.success(null); return Result.success(null);
} }
@GetMapping("/gateway-monitor/test/404") @GetMapping("/gateway-monitor/test/404")
public void test404(HttpServletResponse response){ public void test404(HttpServletResponse response) {
response.setStatus(404); response.setStatus(404);
} }
@GetMapping("/gateway-monitor/test/500") @GetMapping("/gateway-monitor/test/500")
public void test500(HttpServletResponse response){ public void test500(HttpServletResponse response) {
response.setStatus(500); response.setStatus(500);
} }