Sfoglia il codice sorgente

feat: show commit quality details

claws 4 anni fa
parent
commit
09b4ba3060

+ 15 - 0
web/src/main/java/cn/seecoder/web/controller/gitlab/CommitController.java

@@ -10,6 +10,7 @@ import cn.seecoder.web.model.enums.CommitRelatedEnum;
 import cn.seecoder.web.model.po.commit.CommitPO;
 import cn.seecoder.web.model.vo.GitWebHookVO;
 import cn.seecoder.web.model.vo.Response;
+import cn.seecoder.web.model.vo.commit.CommitQualityVO;
 import cn.seecoder.web.model.vo.hook.SonarResultHookVO;
 import cn.seecoder.web.model.vo.commit.CommitVO;
 import cn.seecoder.web.service.bug_list.BugListService;
@@ -40,6 +41,7 @@ import java.util.Set;
 public class CommitController {
 
     private final static String LINK_FAIL_ERROR = "Commit Link Failed! No Such Bug or Task Found!";
+    private final static String QUALITY_QUERY_ERROR = "查询代码版本质量失败";
 
     private final BugListService bugListService;
 
@@ -238,4 +240,17 @@ public class CommitController {
             return Response.buildFailure(404, LINK_FAIL_ERROR);
         }
     }
+
+    @ApiOperation(value = "查询代码版本质量", httpMethod = "GET")
+    @GetMapping("commit/quality")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "projectId", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "commitId", dataType = "String", paramType = "query")
+    })
+    public Response<CommitQualityVO> getQualityByProjectIdAndCommit(@RequestParam("projectId") Integer projectId,
+                                                                    @RequestParam("commitId") String commitId)
+    {
+        CommitQualityVO quality = commitService.getQualityByCommit(projectId, commitId);
+        return Response.buildSuccess(quality);
+    }
 }

+ 2 - 2
web/src/main/java/cn/seecoder/web/core/pipeline/handler/K8sJobHandler.java

@@ -139,12 +139,12 @@ public class K8sJobHandler extends AbstractHandler{
                     .build());
             if (jobs.size() == 0){
                 jobApi.create(job);
-                log.info(String.format("Job创建成功: [namespace: %s, deployName: %s]", namespace, deployName));
+                log.info(String.format("Job创建成功: [namespace: %s, jobName: %s]", namespace, jobName));
                 context.appendSuccessResult(String.format("Job创建成功: [namespace: %s, deployName: %s]", namespace, deployName));
             } else {
                 log.info("job已存在!执行删除重建操作");
                 jobApi.update(job);
-                log.info(String.format("Job重建成功: [namespace: %s, deployName: %s]", namespace, deployName));
+                log.info(String.format("Job重建成功: [namespace: %s, jobName: %s]", namespace, jobName));
                 context.appendErrorResult("Job已存在,放弃创建", new Exception());
             }
         } catch (K8sApiException e) {

+ 1 - 0
web/src/main/java/cn/seecoder/web/infrastructure/config/WebSecurityConfig.java

@@ -99,6 +99,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers(GET, "/commit").access("@authTools.checkProjOwnershipParam(request)")
                 .antMatchers(GET, "/commits/diff").access("@authTools.checkProjOwnershipParam(request)")
                 .antMatchers(GET, "/commits/link").access("@authTools.checkProjOwnershipParam(request)")
+                .antMatchers(GET, "/commit/quality").access("@authTools.checkProjOwnershipParam(request)")
                 // Branch Controller
                 .antMatchers(GET, "/branch/list").access("@authTools.checkProjOwnershipParam(request)")
                 // Deployment Controller

+ 1 - 0
web/src/main/java/cn/seecoder/web/model/po/commit/CommitQualityPO.java

@@ -23,4 +23,5 @@ public class CommitQualityPO {
     private String sonarProjectKey;
     private String checkResult;
     private Date checkTime;
+    private String resultUrl;
 }

+ 23 - 0
web/src/main/java/cn/seecoder/web/model/vo/commit/CommitQualityVO.java

@@ -0,0 +1,23 @@
+package cn.seecoder.web.model.vo.commit;
+
+import cn.seecoder.web.model.enums.CommitCheckResultEnum;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@NoArgsConstructor
+public class CommitQualityVO {
+    private String commitHash;
+    private Date checkTime;
+    private String resultUrl;
+    private CommitCheckResultEnum checkResult;
+    private QualityGates qualityGates;
+
+    @Data
+    @NoArgsConstructor
+    public static class QualityGates {
+        private boolean apiOk = true;
+    }
+}

+ 43 - 8
web/src/main/java/cn/seecoder/web/service/impl/project/CommitServiceImpl.java

@@ -1,7 +1,9 @@
 package cn.seecoder.web.service.impl.project;
 
+import cn.seecoder.api.ApplicationProperties;
 import cn.seecoder.common.util.LogTrackingUtil;
 import cn.seecoder.common.util.OpType;
+import cn.seecoder.common.util.SpringUtil;
 import cn.seecoder.web.dao.commit.CommitQualityMapper;
 import cn.seecoder.web.dao.user.UserMapper;
 import cn.seecoder.web.model.enums.CommitCheckResultEnum;
@@ -9,6 +11,7 @@ import cn.seecoder.web.model.enums.CommitRelatedEnum;
 import cn.seecoder.web.model.po.bug_list.BugListPO;
 import cn.seecoder.web.model.po.commit.CommitQualityPO;
 import cn.seecoder.web.model.po.tree.TreeNodePO;
+import cn.seecoder.web.model.vo.commit.CommitQualityVO;
 import cn.seecoder.web.model.vo.commit.CommitVO;
 import cn.seecoder.web.model.vo.hook.SonarResultHookVO;
 import cn.seecoder.web.service.bug_list.BugListService;
@@ -43,7 +46,6 @@ public class CommitServiceImpl implements CommitService {
     private final TreeNodeService treeNodeService;
     private final BugListService bugListService;
 
-
     @Autowired
     public CommitServiceImpl(CommitMapper commitMapper, SeecoderGitlabApi seecoderGitlabApi, TreeNodeService treeNodeService, BugListService bugListService) {
         this.commitMapper = commitMapper;
@@ -56,6 +58,8 @@ public class CommitServiceImpl implements CommitService {
     private UserMapper userMapper;
     @Autowired
     private CommitQualityMapper commitQualityMapper;
+    @Autowired
+    private ApplicationProperties applicationProperties;
 
     @Override
     public void save(CommitPO po) {
@@ -134,10 +138,8 @@ public class CommitServiceImpl implements CommitService {
                 CommitQualityPO commitQualityPO = stringCommitQualityPOMap.getOrDefault(hash, null);
                 if (commitQualityPO == null) {
                     commitVO.setCheckResult(CommitCheckResultEnum.NONE);
-                } else if (commitQualityPO.getCheckResult().equals("OK")) {
-                    commitVO.setCheckResult(CommitCheckResultEnum.PASS);
                 } else {
-                    commitVO.setCheckResult(CommitCheckResultEnum.FAIL);
+                    commitVO.setCheckResult(convertCommitCheckResult(commitQualityPO.getCheckResult()));
                 }
 
                 allCommits.add(commitVO);
@@ -162,17 +164,14 @@ public class CommitServiceImpl implements CommitService {
                 commitVO.setRelatedType(commitPO.getRelatedType());
                 commitVO.setRelatedId(commitPO.getRelatedId());
             } else {
-                System.out.println("hh");
                 commitVO.setRelatedType(CommitRelatedEnum.NONE);
             }
 
             CommitQualityPO commitQualityPO = commitQualityMapper.selectByCommitHash(hash);
             if (commitQualityPO == null) {
                 commitVO.setCheckResult(CommitCheckResultEnum.NONE);
-            } else if (commitQualityPO.getCheckResult().equals("OK")) {
-                commitVO.setCheckResult(CommitCheckResultEnum.PASS);
             } else {
-                commitVO.setCheckResult(CommitCheckResultEnum.FAIL);
+                commitVO.setCheckResult(convertCommitCheckResult(commitQualityPO.getCheckResult()));
             }
 
             return commitVO;
@@ -251,10 +250,20 @@ public class CommitServiceImpl implements CommitService {
             commitQualityPO.setProjectId(properties.getProjectId());
             commitQualityPO.setCommitHash(commitHash);
             commitQualityPO.setCheckResult(sonarResultHookVO.getQualityGate().getStatus());
+
             DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
             simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
             Date date = simpleDateFormat.parse(sonarResultHookVO.getChangedAt());
             commitQualityPO.setCheckTime(date);
+
+            String url = sonarResultHookVO.getProject().getUrl();
+            // http://localhost:9000/dashboard?id\u003dsonart-4194-sonar-sonar-83700f2455cef5ca81ee0561d1a5509229ee0bcb
+            // to
+            // https://sonarqube-test.seec.seecoder.cn/dashboard?id=sonart-4194-sonar-sonar-83700f2455cef5ca81ee0561d1a5509229ee0bcb
+            String host = applicationProperties.getSonar().getHost();
+            url = url.replace("http://localhost:9000", host).replace("\\u003", "=");
+            commitQualityPO.setResultUrl(url);
+
             commitQualityPO.setSonarProjectKey(sonarResultHookVO.getProject().getKey());
             CommitQualityPO lastCommitQualityPO = commitQualityMapper.selectByCommitHash(commitHash);
             if (lastCommitQualityPO != null) {
@@ -272,4 +281,30 @@ public class CommitServiceImpl implements CommitService {
             return false;
         }
     }
+
+    @Override
+    public CommitQualityVO getQualityByCommit(Integer projectId, String commitHash) {
+        CommitQualityPO commitQualityPO = commitQualityMapper.selectByCommitHash(commitHash);
+        if (commitQualityPO != null) {
+            CommitQualityVO commitQualityVO = new CommitQualityVO();
+            commitQualityVO.setCommitHash(commitHash);
+            commitQualityVO.setCheckResult(convertCommitCheckResult(commitQualityPO.getCheckResult()));
+            commitQualityVO.setCheckTime(commitQualityPO.getCheckTime());
+            commitQualityVO.setResultUrl(commitQualityPO.getResultUrl());
+            return commitQualityVO;
+        } else {
+            CommitQualityVO commitQualityVO = new CommitQualityVO();
+            commitQualityVO.setCheckResult(CommitCheckResultEnum.NONE);
+            return commitQualityVO;
+        }
+    }
+
+    // convert String result to Enum result
+    private CommitCheckResultEnum convertCommitCheckResult(String rawResult) {
+        if (rawResult.equals("OK")) {
+            return CommitCheckResultEnum.PASS;
+        } else {
+            return CommitCheckResultEnum.FAIL;
+        }
+    }
 }

+ 14 - 0
web/src/main/java/cn/seecoder/web/service/project/CommitService.java

@@ -2,6 +2,7 @@ package cn.seecoder.web.service.project;
 
 import cn.seecoder.web.model.enums.CommitRelatedEnum;
 import cn.seecoder.web.model.po.commit.CommitPO;
+import cn.seecoder.web.model.vo.commit.CommitQualityVO;
 import cn.seecoder.web.model.vo.commit.CommitVO;
 import cn.seecoder.web.model.vo.hook.SonarResultHookVO;
 import com.nju.edu.gitlab.vo.DiffVO;
@@ -49,5 +50,18 @@ public interface CommitService {
      */
     boolean link(Integer projectId, String commitHash, CommitRelatedEnum relatedType, Integer relatedId);
 
+    /**
+     * process the coming json data from sonarqube
+     * @param sonarResultHookVO
+     * @return
+     */
     boolean processSonarResult(SonarResultHookVO sonarResultHookVO);
+
+    /**
+     * get commit quality by commit hash and project id
+     * @param projectId
+     * @param commitHash
+     * @return
+     */
+    CommitQualityVO getQualityByCommit(Integer projectId, String commitHash);
 }

+ 2 - 2
web/src/main/resources/sql/table_init.sql

@@ -223,7 +223,8 @@ create table if not exists devcloud.commit_quality
     commit_hash                     varchar(127)    not null,
     sonar_project_key               varchar(127)    not null,
     check_result                    varchar(31)     not null,
-    check_time                      datetime default CURRENT_TIMESTAMP not null
+    check_time                      datetime default CURRENT_TIMESTAMP not null,
+    result_url                      varchar(255)    null
 --     new_reliability_rating          double          null,
 --     new_security_rating             double          null,
 --     new_maintainability_rating      double          null,
@@ -231,4 +232,3 @@ create table if not exists devcloud.commit_quality
 --     new_duplicated_lines_density    double          null,
 --     new_security_hotspots_reviewed  double          null
 ) CHARSET=utf8;
-