8.6 KiB
Implementation Plan: AMT Hardware Information Query
Overview
本实现计划将硬件信息查看功能分解为可执行的开发任务。按照后端数据模型 → 后端服务 → 后端 API → 前端界面的顺序实施,确保每个步骤都可以独立测试和验证。
Tasks
-
1. 创建数据库模型和迁移
- 创建 HardwareInfo、MemoryModule、StorageDevice 实体类
- 配置 Entity Framework 关系映射
- 创建数据库迁移文件
- 应用迁移到数据库
- Requirements: 6.1, 6.2
-
2. 实现 AMT 硬件查询服务
-
2.1 创建 AmtHardwareQueryService 接口和实现类
- 定义查询方法接口
- 实现 WsmanConnection 创建和管理
- Requirements: 10.1, 10.2
-
2.2 实现系统信息查询(CIM_ComputerSystem)
- 查询制造商、型号、序列号
- 处理查询异常和空值
- Requirements: 5.1, 5.2, 5.3, 5.4
-
2.3 实现 CPU 信息查询(CIM_Processor via CIM_Realizes)
- 查询 CPU 型号、核心数、主频
- 解析 CPU Family 枚举值
- Requirements: 2.1, 2.2, 2.3, 2.4
-
2.4 实现内存信息查询(CIM_PhysicalMemory)
- 查询所有内存模块
- 提取容量、速度、类型、插槽位置
- 计算总内存容量
- Requirements: 3.1, 3.2, 3.3, 3.4
-
2.5 实现存储设备信息查询(CIM_MediaAccessDevice)
- 查询所有存储设备
- 提取容量、型号、接口类型
- Requirements: 4.1, 4.2, 4.3, 4.4
-
2.6 实现错误处理和降级逻辑
- 单个组件查询失败时继续其他查询
- 记录详细错误日志
- 返回部分可用信息
- Requirements: 7.1, 7.2, 7.3, 7.4
-
-
3. 实现硬件信息业务服务
-
3.1 创建 HardwareInfoService 接口和实现类
- 定义服务方法接口
- 注入依赖(Repository、AmtHardwareQueryService、CredentialService)
- Requirements: 6.1
-
3.2 实现单设备硬件信息查询逻辑
- 检查缓存是否存在且有效(24小时内)
- 如果缓存有效且不强制刷新,返回缓存
- 否则查询 AMT 设备并更新缓存
- Requirements: 6.1, 6.2, 6.3, 6.4
-
3.3 实现批量设备硬件信息查询
- 使用 SemaphoreSlim 控制并发(最多 10 个)
- 使用 Task.WhenAll 并行查询
- 聚合成功和失败结果
- Requirements: 9.1, 9.2, 9.3, 9.5
-
3.4 实现硬件信息导出功能
- 实现 CSV 格式导出
- 实现 JSON 格式导出
- 生成文件流供下载
- Requirements: 8.4, 9.4
-
-
[-] 4. 实现数据访问层
-
4.1 创建 HardwareInfoRepository 接口和实现类
- 实现 GetByDeviceIdAsync 方法
- 实现 SaveAsync 方法(包含级联保存 MemoryModules 和 StorageDevices)
- 实现 GetByDeviceIdsAsync 方法
- 实现 DeleteByDeviceIdAsync 方法
- Requirements: 6.1, 6.2
-
4.2 配置 Entity Framework 关系
- 配置 HardwareInfo 与 AmtDevice 的外键关系
- 配置 MemoryModule 和 StorageDevice 的级联删除
- 添加数据库索引(DeviceId, LastUpdated)
- Requirements: 6.1
-
-
5. 实现 API 控制器
-
5.1 创建 HardwareInfoController
- 注入 HardwareInfoService
- 配置路由 /api/hardware-info
- Requirements: 1.1, 1.2
-
5.2 实现单设备查询端点
- GET /api/hardware-info/{deviceId}
- 支持 refresh 查询参数
- 返回 HardwareInfo JSON
- 处理设备不存在的情况
- Requirements: 1.1, 1.2, 1.3, 1.4, 1.5
-
5.3 实现批量查询端点
- POST /api/hardware-info/batch
- 接收设备 ID 列表
- 返回批量查询结果(成功/失败)
- Requirements: 9.1, 9.2, 9.3, 9.5
-
5.4 实现导出端点
- GET /api/hardware-info/export
- 支持 deviceIds 和 format 查询参数
- 返回文件下载响应
- 设置正确的 Content-Type 和文件名
- Requirements: 8.4, 9.4
-
-
6. 实现前端硬件信息弹窗组件
-
6.1 创建 HardwareInfoModal.vue 组件
- 创建组件基本结构
- 定义 props(deviceId, deviceIp)
- 定义 emits(close)
- Requirements: 1.4, 8.1
-
6.2 实现硬件信息数据获取
- 调用 API 获取硬件信息
- 显示加载状态
- 处理错误情况
- Requirements: 1.2, 1.3, 1.5
-
6.3 实现系统信息展示区域
- 显示制造商、型号、序列号
- 使用网格布局
- Requirements: 5.5, 8.1
-
6.4 实现 CPU 信息展示区域
- 显示型号、核心数、线程数、主频
- 使用图标标识
- Requirements: 2.5, 8.2
-
6.5 实现内存信息展示区域
- 显示总容量摘要
- 使用表格展示各内存模块详情
- 显示插槽、容量、速度、类型、制造商
- 自动转换容量单位(GB)
- Requirements: 3.5, 8.1, 8.3
-
6.6 实现存储设备信息展示区域
- 使用表格或卡片展示各存储设备
- 显示型号、容量、接口类型
- 自动转换容量单位(GB/TB)
- Requirements: 4.5, 8.1, 8.3
-
6.7 实现刷新和导出功能
- 添加刷新按钮,调用 API 强制刷新
- 添加导出按钮,下载 CSV 或 JSON
- 显示最后更新时间
- Requirements: 6.4, 8.4
-
6.8 实现错误和不可用信息的展示
- 对于不可用的信息显示"不支持"或"信息不可用"
- 显示友好的错误提示
- Requirements: 7.2, 7.5
-
-
7. 更新设备列表组件
-
7.1 在 DeviceList.vue 添加"查看硬件"按钮
- 在操作列添加按钮
- 绑定点击事件打开硬件信息弹窗
- Requirements: 1.1
-
7.2 集成 HardwareInfoModal 组件
- 导入 HardwareInfoModal 组件
- 管理弹窗显示状态
- 传递设备 ID 和 IP 地址
- Requirements: 1.1, 1.4
-
-
8. 实现批量硬件信息导出功能(可选)
-
8.1 在设备列表添加批量选择功能
- 添加复选框列
- 管理选中设备列表
- Requirements: 9.1
-
8.2 添加批量导出按钮
- 显示"批量导出硬件信息"按钮
- 仅在有选中设备时启用
- Requirements: 9.1
-
8.3 实现批量导出对话框
- 选择导出格式(CSV/JSON)
- 显示导出进度
- 触发文件下载
- Requirements: 9.2, 9.3, 9.4
-
-
9. 添加样式和优化
-
9.1 设计硬件信息弹窗样式
- 使用卡片或分组布局
- 添加图标和颜色区分
- 确保响应式设计
- Requirements: 8.1, 8.2
-
9.2 优化加载和错误状态展示
- 添加骨架屏或加载动画
- 设计友好的错误提示样式
- Requirements: 1.3, 1.5, 7.5
-
9.3 优化表格和数据展示
- 使用合适的字体和间距
- 添加悬停效果
- 确保打印友好
- Requirements: 8.1, 8.5
-
-
10. 测试和验证
-
10.1 测试 HTTP 设备硬件信息查询
- 测试 192.168.8.111 设备
- 验证所有硬件信息正确显示
- Requirements: 10.5
-
10.2 测试 HTTPS 设备硬件信息查询
- 测试 192.168.8.112 设备
- 验证自签名证书处理正确
- Requirements: 10.5
-
10.3 测试缓存机制
- 验证首次查询后数据被缓存
- 验证 24 小时内返回缓存数据
- 验证强制刷新功能
- Requirements: 6.1, 6.2, 6.3, 6.4
-
10.4 测试批量查询功能
- 测试同时查询多个设备
- 验证并发控制正常工作
- 验证部分失败时的处理
- Requirements: 9.2, 9.3, 9.5
-
10.5 测试导出功能
- 测试 CSV 格式导出
- 测试 JSON 格式导出
- 验证文件内容正确
- Requirements: 8.4, 9.4
-
10.6 测试错误处理
- 测试设备离线时的处理
- 测试不支持某些 CIM 类的设备
- 测试查询超时的处理
- 验证错误消息友好且准确
- Requirements: 7.1, 7.2, 7.3, 7.4, 7.5
-
-
11. 文档和部署
-
11.1 更新 API 文档
- 添加硬件信息查询端点文档
- 添加请求/响应示例
- 添加错误代码说明
-
11.2 更新用户使用指南
- 添加硬件信息查看功能说明
- 添加截图和操作步骤
- 说明支持的硬件信息类型
-
11.3 创建数据库迁移脚本
- 生成 SQL 迁移脚本
- 测试迁移脚本
- 准备回滚脚本
-
Notes
- 任务标记 "*" 的为可选任务,可以在 MVP 版本后实施
- 每个任务完成后应进行单元测试或集成测试
- 建议按顺序执行任务,确保依赖关系正确
- 批量导出功能(任务 8)可以作为第二阶段功能
- 测试任务(任务 10)应该在相关功能完成后立即执行