in ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogQueryServiceImpl.java [334:405]
public Result<LogDTO> getDocContext(LogContextQuery logContextQuery) {
SearchRequest searchRequest = null;
try {
if (searchLog.isLegalParam(logContextQuery) == false) {
return Result.failParam("Required parameters are missing");
}
MilogLogStoreDO logStore = logstoreDao.getByName(logContextQuery.getLogstore());
if (logStore.getEsClusterId() == null || StringUtils.isEmpty(logStore.getEsIndex())) {
return Result.failParam("Store configuration exception");
}
EsService esService = esCluster.getEsService(logStore.getEsClusterId());
String esIndexName = logStore.getEsIndex();
List<String> keyList = getKeyList(logStore.getKeyList(), logStore.getColumnTypeList());
LogDTO dto = new LogDTO();
List<LogDataDTO> logDataList = new ArrayList<>();
int times = 1, pageSize = logContextQuery.getPageSize();
Long lineNumberSearchAfter = logContextQuery.getLineNumber();
List<Integer> logOrder = new ArrayList<>();
logOrder.add(logContextQuery.getType());
if (0 == logContextQuery.getType()) {
times = 2;
pageSize = pageSize / 2;
logOrder.remove(0);
logOrder.add(2);
logOrder.add(1);
}
for (int t = 0; t < times; t++) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(QueryBuilders.termQuery(LogParser.esKeyMap_logip, logContextQuery.getIp()));
boolQueryBuilder.filter(QueryBuilders.termQuery(LogParser.esKyeMap_fileName, logContextQuery.getFileName()));
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(boolQueryBuilder);
if (1 == logOrder.get(t)) {
// 1-after
builder.sort(LogParser.esKeyMap_timestamp, ASC);
builder.sort(LogParser.esKeyMap_lineNumber, ASC);
} else if (2 == logOrder.get(t)) {
// 2-before
builder.sort(LogParser.esKeyMap_timestamp, DESC);
builder.sort(LogParser.esKeyMap_lineNumber, DESC);
}
if (0 == logContextQuery.getType() && 2 == logOrder.get(t)) {
builder.searchAfter(new Object[]{logContextQuery.getTimestamp(), lineNumberSearchAfter + 1});
} else {
builder.searchAfter(new Object[]{logContextQuery.getTimestamp(), lineNumberSearchAfter});
}
builder.size(pageSize);
searchRequest = new SearchRequest(esIndexName);
searchRequest.source(builder);
SearchResponse searchResponse;
searchResponse = esService.search(searchRequest);
SearchHit[] hits = searchResponse.getHits().getHits();
if (hits == null || hits.length == 0) {
continue;
}
if (1 == logOrder.get(t)) {
for (int i = 0; i < hits.length; i++) {
logDataList.add(this.hit2DTO(hits[i], keyList));
}
} else if (2 == logOrder.get(t)) {
for (int i = hits.length - 1; i >= 0; i--) {
logDataList.add(this.hit2DTO(hits[i], keyList));
}
}
}
dto.setLogDataDTOList(logDataList);
return Result.success(dto);
} catch (Exception e) {
log.error("Log query error and log context error:[{}], logContextQuery:[{}], searchRequest:[{}], user:[{}]", e, logContextQuery, searchRequest, MoneUserContext.getCurrentUser());
return Result.failParam("System error, please try again");
}
}