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 new file mode 100644 index 0000000..4b18229 --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java @@ -0,0 +1,24 @@ +package com.example.controller; + +import com.example.entity.RestBean; +import com.example.entity.vo.response.ClientPreviewVO; +import com.example.service.ClientService; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/api/monitor") +public class MonitorController { + + @Resource + ClientService service; + + @GetMapping("/list") + public RestBean> listAllClient() { + return RestBean.success(service.listClients()); + } +} diff --git a/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/ClientPreviewVO.java b/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/ClientPreviewVO.java new file mode 100644 index 0000000..dd690fe --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/ClientPreviewVO.java @@ -0,0 +1,21 @@ +package com.example.entity.vo.response; + +import lombok.Data; + +@Data +public class ClientPreviewVO { + int id; + boolean online; + String name; + String location; + String osName; + String osVersion; + String ip; + String cpuName; + int cpuCore; + double memory; + double cpuUsage; + double memoryUsage; + double networkUpload; + double networkDownload; +} 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 6892308..248ea9e 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 @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.example.entity.dto.Client; import com.example.entity.vo.request.ClientDetailVO; import com.example.entity.vo.request.RuntimeDetailVO; +import com.example.entity.vo.response.ClientPreviewVO; + +import java.util.List; public interface ClientService extends IService { String registerToken(); @@ -12,4 +15,5 @@ public interface ClientService extends IService { boolean verifyAndRegister(String token); void updateClientDetail(ClientDetailVO vo, Client client); void updateRuntimeDetail(RuntimeDetailVO vo, Client client); + List listClients(); } 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 da69452..8133051 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 @@ -5,6 +5,7 @@ import com.example.entity.dto.Client; import com.example.entity.dto.ClientDetail; import com.example.entity.vo.request.ClientDetailVO; import com.example.entity.vo.request.RuntimeDetailVO; +import com.example.entity.vo.response.ClientPreviewVO; import com.example.mapper.ClientDetailMapper; import com.example.mapper.ClientMapper; import com.example.service.ClientService; @@ -89,6 +90,20 @@ public class ClientServiceImpl extends ServiceImpl impleme influx.writeRuntimeData(client.getId(), oldData); } + @Override + public List listClients() { + return clientIdCache.values().stream().map(client -> { + ClientPreviewVO vo = client.asViewObject(ClientPreviewVO.class); + BeanUtils.copyProperties(detailMapper.selectById(vo.getId()), vo); + RuntimeDetailVO runtime = lastRuntime.get(client); + if(runtime != null && System.currentTimeMillis() - runtime.getTimestamp() < 60 * 1000) { + BeanUtils.copyProperties(runtime, vo); + vo.setOnline(true); + } + return vo; + }).toList(); + } + private void addClientCache(Client client) { clientIdCache.put(client.getId(), client); clientTokenCache.put(client.getToken(), client); diff --git a/itbaima-monitor-server/src/main/java/com/example/utils/Const.java b/itbaima-monitor-server/src/main/java/com/example/utils/Const.java index 6e6882a..3ff9502 100644 --- a/itbaima-monitor-server/src/main/java/com/example/utils/Const.java +++ b/itbaima-monitor-server/src/main/java/com/example/utils/Const.java @@ -22,6 +22,5 @@ public final class Const { //消息队列 public final static String MQ_MAIL = "mail"; //用户角色 - public final static String ROLE_DEFAULT = "user"; - + public final static String ROLE_DEFAULT = "admin"; } diff --git a/itbaima-monitor-web/src/component/PreviewCard.vue b/itbaima-monitor-web/src/component/PreviewCard.vue index 43c70dc..8799c20 100644 --- a/itbaima-monitor-web/src/component/PreviewCard.vue +++ b/itbaima-monitor-web/src/component/PreviewCard.vue @@ -1,5 +1,16 @@