in ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/es/EsService.java [75:229]
public Result query(MetricDetailQuery param, Integer page, Integer pageSize) throws IOException {
String exceptionTraceDomain = esExtensionService.getExceptionTraceDomain(param.getAppSource());
Map<String, String> labels = param.convertEsParam(exceptionTraceDomain);
String index = esExtensionService.getIndex(param);
if (StringUtils.isEmpty(index)) {
log.error("EsService.query error! esIndex is empty!");
return null;
}
if (page == null || page.intValue() == 0) {
page = 1;
}
if (pageSize == null || pageSize.intValue() == 0) {
pageSize = 100;
}
SearchRequest request = new SearchRequest(index);
SearchSourceBuilder sqb = new SearchSourceBuilder();
if (!CollectionUtils.isEmpty(labels)) {
BoolQueryBuilder qb = QueryBuilders.boolQuery();
Set<Map.Entry<String, String>> entries = labels.entrySet();
for (Map.Entry<String, String> entry : entries) {
if (org.apache.commons.lang3.StringUtils.isBlank(entry.getValue())) {
continue;
}
if (entry.getKey().equals("url") && labels.get("type").equals("mysql")) {
WildcardQueryBuilder sqlqb = QueryBuilders.wildcardQuery(entry.getKey(), entry.getValue() + "*");
qb.must(sqlqb);
continue;
}
MatchPhraseQueryBuilder mpq = QueryBuilders.matchPhraseQuery(entry.getKey(), entry.getValue());
qb.must(mpq);
}
if (param.getStartTime() != null && param.getEndTime() != null) {
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("timestamp").from(param.getStartTime()).to(param.getEndTime());
qb.must(rangeQueryBuilder);
}
sqb.query(qb);
}
CountRequest countRequest = new CountRequest(index);
countRequest.source(sqb);
Long count = esExtensionService.getEsClient(param.getAppSource()).count(countRequest);
sqb.from((page - 1) * pageSize).size(pageSize).timeout(new TimeValue(esQueryTimeOut));
sqb = sqb.sort("timestamp", SortOrder.DESC);
request.source(sqb);
SearchResponse sr = esExtensionService.getEsClient(param.getAppSource()).search(request);
log.info("Es query index : {},labels : {}, result : {}", index, labels, sr);
SearchHit[] results = sr.getHits().getHits();
PageData pd = new PageData();
pd.setPage(page);
pd.setPageSize(pageSize);
pd.setTotal(count);
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", count);
map.put("serviceName", param.getServiceName());
map.put("area", param.getArea());
map.put("serverEnv", param.getServerEnv());
map.put("serverZone", param.getServerZone());
map.put("clientProjectId", param.getClientProjectId());
map.put("clientProjectName", param.getClientProjectName());
map.put("clientEnv", param.getClientEnv());
map.put("clientIp", param.getClientIp());
if (EsIndexDataType.mysql.name().equals(param.getType()) || EsIndexDataType.oracle.name().equals(param.getType())) {
map.put("sql", param.getSql());
map.put("dataSource", param.getDataSource());
}
if (results == null || results.length == 0) {
pd.setSummary(map);
return Result.success(pd);
}
List<MetricDetail> result = new ArrayList<>();
for (SearchHit hit : results) {
String sourceAsString = hit.getSourceAsString();
if (!StringUtils.isEmpty(sourceAsString)) {
MetricDetail metricDetail = new Gson().fromJson(sourceAsString, 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);
return Result.success(pd);
}