ShortLinker v0.5.1
🎉 Release Highlights
v0.5.1 维护版本发布! 这是一个重要的架构优化与稳定性提升版本:
- 客户端层架构 - 引入
client/模块,实现 IPC 优先 + Service 降级模式,提升 CLI/TUI 的可靠性 - IPC 配置管理 - 支持通过 IPC 进行配置查询、修改、重置和批量导入
- 流式导入/导出 - 支持进度报告和游标分页,大幅降低内存占用
- 数值溢出修复 - 修复 Analytics 模块多处
i64溢出问题,提升高并发稳定性 - TUI 功能增强 - 分页加载、虚拟滚动、系统操作面板,支持大数据量场景
- 高性能批量导入 - 使用 Bloom filter 预筛选 + batch 操作,大幅提升导入性能
Added
- 客户端层架构 - 新增
src/client/模块(1303 行)LinkClient: 链接操作客户端,支持 IPC 优先、服务降级ConfigClient: 配置管理客户端SystemClient: 系统操作客户端ServiceContext: 统一服务上下文管理- 支持
ServerNotRunning自动降级到本地服务,其他 IPC 错误不降级(避免双写)
- IPC 配置管理命令
ConfigList { category }: 列出配置(支持分类过滤)ConfigGet { key }: 获取单个配置ConfigSet { key, value }: 设置配置值ConfigReset { key }: 重置为默认值ConfigImport { configs }: 批量导入配置
- IPC 批量删除 -
BatchDeleteLinks { codes }命令 - 流式导入/导出
ImportLinks新增stream_progress: bool字段,支持进度报告ImportProgress响应类型:{ phase, processed, total, success, skipped, failed }ExportChunk和ExportDone响应类型,支持流式导出LinkService::export_links_stream(): 游标分页流式导出
- 高性能批量导入
LinkService::import_links_batch(): 使用 Bloom filter 预筛选 +batch_check_codes_exist精确查询 +batch_set批量写入LinkService::import_links_batch_chunked(): 支持分块写入和进度回调- 新增 DTO:
ImportLinkItemRich、ImportBatchResult、ImportBatchFailedItem
- TUI 功能增强
- 分页加载和虚拟滚动(+545 行)
- 数据库搜索支持
- 系统操作面板(+217 行):服务器状态查看、运行时配置编辑、密码重置
- 配置管理 UI(
config_list.rs,config_edit.rs,config_reset_confirm.rs) - 导入模式选择 UI(
import_mode.rs)
- 导入错误处理增强
ImportErrorData新增error_code: Option<String>字段,支持结构化错误码- 行号追踪:
ImportLinkItemRich.row_num透传到ImportBatchFailedItem.row_num
- 测试覆盖 - 新增 821 行客户端层集成测试(
tests/client_tests.rs)
Fixed
- 数值溢出修复
analytics/manager.rs: 修复i64溢出问题,改用try_from和unwrap_or替换手动类型转换- 提升高并发场景容量(crossbeam channel 容量从 10000 增至 50000)
analytics/hourly_writer.rs和analytics/rollup.rs: 修复多处边界条件与逻辑缺陷
- IPC 流异常关闭处理
ClickManager新增 shutdown 信号机制(tokio::sync::watch::channel)start_background_task()使用tokio::select!监听 shutdown 信号process_raw_events()在 shutdown 时 drain 剩余事件,避免丢失详细点击信息
- 导入失败项行号处理 - 修复 CSV 导入时行号映射不准确的问题
- 敏感配置显示 - 修复导入时敏感配置(如密码)的显示问题
- 多处潜在崩溃修复 -
analytics,tui,services模块的边界条件和逻辑错误
Changed
- IPC DTO 简化
- 删除
ShortLinkData中间层,IPC 直接传输ShortLink - 消除
to_link_data()和link_data_to_short_link()转换函数 - 消除
i64 ↔ usize、String ↔ DateTime胶水代码 - 删除
ipc/types.rs中 300+ 行纯序列化测试
- 删除
- IPC Handler 守卫函数提取
- 提取
get_link_service()和get_config_service()消除 13 处重复守卫 - 提取
validate_editable_key()消除配置操作的重复 def 检查 - 新增
IpcCommand::name()方法,日志中隐藏敏感字段
- 提取
- Admin API 统一访问模式 - 所有 admin API 必须通过 service 层访问(已文档化在
services/mod.rs) - 导入验证逻辑统一 - 提取
validate_import_rows()函数,消除重复的冲突检测逻辑 - Analytics 性能优化 - 使用
try_from替换手动类型转换,提升高并发容量
Deprecated
以下 API 标记为废弃,将在 v0.6.0 删除:
ImportLinkItem→ 使用ImportLinkItemRichImportResult→ 使用ImportBatchResultImportError→ 使用ImportBatchFailedItemLinkService::import_links()→ 使用import_links_batch()LinkService::export_links()→ 使用export_links_stream()LinkService::export_click_logs()标记废弃
Dependencies
升级全量依赖至最新版本:
- actix-web: 4.12 → 4.13
- rand: 0.9.2 → 0.10.0
- chrono: 0.4.43 → 0.4.44
- tokio: 1.49.0 → 1.50.0
- tracing-subscriber: 0.3.22 → 0.3.23
- moka: 0.12.13 → 0.12.14
- futures-util: 0.3.31 → 0.3.32
- once_cell: 1.21.3 → 1.21.4
- anyhow: 1.0.101 → 1.0.102
- uuid: 1.20 → 1.22
- redis: 1.0.3 → 1.0.5
- rustls: 0.23.36 → 0.23.37
- toml: 0.9 → 1.0
- sea-orm: 2.0.0-rc.31 → 2.0.0-rc.37
- strum: 0.27 → 0.28
删除:tokio-test 依赖
Documentation
- 补充批量操作与 TUI 分页说明,优化类型转换与资源管理
- 修正每日汇总数据保留配置的说明
统计数据:
- 104 files changed, 8672 insertions(+), 2806 deletions(-)
- 25 commits (20 功能/修复/重构提交)
- 新增 1303 行客户端层代码
- 新增 821 行测试代码
Installation
Homebrew (macOS/Linux)
brew install AptS-1547/tap/shortlinkerCargo Binstall
cargo binstall shortlinkerManual Download
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | shortlinker_v0.5.1_linux_x86_64 |
| Linux | ARM64 | shortlinker_v0.5.1_linux_aarch64 |
| Windows | x86_64 | shortlinker_v0.5.1_windows_x86_64.exe |
| macOS | x86_64 | shortlinker_v0.5.1_macos_x86_64 |
| macOS | ARM64 | shortlinker_v0.5.1_macos_aarch64 |
| Admin Panel | - | shortlinker-admin-panel_v0.5.1.tar.gz |
Checksums: checksums.txt