|
@@ -11,7 +11,8 @@ import cn.reghao.tnb.search.app.es.EsQuery;
|
|
|
import cn.reghao.tnb.search.app.es.SearchService;
|
|
import cn.reghao.tnb.search.app.es.SearchService;
|
|
|
import cn.reghao.tnb.search.app.log.geoip.GeoIpTool;
|
|
import cn.reghao.tnb.search.app.log.geoip.GeoIpTool;
|
|
|
import cn.reghao.tnb.search.app.log.geoip.Location;
|
|
import cn.reghao.tnb.search.app.log.geoip.Location;
|
|
|
-import cn.reghao.tnb.search.app.log.model.dto.DateTimeRange;
|
|
|
|
|
|
|
+import cn.reghao.tnb.search.app.log.model.dto.DateTimeQuery;
|
|
|
|
|
+import cn.reghao.tnb.search.app.log.model.dto.LogQuery;
|
|
|
import cn.reghao.tnb.search.app.log.model.vo.ChartData;
|
|
import cn.reghao.tnb.search.app.log.model.vo.ChartData;
|
|
|
import cn.reghao.tnb.search.app.log.model.vo.ChartMap;
|
|
import cn.reghao.tnb.search.app.log.model.vo.ChartMap;
|
|
|
import cn.reghao.tnb.search.app.log.model.vo.GroupCount;
|
|
import cn.reghao.tnb.search.app.log.model.vo.GroupCount;
|
|
@@ -23,9 +24,7 @@ import com.google.gson.JsonObject;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
-import java.io.IOException;
|
|
|
|
|
import java.time.Duration;
|
|
import java.time.Duration;
|
|
|
-import java.time.LocalDate;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -69,48 +68,43 @@ public class NginxLogService {
|
|
|
nginxLog.setMethodUrl(methodUrl);
|
|
nginxLog.setMethodUrl(methodUrl);
|
|
|
nginxLog.setId(idGenerator.nextId() + "");
|
|
nginxLog.setId(idGenerator.nextId() + "");
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- try {
|
|
|
|
|
- nginxLogDocument.saveAll(indexName, list);
|
|
|
|
|
- } catch (IOException e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ nginxLogDocument.saveAll(indexName, list);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public List<SelectOption> getDateList() {
|
|
public List<SelectOption> getDateList() {
|
|
|
|
|
+ String aggregateField = "timeIso8601";
|
|
|
|
|
+ Query query = Query.of(q -> q.matchAll(m -> m));
|
|
|
|
|
+ Map<String, Long> groupMap = searchService.aggregateByDay(indexName, aggregateField, query);
|
|
|
|
|
+
|
|
|
|
|
+ Set<String> dateSet = groupMap.keySet();
|
|
|
|
|
+ return dateSet.stream()
|
|
|
|
|
+ .sorted(Comparator.reverseOrder())
|
|
|
|
|
+ .map(dateStr -> new SelectOption(dateStr, dateStr))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public List<Object> getNginxLog2(DateTimeQuery dateTimeQuery) {
|
|
|
try {
|
|
try {
|
|
|
- String aggregateField = "timeIso8601";
|
|
|
|
|
- Query query = Query.of(q -> q.matchAll(m -> m));
|
|
|
|
|
- Map<String, Long> groupMap = searchService.aggregateByDay(indexName, aggregateField, query);
|
|
|
|
|
-
|
|
|
|
|
- Set<String> dateSet = groupMap.keySet();
|
|
|
|
|
- return dateSet.stream()
|
|
|
|
|
- .sorted(Comparator.reverseOrder())
|
|
|
|
|
- .map(dateStr -> new SelectOption(dateStr, dateStr))
|
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
|
|
|
+ String start = dateTimeQuery.getStart();
|
|
|
|
|
+ LocalDateTime start1 = DateTimeConverter.localDateTime2(start);
|
|
|
|
|
+ String end = dateTimeQuery.getEnd();
|
|
|
|
|
+ LocalDateTime end1 = DateTimeConverter.localDateTime2(end);
|
|
|
|
|
+
|
|
|
|
|
+ Duration duration = Duration.between(start1, end1);
|
|
|
|
|
+ long days = duration.toHours();
|
|
|
|
|
+ if (days < 0) {
|
|
|
|
|
+ return Collections.emptyList();
|
|
|
|
|
+ } else if (days > 24) {
|
|
|
|
|
+ return Collections.emptyList();
|
|
|
|
|
+ }
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
|
|
|
|
+ // ignore
|
|
|
}
|
|
}
|
|
|
- return Collections.emptyList();
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- public List<Object> getNginxLog2(DateTimeRange dateTimeRange) throws Exception {
|
|
|
|
|
- String start = dateTimeRange.getStart();
|
|
|
|
|
- LocalDateTime start1 = DateTimeConverter.localDateTime2(start);
|
|
|
|
|
- String end = dateTimeRange.getEnd();
|
|
|
|
|
- LocalDateTime end1 = DateTimeConverter.localDateTime2(end);
|
|
|
|
|
-
|
|
|
|
|
- Duration duration = Duration.between(start1, end1);
|
|
|
|
|
- long days = duration.toHours();
|
|
|
|
|
- if (days < 0) {
|
|
|
|
|
- return Collections.emptyList();
|
|
|
|
|
- } else if (days > 24) {
|
|
|
|
|
- return Collections.emptyList();
|
|
|
|
|
- }
|
|
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public List<ChartData> getTopN(String dateStr) throws IOException {
|
|
|
|
|
|
|
+ public List<ChartData> getTopN(String dateStr) {
|
|
|
int pageSize = 100;
|
|
int pageSize = 100;
|
|
|
int pageNumber = 1;
|
|
int pageNumber = 1;
|
|
|
|
|
|
|
@@ -150,15 +144,16 @@ public class NginxLogService {
|
|
|
return searchService.count(indexName, dateQuery);
|
|
return searchService.count(indexName, dateQuery);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public List<Object> getChartData2(String dateStr, String fieldValue) throws Exception {
|
|
|
|
|
|
|
+ public List<Object> getChartData2(LogQuery logQuery) {
|
|
|
String aggregateField = "timeIso8601";
|
|
String aggregateField = "timeIso8601";
|
|
|
String dateField = "timeIso8601";
|
|
String dateField = "timeIso8601";
|
|
|
String fieldName = "methodUrl.raw";
|
|
String fieldName = "methodUrl.raw";
|
|
|
|
|
|
|
|
|
|
+ String dateStr = logQuery.getDateStr();
|
|
|
|
|
+ String fieldValue = logQuery.getUrl();
|
|
|
|
|
+
|
|
|
String start = String.format("%s 00:00:00", dateStr);
|
|
String start = String.format("%s 00:00:00", dateStr);
|
|
|
String end = String.format("%s 23:59:59", dateStr);
|
|
String end = String.format("%s 23:59:59", dateStr);
|
|
|
- /*String start1 = startDateTime.replace(" ", "T");
|
|
|
|
|
- String end1 = endDateTime.replace(" ", "T");*/
|
|
|
|
|
Query dateQuery = RangeQuery.of(q -> q.field(dateField)
|
|
Query dateQuery = RangeQuery.of(q -> q.field(dateField)
|
|
|
.from(start).to(end).format(dateTimeFormat).timeZone(timeZone))._toQuery();
|
|
.from(start).to(end).format(dateTimeFormat).timeZone(timeZone))._toQuery();
|
|
|
Query combinedQuery;
|
|
Query combinedQuery;
|
|
@@ -168,8 +163,8 @@ public class NginxLogService {
|
|
|
Query termQuery = EsQuery.getTermQuery(fieldName, fieldValue);
|
|
Query termQuery = EsQuery.getTermQuery(fieldName, fieldValue);
|
|
|
combinedQuery = Query.of(q -> q.bool(b -> b.filter(dateQuery).filter(termQuery)));
|
|
combinedQuery = Query.of(q -> q.bool(b -> b.filter(dateQuery).filter(termQuery)));
|
|
|
}
|
|
}
|
|
|
- Map<String, Long> urlGroupMap = searchService.aggregateByQuery(indexName, aggregateField, combinedQuery);
|
|
|
|
|
|
|
|
|
|
|
|
+ Map<String, Long> urlGroupMap = searchService.aggregateByQuery(indexName, aggregateField, combinedQuery);
|
|
|
List<String> xList = new ArrayList<>();
|
|
List<String> xList = new ArrayList<>();
|
|
|
List<Long> yList = new ArrayList<>();
|
|
List<Long> yList = new ArrayList<>();
|
|
|
urlGroupMap.forEach((key, value) -> {
|
|
urlGroupMap.forEach((key, value) -> {
|
|
@@ -192,11 +187,25 @@ public class NginxLogService {
|
|
|
* @return
|
|
* @return
|
|
|
* @date 2026-01-09 21:26:58
|
|
* @date 2026-01-09 21:26:58
|
|
|
*/
|
|
*/
|
|
|
- public List<GroupCount> getChartData3(String aggregateField, String dateStr) throws Exception {
|
|
|
|
|
|
|
+ public List<GroupCount> getChartData3(LogQuery logQuery) {
|
|
|
|
|
+ String dateStr = logQuery.getDateStr();
|
|
|
|
|
+ String aggregateField0 = logQuery.getAggregateField();
|
|
|
|
|
+ String aggregateField;
|
|
|
|
|
+ if ("url".equals(aggregateField0)) {
|
|
|
|
|
+ aggregateField = "methodUrl.raw";
|
|
|
|
|
+ } else if ("statusCode".equals(aggregateField0)) {
|
|
|
|
|
+ aggregateField = "status";
|
|
|
|
|
+ } else if ("ip".equals(aggregateField0)) {
|
|
|
|
|
+ aggregateField = "remoteAddr";
|
|
|
|
|
+ } else if ("userAgent".equals(aggregateField0)) {
|
|
|
|
|
+ aggregateField = "httpUserAgent.raw";
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return Collections.emptyList();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
String dateField = "timeIso8601";
|
|
String dateField = "timeIso8601";
|
|
|
- DateTimeRange dateTimeRange = getDateTimeRange(dateStr);
|
|
|
|
|
- String start = dateTimeRange.getStart();
|
|
|
|
|
- String end = dateTimeRange.getEnd();
|
|
|
|
|
|
|
+ String start = String.format("%s 00:00:00", dateStr);
|
|
|
|
|
+ String end = String.format("%s 23:59:59", dateStr);
|
|
|
Query dateQuery = RangeQuery.of(q -> q.field(dateField)
|
|
Query dateQuery = RangeQuery.of(q -> q.field(dateField)
|
|
|
.from(start).to(end).format(dateTimeFormat).timeZone(timeZone))._toQuery();
|
|
.from(start).to(end).format(dateTimeFormat).timeZone(timeZone))._toQuery();
|
|
|
Map<String, Long> groupMap = searchService.aggregateByQuery(indexName, aggregateField, dateQuery);
|
|
Map<String, Long> groupMap = searchService.aggregateByQuery(indexName, aggregateField, dateQuery);
|
|
@@ -216,12 +225,20 @@ public class NginxLogService {
|
|
|
return list;
|
|
return list;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public ChartMap getChartMap(String aggregateField, String dateStr) throws Exception {
|
|
|
|
|
|
|
+ public ChartMap getChartMap(LogQuery logQuery) {
|
|
|
|
|
+ String dateStr = logQuery.getDateStr();
|
|
|
|
|
+ String aggregateField0 = logQuery.getAggregateField();
|
|
|
|
|
+ String aggregateField;
|
|
|
|
|
+ if ("ip".equals(aggregateField0)) {
|
|
|
|
|
+ aggregateField = "remoteAddr";
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
int deep = 1;
|
|
int deep = 1;
|
|
|
String dateField = "timeIso8601";
|
|
String dateField = "timeIso8601";
|
|
|
- DateTimeRange dateTimeRange = getDateTimeRange(dateStr);
|
|
|
|
|
- String start = dateTimeRange.getStart();
|
|
|
|
|
- String end = dateTimeRange.getEnd();
|
|
|
|
|
|
|
+ String start = String.format("%s 00:00:00", dateStr);
|
|
|
|
|
+ String end = String.format("%s 23:59:59", dateStr);
|
|
|
Query dateQuery = RangeQuery.of(q -> q.field(dateField)
|
|
Query dateQuery = RangeQuery.of(q -> q.field(dateField)
|
|
|
.from(start).to(end).format(dateTimeFormat).timeZone(timeZone))._toQuery();
|
|
.from(start).to(end).format(dateTimeFormat).timeZone(timeZone))._toQuery();
|
|
|
Map<String, Long> groupMap1 = searchService.aggregateByQuery(indexName, aggregateField, dateQuery);
|
|
Map<String, Long> groupMap1 = searchService.aggregateByQuery(indexName, aggregateField, dateQuery);
|
|
@@ -289,23 +306,13 @@ public class NginxLogService {
|
|
|
return new ChartMap(geoJson, chartDataList);
|
|
return new ChartMap(geoJson, chartDataList);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private DateTimeRange getDateTimeRange(String dateStr) {
|
|
|
|
|
- LocalDate localDate = LocalDate.parse(dateStr);
|
|
|
|
|
- String startDate = localDate.minusDays(7).toString();
|
|
|
|
|
- String endDate = localDate.toString();
|
|
|
|
|
-
|
|
|
|
|
- String start1 = String.format("%s 00:00:00", endDate);
|
|
|
|
|
- String end1 = String.format("%s 23:59:59", endDate);
|
|
|
|
|
- return new DateTimeRange(start1, end1);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public List<Object> getChartData5(String dateStr, String fieldValue) throws Exception {
|
|
|
|
|
|
|
+ public List<Object> getChartData5(DateTimeQuery dateTimeQuery) {
|
|
|
String aggregateField = "timeIso8601";
|
|
String aggregateField = "timeIso8601";
|
|
|
String fieldName = "methodUrl.raw";
|
|
String fieldName = "methodUrl.raw";
|
|
|
|
|
|
|
|
- DateTimeRange dateTimeRange = getDateTimeRange(dateStr);
|
|
|
|
|
- String start = dateTimeRange.getStart();
|
|
|
|
|
- String end = dateTimeRange.getEnd();
|
|
|
|
|
|
|
+ String fieldValue = dateTimeQuery.getUrl();
|
|
|
|
|
+ String start = dateTimeQuery.getStart();
|
|
|
|
|
+ String end = dateTimeQuery.getEnd();
|
|
|
String dateField = "timeIso8601";
|
|
String dateField = "timeIso8601";
|
|
|
Query dateQuery = RangeQuery.of(q -> q.field(dateField)
|
|
Query dateQuery = RangeQuery.of(q -> q.field(dateField)
|
|
|
.from(start).to(end).format(dateTimeFormat).timeZone(timeZone))._toQuery();
|
|
.from(start).to(end).format(dateTimeFormat).timeZone(timeZone))._toQuery();
|
|
@@ -317,6 +324,7 @@ public class NginxLogService {
|
|
|
} else {
|
|
} else {
|
|
|
combinedQuery = Query.of(q -> q.bool(b -> b.filter(dateQuery)));
|
|
combinedQuery = Query.of(q -> q.bool(b -> b.filter(dateQuery)));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
Map<String, Long> groupMap = searchService.aggregateByDay(indexName, aggregateField, combinedQuery);
|
|
Map<String, Long> groupMap = searchService.aggregateByDay(indexName, aggregateField, combinedQuery);
|
|
|
|
|
|
|
|
List<String> xList = new ArrayList<>();
|
|
List<String> xList = new ArrayList<>();
|