in ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/extension/impl/MerticDetailServiceImpl.java [80:202]
private Result queryByDoris(MetricDetailQuery param){
PageData pd = new PageData();
pd.setPage(param.getPage());
pd.setPageSize(param.getPageSize());
try {
String sqlCount = param.convertDorisSqlCount();
log.info("metricDetail convert sql param : {}, sql : {}", GsonUtil.gsonString(param),sqlCount);
List<Map<String, Object>> totalData = dorisSearchService.queryBySql(sqlCount);
if(CollectionUtils.isEmpty(totalData)){
log.info("metricDetail get totalData error! param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(totalData));
log.error("metricDetail get totalData error! param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(totalData));
return Result.success(pd);
}
Map<String, Object> stringObjectMap = totalData.get(0);
if(CollectionUtils.isEmpty(stringObjectMap)){
log.info("metricDetail get totalData error! param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(totalData));
log.error("metricDetail get totalData error! param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(totalData));
return Result.success(pd);
}
Object totalObj = stringObjectMap.get("total");
if(totalObj == null){
log.info("metricDetail convert totalData error! param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(totalData));
log.error("metricDetail convert totalData error! param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(totalData));
return Result.success(pd);
}
Long total = (Long) totalObj;
pd.setTotal(total);
String sql = param.convertDorisSql();
log.info("metricDetail convert sql param : {}, sql : {}", GsonUtil.gsonString(param),sql);
List<Map<String, Object>> dorisMaps = dorisSearchService.queryBySql(sql);
log.info("metricDetail doris query, param : {}, result: {}", GsonUtil.gsonString(param),GsonUtil.gsonString(dorisMaps));
String viewType = param.getType() == null ? "ERROR-TYPE" : param.getType();
String methodName = (EsIndexDataType.http_client.name().equals(param.getType())
|| EsIndexDataType.http.name().equals(param.getType())
|| EsIndexDataType.dubbo_consumer.name().equals(param.getType())
|| EsIndexDataType.dubbo_provider.name().equals(param.getType())
|| EsIndexDataType.dubbo_sla.name().equals(param.getType())
|| EsIndexDataType.grpc_client.name().equals(param.getType())
|| EsIndexDataType.grpc_server.name().equals(param.getType())
|| EsIndexDataType.thrift_client.name().equals(param.getType())
|| EsIndexDataType.thrift_server.name().equals(param.getType())
|| EsIndexDataType.apus_client.name().equals(param.getType())
|| EsIndexDataType.apus_server.name().equals(param.getType())
|| EsIndexDataType.redis.name().equals(param.getType())
) ?
param.getMethodName()
: (EsIndexDataType.mysql.name().equals(param.getType()) ||
EsIndexDataType.oracle.name().equals(param.getType()) ||
EsIndexDataType.elasticsearch.name().equals(param.getType())) ?
param.getSqlMethod() : "NO-Data";
Map map = new HashMap();
map.put("projectName", param.getProjectName());
map.put("bisType", viewType);
map.put("serverIp", param.getServerIp());
map.put("methodName", methodName);
map.put("totalCount", total);
map.put("serviceName", param.getServiceName());
map.put("area", param.getArea());
map.put("serverEnv", param.getServerEnv());
map.put("serverZone", param.getServerZone());
if (EsIndexDataType.mysql.name().equals(param.getType()) || EsIndexDataType.oracle.name().equals(param.getType())) {
map.put("sql", param.getSql());
map.put("dataSource", param.getDataSource());
}
if(CollectionUtils.isEmpty(dorisMaps)){
log.info("metricDetail query data error! param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(dorisMaps));
log.error("metricDetail get data error! param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(dorisMaps));
pd.setSummary(map);
return Result.success(pd);
}
List<MetricDetail> result = new ArrayList<>();
for (Map<String, Object> data : dorisMaps) {
String dataJson = GsonUtil.gsonString(data);
if (!StringUtils.isEmpty(dataJson)) {
MetricDetail metricDetail = GsonUtil.gsonToBean(dataJson, MetricDetail.class);
if (!StringUtils.isEmpty(metricDetail.getTimestamp())) {
metricDetail.setCreateTime(Long.valueOf(metricDetail.getTimestamp()));
}
result.add(metricDetail);
}
}
/**
* lastCreateTime
*/
String lastCreateTime = "";
if (!CollectionUtils.isEmpty(result)) {
MetricDetail metricDetail = result.get(result.size() - 1);
lastCreateTime = metricDetail.getTimestamp();
}
if (!StringUtils.isEmpty(lastCreateTime)) {
map.put("lastCreateTime", Long.valueOf(lastCreateTime));
}
if ("error".equals(param.getErrorType()) && projectHelper.accessLogSys(param.getProjectName(), param.getProjectId(), param.getAppSource())) {
map.put("access_log", "1");
}
pd.setSummary(map);
pd.setList(result);
log.info("metricDetail param : {}, result : {}", GsonUtil.gsonString(param), GsonUtil.gsonString(result));
return Result.success(pd);
} catch (Exception e) {
log.info("metricDetail exception : {}, param : {}", e.getMessage(), GsonUtil.gsonString(param));
log.error("metricDetail exception : {}", e.getMessage(), e);
return Result.fail(ErrorCode.unknownError);
}
}