diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/EsLogController.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/EsLogController.java index ce414a35..809971c8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/EsLogController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/EsLogController.java @@ -34,4 +34,11 @@ public class EsLogController { return new ResponseEntity<>(esLogService.query(query), HttpStatus.OK); } + @DeleteMapping("/clearLogs") + @ApiOperation("清空日志") + public ResponseEntity clearLogs(@RequestBody LogQuery query) { + esLogService.clearLogs(query); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/EsLogService.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/EsLogService.java index 1a0bf26b..d5d7c312 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/EsLogService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/EsLogService.java @@ -2,6 +2,7 @@ package org.nl.modules.system.service; import cn.hutool.db.PageResult; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import org.nl.modules.system.service.dto.LogQuery; /** @@ -22,5 +23,10 @@ public interface EsLogService { * @param logQuery * @return */ - PageResult query(LogQuery logQuery); + JSONObject query(LogQuery logQuery); + + /** + * 清空日志 + */ + void clearLogs(LogQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/EsLogServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/EsLogServiceImpl.java index 6e2d5c13..00009282 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/EsLogServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/system/service/impl/EsLogServiceImpl.java @@ -21,8 +21,7 @@ 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.data.elasticsearch.core.query.*; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -43,20 +42,42 @@ public class EsLogServiceImpl implements EsLogService { private final ElasticsearchRestTemplate elasticsearchRestTemplate; @Override - public PageResult query(LogQuery logQuery){ + public JSONObject query(LogQuery logQuery){ + JSONObject res = new JSONObject(); PageResult page = new PageResult(); if (logQuery != null){ BoolQueryBuilder query = QueryBuilders.boolQuery(); //requestMethod - extractedParam(logQuery, query); + extractedQueryParam(logQuery, query); Iterable all = esLogRepository.search(query, PageRequest.of(logQuery.getPage()-1,logQuery.getSize(), Sort.by("@timestamp").descending())); page.addAll(((AggregatedPageImpl) all).getContent()); page.setTotal((int) ((AggregatedPageImpl) all).getTotalElements()); page.setPage(logQuery.getPage()); page.setPageSize(logQuery.getSize()); + res.put("total",page.getTotal()); } - return page; + res.put("page",page); + return res; } + @Override + public void clearLogs(LogQuery logQuery) { + BoolQueryBuilder query = QueryBuilders.boolQuery(); + extractedParam(logQuery, query); + DeleteQuery deleteQuery = new DeleteQuery(); + deleteQuery.setQuery(query); + elasticsearchRestTemplate.delete(deleteQuery,new LogRepositoryDTO().getClass()); + } + + + private void extractedQueryParam(LogQuery logQuery, BoolQueryBuilder query) { + extractedParam(logQuery,query); + if (logQuery.getIsRequest()){ + query.must().add(QueryBuilders.existsQuery("requestMethod")); + } + if (logQuery.getFilterSql()){ + query.mustNot().add(QueryBuilders.wildcardQuery("logger","org.nl.modules.wql.core.engine.*")); + } + } private void extractedParam(LogQuery logQuery, BoolQueryBuilder query) { if (StringUtils.isNotEmpty(logQuery.getLogLevel())){ @@ -65,12 +86,6 @@ public class EsLogServiceImpl implements EsLogService { if (StringUtils.isNotEmpty(logQuery.getSystem())){ query.must().add(QueryBuilders.matchQuery("system", logQuery.getSystem())); } - if (logQuery.getIsRequest()){ - query.must().add(QueryBuilders.existsQuery("requestMethod")); - } - if (logQuery.getFilterSql()){ - query.mustNot().add(QueryBuilders.wildcardQuery("logger","org.nl.modules.wql.core.engine.*")); - } query.mustNot().add(QueryBuilders.matchPhraseQuery("logger","org.elasticsearch.client.RestClient")); if (StringUtils.isNotEmpty(logQuery.getTraceId())){ query.must().add(QueryBuilders.matchQuery("traceId", logQuery.getTraceId())); @@ -89,7 +104,6 @@ public class EsLogServiceImpl implements EsLogService { } - @Override public JSONArray getLabelsValues(String type) { JSONArray result = new JSONArray(); diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml index bd98628e..d2782320 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml @@ -38,7 +38,7 @@ spring: # url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:whxr_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:whxr}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:942464Yy} + password: ${DB_PWD:password} # username: ${DB_USER:root} # password: ${DB_PWD:root} # 初始连接数 diff --git a/mes/hd/nladmin-system/src/main/resources/logback-spring.xml b/mes/hd/nladmin-system/src/main/resources/logback-spring.xml index d25ad867..35be6b15 100644 --- a/mes/hd/nladmin-system/src/main/resources/logback-spring.xml +++ b/mes/hd/nladmin-system/src/main/resources/logback-spring.xml @@ -119,14 +119,14 @@ https://juejin.cn/post/6844903775631572999 - + - - - - + + + + diff --git a/mes/qd/src/views/tools/es/api/loki.js b/mes/qd/src/views/tools/es/api/loki.js index b5a30942..8cc509d5 100644 --- a/mes/qd/src/views/tools/es/api/loki.js +++ b/mes/qd/src/views/tools/es/api/loki.js @@ -15,4 +15,12 @@ export function labelsValues(type) { }) } -export default { getLogData, labelsValues } +export function clearLogs(param) { + return request({ + url: '/api/esLog/clearLogs', + method: 'delete', + data: param + }) +} + +export default { getLogData, labelsValues, clearLogs } diff --git a/mes/qd/src/views/tools/es/view/index.vue b/mes/qd/src/views/tools/es/view/index.vue index d86e9055..5517ec00 100644 --- a/mes/qd/src/views/tools/es/view/index.vue +++ b/mes/qd/src/views/tools/es/view/index.vue @@ -84,7 +84,7 @@ /> - + + + + 查询 @@ -126,13 +134,16 @@ + + 清空日志 +
- + - +
@@ -187,6 +198,7 @@ export default { showEmpty: true, emptyText: '请选择标签', page: 1, + total: 0, runStatu: 'off', runStatuOptions: [{ label: 'off', @@ -294,13 +306,73 @@ export default { logOperation.getLogData(queryParam).then(res => { this.showEmpty = false + this.total = res.total // 清空 this.logs = [] - for (const j in res) { // 用push的方式将所有日志数组添加进去 - this.logs.push(res[j]) + for (const j in res.page) { // 用push的方式将所有日志数组添加进去 + this.logs.push(res.page[j]) } }) }, + clearLogs() { + var message = '您确定要清空' + if (this.system !== '' && this.system !== null) { + message += '标签为:' + this.system + ' ' + } + if (this.logLevelValue !== '' && this.logLevelValue !== null) { + message += '日志级别为:' + this.logLevelValue + ' ' + } + if (this.message !== '' && this.message !== null) { + message += '关键字为:' + this.message + ' ' + } + if (this.traceId !== '' && this.traceId !== null) { + message += '链路Id为:' + this.traceId + ' ' + } + if (this.timeRange !== '' && this.timeRange !== null && this.timeRange.length > 0) { + message += '时间范围为:' + this.timeRange + ' ' + } + if (this.timeZoneValue !== '' && this.timeZoneValue !== null) { + message += '时间段为:' + this.$refs.timeZoneValueRef.selected.label + ' ' + } + message += '所有的日志吗 ?' + this.$confirm(message, '确认信息', { + distinguishCancelAndClose: true, + confirmButtonText: '确定', + cancelButtonText: '取消' + }) + .then(() => { + // 清空查询数据 + this.clearParam() + queryParam.logLevel = this.logLevelValue + const time = new Date() + if (this.timeZoneValue !== '') { + queryParam.startTime = new Date(((time.getTime() - this.timeZoneValue))) + } + if (this.timeRange !== '' && this.timeRange.length > 0) { + queryParam.startTime = this.timeRange[0] + queryParam.endTime = this.timeRange[1] + } + queryParam.message = this.message.replace(/^\s*|\s*$/g, '') + queryParam.traceId = this.traceId + queryParam.system = this.system + + logOperation.clearLogs(queryParam).then(res => { + this.queryData() + this.$message({ + type: 'info', + message: '清除成功' + }) + }) + }) + .catch(action => { + this.$message({ + type: 'info', + message: action === 'cancel' + ? '已取消' + : '已取消' + }) + }) + }, changetype() { },