11 KiB
Git Commit Analysis Report
Commit Information
| Field | Value |
|---|---|
| Commit Hash | ce41fd676cd5464f34cd5c8687bbbe73ca1c562b |
| Author | lincube lincube3@hotmail.com |
| Author Date | 2026-05-27 09:41:18 +0800 |
| Commit Date | 2026-05-27 09:41:18 +0800 |
| Commit Message | changed.调整了遥测系统。 |
Change Statistics
| Metric | Value |
|---|---|
| Files Modified | 8 |
| Files Added | 1 |
| Files Deleted | 0 |
| Total Insertions | +962 |
| Total Deletions | -61 |
| Net Change | +901 |
Commit Message Summary
本次提交是对遥测系统的重大调整和重构,主要包括:
- 新增统一的遥测事件命名规范(
TelemetryEventNames.cs) - 重构 Sentry 崩溃报告服务(优化 Tags/Extras 分离、改进中文标签)
- 重构 PostHog 使用追踪服务(修复 distinct_id 一致性、增强 Session 生命周期管理)
- 新增遥测环境信息增强类
- 添加详细的遥测系统规范化设计文档
Detailed Change Analysis
1. LanMountainDesktop/App.axaml.cs
Change Type: Modified
Lines Changed: +1, -0
变更说明: 在应用启动入口添加遥测追踪初始化调用,确保应用级别的 Session 生命周期正确管理。
2. LanMountainDesktop/Models/DesktopComponentPlacementSnapshot.cs
Change Type: Modified
Lines Changed: +2, -2
变更说明: 为桌面组件快照模型添加 ComponentName 属性,便于遥测事件中记录组件的可读名称,便于后续分析和调试。
3. LanMountainDesktop/Services/PostHogUsageTelemetryService.cs ⭐
Change Type: Modified
Lines Changed: +37, -42
变更说明: 这是本次提交的核心改动之一,主要优化包括:
3.1 distinct_id 统一
- 修复前: 使用
InstallId作为distinct_id - 修复后: 统一使用
TelemetryId作为distinct_id - 影响: 确保 PostHog 中的用户身份追踪一致性
3.2 Session 生命周期增强
- 优化了
StartSession和EndSession方法 - 添加了
TrackSessionStarted和TrackSessionEnded追踪 - 与 MainWindow 和 App 层生命周期正确关联
3.3 事件属性优化
- 移除了每个事件中重复的环境信息字段
- 添加了
event_display_name属性(中文显示名) - 移除了
payload_前缀,使事件属性更简洁 - 使用统一的
TelemetryEventNames常量
3.4 Flush 策略优化
- 修复前: 每个事件都执行
forceFlush - 修复后: 仅在关键事件(session、first_launch)执行
forceFlush - 影响: 降低性能开销,提升事件批处理效率
3.5 DescribePlacement 增强
- 添加了
component_name字段到组件位置快照描述 - 便于在遥测数据中识别具体组件
4. LanMountainDesktop/Services/SentryCrashTelemetryService.cs ⭐
Change Type: Modified
Lines Changed: +10, -16
变更说明: 重构崩溃报告服务,优化遥测上下文管理:
4.1 SendDefaultPii 安全设置
- 修复前:
options.SendDefaultPii = true - 修复后:
options.SendDefaultPii = false - 影响: 提升用户隐私保护,避免发送敏感个人信息
4.2 Tags/Extras 职责分离
- Tags: 仅保留用于过滤和索引的核心字段(6 个)
- telemetry_channel, event_type, event_display_name, source, app_version, environment, os_name, os_version, language
- Extras: 保留所有详细上下文信息用于调试分析
- install_id, telemetry_id, 设备信息, 运行时信息, 日志文件路径等
4.3 中文标签支持
- 新增
event_display_nameTag,提供事件的中文显示名 - 改善 Sentry Dashboard 的可读性
4.4 事件命名规范化
- 使用
TelemetryEventNames常量替代硬编码字符串 - 确保 Sentry 和 PostHog 使用统一的事件命名
5. LanMountainDesktop/Services/TelemetryEnvironmentInfo.cs ⭐
Change Type: Modified
Lines Changed: +31, -1
变更说明: 新增和增强了遥测环境信息收集功能:
5.1 新增方法
GetDeviceModel(): 获取设备型号GetDeviceArchitecture(): 获取设备架构GetTotalMemoryMB(): 获取总内存(MB)GetLocalDayPart(DateTimeOffset): 根据时间段返回日夜标识GetRenderMode(): 获取渲染模式(DirectX/OpenGL/Software)
5.2 现有方法增强
- 优化了
GetOsVersion()返回格式 - 改进了语言信息的收集
6. LanMountainDesktop/Services/TelemetryEventNames.cs ✨
Change Type: Added
Lines Changed: +69, -0
变更说明: 全新的统一遥测事件命名规范类,包含:
6.1 Sentry 事件命名
SentryUnhandledException: 未处理的异常SentryTaskException: 任务异常SentryShutdown: 应用关闭
6.2 PostHog 事件命名
AppFirstLaunch: 应用首次启动AppSessionStart: 应用会话开始AppSessionEnd: 应用会话结束MainWindowOpened: 主窗口打开MainWindowClosed: 主窗口关闭SettingsWindowOpened: 设置窗口打开SettingsWindowClosed: 设置窗口关闭SettingsNavigation: 设置导航SettingsDrawerOpened: 设置抽屉打开SettingsDrawerClosed: 设置抽屉关闭DesktopComponentPlaced: 组件放置DesktopComponentMoved: 组件移动DesktopComponentResized: 组件调整大小DesktopComponentDeleted: 组件删除DesktopComponentEditorOpened: 组件编辑器打开
6.3 辅助方法
DisplayName(string eventName): 返回事件的中文显示名
7. LanMountainDesktop/Views/MainWindow.ComponentSystem.cs
Change Type: Modified
Lines Changed: +1, -0
变更说明: 在组件系统初始化中添加 TrackSessionStarted 调用,确保组件级别的遥测追踪。
8. LanMountainDesktop/Views/MainWindow.axaml.cs
Change Type: Modified
Lines Changed: +1, -0
变更说明: 在主窗口打开事件中添加 TrackSessionStarted 调用,完善 Session 生命周期追踪。
9. docs/superpowers/plans/2026-05-26-telemetry-normalization.md ✨
Change Type: Added
Lines Changed: +810, -0
变更说明: 新增详尽的遥测系统规范化设计文档,包含:
- 遥测系统架构设计
- PostHog 和 Sentry 的职责划分
- 统一的事件命名规范
- 具体的代码修改指南
- 实施任务清单
Code Review Points
1. 遥测系统架构重构 ✅
状态: 通过
说明: 本次重构遵循了良好的软件设计原则,实现了关注点分离:
- PostHog: 负责使用追踪和行为分析
- Sentry: 负责崩溃报告和错误追踪
- 统一的事件命名: 通过
TelemetryEventNames避免硬编码
2. 用户隐私保护 ✅
状态: 优秀
改进:
- 禁用
SendDefaultPii避免发送敏感个人信息 - 统一使用匿名的
TelemetryId而非可识别的InstallId作为用户标识 - 在 Sentry 中移除
IpAddress收集
3. 性能优化 ✅
状态: 通过
改进:
- PostHog 事件移除重复的环境信息,减少网络开销
- Flush 策略优化,仅关键事件立即刷新
- 合理使用
forceFlush平衡实时性和性能
4. 可维护性 ✅
状态: 优秀
改进:
- 使用常量替代硬编码字符串,便于后续维护和扩展
- 完善的文档和设计规范
- 清晰的事件命名规范
5. Session 生命周期管理 ⚠️
状态: 需验证
关注点:
- Session 开始和结束的时机需要与实际应用生命周期完全匹配
- 需要在多种退出场景(正常关闭、崩溃、异常)下验证 Session 追踪的完整性
- 建议进行压力测试和长时间运行测试
建议验证清单:
- 正常关闭应用时 Session 是否正确结束
- 崩溃时 Session 是否能正确记录
- 异常退出后重启时 Session 标识是否正确
- 快速重启场景下 Session 追踪是否正确
6. 事件命名一致性 ⚠️
状态: 需验证
关注点:
- 确保 Sentry 和 PostHog 中的事件命名完全一致
- 验证
DisplayName方法覆盖所有事件类型 - 建议在文档中维护事件清单
7. 向后兼容性 ✅
状态: 通过
说明: 本次改动主要是对内部实现的优化,未改变外部 API 接口,对插件开发者透明。
Impact Assessment
风险等级: 🟢 低
原因:
- 重构主要在内部实现层面,不影响外部 API
- 遵循最佳实践,提升了系统可维护性
- 增强了用户隐私保护
- 包含详尽的测试指南
建议操作:
- ✅ 执行完整的构建测试
- ✅ 运行测试套件验证无回归
- ⚠️ 进行 Session 生命周期的集成测试
- ⚠️ 验证遥测数据上报的完整性
- ⚠️ 检查 Sentry Dashboard 中的事件命名
- ⚠️ 检查 PostHog 中的用户追踪一致性
Related Documentation
- 2026-05-26-telemetry-normalization.md - 遥测系统规范化设计文档
- ARCHITECTURE.md - 架构文档
- DEVELOPMENT.md - 开发环境指南
- PRIVACY.md - 隐私政策(建议更新)
Testing Recommendations
1. 基础功能测试
# 构建验证
dotnet build LanMountainDesktop.slnx -c Debug
# 运行测试
dotnet test LanMountainDesktop.slnx -c Debug
2. 遥测功能测试
2.1 PostHog 测试场景
- 应用首次启动事件是否正确上报
- Session 开始/结束事件是否正确
- 组件操作事件是否携带完整信息
- distinct_id 是否一致
2.2 Sentry 测试场景
- 触发未处理异常,检查 Sentry 是否收到
- 验证 Tags 中的 event_display_name 是否为中文
- 检查是否正确禁用 PII 收集
- 验证 log tail 是否正确附加
2.3 Session 生命周期测试
- 正常关闭应用
- 通过任务管理器强制结束
- 触发崩溃(可使用测试异常)
- 快速重启测试
3. 数据质量验证
- 遥测数据中的事件名称是否一致
- 环境信息是否完整
- 时间戳是否准确
- component_name 是否正确填充
Summary
本次提交是一个重大的遥测系统重构,包含以下核心改进:
- 统一的事件命名规范: 避免了硬编码字符串,提升代码可维护性
- 增强的隐私保护: 禁用 PII 收集,使用匿名标识符
- 优化的性能: 减少重复数据,优化 Flush 策略
- 完善的生命周期管理: Session 追踪覆盖更全面
- 详尽的文档: 包含完整的重构指南和实施计划
整体评估: 这是一次高质量的系统重构,建议合并后进行全面测试验证。
预计测试时间: 2-3 小时(包括基础测试和集成测试)
Report generated: 2026-05-27
Analyzer: Git Commit Analysis Tool