Commit Graph

8 Commits

Author SHA1 Message Date
starmen1265 f9cc8bb82a fix(stats): 细化异常处理
- _acquire_lock(): 添加 OSError/IOError 异常处理和日志
- _release_lock(): 添加空值检查和异常捕获
- _load_stats_data():
  - 分离 JSONDecodeError、IOError/OSError 和其他异常
  - 添加详细的日志记录
- _atomic_write():
  - 分离 OSError/IOError 和 JSON 序列化异常
  - 清理临时文件时添加异常捕获
- 移除重复的 LOCK_FILE 定义
2026-03-09 14:52:32 +08:00
starmen1265 63f2df7f18 fix(stats): 将 print() 改为 logging
- 添加 logging 模块导入
- 创建 logger 实例
- 将错误输出从 print() 改为 logger.error()
- 保留 __main__ 测试代码中的 print()
2026-03-09 14:51:14 +08:00
starmen1265 5034374066 fix(stats): 添加事件数量限制(默认 10000)
- 添加 MAX_EVENTS 常量(默认 10000)
- record_event() 在事件数超过限制时移除最旧的事件
- 防止数据文件无限增长
2026-03-09 14:50:32 +08:00
starmen1265 e136939a25 fix(stats): 添加文件锁(fcntl.flock)防止并发竞态
- 添加 _acquire_lock() 和 _release_lock() 辅助函数
- _load_stats_data() 和 _atomic_write() 使用文件锁保护
- 使用独立的 .lock 文件作为锁
- 防止并发读写导致数据损坏
2026-03-09 14:50:03 +08:00
starmen1265 9b15766ab3 fix(stats): _load_stats_data() JSON 解析失败时备份损坏文件
- JSON 解析失败时将损坏文件重命名为 .corrupted.{timestamp}.bak
- 保留损坏文件以便后续分析和恢复
- 分离 JSONDecodeError 和 IOError 的处理逻辑
2026-03-09 14:49:12 +08:00
starmen1265 d26ac7a88c fix(stats): get_stats() 改用 .get() 访问字段
- 使用 .get() 安全访问 event 字段
- 为可能缺失的字段提供默认值
- 防止 KeyError 异常
2026-03-09 14:48:45 +08:00
starmen1265 e5304534e4 fix(stats): record_event() 添加 metadata 类型校验
- 如果 metadata 不是 dict 类型则抛出 TypeError
- 防止传入非法类型导致后续处理失败
2026-03-09 14:48:17 +08:00
starmen1265 3efe98e17d feat: 添加 Cross 模式统计报告功能
- 添加 stats.py 统计模块
- 添加 dev_workflow.py CLI 工具
- 实现 record_event() 记录事件
- 实现 get_stats() 生成报告
- 支持敏感数据自动过滤
- 使用原子写入保证数据安全
- 添加 README 文档
2026-03-09 14:44:04 +08:00