d4-metrics-90284c04.md 7.4 KB

90284c04 日志埋点说明与 D4 指标实现

变更背景

  • 提交号:90284c04369fa9c0e3da56c3bae0cd05e9ee6747
  • 提交信息:feat: 添加日志记录功能以跟踪分支合并和文件评审任务
  • 目标:通过统一日志埋点,支持以下指标统计:
    • D4-1 个人分工任务按时完成能力:协作任务完成率
    • D4-2 团队内部沟通能力:
    • 团队沟通平均响应耗时
    • 有效协作次数
    • 协作冲突解决次数

本次改动文件

  • pom.xml
  • web/src/main/java/cn/seecoder/web/service/impl/code_review/BranchReviewServiceImpl.java
  • web/src/main/java/cn/seecoder/web/service/impl/code_review/FileReviewServiceImpl.java
  • web/src/main/java/cn/seecoder/web/service/impl/message/MessageServiceImpl.java

依赖与接入

pom.xml 中新增依赖:

<dependency>
    <groupId>cn.seecoder</groupId>
    <artifactId>SeecoderLog</artifactId>
    <version>0.2.0-jdk8-SNAPSHOT</version>
</dependency>

在上述 3 个业务服务类中引入日志工具:

import cn.seecoder.seecoderlog.utils.SeecoderLogUtils;

新增日志事件总览

事件(bizName) 级别 触发位置 含义
D4_TASK_ASSIGNED info 文件评审创建后 记录协作任务分配
D4_TASK_COMPLETED info 分支合并成功 / 文件评审通过 记录协作任务完成
D4_COLLAB_EFFECTIVE info 分支合并成功 / 文件评审通过 记录一次有效协作
D4_COLLAB_CONFLICT_CREATED warn / error 分支合并异常 / 文件评审返工 记录协作冲突或失败
D4_COLLAB_CONFLICT_RESOLVED info 文件评审从返工状态转为通过 记录冲突被解决
D4_COMM_MESSAGE_SENT info 站内消息创建后 记录沟通发起
D4_COMM_MESSAGE_RESPONSE info 站内消息已读后 记录沟通响应与耗时

逐文件说明:加了哪些日志

1. BranchReviewServiceImpl

1.1 合并成功路径新增

  • D4_TASK_COMPLETED
    • taskType=branchReview
    • taskId
    • projectId
    • operatorId
    • taskDurationMs=当前时间-任务创建时间
    • completedTs
  • D4_COLLAB_EFFECTIVE
    • source=branchReviewMerge
    • taskId
    • projectId
    • operatorId
    • ts

1.2 合并异常路径新增

在捕获 SeecoderGitlabException 时:

  • D4_COLLAB_CONFLICT_CREATED(warn)
    • conflictType=branchMerge
    • taskId
    • projectId
    • operatorId
    • reason=异常类名
    • ts
  • D4_COLLAB_CONFLICT_CREATED(error,带异常堆栈)
    • conflictType=branchMerge
    • taskId
    • projectId
    • operatorId

说明:同一个冲突事件使用 warn + error 记录,warn 用于指标统计,error 用于排障追踪。


2. FileReviewServiceImpl

2.1 创建评审任务后新增

  • D4_TASK_ASSIGNED
    • taskType=fileReview
    • taskId
    • projectId
    • creatorId
    • reviewerCount
    • createdTs

2.2 返工路径新增

当有评审人选择返工时:

  • D4_COLLAB_CONFLICT_CREATED(warn)
    • conflictType=fileReviewRework
    • taskId
    • projectId
    • reviewerId
    • ts

2.3 评审通过路径新增

  • D4_TASK_COMPLETED
    • taskType=fileReview
    • taskId
    • projectId
    • reviewerId
    • taskDurationMs=当前时间-任务创建时间
    • completedTs
  • D4_COLLAB_EFFECTIVE
    • source=fileReviewPass
    • taskId
    • projectId
    • ts
  • D4_COLLAB_CONFLICT_RESOLVED(仅当此前状态为 REWORK
    • conflictType=fileReviewRework
    • taskId
    • projectId
    • resolverId
    • ts

3. MessageServiceImpl

3.1 消息发送新增

  • D4_COMM_MESSAGE_SENT
    • messageId
    • creatorId
    • receiverId
    • linkTo
    • ts

3.2 消息已读新增

  • D4_COMM_MESSAGE_RESPONSE
    • messageId
    • creatorId
    • receiverId
    • responseMs=readTs-消息创建时间
    • readTs

D4 指标如何落在日志上

D4-1 个人分工任务按时完成能力

指标:协作任务完成率

可由以下事件构成统计闭环:

  • 分配:D4_TASK_ASSIGNED
  • 完成:D4_TASK_COMPLETED

建议口径:

  • 协作任务完成率 = 完成任务数 / 分配任务数
  • 支持维度:taskTypeprojectIdcreatorIdreviewerIdoperatorId

按时能力建议扩展:

  • 结合 taskDurationMs 与 SLA 阈值统计按时完成率
  • 示例:按时完成率 = taskDurationMs <= SLA 的完成任务数 / 完成任务总数

当前提交中,D4_TASK_ASSIGNED 已覆盖 fileReview;branchReview 若需独立完成率闭环,后续可补充 branchReview 的分配/创建埋点。

D4-2 团队内部沟通能力

指标1:团队沟通平均响应耗时

  • 事件来源:D4_COMM_MESSAGE_RESPONSE
  • 字段来源:responseMs
  • 统计口径:avg(responseMs)

指标2:有效协作次数

  • 事件来源:D4_COLLAB_EFFECTIVE
  • 当前来源标签:
    • source=branchReviewMerge
    • source=fileReviewPass
  • 统计口径:count(*)(可按 source/projectId/taskId 分维)

指标3:协作冲突解决次数

  • 冲突创建:D4_COLLAB_CONFLICT_CREATED
  • 冲突解决:D4_COLLAB_CONFLICT_RESOLVED
  • 统计口径:
    • 协作冲突解决次数 = count(D4_COLLAB_CONFLICT_RESOLVED)
    • 可扩展:冲突解决率 = resolved / created

可统计参数设计(字段字典)

参数 类型建议 含义 常见事件
taskId long 协作任务 ID TASK_ASSIGNED / TASKCOMPLETED / COLLAB*
taskType enum/string 任务类型(fileReview/branchReview TASK_ASSIGNED / TASK_COMPLETED
projectId long 项目 ID 大多数任务事件
creatorId long 发起人/创建人 TASKASSIGNED / COMM*
reviewerId long 评审人 TASK_COMPLETED / CONFLICT_CREATED
operatorId long 操作执行人 分支合并相关
resolverId long 冲突解决人 CONFLICT_RESOLVED
reviewerCount int 评审人数 TASK_ASSIGNED
messageId long 消息 ID COMM_*
linkTo string 消息跳转链接 COMM_MESSAGE_SENT
createdTs long(ms) 任务创建时间 TASK_ASSIGNED
completedTs long(ms) 任务完成时间 TASK_COMPLETED
readTs long(ms) 消息读取时间 COMM_MESSAGE_RESPONSE
ts long(ms) 事件发生时间 多数事件
taskDurationMs long(ms) 任务耗时 TASK_COMPLETED
responseMs long(ms) 消息响应耗时 COMM_MESSAGE_RESPONSE
source string 有效协作来源 COLLAB_EFFECTIVE
conflictType string 冲突类型(branchMerge/fileReviewRework CONFLICT_CREATED/RESOLVED
reason string 冲突/异常原因 CONFLICT_CREATED

建议的数据看板指标(可直接配置)

  1. D4_协作任务完成率
    • 分子:count(D4_TASK_COMPLETED)
    • 分母:count(D4_TASK_ASSIGNED)
  2. D4_沟通平均响应耗时
    • avg(responseMs) from D4_COMM_MESSAGE_RESPONSE
  3. D4_有效协作次数
    • count(D4_COLLAB_EFFECTIVE)
  4. D4_冲突解决次数
    • count(D4_COLLAB_CONFLICT_RESOLVED)
  5. D4_冲突解决率(建议)
    • count(RESOLVED) / count(CREATED)

备注

  • bizName 已按 D4 统计语义区分,支持按事件直接过滤聚合。
  • 业务上下文通过 context 透传,便于后续扩展统计维度。
  • 若后续希望覆盖更完整“个人按时完成”口径,建议在 branchReview 的创建/分配入口补充 D4_TASK_ASSIGNED