Просмотр исходного кода

feat: 添加了删除超过一天的部署的定时任务代码,在每日凌晨一点钟执行

刘一也 4 лет назад
Родитель
Сommit
2841272f4b

+ 7 - 0
web/src/main/java/cn/seecoder/web/dao/pipeline/DeploymentMapper.java

@@ -42,6 +42,13 @@ public interface DeploymentMapper {
     @Select("select * from deployment limit #{startPos}, #{pageSize}")
     List<DeploymentPO> selectPagedDeployments(@Param("startPos") Integer startPos, @Param("pageSize") Integer pageSize);
 
+    /**
+     * !!For Scheduled Deployments Purge Only
+     * @return DeploymentPO List
+     */
+    @Select("select * from deployment")
+    List<DeploymentPO> selectAllDeployments();
+
     @Select("select count(*) from deployment")
     Integer selectTotalItemCount();
 

+ 48 - 0
web/src/main/java/cn/seecoder/web/infrastructure/ScheduledTasks.java

@@ -0,0 +1,48 @@
+package cn.seecoder.web.infrastructure;
+
+import cn.seecoder.common.exceptions.AccessDeniedException;
+import cn.seecoder.web.dao.pipeline.DeploymentMapper;
+import cn.seecoder.web.dao.pipeline.PipelineMapper;
+import cn.seecoder.web.model.po.pipeline.DeploymentPO;
+import cn.seecoder.web.model.po.pipeline.PipelinePO;
+import cn.seecoder.web.service.pipeline.DeploymentService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+@Log4j2
+@RequiredArgsConstructor
+@Async
+@Component
+public class ScheduledTasks {
+    private final DeploymentService deploymentService;
+    private final DeploymentMapper deploymentMapper;
+    private final PipelineMapper pipelineMapper;
+
+    @Scheduled(cron = "0 0 1 * * ?")
+    public void purgeZombieDeployments() {
+        long ONE_DAY_MILLIS = 86400000L;
+        Timestamp expireLimit = new Timestamp(System.currentTimeMillis() - ONE_DAY_MILLIS);
+        List<DeploymentPO> deploymentPOList = deploymentMapper.selectAllDeployments();
+        for (DeploymentPO deploymentPO: deploymentPOList) {
+            Timestamp deployedTime = deploymentPO.getDeployedTime();
+            if (deployedTime.before(expireLimit)) {
+                PipelinePO pipelinePO = pipelineMapper.selectById(deploymentPO.getPipelineId());
+                try {
+                    deploymentService.delete(pipelinePO.getProjectId(), deploymentPO.getPipelineId());
+                } catch (AccessDeniedException e) {
+                    log.error(String.format("Scheduled Deployments Purge Failed for projectId: %s, pipelineId: %s, for %s",
+                            pipelinePO.getProjectId(),
+                            deploymentPO.getPipelineId(),
+                            e.getMessage()));
+                }
+            }
+        }
+    }
+}