Root cause: save_index() serializes entire 31KB db to JSON and writes to disk for every PUT operation (synchronous blocking call). Fix: Disabled versioning for user WebDAV by changing line 2547 from Some(versioning.clone()) to None. Performance improvement: - Before: 2+ minutes timeout - After: 10-27 milliseconds - Speedup: 12000x faster Tested: 31B, 100KB, 1MB files all upload successfully in <30ms
404 lines
11 KiB
Markdown
404 lines
11 KiB
Markdown
# MarkBase GUI 管理介面检讨报告
|
||
|
||
**版本**: 1.0
|
||
**日期**: 2026-06-25
|
||
**作者**: AI Assistant
|
||
|
||
---
|
||
|
||
## 一、GUI 架构概览
|
||
|
||
### 1.1 技术栈
|
||
|
||
| 组件 | 技术 | 版本 |
|
||
|------|------|------|
|
||
| **前端框架** | Vue.js 3 | Composition API |
|
||
| **UI 库** | Element Plus | Latest |
|
||
| **桌面框架** | Tauri | v2 |
|
||
| **后端语言** | Rust | 1.92+ |
|
||
| **数据存储** | SQLite | auth.sqlite |
|
||
|
||
### 1.2 代码统计
|
||
|
||
| 类型 | 数量 | 行数 |
|
||
|------|------|------|
|
||
| **Vue Components** | 11 个 | 4860 行 |
|
||
| **Tauri Commands** | 12 个 | ~1500 行 |
|
||
| **Router Routes** | 11 个 | 77 行 |
|
||
| **总计** | | ~6437 行 |
|
||
|
||
---
|
||
|
||
## 二、已实现功能
|
||
|
||
### 2.1 User Management (Users.vue)
|
||
|
||
**功能完整度**: ⭐⭐⭐⭐⭐ (5/5)
|
||
|
||
| 功能 | 状态 | 说明 |
|
||
|------|------|------|
|
||
| 用户列表 | ✅ 完成 | 显示 username, home_dir, status |
|
||
| 创建用户 | ✅ 完成 | bcrypt 密码加密 + SqliteProvider |
|
||
| 编辑用户 | ✅ 完成 | home_dir/status 更新 + 密码可选 |
|
||
| 删除用户 | ✅ 完成 | 确认对话框 + SqliteProvider |
|
||
| 重置密码 | ✅ 完成 | 弹窗输入新密码 |
|
||
|
||
**代码量**: 264 行 Vue + 100 行 Rust
|
||
|
||
---
|
||
|
||
### 2.2 Share Management (Shares.vue)
|
||
|
||
**功能完整度**: ⭐⭐⭐ (3/5)
|
||
|
||
| 功能 | 状态 | 说明 |
|
||
|------|------|------|
|
||
| 共享列表 | ✅ 完成 | name, path, protocol, users, permissions |
|
||
| 创建共享 | ⚠️ 内存存储 | 重启丢失(需持久化) |
|
||
| 编辑共享 | ⚠️ 内存存储 | 重启丢失(需持久化) |
|
||
| 删除共享 | ⚠️ 内存存储 | 重启丢失(需持久化) |
|
||
| 连接测试 | ✅ 完成 | path 存在验证 |
|
||
| 协议支持 | ✅ 完成 | SMB/SFTP/WebDAV/S3 |
|
||
|
||
**代码量**: 295 行 Vue + 152 行 Rust
|
||
|
||
---
|
||
|
||
### 2.3 Dashboard (Dashboard.vue)
|
||
|
||
**功能完整度**: ⭐⭐⭐ (3/5)
|
||
|
||
| 功能 | 状态 | 说明 |
|
||
|------|------|------|
|
||
| CPU 监控 | ✅ 完成 | macOS/Linux 双平台 |
|
||
| Memory 监控 | ✅ 完成 | macOS/Linux 双平台 |
|
||
| Disk 监控 | ✅ 完成 | macOS/Linux 双平台 |
|
||
| Service Status | ❌ 硬编码 | 返回固定 4 个服务(未检查实际进程) |
|
||
| Recent Activity | ❌ 硬编码 | 返回固定 4 条记录(未连接日志系统) |
|
||
| Quick Actions | ❌ 未实现 | 只有 UI,无实际功能 |
|
||
| 实时刷新 | ✅ 完成 | 5 秒定时刷新 |
|
||
|
||
**代码量**: 302 行 Vue + 290 行 Rust
|
||
|
||
---
|
||
|
||
### 2.4 Backup Management (Backup.vue)
|
||
|
||
**功能完整度**: ⭐⭐⭐⭐ (4/5)
|
||
|
||
**代码量**: 497 行 Vue + 3732 行 Rust
|
||
|
||
---
|
||
|
||
## 三、存在的问题
|
||
|
||
### 3.1 关键问题
|
||
|
||
| 问题 | 严重程度 | 影响 |
|
||
|------|----------|------|
|
||
| **Share Management 内存存储** | ⚠️⚠️⚠️⚠️⚠️ 极高 | 重启丢失所有共享配置 |
|
||
| **Service Status 硬编码** | ⚠️⚠️⚠️⚠️ 高 | 无法反映真实服务状态 |
|
||
| **Recent Activity 硬编码** | ⚠️⚠️⚠️⚠️ 高 | 无法查看真实操作记录 |
|
||
| **Quick Actions 未实现** | ⚠️⚠️⚠️ 中 | 用户体验不完整 |
|
||
| **无权限管理** | ⚠️⚠️⚠️⚠️ 高 | 无法控制用户访问权限 |
|
||
|
||
---
|
||
|
||
### 3.2 详细分析
|
||
|
||
#### 问题 #1: Share Management 内存存储
|
||
|
||
**当前实现**:
|
||
```rust
|
||
lazy_static::lazy_static! {
|
||
static ref SHARES: Arc<Mutex<Vec<ShareInfo>>> =
|
||
Arc::new(Mutex::new(Vec::new()));
|
||
}
|
||
```
|
||
|
||
**问题影响**:
|
||
- 服务器重启后,所有共享配置丢失
|
||
- 无法持久化到数据库或配置文件
|
||
- 不符合生产环境要求
|
||
|
||
**推荐方案**:
|
||
- 使用 SQLite 存储(`data/shares.sqlite`)
|
||
- 或 TOML 配置文件(`config/shares.toml`)
|
||
|
||
---
|
||
|
||
#### 问题 #2: Service Status 硬编码
|
||
|
||
**当前实现**:
|
||
```rust
|
||
pub async fn get_all_services_status() -> Result<Vec<ServiceStatus>, String> {
|
||
Ok(vec![
|
||
ServiceStatus {
|
||
name: "SMB Server".to_string(),
|
||
status: "running".to_string(),
|
||
port: 4445,
|
||
uptime: "2h 30m".to_string(),
|
||
},
|
||
// ... 固定返回 4 个服务
|
||
])
|
||
}
|
||
```
|
||
|
||
**问题影响**:
|
||
- 无法检测服务真实状态(running/stopped)
|
||
- 无法获取真实 uptime
|
||
- 无法监控服务异常
|
||
|
||
**推荐方案**:
|
||
- 使用 `ps aux | grep` 检查进程状态
|
||
- 或使用 PID 文件追踪服务
|
||
- 或使用 systemd/launchd 服务管理
|
||
|
||
---
|
||
|
||
#### 问题 #3: Recent Activity 硬编码
|
||
|
||
**当前实现**:
|
||
```rust
|
||
pub async fn get_recent_activity() -> Result<Vec<ActivityLog>, String> {
|
||
Ok(vec![
|
||
ActivityLog {
|
||
timestamp: "2026-06-23 14:30:00".to_string(),
|
||
activity_type: "Upload".to_string(),
|
||
description: "Uploaded document.pdf to /data/files".to_string(),
|
||
user: "alice".to_string(),
|
||
},
|
||
// ... 固定返回 4 条记录
|
||
])
|
||
}
|
||
```
|
||
|
||
**问题影响**:
|
||
- 无法查看真实用户操作
|
||
- 无法审计系统行为
|
||
- 无法追踪异常事件
|
||
|
||
**推荐方案**:
|
||
- 使用日志文件(`data/activity.log`)
|
||
- 或 SQLite 存储(`data/activity.sqlite`)
|
||
- 集成现有 SSH/SMB/WebDAV 日志
|
||
|
||
---
|
||
|
||
#### 问题 #4: Quick Actions 未实现
|
||
|
||
**当前实现**:
|
||
```vue
|
||
<el-button type="primary" :icon="Upload" class="action-btn">
|
||
Upload File
|
||
</el-button>
|
||
<el-button type="success" :icon="Document" class="action-btn">
|
||
Create Backup
|
||
</el-button>
|
||
// ... 只有按钮,无 @click handler
|
||
```
|
||
|
||
**问题影响**:
|
||
- 用户点击按钮无响应
|
||
- Dashboard 功能不完整
|
||
|
||
**推荐方案**:
|
||
- Upload File: 调用 Tauri dialog + file_ops.rs
|
||
- Create Backup: 调用 backup.rs snapshot 功能
|
||
- View Backups: 跳转到 Backup.vue
|
||
- Download File: 调用 Tauri dialog + file_ops.rs
|
||
|
||
---
|
||
|
||
#### 问题 #5: 无权限管理
|
||
|
||
**当前实现**:
|
||
- User Management 只有 CRUD 用户
|
||
- Share Management 只有 CRUD 共享
|
||
- **缺失**:用户-共享权限关联
|
||
|
||
**问题影响**:
|
||
- 无法控制用户访问哪些共享
|
||
- 无法设置读/写权限
|
||
- 无法实现多租户隔离
|
||
|
||
**推荐方案**:
|
||
- 添加 Permission Management 页面
|
||
- 用户-共享关联表(user_id, share_id, permission)
|
||
- 权限类型:read/write/admin
|
||
|
||
---
|
||
|
||
## 四、竞争对手对比
|
||
|
||
### 4.1 功能对比表
|
||
|
||
| 功能 | Proxmox VE | Unraid | OpenNAS | MarkBase | 覆盖率 |
|
||
|------|-----------|--------|---------|----------|--------|
|
||
| **Dashboard** | ✅ 完整 | ✅ 完整 | ✅ 完整 | ⚠️ 部分 | 60% |
|
||
| **User Management** | ✅ 完整 | ✅ 完整 | ✅ 完整 | ✅ 完整 | 100% |
|
||
| **Share Management** | ✅ 完整 | ✅ 完整 | ✅ 完整 | ⚠️ 内存 | 50% |
|
||
| **Backup Management** | ✅ 完整 | ✅ 完整 | ✅ 完整 | ✅ 完整 | 100% |
|
||
| **Permission Management** | ✅ 完整 | ✅ 完整 | ✅ 完整 | ❌ 缺失 | 0% |
|
||
| **Service Monitoring** | ✅ 完整 | ✅ 完整 | ✅ 完整 | ❌ 硬编码 | 30% |
|
||
| **Activity Log** | ✅ 完整 | ✅ 完整 | ✅ 完整 | ❌ 硕编码 | 30% |
|
||
| **VM Management** | ✅ 完整 | ❌ 无 | ❌ 无 | ❌ 无 | N/A |
|
||
| **Container Management** | ✅ 完整 | ✅ 完整 | ❌ 无 | ❌ 无 | N/A |
|
||
| **HA Cluster** | ✅ 完整 | ❌ 无 | ❌ 无 | ❌ 无 | N/A |
|
||
|
||
**总体覆盖率**: **47%** (存储 + 备份)
|
||
|
||
---
|
||
|
||
### 4.2 竞争对手优势
|
||
|
||
**Proxmox VE**:
|
||
- ✅ 完整的 VM/Container 管理
|
||
- ✅ HA Cluster 支持
|
||
- ✅ 企业级权限管理
|
||
- ✅ 完整的监控告警系统
|
||
- ✅ API + CLI + Web UI 三位一体
|
||
|
||
**Unraid**:
|
||
- ✅ Docker Container 管理
|
||
- ✅ 简单易用的 Web UI
|
||
- ✅ Community Apps 生态
|
||
- ✅ Flash drive 启动(无需安装)
|
||
- ✅ Parity 保护(类似 RAID)
|
||
|
||
**OpenNAS**:
|
||
- ✅ 专注 NAS 功能
|
||
- ✅ ZFS 集成
|
||
- ✅ 简单部署
|
||
- ✅ 开源免费
|
||
|
||
---
|
||
|
||
## 五、改进建议
|
||
|
||
### 5.1 短期改进(本周)
|
||
|
||
| 优先级 | 任务 | 工作量 | 收益 |
|
||
|--------|------|--------|------|
|
||
| **P0 #1** | Share Management 持久化 | 200 行 | ⭐⭐⭐⭐⭐ 极高 |
|
||
| **P0 #2** | Service Status 真实检测 | 150 行 | ⭐⭐⭐⭐ 高 |
|
||
| **P0 #3** | Quick Actions 实现 | 100 行 | ⭐⭐⭐ 中 |
|
||
| **P1 #4** | Permission Management | 300 行 | ⭐⭐⭐⭐⭐ 极高 |
|
||
|
||
---
|
||
|
||
### 5.2 中期改进(本月)
|
||
|
||
| 优先级 | 任务 | 工作量 | 收益 |
|
||
|--------|------|--------|------|
|
||
| **P1 #5** | Activity Log 系统集成 | 400 行 | ⭐⭐⭐⭐ 高 |
|
||
| **P1 #6** | Dashboard 增强图表 | 200 行 | ⭐⭐⭐ 中 |
|
||
| **P2 #7** | File Browser UI | 500 行 | ⭐⭐⭐⭐⭐ 极高 |
|
||
| **P2 #8** | Snapshot Management UI | 300 行 | ⭐⭐⭐⭐ 高 |
|
||
|
||
---
|
||
|
||
### 5.3 长期改进(下季度)
|
||
|
||
| 优先级 | 任务 | 工作量 | 收益 |
|
||
|--------|------|--------|------|
|
||
| **P2 #9** | Docker Container UI | 800 行 | ⭐⭐⭐⭐ 高 |
|
||
| **P3 #10** | API + CLI + Web UI 统一 | 1000 行 | ⭐⭐⭐⭐⭐ 极高 |
|
||
| **P3 #11** | 国际化支持 | 200 行 | ⭐⭐⭐ 中 |
|
||
| **P3 #12** | Mobile App | 2000 行 | ⭐⭐⭐⭐ 高 |
|
||
|
||
---
|
||
|
||
## 六、实施优先级
|
||
|
||
### 6.1 立即实施(本周)
|
||
|
||
**Phase 1**: Share Management 持久化
|
||
- 创建 `data/shares.sqlite` 数据库
|
||
- 实现 ShareProvider trait
|
||
- 集成到 share_management.rs
|
||
|
||
**Phase 2**: Service Status 真实检测
|
||
- 使用 `ps aux` 检查进程状态
|
||
- 解析 PID 文件(`/tmp/markbase_*.pid`)
|
||
- 计算 uptime(进程启动时间)
|
||
|
||
**Phase 3**: Quick Actions 实现
|
||
- Upload File: Tauri dialog + file_ops.rs
|
||
- Create Backup: 跳转到 Backup.vue
|
||
- View Backups: 跳转到 Backup.vue
|
||
- Download File: Tauri dialog + file_ops.rs
|
||
|
||
---
|
||
|
||
### 6.2 下周实施
|
||
|
||
**Phase 4**: Permission Management
|
||
- 创建 Permission.vue 页面
|
||
- 实现 permission_management.rs
|
||
- 用户-共享关联表
|
||
|
||
**Phase 5**: Activity Log 系统
|
||
- 创建 `data/activity.sqlite`
|
||
- 集成 SSH/SMB/WebDAV 日志
|
||
- 实现 activity.rs Tauri command
|
||
|
||
---
|
||
|
||
## 七、目标定位
|
||
|
||
### 7.1 当前定位
|
||
|
||
**MarkBase = Lightweight Enterprise File Server + Backup Server**
|
||
|
||
| 目标用户 | 规模 | 使用场景 |
|
||
|---------|------|---------|
|
||
| **个人** | 1-5 用户 | Home NAS + backup |
|
||
| **小团队** | 5-20 用户 | SMB/SFTP + WebDAV |
|
||
| **中小企业** | 20-100 用户 | 多协议 + snapshots |
|
||
| **大型企业** | 100+ 用户 | NFS + LDAP + HA(Phase 12) |
|
||
|
||
---
|
||
|
||
### 7.2 GUI 目标覆盖率
|
||
|
||
| 目标 | 当前覆盖率 | Phase 1-5 后 | Phase 6-12 后 |
|
||
|------|-----------|-------------|--------------|
|
||
| **vs Proxmox VE** | 47% | 65% | 75% |
|
||
| **vs Unraid** | 58% | 75% | 85% |
|
||
| **vs OpenNAS** | 62% | 80% | 90% |
|
||
|
||
---
|
||
|
||
## 八、总结
|
||
|
||
### 8.1 已完成
|
||
|
||
- ✅ User Management 完整实现(5/5)
|
||
- ✅ Backup Management 基本实现(4/5)
|
||
- ✅ Dashboard 系统监控(3/5)
|
||
- ⚠️ Share Management 内存存储(3/5)
|
||
|
||
### 8.2 待完成
|
||
|
||
- ❌ Share Management 持久化
|
||
- ❌ Service Status 真实检测
|
||
- ❌ Activity Log 系统集成
|
||
- ❌ Permission Management
|
||
- ❌ Quick Actions 实现
|
||
|
||
### 8.3 建议
|
||
|
||
**立即开始** Phase 1-3(本周):
|
||
- Share Management 持久化(P0)
|
||
- Service Status 真实检测(P0)
|
||
- Quick Actions 实现(P0)
|
||
|
||
**下周开始** Phase 4-5:
|
||
- Permission Management(P1)
|
||
- Activity Log 系统集成(P1)
|
||
|
||
---
|
||
|
||
**最后更新**: 2026-06-25
|
||
**版本**: 1.0(GUI 管理介面检讨报告) |