From 901e8c01e98090566402a797e6b19dbb0d702d52 Mon Sep 17 00:00:00 2001 From: nagocoler Date: Tue, 12 Dec 2023 22:41:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=8E=86=E5=8F=B2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=8E=B7=E5=8F=96=EF=BC=8C=E8=AF=A6=E7=BB=86=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=9B=91=E6=8E=A7=E4=BF=A1=E6=81=AF=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/controller/MonitorController.java | 12 +++++ .../entity/vo/response/RuntimeHistoryVO.java | 14 ++++++ .../com/example/filter/RequestLogFilter.java | 3 +- .../com/example/service/ClientService.java | 3 ++ .../service/impl/ClientServiceImpl.java | 14 ++++++ .../java/com/example/utils/InfluxDbUtils.java | 30 ++++++++++++ .../src/main/resources/application-dev.yml | 4 +- .../src/main/resources/application-prod.yml | 4 +- .../src/component/ClientDetails.vue | 49 +++++++++++++------ 9 files changed, 114 insertions(+), 19 deletions(-) create mode 100644 itbaima-monitor-server/src/main/java/com/example/entity/vo/response/RuntimeHistoryVO.java diff --git a/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java b/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java index 8ecb667..14a389d 100644 --- a/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java +++ b/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java @@ -3,8 +3,10 @@ package com.example.controller; import com.example.entity.RestBean; import com.example.entity.vo.request.RenameClientVO; import com.example.entity.vo.request.RenameNodeVO; +import com.example.entity.vo.request.RuntimeDetailVO; import com.example.entity.vo.response.ClientDetailsVO; import com.example.entity.vo.response.ClientPreviewVO; +import com.example.entity.vo.response.RuntimeHistoryVO; import com.example.service.ClientService; import jakarta.annotation.Resource; import jakarta.validation.Valid; @@ -40,4 +42,14 @@ public class MonitorController { public RestBean details(int clientId) { return RestBean.success(service.clientDetails(clientId)); } + + @GetMapping("/runtime-history") + public RestBean runtimeDetailsHistory(int clientId) { + return RestBean.success(service.clientRuntimeDetailsHistory(clientId)); + } + + @GetMapping("/runtime-now") + public RestBean runtimeDetailsNow(int clientId) { + return RestBean.success(service.clientRuntimeDetailsNow(clientId)); + } } diff --git a/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/RuntimeHistoryVO.java b/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/RuntimeHistoryVO.java new file mode 100644 index 0000000..c9e3a37 --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/RuntimeHistoryVO.java @@ -0,0 +1,14 @@ +package com.example.entity.vo.response; + +import com.alibaba.fastjson2.JSONObject; +import lombok.Data; + +import java.util.LinkedList; +import java.util.List; + +@Data +public class RuntimeHistoryVO { + double disk; + double memory; + List list = new LinkedList<>(); +} diff --git a/itbaima-monitor-server/src/main/java/com/example/filter/RequestLogFilter.java b/itbaima-monitor-server/src/main/java/com/example/filter/RequestLogFilter.java index 1840062..1cf273d 100644 --- a/itbaima-monitor-server/src/main/java/com/example/filter/RequestLogFilter.java +++ b/itbaima-monitor-server/src/main/java/com/example/filter/RequestLogFilter.java @@ -29,7 +29,8 @@ public class RequestLogFilter extends OncePerRequestFilter { @Resource SnowflakeIdGenerator generator; - private final Set ignores = Set.of("/swagger-ui", "/v3/api-docs", "/monitor/runtime", "/api/monitor/list"); + private final Set ignores = Set.of("/swagger-ui", "/v3/api-docs", "/monitor/runtime", + "/api/monitor/list", "/api/monitor/runtime-now"); @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { diff --git a/itbaima-monitor-server/src/main/java/com/example/service/ClientService.java b/itbaima-monitor-server/src/main/java/com/example/service/ClientService.java index 4346e08..0b675b9 100644 --- a/itbaima-monitor-server/src/main/java/com/example/service/ClientService.java +++ b/itbaima-monitor-server/src/main/java/com/example/service/ClientService.java @@ -8,6 +8,7 @@ import com.example.entity.vo.request.RenameNodeVO; import com.example.entity.vo.request.RuntimeDetailVO; import com.example.entity.vo.response.ClientDetailsVO; import com.example.entity.vo.response.ClientPreviewVO; +import com.example.entity.vo.response.RuntimeHistoryVO; import java.util.List; @@ -22,4 +23,6 @@ public interface ClientService extends IService { void renameClient(RenameClientVO vo); void renameNode(RenameNodeVO vo); ClientDetailsVO clientDetails(int clientId); + RuntimeHistoryVO clientRuntimeDetailsHistory(int clientId); + RuntimeDetailVO clientRuntimeDetailsNow(int clientId); } diff --git a/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java b/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java index 0e49858..6a2ae03 100644 --- a/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java +++ b/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java @@ -10,6 +10,7 @@ import com.example.entity.vo.request.RenameNodeVO; import com.example.entity.vo.request.RuntimeDetailVO; import com.example.entity.vo.response.ClientDetailsVO; import com.example.entity.vo.response.ClientPreviewVO; +import com.example.entity.vo.response.RuntimeHistoryVO; import com.example.mapper.ClientDetailMapper; import com.example.mapper.ClientMapper; import com.example.service.ClientService; @@ -126,6 +127,19 @@ public class ClientServiceImpl extends ServiceImpl impleme return vo; } + @Override + public RuntimeHistoryVO clientRuntimeDetailsHistory(int clientId) { + RuntimeHistoryVO vo = influx.readRuntimeData(clientId); + ClientDetail detail = detailMapper.selectById(clientId); + BeanUtils.copyProperties(detail, vo); + return vo; + } + + @Override + public RuntimeDetailVO clientRuntimeDetailsNow(int clientId) { + return currentRuntime.get(clientId); + } + private boolean isOnline(RuntimeDetailVO runtime) { return runtime != null && System.currentTimeMillis() - runtime.getTimestamp() < 60 * 1000; } diff --git a/itbaima-monitor-server/src/main/java/com/example/utils/InfluxDbUtils.java b/itbaima-monitor-server/src/main/java/com/example/utils/InfluxDbUtils.java index a2b4c32..90cd73c 100644 --- a/itbaima-monitor-server/src/main/java/com/example/utils/InfluxDbUtils.java +++ b/itbaima-monitor-server/src/main/java/com/example/utils/InfluxDbUtils.java @@ -1,17 +1,22 @@ package com.example.utils; +import com.alibaba.fastjson2.JSONObject; import com.example.entity.dto.RuntimeData; import com.example.entity.vo.request.RuntimeDetailVO; +import com.example.entity.vo.response.RuntimeHistoryVO; import com.influxdb.client.InfluxDBClient; import com.influxdb.client.InfluxDBClientFactory; import com.influxdb.client.WriteApiBlocking; import com.influxdb.client.domain.WritePrecision; +import com.influxdb.query.FluxRecord; +import com.influxdb.query.FluxTable; import jakarta.annotation.PostConstruct; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Date; +import java.util.List; @Component public class InfluxDbUtils { @@ -41,4 +46,29 @@ public class InfluxDbUtils { WriteApiBlocking writeApi = client.getWriteApiBlocking(); writeApi.writeMeasurement(BUCKET, ORG, WritePrecision.NS, data); } + + public RuntimeHistoryVO readRuntimeData(int clientId) { + RuntimeHistoryVO vo = new RuntimeHistoryVO(); + String query = """ + from(bucket: "%s") + |> range(start: %s) + |> filter(fn: (r) => r["_measurement"] == "runtime") + |> filter(fn: (r) => r["clientId"] == "%s") + """; + String format = String.format(query, BUCKET, "-1h", clientId); + List tables = client.getQueryApi().query(format, ORG); + int size = tables.size(); + if (size == 0) return vo; + List records = tables.get(0).getRecords(); + for (int i = 0; i < records.size(); i++) { + JSONObject object = new JSONObject(); + object.put("timestamp", records.get(i).getTime()); + for (int j = 0; j < size; j++) { + FluxRecord record = tables.get(j).getRecords().get(i); + object.put(record.getField(), record.getValue()); + } + vo.getList().add(object); + } + return vo; + } } diff --git a/itbaima-monitor-server/src/main/resources/application-dev.yml b/itbaima-monitor-server/src/main/resources/application-dev.yml index 9a8688b..390e100 100644 --- a/itbaima-monitor-server/src/main/resources/application-dev.yml +++ b/itbaima-monitor-server/src/main/resources/application-dev.yml @@ -36,8 +36,8 @@ spring: verify: mail-limit: 60 flow: - period: 3 - limit: 50 + period: 5 + limit: 100 block: 30 cors: origin: '*' diff --git a/itbaima-monitor-server/src/main/resources/application-prod.yml b/itbaima-monitor-server/src/main/resources/application-prod.yml index f81dc41..c0e504c 100644 --- a/itbaima-monitor-server/src/main/resources/application-prod.yml +++ b/itbaima-monitor-server/src/main/resources/application-prod.yml @@ -40,8 +40,8 @@ spring: verify: mail-limit: 60 flow: - period: 3 - limit: 10 + period: 5 + limit: 100 block: 30 cors: origin: '*' diff --git a/itbaima-monitor-web/src/component/ClientDetails.vue b/itbaima-monitor-web/src/component/ClientDetails.vue index b025388..169850d 100644 --- a/itbaima-monitor-web/src/component/ClientDetails.vue +++ b/itbaima-monitor-web/src/component/ClientDetails.vue @@ -1,7 +1,7 @@