重构:文件系统模块化架构,优化应用启动流程
This commit is contained in:
321
docs/04-功能迭代/GO-DESK-1.尝试/设备调用测试功能设计.md
Normal file
321
docs/04-功能迭代/GO-DESK-1.尝试/设备调用测试功能设计.md
Normal file
@@ -0,0 +1,321 @@
|
||||
# Go Desk 设备调用测试功能设计
|
||||
|
||||
> **文档版本**:v1.0
|
||||
> **创建时间**:2025-01-XX
|
||||
> **维护者**: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 # 添加系统调用方法
|
||||
└── web/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. **错误处理**:完善的错误提示和日志记录
|
||||
|
||||
---
|
||||
|
||||
**下一步**:根据此设计文档开始实现设备调用测试功能。
|
||||
|
||||
Reference in New Issue
Block a user