Pārlūkot izejas kodu

docs: 完善 README 文档,添加启动脚本

新增: start.bat(Windows一键启动), start.sh(Linux/macOS一键启动), 完善README(含目录/环境依赖/快速开始/启动命令/使用说明/部署说明/项目结构/常见问题)
肖天鹤 1 nedēļu atpakaļ
vecāks
revīzija
ddb6343536
3 mainītis faili ar 226 papildinājumiem un 99 dzēšanām
  1. 188 99
      README.md
  2. 20 0
      start.bat
  3. 18 0
      start.sh

+ 188 - 99
README.md

@@ -1,9 +1,24 @@
 # 网页端本机硬件设备基础信息监控系统
 
-## 1. 项目简介
-
 基于 **Java 21 + Spring Boot 3.4 + React 18** 的本机硬件监控系统,通过 OSHI 采集硬件指标,WebSocket 实时推送至前端仪表盘,支持历史数据持久化与趋势分析。
 
+---
+
+## 目录
+
+- [1. 项目简介](#1-项目简介)
+- [2. 环境依赖](#2-环境依赖)
+- [3. 快速开始](#3-快速开始)
+- [4. 启动命令](#4-启动命令)
+- [5. 使用说明](#5-使用说明)
+- [6. 部署说明](#6-部署说明)
+- [7. 项目结构](#7-项目结构)
+- [8. 常见问题](#8-常见问题)
+
+---
+
+## 1. 项目简介
+
 ### 技术栈
 
 | 层 | 技术 |
@@ -25,67 +40,128 @@
 | 网络 | 上下行速率、接口详情、MAC/IP 脱敏 |
 | 系统 | 主板、BIOS、OS 版本 |
 
+### 页面功能
+
+| 页面 | 路由 | 功能说明 |
+|------|------|----------|
+| 仪表盘总览 | `/` | 6 个核心指标卡片,异常告警高亮 |
+| CPU 详情 | `/cpu` | 各核心柱状图 + 温度 + 频率 |
+| 内存详情 | `/memory` | 环形图 + 交换分区 + 内存条表格 |
+| 磁盘详情 | `/disk` | 容量饼图 + 读写速率 + S.M.A.R.T. |
+| GPU 详情 | `/gpu` | 仪表盘 + 温度 + 显存 |
+| 网络详情 | `/network` | 实时速率对比 + 接口详情 |
+| 系统信息 | `/system` | 主板/BIOS/OS 静态信息 |
+| 历史趋势 | `/history` | 时间范围 + 指标类型筛选 |
+
+---
+
+## 2. 环境依赖
+
+| 依赖 | 版本 | 说明 |
+|------|------|------|
+| JDK | 21+ | 后端运行环境 |
+| Maven | 3.9+ | 后端构建工具 |
+| Node.js | 18+ | 前端构建工具(仅开发/构建时需要) |
+| 操作系统 | Windows / Linux / macOS | 支持主流桌面系统 |
+
 ---
 
-## 2. 使用说明
+## 3. 快速开始
 
-### 2.1 启动方式
+### 3.1 一键启动(推荐)
 
-#### 方式一:开发模式(前后端分离)
+**Windows:**
 
 ```bash
-# 终端 1:启动后端
-cd hw-monitor
-mvn clean package -DskipTests
-java -jar target/hw-monitor-1.0.0.jar
+# 双击 start.bat 即可启动
+start.bat
+```
 
-# 终端 2:启动前端开发服务器
-cd hw-monitor/frontend
-npm install
-npm run dev
+**Linux / macOS:**
+
+```bash
+chmod +x start.sh
+./start.sh
 ```
 
-访问 **http://127.0.0.1:3000** 查看仪表盘。
+启动后浏览器自动打开 `http://127.0.0.1:9988`
 
-#### 方式二:生产模式(前端打包进后端)
+### 3.2 手动启动
+
+```bash
+java -Xms256m -Xmx512m -jar target/hw-monitor-1.0.0.jar
+```
+
+### 3.3 从源码构建
 
 ```bash
 # 1. 构建前端
-cd hw-monitor/frontend
+cd frontend
 npm install
 npm run build
 
-# 2. 复制构建产物到 static 目录
-cp -r dist/* ../src/main/resources/static/
-
-# 3. 打包并运行
+# 2. 复制前端产物到后端 static 目录(Windows PowerShell)
 cd ..
+Copy-Item -Recurse .\frontend\dist .\src\main\resources\static -Force
+
+# 2. 复制前端产物到后端 static 目录(Linux / macOS)
+cp -r frontend/dist/* src/main/resources/static/
+
+# 3. 打包
 mvn clean package -DskipTests
+
+# 4. 启动
 java -jar target/hw-monitor-1.0.0.jar
 ```
 
-访问 **http://127.0.0.1:9988** 查看仪表盘。
+### 3.4 开发模式(前后端分离)
 
-### 2.2 页面导航
+```bash
+# 终端 1:启动后端
+mvn clean package -DskipTests
+java -jar target/hw-monitor-1.0.0.jar
 
-| 页面 | 路由 | 功能说明 |
-|------|------|----------|
-| 仪表盘总览 | `/` | 6 个核心指标卡片,异常告警高亮 |
-| CPU 详情 | `/cpu` | 各核心柱状图 + 温度 + 频率 |
-| 内存详情 | `/memory` | 环形图 + 交换分区 + 内存条表格 |
-| 磁盘详情 | `/disk` | 容量饼图 + 读写速率 + S.M.A.R.T. |
-| GPU 详情 | `/gpu` | 仪表盘 + 温度 + 显存 |
-| 网络详情 | `/network` | 实时速率对比 + 接口详情 |
-| 系统信息 | `/system` | 主板/BIOS/OS 静态信息 |
-| 历史趋势 | `/history` | 时间范围 + 指标类型筛选 |
+# 终端 2:启动前端开发服务器(支持热更新)
+cd frontend
+npm install
+npm run dev
+```
 
-### 2.3 采集频率切换
+访问 `http://127.0.0.1:3000`,API 请求自动代理到 `9988` 端口。
 
-Header 右侧提供 **30 秒 / 60 秒** 两档切换按钮,点击即时生效,无需重启。
+---
+
+## 4. 启动命令
+
+| 命令 | 说明 |
+|------|------|
+| `java -jar target/hw-monitor-1.0.0.jar` | 直接启动 |
+| `java -Xms256m -Xmx512m -jar target/hw-monitor-1.0.0.jar` | 指定内存限制启动 |
+| `java -jar target/hw-monitor-1.0.0.jar --server.port=8080` | 指定端口启动 |
+| `start.bat` | Windows 一键启动脚本 |
+| `./start.sh` | Linux/macOS 一键启动脚本 |
+
+---
+
+## 5. 使用说明
+
+### 5.1 采集频率切换
+
+Header 右侧提供 **30 秒 / 60 秒** 两档切换按钮,点击即时生效,无需重启。也可通过 API 修改:
+
+```bash
+curl -X PUT http://127.0.0.1:9988/api/v1/config/interval \
+  -H "Content-Type: application/json" \
+  -d '{"intervalSeconds": 60}'
+```
+
+### 5.2 实时刷新
 
-### 2.4 告警阈值
+仪表盘页面顶部提供 **"实时刷新"** 按钮,点击后立即触发一次全量采集并通过 WebSocket 推送最新数据,无需等待定时周期。
 
-仪表盘卡片在以下情况自动红色高亮边框:
+### 5.3 告警阈值
+
+仪表盘卡片在以下情况下自动红色高亮边框:
 
 | 指标 | 阈值 |
 |------|------|
@@ -94,7 +170,7 @@ Header 右侧提供 **30 秒 / 60 秒** 两档切换按钮,点击即时生效
 | 磁盘使用率 | > 90% |
 | 温度 | > 80°C |
 
-### 2.5 REST API
+### 5.4 REST API
 
 | 方法 | 端点 | 说明 |
 |------|------|------|
@@ -106,11 +182,12 @@ Header 右侧提供 **30 秒 / 60 秒** 两档切换按钮,点击即时生效
 | GET | `/api/v1/network` | 获取网络详情 |
 | GET | `/api/v1/system` | 获取系统信息 |
 | GET | `/api/v1/history` | 获取历史数据(支持 `?start=&end=&category=` 筛选) |
+| POST | `/api/v1/refresh` | 触发即时采集 |
 | GET | `/api/v1/config/interval` | 获取当前采集间隔 |
 | PUT | `/api/v1/config/interval` | 修改采集间隔(body: `{"intervalSeconds": 30}`) |
 | GET | `/api/v1/health` | 健康检查 |
 
-### 2.6 WebSocket
+### 5.5 WebSocket
 
 - 地址:`ws://127.0.0.1:9988/ws/metrics`
 - 推送频率:与采集间隔一致(默认 30 秒)
@@ -121,30 +198,21 @@ Header 右侧提供 **30 秒 / 60 秒** 两档切换按钮,点击即时生效
   "type": "metrics",
   "timestamp": 1700000000000,
   "data": {
-    "cpu": { "usagePercent": 23.0, "temperature": 45.0, ... },
-    "memory": { "usagePercent": 74.2, "usedBytes": 25125584896, ... },
-    "disk": { "partitions": [...] },
-    "gpu": { "name": "Intel(R) Arc(TM) 130T GPU", ... },
-    "network": { "interfaces": [...] },
-    "system": { "osName": "Windows 11", ... }
+    "cpu": { "usagePercent": 23.0, "temperature": 45.0 },
+    "memory": { "usagePercent": 74.2, "usedBytes": 25125584896 },
+    "disk": { "partitions": [{"usagePercent": 21.6, "usedBytes": 214255665152}] },
+    "gpu": { "name": "Intel(R) Arc(TM) 130T GPU" },
+    "network": { "interfaces": [] },
+    "system": { "osName": "Windows 11" }
   }
 }
 ```
 
 ---
 
-## 3. 部署说明
-
-### 3.1 环境要求
+## 6. 部署说明
 
-| 依赖 | 版本 |
-|------|------|
-| JDK | 21+ |
-| Maven | 3.9+ |
-| Node.js | 18+ (仅前端开发) |
-| 操作系统 | Windows / Linux / macOS |
-
-### 3.2 配置参数
+### 6.1 配置参数
 
 所有可配置参数位于 `src/main/resources/application.yml`:
 
@@ -173,24 +241,23 @@ hwmonitor:
     read-only: true            # 只读模式
 ```
 
-### 3.3 安全措施
+### 6.2 安全措施
 
 | 措施 | 说明 |
 |------|------|
 | 网络隔离 | 服务仅监听 `127.0.0.1`,不对外暴露 |
-| 只读原则 | 所有 API 均为 `GET` 请求(除配置修改外) |
+| 只读原则 | 所有数据采集 API 均为 `GET` 请求 |
 | 数据脱敏 | MAC 地址掩码、公网 IP 仅显示前两段、磁盘序列号脱敏 |
 | 日志安全 | 不输出敏感硬件信息 |
 | H2 Console | 已禁用 |
-| Actuator | 仅暴露 `/health` 端点 |
 
-### 3.4 数据存储
+### 6.3 数据存储
 
 - 数据库文件:`./data/hwmonitor.mv.db`
 - 历史数据每天凌晨 3:00 自动清理超过 7 天的记录
-- 若要重置数据,删除 `./data` 目录后重启即可
+- 如需重置数据,删除 `./data` 目录后重启即可
 
-### 3.5 系统服务部署(Windows)
+### 6.4 Windows 服务部署
 
 使用 WinSW 将 jar 注册为 Windows 服务:
 
@@ -218,7 +285,7 @@ hw-monitor-service.exe install
 hw-monitor-service.exe start
 ```
 
-### 3.6 系统服务部署(Linux)
+### 6.5 Linux systemd 部署
 
 ```ini
 # /etc/systemd/system/hw-monitor.service
@@ -246,60 +313,82 @@ sudo systemctl start hw-monitor
 
 ---
 
-## 4. 项目结构
+## 7. 项目结构
 
 ```
 hw-monitor/
+├── start.bat                          # Windows 一键启动脚本
+├── start.sh                           # Linux/macOS 一键启动脚本
+├── pom.xml                            # Maven 配置
+├── README.md                          # 项目文档
+├── .gitignore                         # Git 忽略规则
 ├── src/main/java/com/hwmonitor/
 │   ├── HwMonitorApplication.java      # Spring Boot 启动类
-│   ├── collector/                      # 硬件采集器(6个)
-│   │   ├── CpuCollector.java
-│   │   ├── MemoryCollector.java
-│   │   ├── DiskCollector.java
-│   │   ├── GpuCollector.java
-│   │   ├── NetworkCollector.java
-│   │   └── SystemCollector.java
-│   ├── config/                         # 配置类
-│   │   ├── BrowserLauncher.java        # 启动自动打开浏览器
-│   │   ├── CacheConfig.java            # Caffeine 缓存
-│   │   ├── MonitorConfig.java          # 采集频率配置
-│   │   └── WebSocketConfig.java        # WebSocket 配置
-│   ├── controller/                     # 控制器
-│   │   ├── MetricsController.java      # REST API
-│   │   ├── ConfigController.java       # 配置 API
-│   │   ├── HistoryController.java      # 历史数据 API
-│   │   └── MetricsWebSocketHandler.java # WebSocket 处理器
-│   ├── model/                          # 数据模型
-│   │   ├── dto/                        # 7个 DTO
-│   │   └── entity/                     # 1个实体
-│   ├── repository/                     # JPA Repository
-│   ├── scheduler/                      # 定时调度
-│   └── service/                        # 业务服务
+│   ├── collector/                     # 硬件采集器(6个)
+│   │   ├── CpuCollector.java          # CPU 采集
+│   │   ├── MemoryCollector.java       # 内存采集
+│   │   ├── DiskCollector.java         # 磁盘采集
+│   │   ├── GpuCollector.java          # GPU 采集
+│   │   ├── NetworkCollector.java      # 网络采集(含 IP 脱敏)
+│   │   └── SystemCollector.java       # 系统信息采集
+│   ├── config/                        # 配置类
+│   │   ├── BrowserLauncher.java       # 启动自动打开浏览器
+│   │   ├── CacheConfig.java           # Caffeine 缓存
+│   │   ├── MonitorConfig.java         # 采集频率动态配置
+│   │   └── WebSocketConfig.java       # WebSocket 配置
+│   ├── controller/                    # 控制器
+│   │   ├── MetricsController.java     # REST API + 刷新端点
+│   │   ├── ConfigController.java      # 配置管理 API
+│   │   ├── HistoryController.java     # 历史数据 API
+│   │   └── MetricsWebSocketHandler.java # WebSocket 推送
+│   ├── model/                         # 数据模型
+│   │   ├── dto/                       # 7 个数据传输对象
+│   │   └── entity/                    # 1  JPA 实体
+│   ├── repository/                    # JPA Repository
+│   ├── scheduler/                     # 定时调度(动态 TaskScheduler)
+│   └── service/                       # 业务服务
 ├── src/main/resources/
-│   └── application.yml                 # 全局配置
-├── frontend/                           # 前端项目
-│   └── src/
-│       ├── components/                 # 页面组件(8个)
-│       ├── services/api.ts             # API 封装
-│       ├── store/metricsStore.ts       # 状态管理
-│       ├── types.ts                    # TypeScript 类型
-│       └── App.tsx                     # 根组件
-└── pom.xml                             # Maven 配置
+│   ├── application.yml                # 全局配置
+│   └── static/                        # 前端打包产物
+└── frontend/                          # 前端源码
+    ├── package.json                   # 前端依赖
+    ├── vite.config.ts                 # Vite 配置
+    └── src/
+        ├── App.tsx                    # 根组件 + 路由
+        ├── main.tsx                   # 入口
+        ├── types.ts                   # TypeScript 类型
+        ├── components/                # 页面组件(8个)
+        │   ├── Dashboard/             # 仪表盘总览
+        │   ├── CpuDetail/             # CPU 详情
+        │   ├── MemoryDetail/          # 内存详情
+        │   ├── DiskDetail/            # 磁盘详情
+        │   ├── GpuDetail/             # GPU 详情
+        │   ├── NetworkDetail/         # 网络详情
+        │   ├── SystemInfo/            # 系统信息
+        │   ├── History/               # 历史趋势
+        │   └── Layout/                # 布局(含频率切换 + 连接状态)
+        ├── services/api.ts            # API 封装
+        └── store/metricsStore.ts      # Zustand 状态管理
 ```
 
-## 5. 常见问题
+---
+
+## 8. 常见问题
 
 **Q: 启动后浏览器显示"连接断开"?**
 A: 等待 3-5 秒,WebSocket 会自动重连。若持续断开,检查后端是否正常启动在 9988 端口。
 
 **Q: 磁盘使用率显示 0%?**
-A: 某些磁盘分区信息需管理员权限才能获取使用量,以管理员身份运行可解决。
+A: 以管理员身份运行可解决部分权限问题。本项目已修复 Windows 下分区匹配逻辑,正常情况应显示非零值
 
 **Q: GPU 信息显示 "--"?**
 A: OSHI 在某些平台无法获取 GPU 使用率,型号和显存信息正常即可。
 
 **Q: 如何修改采集频率?**
-A: 方式一:点击前端 Header 右侧 30秒/60秒 按钮即时切换;方式二:修改 `application.yml` 中的 `collect-interval-seconds` 配置后重启。
+A: 方式一:点击前端 Header 右侧 30秒/60秒 按钮即时切换;方式二:通过 API 修改;方式三:修改 `application.yml` 后重启。
 
 **Q: 历史数据占用空间大吗?**
-A: 按默认 30 秒采集间隔,每条记录约 100 字节,7 天约产生 2MB 数据,可忽略不计。
+A: 按默认 30 秒采集间隔,每条记录约 100 字节,7 天约产生 2MB 数据,可忽略不计。
+
+**Q: 如何卸载服务?**
+A: Windows: `hw-monitor-service.exe uninstall`;Linux: `sudo systemctl stop hw-monitor && sudo systemctl disable hw-monitor`。

+ 20 - 0
start.bat

@@ -0,0 +1,20 @@
+@echo off
+chcp 65001 >nul
+title 硬件监控仪表盘
+
+set JAVA_OPTS=-Xms256m -Xmx512m -Dfile.encoding=UTF-8
+
+echo ============================================
+echo   硬件监控仪表盘 v1.0.0
+echo ============================================
+echo.
+echo   端口: 9988
+echo   地址: http://127.0.0.1:9988
+echo.
+echo   启动中...
+echo ============================================
+
+cd /d "%~dp0"
+java %JAVA_OPTS% -jar target\hw-monitor-1.0.0.jar
+
+pause

+ 18 - 0
start.sh

@@ -0,0 +1,18 @@
+#!/bin/bash
+# 硬件监控仪表盘 - Linux 启动脚本
+
+JAVA_OPTS="-Xms256m -Xmx512m -Dfile.encoding=UTF-8"
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+
+echo "============================================"
+echo "  硬件监控仪表盘 v1.0.0"
+echo "============================================"
+echo ""
+echo "  端口: 9988"
+echo "  地址: http://127.0.0.1:9988"
+echo ""
+echo "  启动中..."
+echo "============================================"
+
+cd "$SCRIPT_DIR"
+java $JAVA_OPTS -jar target/hw-monitor-1.0.0.jar