Private
Public Access
1
0
Files
u-desk/docs/04-功能迭代/GO-DESK-1.尝试/设备调用测试功能设计.md

322 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Go Desk 设备调用测试功能设计
> **文档版本**v0.1.0
> **创建时间**2026-01-20
> **维护者**JueChen
> **状态**:设计阶段
## 1. 功能概述
实现系统资源访问和设备调用测试功能,验证 Wails 应用与系统资源的交互能力。
## 2. 功能需求
### 2.1 系统信息获取
- [ ] CPU 信息:核心数、使用率、型号
- [ ] 内存信息:总内存、已用内存、可用内存
- [ ] 磁盘信息:磁盘列表、总容量、已用容量、可用容量
- [ ] 系统信息:操作系统、架构、主机名
- [ ] 网络信息IP 地址、网络接口列表
### 2.2 文件系统操作
- [ ] 读取文件:读取指定路径的文件内容
- [ ] 写入文件:写入内容到指定文件
- [ ] 列出目录:获取目录下的文件和文件夹列表
- [ ] 创建目录:创建新目录
- [ ] 删除文件/目录:删除指定路径的文件或目录
- [ ] 文件信息:获取文件大小、修改时间、权限等
### 2.3 系统操作
- [ ] 环境变量:读取系统环境变量
- [ ] 执行命令:执行系统命令(可选,需谨慎)
- [ ] 打开文件/目录:使用系统默认程序打开
- [ ] 文件选择对话框:选择文件或目录
### 2.4 进程信息
- [ ] 进程列表:获取当前运行的进程列表
- [ ] 进程详情:获取指定进程的详细信息
## 3. 技术实现
### 3.1 Go 后端实现
#### 3.1.1 系统信息模块
```go
// internal/system/system.go
package system
// GetSystemInfo 获取系统信息
func GetSystemInfo() (map[string]interface{}, error)
// GetCPUInfo 获取 CPU 信息
func GetCPUInfo() (map[string]interface{}, error)
// GetMemoryInfo 获取内存信息
func GetMemoryInfo() (map[string]interface{}, error)
// GetDiskInfo 获取磁盘信息
func GetDiskInfo() ([]map[string]interface{}, error)
```
#### 3.1.2 文件系统模块
```go
// internal/filesystem/fs.go
package filesystem
// ReadFile 读取文件
func ReadFile(path string) (string, error)
// WriteFile 写入文件
func WriteFile(path, content string) error
// ListDir 列出目录
func ListDir(path string) ([]map[string]interface{}, error)
// CreateDir 创建目录
func CreateDir(path string) error
// DeletePath 删除文件或目录
func DeletePath(path string) error
// GetFileInfo 获取文件信息
func GetFileInfo(path string) (map[string]interface{}, error)
```
#### 3.1.3 App 方法暴露
```go
// app.go 中添加方法
// GetSystemInfo 获取系统信息
func (a *App) GetSystemInfo() (map[string]interface{}, error)
// GetCPUInfo 获取 CPU 信息
func (a *App) GetCPUInfo() (map[string]interface{}, error)
// GetMemoryInfo 获取内存信息
func (a *App) GetMemoryInfo() (map[string]interface{}, error)
// GetDiskInfo 获取磁盘信息
func (a *App) GetDiskInfo() ([]map[string]interface{}, error)
// ReadFile 读取文件
func (a *App) ReadFile(path string) (string, error)
// WriteFile 写入文件
func (a *App) WriteFile(path, content string) error
// ListDir 列出目录
func (a *App) ListDir(path string) ([]map[string]interface{}, error)
// CreateDir 创建目录
func (a *App) CreateDir(path string) error
// DeletePath 删除文件或目录
func (a *App) DeletePath(path string) error
// GetFileInfo 获取文件信息
func (a *App) GetFileInfo(path string) (map[string]interface{}, error)
// GetEnvVars 获取环境变量
func (a *App) GetEnvVars() (map[string]string, error)
// OpenPath 打开文件或目录
func (a *App) OpenPath(path string) error
```
### 3.2 前端实现
#### 3.2.1 系统信息展示
- 系统信息卡片Arco Card
- 实时刷新按钮
- 信息表格展示
#### 3.2.2 文件系统操作界面
- 文件浏览器组件
- 路径输入框
- 操作按钮(读取、写入、删除等)
- 文件内容编辑器(文本区域)
#### 3.2.3 测试页面布局
```
┌─────────────────────────────────────┐
│ 系统信息测试 │
├─────────────────────────────────────┤
│ [刷新] │
│ ┌─────────┬─────────┬─────────┐ │
│ │ CPU │ 内存 │ 磁盘 │ │
│ └─────────┴─────────┴─────────┘ │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 文件系统测试 │
├─────────────────────────────────────┤
│ 路径: [________________] [浏览] │
│ ┌───────────────────────────────┐ │
│ │ 文件列表 │ │
│ │ - file1.txt │ │
│ │ - folder1/ │ │
│ └───────────────────────────────┘ │
│ [读取] [写入] [删除] [创建目录] │
└─────────────────────────────────────┘
```
## 4. 依赖库
### 4.1 Go 依赖
```go
// 系统信息
github.com/shirou/gopsutil/v3/cpu
github.com/shirou/gopsutil/v3/mem
github.com/shirou/gopsutil/v3/disk
github.com/shirou/gopsutil/v3/host
// 文件操作
os
path/filepath
io/ioutil
// 系统操作
os/exec
runtime
```
### 4.2 安装命令
```bash
go get github.com/shirou/gopsutil/v3/cpu
go get github.com/shirou/gopsutil/v3/mem
go get github.com/shirou/gopsutil/v3/disk
go get github.com/shirou/gopsutil/v3/host
```
## 5. 实现细节
### 5.1 系统信息获取
**CPU 信息**
- 使用 `gopsutil/cpu` 获取 CPU 核心数、使用率
- 使用 `runtime.NumCPU()` 获取逻辑核心数
**内存信息**
- 使用 `gopsutil/mem` 获取内存统计
- 转换为 MB/GB 单位显示
**磁盘信息**
- 使用 `gopsutil/disk` 获取磁盘分区和使用情况
- 过滤系统盘和可访问盘
**系统信息**
- 使用 `gopsutil/host` 获取主机信息
- 使用 `runtime.GOOS``runtime.GOARCH` 获取平台信息
### 5.2 文件系统操作
**路径安全**
- 验证路径合法性
- 防止路径遍历攻击
- 限制操作范围(可选)
**错误处理**
- 文件不存在
- 权限不足
- 路径无效
**文件编码**
- 文本文件使用 UTF-8
- 二进制文件提示用户
### 5.3 跨平台兼容
- Windows使用 `os/exec` 执行系统命令
- Linux/Mac使用相应的系统调用
- 路径分隔符:使用 `filepath.Join` 处理
## 6. 文件结构
```
go-desk/
├── internal/
│ ├── system/
│ │ └── system.go # 系统信息获取
│ └── filesystem/
│ └── fs.go # 文件系统操作
├── app.go # 添加系统调用方法
└── frontend/src/
└── components/
├── SystemInfo.vue # 系统信息组件
└── FileSystem.vue # 文件系统组件
```
## 7. 安全考虑
1. **路径验证**:防止路径遍历攻击
2. **权限检查**:确保有足够的权限执行操作
3. **操作限制**:限制危险操作(如删除系统文件)
4. **输入验证**:验证所有用户输入
5. **错误信息**:不暴露敏感系统信息
## 8. 测试用例
### 8.1 系统信息测试
- [ ] 获取 CPU 信息成功
- [ ] 获取内存信息成功
- [ ] 获取磁盘信息成功
- [ ] 信息格式正确
### 8.2 文件系统测试
- [ ] 读取文件成功
- [ ] 写入文件成功
- [ ] 列出目录成功
- [ ] 创建目录成功
- [ ] 删除文件成功
- [ ] 路径验证有效
- [ ] 错误处理正确
## 9. 开发优先级
### 阶段一:基础系统信息
- [ ] CPU 信息获取
- [ ] 内存信息获取
- [ ] 系统基本信息
### 阶段二:文件系统基础操作
- [ ] 读取文件
- [ ] 列出目录
- [ ] 文件信息获取
### 阶段三:文件系统完整操作
- [ ] 写入文件
- [ ] 创建目录
- [ ] 删除文件/目录
### 阶段四:高级功能
- [ ] 磁盘信息
- [ ] 网络信息
- [ ] 环境变量
- [ ] 打开文件/目录
## 10. 注意事项
1. **性能**:系统信息获取可能较慢,考虑异步调用
2. **权限**:某些操作需要管理员权限
3. **跨平台**:不同平台的行为可能不同
4. **错误处理**:完善的错误提示和日志记录
---
**下一步**:根据此设计文档开始实现设备调用测试功能。