From 5aacf09cb20838b40072787b091fe43ef367de25 Mon Sep 17 00:00:00 2001
From: WenG <450292408@qq.com>
Date: Sun, 16 May 2021 23:57:16 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=BB=9F=E8=AE=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 4 +
.../wgink/gateway/consts/ISystemConst.java | 4 +
.../gateway/handler/count/CountHandler.java | 39 +++++--
...tLogCount.java => RequestLogLineChat.java} | 7 +-
.../{application.yml => application-dev.yml} | 0
src/main/resources/static/wg/home.html | 110 +++++++++++++++++-
6 files changed, 149 insertions(+), 15 deletions(-)
rename src/main/java/ink/wgink/gateway/pojo/count/{RequestLogCount.java => RequestLogLineChat.java} (81%)
rename src/main/resources/{application.yml => application-dev.yml} (100%)
diff --git a/pom.xml b/pom.xml
index 83a1612..78c4226 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,10 @@
org.springframework.boot
spring-boot-starter-data-mongodb-reactive
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb
+
org.springframework.boot
spring-boot-starter-test
diff --git a/src/main/java/ink/wgink/gateway/consts/ISystemConst.java b/src/main/java/ink/wgink/gateway/consts/ISystemConst.java
index 1aa199e..7710a1a 100644
--- a/src/main/java/ink/wgink/gateway/consts/ISystemConst.java
+++ b/src/main/java/ink/wgink/gateway/consts/ISystemConst.java
@@ -14,6 +14,7 @@ public interface ISystemConst {
String UUID = "uuid";
String COUNT = "count";
+
String SESSION_USER = "SESSION_USER";
String USER_ADMIN_USERNAME = "admin";
String USER_ADMIN_PASSWORD = "aaa111!!!";
@@ -22,4 +23,7 @@ public interface ISystemConst {
String ROUTE_PREFIX = "/gw";
String ROOT_PATH_PREFIX = "/*";
+ String DATE_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+ String DATE_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
+
}
diff --git a/src/main/java/ink/wgink/gateway/handler/count/CountHandler.java b/src/main/java/ink/wgink/gateway/handler/count/CountHandler.java
index db24b4f..bfa1fdc 100644
--- a/src/main/java/ink/wgink/gateway/handler/count/CountHandler.java
+++ b/src/main/java/ink/wgink/gateway/handler/count/CountHandler.java
@@ -1,17 +1,24 @@
package ink.wgink.gateway.handler.count;
+import ink.wgink.gateway.consts.ISystemConst;
import ink.wgink.gateway.dao.log.IRequestLogDao;
import ink.wgink.gateway.dao.route.IRouteDao;
import ink.wgink.gateway.dao.routetype.IRouteTypeDao;
import ink.wgink.gateway.handler.BaseHandler;
import ink.wgink.gateway.pojo.count.HomeCount;
-import ink.wgink.gateway.pojo.count.RequestLogCount;
+import ink.wgink.gateway.pojo.count.RequestLogLineChat;
import ink.wgink.gateway.pojo.log.RequestLog;
-import ink.wgink.gateway.pojo.result.SuccessResult;
import ink.wgink.gateway.pojo.result.SuccessResultData;
import ink.wgink.gateway.util.DateUtil;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.AggregationResults;
+import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.server.ServerRequest;
@@ -37,11 +44,13 @@ public class CountHandler extends BaseHandler {
private IRouteTypeDao routeTypeDao;
private IRouteDao routeDao;
private IRequestLogDao requestLogDao;
+ private MongoTemplate mongoTemplate;
- public CountHandler(IRouteTypeDao routeTypeDao, IRouteDao routeDao, IRequestLogDao requestLogDao) {
+ public CountHandler(IRouteTypeDao routeTypeDao, IRouteDao routeDao, IRequestLogDao requestLogDao, MongoTemplate mongoTemplate) {
this.routeTypeDao = routeTypeDao;
this.routeDao = routeDao;
this.requestLogDao = requestLogDao;
+ this.mongoTemplate = mongoTemplate;
}
/**
@@ -83,16 +92,30 @@ public class CountHandler extends BaseHandler {
/**
* 最新请求数量列表
+ * 按分钟统计访问次数
*
* @param serverRequest
* @return
*/
- // 每分钟跟新依次统计数据
public Mono listLastCount(ServerRequest serverRequest) {
- return ServerResponse.ok().contentType(MediaType.TEXT_EVENT_STREAM).body(requestLogDao.count().flatMap(count -> {
- RequestLogCount requestLogCount = new RequestLogCount();
- return Mono.just(requestLogCount);
- }), RequestLogCount.class);
+ return ServerResponse.ok().contentType(MediaType.TEXT_EVENT_STREAM).body(
+ Flux.interval(Duration.ofMinutes(0), Duration.ofSeconds(15)).flatMap(second ->
+ requestLogDao.count().flatMap(count -> {
+ DateTime nowDateTime = DateTime.now();
+ DateTime startDateTime = nowDateTime.minusMinutes(60);
+ String now = nowDateTime.toString(DateTimeFormat.forPattern(ISystemConst.DATE_YYYY_MM_DD_HH_MM));
+ String start = startDateTime.toString(DateTimeFormat.forPattern(ISystemConst.DATE_YYYY_MM_DD_HH_MM));
+ // 这个条件类似
+ // SELECT gmtCreate, count(gmtCreate) FROM log_request WHERE LEFT('gmtCreate', 16) >= '' and LEFT('gmtCreate', 16) <= '' GROUP BY gmtCreate
+ Aggregation aggregation = Aggregation.newAggregation(
+ Aggregation.project().andExpression("{substr(gmtCreate,0,16)}").as("gmtMinute"),
+ Aggregation.match(Criteria.where("gmtMinute").gte(start).lte(now)),
+ Aggregation.group("gmtMinute").count().as("count"),
+ Aggregation.sort(Sort.by("_id").ascending())
+ );
+ AggregationResults aggregate = mongoTemplate.aggregate(aggregation, IRequestLogDao.COLLECTION_NAME, RequestLogLineChat.class);
+ return Mono.just(new SuccessResultData(aggregate.getMappedResults()));
+ })), SuccessResultData.class);
}
}
diff --git a/src/main/java/ink/wgink/gateway/pojo/count/RequestLogCount.java b/src/main/java/ink/wgink/gateway/pojo/count/RequestLogLineChat.java
similarity index 81%
rename from src/main/java/ink/wgink/gateway/pojo/count/RequestLogCount.java
rename to src/main/java/ink/wgink/gateway/pojo/count/RequestLogLineChat.java
index d2976fa..b3062bd 100644
--- a/src/main/java/ink/wgink/gateway/pojo/count/RequestLogCount.java
+++ b/src/main/java/ink/wgink/gateway/pojo/count/RequestLogLineChat.java
@@ -1,9 +1,9 @@
package ink.wgink.gateway.pojo.count;
import ink.wgink.gateway.dao.log.IRequestLogDao;
-import ink.wgink.gateway.pojo.BasePOJO;
import lombok.Data;
import lombok.ToString;
+import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
@@ -21,10 +21,11 @@ import java.io.Serializable;
@Data
@ToString
@Document(collection = IRequestLogDao.COLLECTION_NAME)
-public class RequestLogCount implements Serializable {
+public class RequestLogLineChat implements Serializable {
private static final long serialVersionUID = 289254213770448241L;
- private String gmtCreate;
+ @Id
+ private String gmtMinute;
private Long count;
}
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application-dev.yml
similarity index 100%
rename from src/main/resources/application.yml
rename to src/main/resources/application-dev.yml
diff --git a/src/main/resources/static/wg/home.html b/src/main/resources/static/wg/home.html
index 1b5d62b..749be98 100644
--- a/src/main/resources/static/wg/home.html
+++ b/src/main/resources/static/wg/home.html
@@ -10,7 +10,7 @@