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 @@