适配网关重启

This commit is contained in:
huangweixiong 2022-08-17 11:00:59 +08:00
parent ed20fbd0a4
commit ebe3d33994
1 changed files with 65 additions and 3 deletions

View File

@ -35,6 +35,8 @@ import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@RestController
@Api(tags = "网关统计")
@ -42,6 +44,8 @@ import java.util.*;
@RequestMapping("/gateway-monitor/v2")
public class MonitorControllerV2 {
private static final ExecutorService executor = Executors.newFixedThreadPool(35);
@Autowired
private RestTemplate restTemplate;
@ -65,9 +69,67 @@ public class MonitorControllerV2 {
@GetMapping("/queryGroupByAbility")
@ApiOperation("统计数据按能力归集")
public Result queryGroupByAbility(String query, String time){
String url = gatewayDomain + "/juapi/metrics/api/v1/query?query={query}" + "&time=" + time;
ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query);
public Result queryGroupByAbility(String query, String time) throws InterruptedException, ExecutionException, TimeoutException {
String url = gatewayDomain + "/juapi/metrics/api/v1/query?query={query}&time={time}";
List<String> querys = new ArrayList<>();
List<CompletableFuture<List<?>>> futures = querys.stream().map(item -> {
return CompletableFuture.supplyAsync(() -> {
ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query, time);
/** 接口数据示例
* {
* "status": "success",
* "data": {
* "resultType": "vector",
* "result": [
* {
* "metric": {
* "groupInfo": "group10"
* },
* "value": [
* 1660636097,
* "0"
* ]
* }
* ]
* }
* }
*/
HashMap body = entity.getBody();
HashMap data = (HashMap) body.get("data");
if (data != null) {
List<HashMap> result = (List) data.get("result");
ArrayList<Map> results = new ArrayList<>();
for (HashMap hashMap : result) {
Map metric = (Map) hashMap.get("metric");
List value = (List) hashMap.get("value");
if (metric == null || metric.get("groupInfo") == null || value == null || value.size() != 2) {
continue;
}
try {
Long groupInfo = Long.valueOf((String) metric.get("groupInfo"));
metric.put("groupInfo", groupInfo);
results.add(metric);
} catch (Exception e) {
//忽略
}
}
return results;
}
return Collections.emptyList();
}, executor);
}).collect(Collectors.toList());
HashMap<String, Map<String, Object>> filterMap = new HashMap<String, Map<String, Object>>();
for (CompletableFuture<List<?>> future : futures) {
List<Map<String, Object>> list = (List<Map<String, Object>>) future.get(30, TimeUnit.SECONDS);
list.forEach(item -> {
filterMap.containsKey(item.)
});
}
ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, query, time);
HashMap body = entity.getBody();
HashMap data = (HashMap) body.get("data");
if (data != null){