private ListServiceMonitorVO mergeMetricsListDimServiceDTO dimServiceList if CollectionUtilsisEmptydimServiceList return null; ListMapString Object metricList = ReportCollectBasequeryMe
可以将方法的参数类型改为List<? extends DimServiceDTO>,即使用通配符限定参数类型为DimServiceDTO的子类,从而支持传入任何继承自DimServiceDTO的对象列表。修改后的代码如下:
private List
List<Map<String, Object>> metricList = ReportCollectBase.queryMetricList(serviceMetricExpressionMap, indicatorService, Arrays.asList("instance", "serviceUrl"));
Map<String, List<Map<String, Object>>> objectGroup = metricList.stream().collect(Collectors.groupingBy(map -> String.valueOf(map.get("m8_object_id"))));
List<ServiceMonitorVO> result = new ArrayList<>(dimServiceList.size());
for (DimServiceDTO dim : dimServiceList) {
ServiceMonitorVO serviceMonitorVO = new ServiceMonitorVO();
BeanUtils.copyProperties(dim, serviceMonitorVO);
if (StringUtils.isEmpty(dim.getM8ObjectUrl())) {
serviceMonitorVO.setServiceTotal(0);
} else {
String[] urls = dim.getM8ObjectUrl().split(",");
serviceMonitorVO.setServiceTotal(urls.length);
}
List<ServiceMonitorVO.ServiceMonitorItemVO> items = new ArrayList<>();
if (objectGroup == null) {
serviceMonitorVO.setServiceNormal(0);
if (StringUtils.isNotEmpty(dim.getM8ObjectUrl())) {
String[] urls = dim.getM8ObjectUrl().split(",");
for (String url : urls) {
items.add(new ServiceMonitorVO.ServiceMonitorItemVO(url, "0"));
}
}
} else {
List<Map<String, Object>> list = objectGroup.getOrDefault(dim.getM8ObjectId(), new ArrayList<>());
String[] urls = dim.getM8ObjectUrl().split(",");
if (CollectionUtils.isEmpty(list)) {
serviceMonitorVO.setServiceNormal(0);
for (String url : urls) {
items.add(new ServiceMonitorVO.ServiceMonitorItemVO(url, "0"));
}
} else {
long normal = 0;
for (String url : urls) {
Map<String, Object> obj = list.stream().filter(o -> Objects.equals(o.getOrDefault("serviceUrl", ""), url)).findAny().orElse(null);
if (obj == null) {
items.add(new ServiceMonitorVO.ServiceMonitorItemVO(url, "0"));
} else {
String serviceAvailable = String.valueOf(obj.getOrDefault("m8_service_available", "0"));
if (Objects.equals(serviceAvailable, "1")) normal++;
items.add(new ServiceMonitorVO.ServiceMonitorItemVO(String.valueOf(obj.get("serviceUrl")), serviceAvailable));
}
}
serviceMonitorVO.setServiceNormal(Integer.parseInt(String.valueOf(normal)));
}
}
// m8JobStatus: 是否启用采集=监控状态
// m8ServiceState:服务监测状态:0-异常,1-正常(总状态,只要items中有一个正常即正常)
serviceMonitorVO.setServiceState(serviceMonitorVO.getServiceNormal() > 0 ? "1" : "0");
serviceMonitorVO.setItems(items);
result.add(serviceMonitorVO);
}
return result;
原文地址: https://www.cveoy.top/t/topic/eF7S 著作权归作者所有。请勿转载和采集!