Files
LanMountainDesktop/docs/auto_commit_md/20260527_ce41fd6.md

11 KiB
Raw Blame History

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 生命周期增强

  • 优化了 StartSessionEndSession 方法
  • 添加了 TrackSessionStartedTrackSessionEnded 追踪
  • 与 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_name Tag提供事件的中文显示名
  • 改善 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
  • 遵循最佳实践,提升了系统可维护性
  • 增强了用户隐私保护
  • 包含详尽的测试指南

建议操作:

  1. 执行完整的构建测试
  2. 运行测试套件验证无回归
  3. ⚠️ 进行 Session 生命周期的集成测试
  4. ⚠️ 验证遥测数据上报的完整性
  5. ⚠️ 检查 Sentry Dashboard 中的事件命名
  6. ⚠️ 检查 PostHog 中的用户追踪一致性

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

本次提交是一个重大的遥测系统重构,包含以下核心改进:

  1. 统一的事件命名规范: 避免了硬编码字符串,提升代码可维护性
  2. 增强的隐私保护: 禁用 PII 收集,使用匿名标识符
  3. 优化的性能: 减少重复数据,优化 Flush 策略
  4. 完善的生命周期管理: Session 追踪覆盖更全面
  5. 详尽的文档: 包含完整的重构指南和实施计划

整体评估: 这是一次高质量的系统重构,建议合并后进行全面测试验证。

预计测试时间: 2-3 小时(包括基础测试和集成测试)


Report generated: 2026-05-27
Analyzer: Git Commit Analysis Tool