From 21530d309e7c5142d9ebd18d34276e67c13e1c6a Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Tue, 31 Jan 2023 11:24:09 +0800 Subject: [PATCH] feat: add actuator view page (#832) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind feature #### What this PR does / why we need it: 添加 Actuator 信息查看页面。适配 https://github.com/halo-dev/halo/pull/3182 todo: - [x] 页面入口 #### Which issue(s) this PR fixes: Fixes https://github.com/halo-dev/halo/issues/3055 #### Screenshots: ![image](https://user-images.githubusercontent.com/21301288/215386617-e3aafc6d-777d-49e8-93c9-b9432623e98e.png) #### Special notes for your reviewer: 测试方式: 1. Halo 需要切换到 https://github.com/halo-dev/halo/pull/3182 分支。 2. Console 需要 `pnpm build:packages` 3. 访问 http://localhost:8090/console#/actuator #### Does this PR introduce a user-facing change? ```release-note Console 端添加系统信息查看页面 ``` --- packages/components/src/icons/icons.ts | 4 + src/modules/index.ts | 2 + src/modules/system/actuator/Actuator.vue | 241 +++++++++++++++++++++ src/modules/system/actuator/module.ts | 32 +++ src/modules/system/actuator/types/index.ts | 91 ++++++++ 5 files changed, 370 insertions(+) create mode 100644 src/modules/system/actuator/Actuator.vue create mode 100644 src/modules/system/actuator/module.ts create mode 100644 src/modules/system/actuator/types/index.ts diff --git a/packages/components/src/icons/icons.ts b/packages/components/src/icons/icons.ts index d22cff3e..de3a42d8 100644 --- a/packages/components/src/icons/icons.ts +++ b/packages/components/src/icons/icons.ts @@ -56,6 +56,8 @@ import IconSendPlaneFill from "~icons/ri/send-plane-fill"; import IconRocketLine from "~icons/ri/rocket-line"; import IconArrowUpCircleLine from "~icons/ri/arrow-up-circle-line"; import IconArrowDownCircleLine from "~icons/ri/arrow-down-circle-line"; +import IconTerminalBoxLine from "~icons/ri/terminal-box-line"; +import IconClipboardLine from "~icons/ri/clipboard-line"; export { IconDashboard, @@ -116,4 +118,6 @@ export { IconRocketLine, IconArrowUpCircleLine, IconArrowDownCircleLine, + IconTerminalBoxLine, + IconClipboardLine, }; diff --git a/src/modules/index.ts b/src/modules/index.ts index a12a470c..7a11a5f6 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -9,6 +9,7 @@ import pluginModule from "./system/plugins/module"; import userModule from "./system/users/module"; import roleModule from "./system/roles/module"; import settingModule from "./system/settings/module"; +import actuatorModule from "./system/actuator/module"; // const coreModules = [ // dashboardModule, @@ -28,6 +29,7 @@ const coreModules = [ postModule, pluginModule, settingModule, + actuatorModule, dashboardModule, menuModule, commentModule, diff --git a/src/modules/system/actuator/Actuator.vue b/src/modules/system/actuator/Actuator.vue new file mode 100644 index 00000000..04e0d73c --- /dev/null +++ b/src/modules/system/actuator/Actuator.vue @@ -0,0 +1,241 @@ + + + diff --git a/src/modules/system/actuator/module.ts b/src/modules/system/actuator/module.ts new file mode 100644 index 00000000..d7f023a1 --- /dev/null +++ b/src/modules/system/actuator/module.ts @@ -0,0 +1,32 @@ +import { definePlugin } from "@halo-dev/console-shared"; +import { IconTerminalBoxLine } from "@halo-dev/components"; +import BasicLayout from "@/layouts/BasicLayout.vue"; +import Actuator from "./Actuator.vue"; +import { markRaw } from "vue"; + +export default definePlugin({ + components: {}, + routes: [ + { + path: "/actuator", + component: BasicLayout, + children: [ + { + path: "", + component: Actuator, + meta: { + title: "系统概览", + searchable: true, + menu: { + name: "概览", + group: "system", + icon: markRaw(IconTerminalBoxLine), + priority: 3, + mobile: true, + }, + }, + }, + ], + }, + ], +}); diff --git a/src/modules/system/actuator/types/index.ts b/src/modules/system/actuator/types/index.ts new file mode 100644 index 00000000..7cccd5b1 --- /dev/null +++ b/src/modules/system/actuator/types/index.ts @@ -0,0 +1,91 @@ +export interface GlobalInfo { + externalUrl: string; + timeZone: string; + locale: string; + allowComments: boolean; + allowAnonymousComments: boolean; + allowRegistration: boolean; +} + +export interface Info { + git?: Git; + build?: Build; + java: Java; + os: Os; +} + +export interface Commit { + id: string; + time: Date; +} + +export interface Git { + branch: string; + commit: Commit; +} + +export interface Build { + artifact: string; + name: string; + time: Date; + version: string; + group: string; +} + +export interface Vendor { + name: string; + version: string; +} + +export interface Runtime { + name: string; + version: string; +} + +export interface Jvm { + name: string; + vendor: string; + version: string; +} + +export interface Java { + version: string; + vendor: Vendor; + runtime: Runtime; + jvm: Jvm; +} + +export interface Os { + name: string; + version: string; + arch: string; +} + +export interface Tag { + key: string; + value: string; +} + +export interface StartupStep { + name: string; + id: number; + tags: Tag[]; + parentId?: number; +} + +export interface Event { + endTime: Date; + duration: string; + startTime: Date; + startupStep: StartupStep; +} + +export interface Timeline { + startTime: Date; + events: Event[]; +} + +export interface Startup { + springBootVersion: string; + timeline: Timeline; +}