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 14a389d..5a34464 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 @@ -52,4 +52,15 @@ public class MonitorController { public RestBean runtimeDetailsNow(int clientId) { return RestBean.success(service.clientRuntimeDetailsNow(clientId)); } + + @GetMapping("/register") + public RestBean registerToken() { + return RestBean.success(service.registerToken()); + } + + @GetMapping("/delete") + public RestBean deleteClient(int clientId) { + service.deleteClient(clientId); + return RestBean.success(); + } } 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 0b675b9..ade9bb7 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 @@ -25,4 +25,5 @@ public interface ClientService extends IService { ClientDetailsVO clientDetails(int clientId); RuntimeHistoryVO clientRuntimeDetailsHistory(int clientId); RuntimeDetailVO clientRuntimeDetailsNow(int clientId); + void deleteClient(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 6a2ae03..7cabef6 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 @@ -40,6 +40,8 @@ public class ClientServiceImpl extends ServiceImpl impleme @PostConstruct public void initClientCache() { + clientTokenCache.clear(); + clientIdCache.clear(); this.list().forEach(this::addClientCache); } @@ -140,6 +142,14 @@ public class ClientServiceImpl extends ServiceImpl impleme return currentRuntime.get(clientId); } + @Override + public void deleteClient(int clientId) { + this.removeById(clientId); + detailMapper.deleteById(clientId); + this.initClientCache(); + currentRuntime.remove(clientId); + } + private boolean isOnline(RuntimeDetailVO runtime) { return runtime != null && System.currentTimeMillis() - runtime.getTimestamp() < 60 * 1000; } @@ -159,7 +169,6 @@ public class ClientServiceImpl extends ServiceImpl impleme StringBuilder sb = new StringBuilder(24); for (int i = 0; i < 24; i++) sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length()))); - System.out.println(sb); return sb.toString(); } } diff --git a/itbaima-monitor-web/src/component/ClientDetails.vue b/itbaima-monitor-web/src/component/ClientDetails.vue index ff94995..04fc999 100644 --- a/itbaima-monitor-web/src/component/ClientDetails.vue +++ b/itbaima-monitor-web/src/component/ClientDetails.vue @@ -2,8 +2,9 @@ import {computed, reactive, watch} from "vue"; import {get, post} from "@/net"; import {copyIp, cpuNameToImage, fitByUnit, osNameToIcon, percentageToStatus, rename} from "@/tools"; -import {ElMessage} from "element-plus"; +import {ElMessage, ElMessageBox} from "element-plus"; import RuntimeHistory from "@/component/RuntimeHistory.vue"; +import {Delete} from "@element-plus/icons-vue"; const locations = [ {name: 'cn', desc: '中国大陆'}, @@ -19,6 +20,7 @@ const props = defineProps({ id: Number, update: Function }) +const emits = defineEmits(['delete']) const details = reactive({ base: {}, @@ -48,6 +50,20 @@ const submitNodeEdit = () => { }) } +function deleteClient() { + ElMessageBox.confirm('删除此主机后所有统计数据都将丢失,您确定要这样做吗?', '删除主机', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + get(`/api/monitor/delete?clientId=${props.id}`, () => { + emits('delete') + props.update() + ElMessage.success('主机已成功移除') + }) + }).catch(() => {}) +} + function updateDetails() { props.update() init(props.id) @@ -56,7 +72,8 @@ function updateDetails() { setInterval(() => { if(props.id !== -1 && details.runtime) { get(`/api/monitor/runtime-now?clientId=${props.id}`, data => { - details.runtime.list.splice(0, 1) + if(details.runtime.list.length >= 360) + details.runtime.list.splice(0, 1) details.runtime.list.push(data) }) } @@ -79,9 +96,13 @@ watch(() => props.id, init, { immediate: true })
-
- - 服务器信息 +
+
+ + 服务器信息 +
+ 删除此主机
diff --git a/itbaima-monitor-web/src/component/RegisterCard.vue b/itbaima-monitor-web/src/component/RegisterCard.vue new file mode 100644 index 0000000..9edb5fe --- /dev/null +++ b/itbaima-monitor-web/src/component/RegisterCard.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/itbaima-monitor-web/src/views/main/Manage.vue b/itbaima-monitor-web/src/views/main/Manage.vue index c5aa7ea..b9ded02 100644 --- a/itbaima-monitor-web/src/views/main/Manage.vue +++ b/itbaima-monitor-web/src/views/main/Manage.vue @@ -3,6 +3,8 @@ import PreviewCard from "@/component/PreviewCard.vue"; import {reactive, ref} from "vue"; import {get} from "@/net"; import ClientDetails from "@/component/ClientDetails.vue"; +import RegisterCard from "@/component/RegisterCard.vue"; +import {Plus} from "@element-plus/icons-vue"; const list = ref([]) @@ -18,20 +20,39 @@ const displayClientDetails = (id) => { detail.show = true detail.id = id } + +const register = reactive({ + show: false, + token: '' +}) +const refreshToken = () => get('/api/monitor/register', token => register.token = token)