Jelajahi Sumber

feat: 添加日志记录功能以跟踪分支合并和文件评审任务

weipengtao 5 bulan lalu
induk
melakukan
90284c0436

+ 5 - 0
pom.xml

@@ -30,6 +30,11 @@
             <artifactId>fastjson</artifactId>
             <version>1.2.47</version>
         </dependency>
+        <dependency>
+            <groupId>cn.seecoder</groupId>
+            <artifactId>SeecoderLog</artifactId>
+            <version>0.2.0-jdk8-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>

+ 60 - 18
web/src/main/java/cn/seecoder/web/service/impl/code_review/BranchReviewServiceImpl.java

@@ -18,6 +18,7 @@ import com.nju.edu.gitlab.SeecoderGitlabApi;
 import com.nju.edu.gitlab.SeecoderGitlabException;
 import com.nju.edu.gitlab.vo.BranchVO;
 import com.nju.edu.gitlab.vo.DiffVO;
+import cn.seecoder.seecoderlog.utils.SeecoderLogUtils;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
 import org.gitlab4j.api.GitLabApi;
@@ -146,24 +147,65 @@ public class BranchReviewServiceImpl implements BranchReviewService {
     public void merge(int id) throws GitLabApiException, SeecoderGitlabException {
         UserPO currentUser = UserService.loginUser();
         CodeReviewPO codeReviewPO = branchReviewMapper.selectById(id);
-        seecoderGitlabApi.mergeBranch(codeReviewPO.getProjectId(), codeReviewPO.getSourceBranch(), codeReviewPO.getTargetBranch(),
-                codeReviewPO.getTitle(), codeReviewPO.getDescription(), codeReviewPO.getReviewerId());
-        //数据库操作与对应的评论和消息创建
-        branchReviewMapper.merge(id);
-        CodeReviewVO codeReviewVO = this.getById(id);
-        CommentCreateVO commentCreateVO = new CommentCreateVO();
-        commentCreateVO.setCodeReviewId(id);
-        commentCreateVO.setCommentType(CommentTypeEnum.MERGE);
-        commentCreateVO.setCreatorId(currentUser.getId());
-        commentCreateVO.setCreatorName(currentUser.getUsername());
-        commentCreateVO.setReplyId(-1);
-        commentService.create(commentCreateVO, false);
-        MessageCreateVO messageCreateVO = new MessageCreateVO();
-        messageCreateVO.setCreatorId(currentUser.getId());
-        messageCreateVO.setReceiverId(codeReviewVO.getCreatorId());
-        messageCreateVO.setContent("代码评审任务\""+codeReviewVO.getTitle()+"\"已被合并");
-        messageCreateVO.setLinkTo("/project/"+codeReviewVO.getProjectId()+"/codereviewdetail?codeReviewId="+id);
-        messageService.create(messageCreateVO);
+        try {
+            seecoderGitlabApi.mergeBranch(codeReviewPO.getProjectId(), codeReviewPO.getSourceBranch(), codeReviewPO.getTargetBranch(),
+                    codeReviewPO.getTitle(), codeReviewPO.getDescription(), codeReviewPO.getReviewerId());
+            //数据库操作与对应的评论和消息创建
+            branchReviewMapper.merge(id);
+            CodeReviewVO codeReviewVO = this.getById(id);
+            CommentCreateVO commentCreateVO = new CommentCreateVO();
+            commentCreateVO.setCodeReviewId(id);
+            commentCreateVO.setCommentType(CommentTypeEnum.MERGE);
+            commentCreateVO.setCreatorId(currentUser.getId());
+            commentCreateVO.setCreatorName(currentUser.getUsername());
+            commentCreateVO.setReplyId(-1);
+            commentService.create(commentCreateVO, false);
+            MessageCreateVO messageCreateVO = new MessageCreateVO();
+            messageCreateVO.setCreatorId(currentUser.getId());
+            messageCreateVO.setReceiverId(codeReviewVO.getCreatorId());
+            messageCreateVO.setContent("代码评审任务\""+codeReviewVO.getTitle()+"\"已被合并");
+            messageCreateVO.setLinkTo("/project/"+codeReviewVO.getProjectId()+"/codereviewdetail?codeReviewId="+id);
+            messageService.create(messageCreateVO);
+
+            long now = System.currentTimeMillis();
+            long taskDurationMs = now - codeReviewPO.getCreateTime().getTime();
+            SeecoderLogUtils.info(
+                    "D4_TASK_COMPLETED",
+                    "taskType=branchReview",
+                    "taskId=" + id,
+                    "projectId=" + codeReviewVO.getProjectId(),
+                    "operatorId=" + currentUser.getId(),
+                    "taskDurationMs=" + taskDurationMs,
+                    "completedTs=" + now
+            );
+            SeecoderLogUtils.info(
+                    "D4_COLLAB_EFFECTIVE",
+                    "source=branchReviewMerge",
+                    "taskId=" + id,
+                    "projectId=" + codeReviewVO.getProjectId(),
+                    "operatorId=" + currentUser.getId(),
+                    "ts=" + now
+            );
+        } catch (SeecoderGitlabException e) {
+            SeecoderLogUtils.warn(
+                    "D4_COLLAB_CONFLICT_CREATED",
+                    "conflictType=branchMerge",
+                    "taskId=" + id,
+                    "projectId=" + codeReviewPO.getProjectId(),
+                    "operatorId=" + currentUser.getId(),
+                    "reason=" + e.getClass().getSimpleName(),
+                    "ts=" + System.currentTimeMillis()
+            );
+            SeecoderLogUtils.error(
+                    e,
+                    "D4_COLLAB_CONFLICT_CREATED",
+                    "conflictType=branchMerge",
+                    "taskId=" + id,
+                    "projectId=" + codeReviewPO.getProjectId(),
+                    "operatorId=" + currentUser.getId()
+            );
+            throw e;
+        }
     }
 
     @Override

+ 50 - 0
web/src/main/java/cn/seecoder/web/service/impl/code_review/FileReviewServiceImpl.java

@@ -34,6 +34,7 @@ import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
+import cn.seecoder.seecoderlog.utils.SeecoderLogUtils;
 
 @Service
 public class FileReviewServiceImpl implements FileReviewService {
@@ -69,6 +70,16 @@ public class FileReviewServiceImpl implements FileReviewService {
                 messageService.create(messageCreateVO);
             }
         }
+
+        SeecoderLogUtils.info(
+                "D4_TASK_ASSIGNED",
+                "taskType=fileReview",
+                "taskId=" + fileReviewId,
+                "projectId=" + fileReviewCreateVO.getProjectId(),
+                "creatorId=" + fileReviewCreateVO.getCreatorId(),
+                "reviewerCount=" + fileReviewCreateVO.getReviewerList().size(),
+                "createdTs=" + fileReviewPO.getCreateTime().getTime()
+        );
     }
 
     @Override
@@ -168,9 +179,19 @@ public class FileReviewServiceImpl implements FileReviewService {
                     messageCreateVO.setContent("文件评审\""+fileReviewVO.getTitle()+"\"已被要求返工,请及时修改");
                     messageCreateVO.setLinkTo("/project/"+fileReviewVO.getProjectId()+"/filereviewdetail?fileReviewId="+fileReviewId);
                     messageService.create(messageCreateVO);
+
+                    SeecoderLogUtils.warn(
+                            "D4_COLLAB_CONFLICT_CREATED",
+                            "conflictType=fileReviewRework",
+                            "taskId=" + fileReviewId,
+                            "projectId=" + fileReviewVO.getProjectId(),
+                            "reviewerId=" + reviewerId,
+                            "ts=" + System.currentTimeMillis()
+                    );
                     return FileReviewStatusEnum.REWORK;
                 }
             }
+            FileReviewStatusEnum previousStatus = fileReviewPO.getStatus();
             fileReviewPO.setStatus(FileReviewStatusEnum.COMPLETED);
             fileReviewMapper.updateById(fileReviewPO);
             inspectionResultMapper.deleteByFileReviewId(fileReviewId);
@@ -180,6 +201,35 @@ public class FileReviewServiceImpl implements FileReviewService {
             messageCreateVO.setContent("文件评审\""+fileReviewVO.getTitle()+"\"已通过评审");
             messageCreateVO.setLinkTo("/project/"+fileReviewVO.getProjectId()+"/filereviewdetail?fileReviewId="+fileReviewId);
             messageService.create(messageCreateVO);
+
+            long now = System.currentTimeMillis();
+            long taskDurationMs = now - fileReviewPO.getCreateTime().getTime();
+            SeecoderLogUtils.info(
+                    "D4_TASK_COMPLETED",
+                    "taskType=fileReview",
+                    "taskId=" + fileReviewId,
+                    "projectId=" + fileReviewVO.getProjectId(),
+                    "reviewerId=" + reviewerId,
+                    "taskDurationMs=" + taskDurationMs,
+                    "completedTs=" + now
+            );
+            SeecoderLogUtils.info(
+                    "D4_COLLAB_EFFECTIVE",
+                    "source=fileReviewPass",
+                    "taskId=" + fileReviewId,
+                    "projectId=" + fileReviewVO.getProjectId(),
+                    "ts=" + now
+            );
+            if (previousStatus == FileReviewStatusEnum.REWORK) {
+                SeecoderLogUtils.info(
+                        "D4_COLLAB_CONFLICT_RESOLVED",
+                        "conflictType=fileReviewRework",
+                        "taskId=" + fileReviewId,
+                        "projectId=" + fileReviewVO.getProjectId(),
+                        "resolverId=" + reviewerId,
+                        "ts=" + now
+                );
+            }
             return FileReviewStatusEnum.COMPLETED;
         }
         //还有评审人未完成评审

+ 21 - 0
web/src/main/java/cn/seecoder/web/service/impl/message/MessageServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.seecoder.web.service.impl.message;
 
+import cn.seecoder.seecoderlog.utils.SeecoderLogUtils;
 import cn.seecoder.web.dao.message.MessageMapper;
 import cn.seecoder.web.model.enums.MessageStatusEnum;
 import cn.seecoder.web.model.po.message.MessagePO;
@@ -45,6 +46,15 @@ public class MessageServiceImpl implements MessageService {
         messagePO.setCreateTime(new Timestamp(System.currentTimeMillis()));
         messagePO.setStatus(MessageStatusEnum.NEW);
         messageMapper.insert(messagePO, "id");
+
+        SeecoderLogUtils.info(
+                "D4_COMM_MESSAGE_SENT",
+                "messageId=" + messagePO.getId(),
+                "creatorId=" + messagePO.getCreatorId(),
+                "receiverId=" + messagePO.getReceiverId(),
+                "linkTo=" + messagePO.getLinkTo(),
+                "ts=" + messagePO.getCreateTime().getTime()
+        );
     }
 
     @Override
@@ -59,5 +69,16 @@ public class MessageServiceImpl implements MessageService {
         MessagePO messagePO = messageMapper.selectById(id);
         messagePO.setStatus(MessageStatusEnum.READ);
         messageMapper.update(messagePO);
+
+        long readTs = System.currentTimeMillis();
+        long responseMs = readTs - messagePO.getCreateTime().getTime();
+        SeecoderLogUtils.info(
+                "D4_COMM_MESSAGE_RESPONSE",
+                "messageId=" + messagePO.getId(),
+                "creatorId=" + messagePO.getCreatorId(),
+                "receiverId=" + messagePO.getReceiverId(),
+                "responseMs=" + responseMs,
+                "readTs=" + readTs
+        );
     }
 }