From eeb6446c6c4554c95b4f145fcc79b8ec4486cac1 Mon Sep 17 00:00:00 2001 From: nagocoler Date: Sun, 3 Dec 2023 01:02:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8E=86=E5=8F=B2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=8E=B7=E5=8F=96=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=AE=9E?= =?UTF-8?q?=E8=A3=85=E6=9C=8D=E5=8A=A1=E5=99=A8=E8=AF=A6=E7=BB=86=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E5=AE=9E=E6=97=B6=E7=9B=91=E6=8E=A7=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/RuntimeDetailsVO.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 | 28 ++++++++++ .../src/component/ClientDetails.vue | 52 +++++++++++++------ itbaima-monitor-web/src/views/main/Manage.vue | 8 +-- 8 files changed, 114 insertions(+), 20 deletions(-) create mode 100644 itbaima-monitor-server/src/main/java/com/example/entity/vo/response/RuntimeDetailsVO.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 b193b16..9b09023 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.RuntimeDetailsVO; import com.example.service.ClientService; import jakarta.annotation.Resource; import jakarta.validation.Valid; @@ -40,4 +42,14 @@ public class MonitorController { public RestBean clientDetails(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/RuntimeDetailsVO.java b/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/RuntimeDetailsVO.java new file mode 100644 index 0000000..ac3f5a2 --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/RuntimeDetailsVO.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 RuntimeDetailsVO { + double memory; + double disk; + 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..8df4a7b 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"); @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 ab9ba92..16132e3 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.RuntimeDetailsVO; 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); + RuntimeDetailsVO 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 fafa5aa..d7796a7 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.RuntimeDetailsVO; import com.example.mapper.ClientDetailMapper; import com.example.mapper.ClientMapper; import com.example.service.ClientService; @@ -129,6 +130,19 @@ public class ClientServiceImpl extends ServiceImpl impleme return vo; } + @Override + public RuntimeDetailsVO clientRuntimeDetailsHistory(int clientId) { + RuntimeDetailsVO vo = influx.readRuntimeData(); + ClientDetail client = detailMapper.selectById(clientId); + BeanUtils.copyProperties(client, vo); + return vo; + } + + @Override + public RuntimeDetailVO clientRuntimeDetailsNow(int clientId) { + return lastRuntime.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 c0ef686..74e8694 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.RuntimeDetailsVO; 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,27 @@ public class InfluxDbUtils { WriteApiBlocking writeApi = client.getWriteApiBlocking(); writeApi.writeMeasurement(BUCKET, ORG, WritePrecision.NS, data); } + + public RuntimeDetailsVO readRuntimeData() { + String query = """ + from(bucket: "%s") + |> range(start: %s) + |> filter(fn: (r) => r["_measurement"] == "runtime") + """; + String format = String.format(query, BUCKET, "-1h"); + List tables = client.getQueryApi().query(format, ORG); + int size = tables.size(); + List records = tables.get(0).getRecords(); + RuntimeDetailsVO vo = new RuntimeDetailsVO(); + 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-web/src/component/ClientDetails.vue b/itbaima-monitor-web/src/component/ClientDetails.vue index 7714460..867df1b 100644 --- a/itbaima-monitor-web/src/component/ClientDetails.vue +++ b/itbaima-monitor-web/src/component/ClientDetails.vue @@ -1,9 +1,9 @@ @@ -151,37 +169,41 @@ watch(() => props.id, init, { immediate: true }) 实时监控 -
-
- +
+
+
CPU
-
20%
+
{{ (now.cpuUsage * 100).toFixed(1) }}%
+ type="dashboard" :width="100" :percentage="now.memoryUsage / details.runtime.memory * 100" + :status="percentageToStatus(now.memoryUsage / details.runtime.memory * 100)">
内存
-
28.6 GB
+
{{ (now.memoryUsage).toFixed(1) }} GB
实时网络速度
- {{` 20KB/s`}} + {{` ${fitToRightByteUnit(now.networkUpload, 'KB')}/s`}} - {{` 0KB/s`}} + {{` ${fitToRightByteUnit(now.networkDownload, 'KB')}/s`}}
- 磁盘总容量 + 磁盘
-
6.6 GB / 40.0 GB
+
{{now.diskUsage.toFixed(1)}} GB / {{details.runtime.disk.toFixed(1)}} GB
- +
diff --git a/itbaima-monitor-web/src/views/main/Manage.vue b/itbaima-monitor-web/src/views/main/Manage.vue index 297e6e3..b9885fa 100644 --- a/itbaima-monitor-web/src/views/main/Manage.vue +++ b/itbaima-monitor-web/src/views/main/Manage.vue @@ -10,9 +10,9 @@ const detail = reactive({ show: false, id: -1 }) -const displayClientDetails = (id) => { - detail.show = true +const displayClientDetails = id => { detail.id = id + detail.show = true } const updateList = () => get('/api/monitor/list', data => list.value = data) @@ -30,8 +30,8 @@ updateList() @click="displayClientDetails(item.id)"/>
- + :with-header="false" v-if="list.length" @close="detail.id = -1"> +