From 12ea57f8f3af57e3d3295b451ebd50cb91a3ae66 Mon Sep 17 00:00:00 2001 From: zhangzhiqiang Date: Fri, 10 Feb 2023 17:05:39 +0800 Subject: [PATCH] a --- .../modules/logging/rest/EsLogController.java | 6 +-- .../modules/logging/service/EsLogService.java | 2 +- .../modules/logging/service/dto/LogQuery.java | 4 ++ .../service/impl/EsLogServiceImpl.java | 38 ++++++++++++++++--- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/rest/EsLogController.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/rest/EsLogController.java index c2e3fe096..bc9f8b9b5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/rest/EsLogController.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/rest/EsLogController.java @@ -23,10 +23,10 @@ public class EsLogController { private final EsLogService esLogService; - @GetMapping("/labels") + @GetMapping("/labels/{type}") @ApiOperation("获取标签") - public ResponseEntity labelsValues() { - return new ResponseEntity<>(esLogService.getLabelsValues(), HttpStatus.OK); + public ResponseEntity labelsValues(@PathVariable String type) { + return new ResponseEntity<>(esLogService.getLabelsValues(type), HttpStatus.OK); } @PostMapping("/query") diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/EsLogService.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/EsLogService.java index 04a6dcd59..1a7d2c79a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/EsLogService.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/EsLogService.java @@ -16,7 +16,7 @@ public interface EsLogService { * 获取labels和values树 * @return */ - JSONArray getLabelsValues(); + JSONArray getLabelsValues(String type); /** * 日志查询 diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/dto/LogQuery.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/dto/LogQuery.java index bc006286d..e5e1d8a66 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/dto/LogQuery.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/dto/LogQuery.java @@ -27,6 +27,10 @@ public class LogQuery { * 日志级别 */ private String logLevel; + /** + * 系统标签 + */ + private String system; /** * 是否只查询Http相关请求 */ diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/EsLogServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/EsLogServiceImpl.java index 9d6ccdd38..773810291 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/EsLogServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/EsLogServiceImpl.java @@ -8,9 +8,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.formula.functions.T; +import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.script.Script; +import org.elasticsearch.search.aggregations.AggregationBuilders; +import org.elasticsearch.search.aggregations.Aggregations; +import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.nl.common.domain.query.PageQuery; import org.nl.common.enums.LevelEnum; import org.nl.modules.logging.repository.EsLogRepository; @@ -21,12 +25,19 @@ import org.nl.wms.ext.acs.service.impl.AcsToWmsServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl; +import org.springframework.data.elasticsearch.core.query.FetchSourceFilter; +import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; /** * @author ldjun @@ -40,6 +51,8 @@ public class EsLogServiceImpl implements EsLogService { private final EsLogRepository esLogRepository; + private final ElasticsearchRestTemplate elasticsearchRestTemplate; + @Override public Page query(LogQuery logQuery){ Page page = new Page<>(); @@ -60,6 +73,9 @@ public class EsLogServiceImpl implements EsLogService { if (StringUtils.isNotEmpty(logQuery.getLogLevel())){ query.must().add(QueryBuilders.matchQuery("logLevel", LevelEnum.checkLevel(logQuery.getLogLevel()))); } + if (StringUtils.isNotEmpty(logQuery.getSystem())){ + query.must().add(QueryBuilders.matchQuery("system", logQuery.getSystem())); + } if (logQuery.getIsRequest()){ query.must().add(QueryBuilders.existsQuery("requestMethod")); } @@ -86,13 +102,23 @@ public class EsLogServiceImpl implements EsLogService { @Override - public JSONArray getLabelsValues() { + public JSONArray getLabelsValues(String type) { JSONArray result = new JSONArray(); - for (LevelEnum value : LevelEnum.values()) { - JSONObject level = new JSONObject(); - level.put("label", value.name()); - level.put("value", value.name()); - result.add(level); + FetchSourceFilter fetchSourceFilter = new FetchSourceFilter(new String[]{type}, null); + NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); + queryBuilder.withCollapseField(type+".keyword"); + queryBuilder.withSourceFilter(fetchSourceFilter); + queryBuilder.addAggregation(AggregationBuilders.terms(type).field(type+".keyword").size(100)); + Aggregations agg = elasticsearchRestTemplate.query(queryBuilder.build(), SearchResponse::getAggregations); + Terms terms = agg.get(type); + List buckets = terms.getBuckets(); + if (!CollectionUtils.isEmpty(buckets)){ + buckets.stream().map(Terms.Bucket::getKeyAsString).forEach(v-> { + JSONObject item = new JSONObject(); + item.put("label", v); + item.put("value", v); + result.add(item); + }); } return result; }