Ver código fonte

将 AppBuilding 和 AppDeploying 持久化到数据库

reghao 2 anos atrás
pai
commit
37bc77afb5

+ 11 - 4
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/BuildDeployPageController.java

@@ -1,6 +1,7 @@
 package cn.reghao.devops.manager.app.controller.page;
 
 import cn.reghao.devops.common.util.NotAvailable;
+import cn.reghao.devops.manager.app.db.repository.AppBuildingRepository;
 import cn.reghao.devops.manager.app.model.constant.AppType;
 import cn.reghao.devops.manager.app.model.constant.EnvMap;
 import cn.reghao.devops.manager.app.model.po.AppBuilding;
@@ -10,6 +11,7 @@ import cn.reghao.devops.manager.app.model.po.log.BuildLog;
 import cn.reghao.devops.manager.app.model.vo.AppBuildingVO;
 import cn.reghao.devops.manager.app.model.vo.AppDeployingVO;
 import cn.reghao.devops.manager.app.model.vo.BuildLogVO;
+import cn.reghao.devops.manager.app.service.bd.BuildService;
 import cn.reghao.devops.manager.app.service.page.BuildDeployLogPage;
 import cn.reghao.devops.manager.app.service.bd.BuildStat;
 import cn.reghao.devops.manager.app.service.bd.DeployStat;
@@ -41,11 +43,14 @@ public class BuildDeployPageController {
     private final BuildStat buildStat;
     private final DeployStat deployStat;
     private final BuildDeployLogPage buildDeployLogPage;
+    private final BuildService buildService;
 
-    public BuildDeployPageController(BuildStat buildStat, DeployStat deployStat, BuildDeployLogPage buildDeployLogPage) {
+    public BuildDeployPageController(BuildStat buildStat, DeployStat deployStat, BuildDeployLogPage buildDeployLogPage,
+                                     BuildService buildService) {
         this.buildStat = buildStat;
         this.deployStat = deployStat;
         this.buildDeployLogPage = buildDeployLogPage;
+        this.buildService = buildService;
     }
 
     @ApiOperation(value = "应用构建页面")
@@ -70,17 +75,20 @@ public class BuildDeployPageController {
         int pageNumber = pageRequest.getPageNumber()+1;
         int pageSize = pageRequest.getPageSize();
         PageList<AppBuildingVO> pageList;
+        Page<AppBuildingVO> page;
         if (appName != null) {
             pageList = buildStat.getByName(appName, pageNumber, pageSize);
+            page = buildService.findByPage(appName, pageRequest);
         } else {
             pageList = buildStat.getByPage(env, type, pageNumber, pageSize);
+            page = buildService.findByPage(env, type, pageRequest);
         }
 
         Page<AppBuildingVO> page1 = new PageImpl<>(pageList.getList(), pageRequest, pageList.getTotalSize());
         model.addAttribute("env", env);
         model.addAttribute("type", type);
-        model.addAttribute("page", page1);
-        model.addAttribute("list", pageList.getList());
+        model.addAttribute("page", page);
+        model.addAttribute("list", page.getContent());
         return "/app/bd/index";
     }
 
@@ -101,7 +109,6 @@ public class BuildDeployPageController {
                              Model model) {
         AppBuilding appBuilding = buildStat.getAppBuilding(appId);
         if (buildLogId.equals(appBuilding.getBuildLogId())) {
-
         }
 
         List<AppDeployingVO> list = deployStat.get(appId, null);

+ 16 - 0
manager/src/main/java/cn/reghao/devops/manager/app/db/repository/AppBuildingRepository.java

@@ -0,0 +1,16 @@
+package cn.reghao.devops.manager.app.db.repository;
+
+import cn.reghao.devops.manager.app.model.po.AppBuilding;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author reghao
+ * @date 2023-11-15 21:24:50
+ */
+public interface AppBuildingRepository extends JpaRepository<AppBuilding, Integer> {
+    Page<AppBuilding> findAllByAppConfig_EnvAndAppConfig_AppType(String env, String type, Pageable pageable);
+    Page<AppBuilding> findAllByAppConfig_AppName(String appName, Pageable pageable);
+    AppBuilding findAllByAppConfig_AppId(String appId);
+}

+ 18 - 0
manager/src/main/java/cn/reghao/devops/manager/app/db/repository/AppDeployingRepository.java

@@ -0,0 +1,18 @@
+package cn.reghao.devops.manager.app.db.repository;
+
+import cn.reghao.devops.manager.app.model.po.AppDeploying;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2023-11-15 21:24:50
+ */
+public interface AppDeployingRepository extends JpaRepository<AppDeploying, Integer> {
+    List<AppDeploying> findAllByAppDeployConfig_AppConfig_AppId(String appId);
+    AppDeploying findAllByAppDeployConfig_AppConfig_AppIdAndAppDeployConfig_MachineHost_MachineId(String appId, String machineId);
+    Page<AppDeploying> findAllByAppDeployConfig_AppConfig_Env(String env, Pageable pageable);
+}

+ 8 - 1
manager/src/main/java/cn/reghao/devops/manager/app/model/po/AppBuilding.java

@@ -1,12 +1,16 @@
 package cn.reghao.devops.manager.app.model.po;
 
 import cn.reghao.devops.manager.app.model.constant.BuildStatus;
+import cn.reghao.devops.manager.util.db.BaseEntity;
 import cn.reghao.jutil.jdk.result.ResultStatus;
 import cn.reghao.devops.manager.app.model.po.config.AppConfig;
 import cn.reghao.devops.manager.app.model.po.log.BuildLog;
 import cn.reghao.jutil.jdk.converter.DateTimeConverter;
 import lombok.*;
 
+import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+import javax.persistence.Transient;
 import java.time.LocalDateTime;
 
 /**
@@ -15,9 +19,12 @@ import java.time.LocalDateTime;
  * @author reghao
  * @date 2021-05-21 09:57:35
  */
+@NoArgsConstructor
 @Getter
 @Setter
-public class AppBuilding {
+@Entity
+public class AppBuilding extends BaseEntity {
+    @OneToOne
     private AppConfig appConfig;
     private String buildLogId;
     private String commitId;

+ 11 - 1
manager/src/main/java/cn/reghao/devops/manager/app/model/po/AppDeploying.java

@@ -5,10 +5,14 @@ import cn.reghao.devops.common.util.NotAvailable;
 import cn.reghao.devops.manager.app.model.constant.DeployStatus;
 import cn.reghao.devops.manager.app.model.po.config.AppDeployConfig;
 import cn.reghao.devops.manager.app.model.po.log.DeployLog;
+import cn.reghao.devops.manager.util.db.BaseEntity;
 import cn.reghao.jutil.jdk.converter.DateTimeConverter;
 import cn.reghao.jutil.jdk.result.ResultStatus;
 import lombok.*;
 
+import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+import javax.persistence.Transient;
 import java.time.LocalDateTime;
 
 /**
@@ -17,11 +21,16 @@ import java.time.LocalDateTime;
  * @author reghao
  * @date 2021-05-21 09:57:35
  */
+@NoArgsConstructor
 @Getter
 @Setter
-public class AppDeploying {
+@Entity
+public class AppDeploying extends BaseEntity {
+    @OneToOne
     private AppDeployConfig appDeployConfig;
+    @Transient
     private AppBuilding appBuilding;
+    private String buildLogId;
     private LocalDateTime deployTime;
     private String deployResult;
     private String deployBy;
@@ -51,6 +60,7 @@ public class AppDeploying {
     public AppDeploying(AppDeployConfig appDeployConfig, AppBuilding appBuilding) {
         this.appDeployConfig = appDeployConfig;
         this.appBuilding = appBuilding;
+        this.buildLogId = appBuilding.getBuildLogId();
         this.deployResult = DeployStatus.neverDeploy.getDesc();
         this.deployTime = LocalDateTime.now();
         this.deployBy = appBuilding.getBuildBy();

+ 0 - 90
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/BuildDeployStat.java

@@ -1,90 +0,0 @@
-package cn.reghao.devops.manager.app.service.bd;
-
-import cn.reghao.devops.manager.app.db.repository.config.AppConfigRepository;
-import cn.reghao.devops.manager.app.db.repository.config.AppDeployConfigRepository;
-import cn.reghao.devops.manager.app.db.repository.log.BuildLogRepository;
-import cn.reghao.devops.manager.app.db.repository.log.DeployLogRepository;
-import cn.reghao.devops.manager.app.model.po.AppBuilding;
-import cn.reghao.devops.manager.app.model.po.AppDeploying;
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.po.config.AppDeployConfig;
-import cn.reghao.devops.manager.app.model.po.log.BuildLog;
-import cn.reghao.devops.manager.app.model.po.log.DeployLog;
-import cn.reghao.devops.manager.machine.model.po.MachineHost;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2023-02-27 10:41:11
- */
-@Service
-public class BuildDeployStat {
-    private final AppConfigRepository appConfigRepository;
-    private final BuildLogRepository buildLogRepository;
-    private final AppDeployConfigRepository appDeployConfigRepository;
-    private final DeployLogRepository deployLogRepository;
-
-    public BuildDeployStat(AppConfigRepository appConfigRepository, BuildLogRepository buildLogRepository,
-                           AppDeployConfigRepository appDeployConfigRepository, DeployLogRepository deployLogRepository) {
-        this.appConfigRepository = appConfigRepository;
-        this.buildLogRepository = buildLogRepository;
-        this.appDeployConfigRepository = appDeployConfigRepository;
-        this.deployLogRepository = deployLogRepository;
-    }
-
-    public List<AppBuilding> getAppBuildings() {
-        return appConfigRepository.findAll().stream()
-                .map(this::getAppBuilding)
-                .collect(Collectors.toList());
-    }
-
-    private AppBuilding getAppBuilding(AppConfig appConfig) {
-        PageRequest pageRequest = PageRequest.of(0, 1, Sort.by(Sort.Direction.DESC, "createTime"));
-        Page<BuildLog> buildLogPage = buildLogRepository.findByAppConfig(appConfig, pageRequest);
-        List<BuildLog> buildLogs = buildLogPage.getContent();
-        AppBuilding appBuilding;
-        if (buildLogs.size() == 1) {
-            appBuilding = new AppBuilding(buildLogs.get(0));
-        } else {
-            appBuilding = new AppBuilding(appConfig);
-        }
-        return appBuilding;
-    }
-
-    public List<AppDeploying> getAppDeployings() {
-        return appDeployConfigRepository.findAll().stream()
-                .filter(appDeployConfig -> appDeployConfig.getAppConfig().getEnabled())
-                .map(this::getAppDeploying)
-                .collect(Collectors.toList());
-    }
-
-    private AppDeploying getAppDeploying(AppDeployConfig appDeployConfig) {
-        MachineHost machineHost = appDeployConfig.getMachineHost();
-        AppConfig appConfig = appDeployConfig.getAppConfig();
-
-        PageRequest pageRequest = PageRequest.of(0, 1, Sort.by(Sort.Direction.DESC, "createTime"));
-        Page<BuildLog> buildLogPage = buildLogRepository.findByAppConfig(appConfig, pageRequest);
-        List<BuildLog> buildLogs = buildLogPage.getContent();
-        if (buildLogs.size() == 1) {
-            BuildLog buildLog = buildLogs.get(0);
-            Page<DeployLog> deployLogPage = deployLogRepository.findByBuildLogAndMachineHost(buildLog, machineHost, pageRequest);
-            List<DeployLog> deployLogs = deployLogPage.getContent();
-            if (deployLogs.size() == 1) {
-                DeployLog deployLog = deployLogs.get(0);
-                AppBuilding appBuilding = new AppBuilding(buildLog);
-                return new AppDeploying(appDeployConfig, appBuilding, deployLog);
-            } else {
-                AppBuilding appBuilding = new AppBuilding(buildLog);
-                return new AppDeploying(appDeployConfig, appBuilding);
-            }
-        } else {
-            return new AppDeploying(appDeployConfig);
-        }
-    }
-}

+ 37 - 0
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/BuildService.java

@@ -0,0 +1,37 @@
+package cn.reghao.devops.manager.app.service.bd;
+
+import cn.reghao.devops.manager.app.db.repository.AppBuildingRepository;
+import cn.reghao.devops.manager.app.model.po.AppBuilding;
+import cn.reghao.devops.manager.app.model.vo.AppBuildingVO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author reghao
+ * @date 2023-11-15 21:55:18
+ */
+@Service
+public class BuildService {
+    private final AppBuildingRepository buildingRepository;
+
+    public BuildService(AppBuildingRepository buildingRepository) {
+        this.buildingRepository = buildingRepository;
+    }
+
+    public Page<AppBuildingVO> findByPage(String appEnv, String appType, PageRequest pageRequest) {
+        Page<AppBuilding> page = buildingRepository.findAllByAppConfig_EnvAndAppConfig_AppType(appEnv, appType, pageRequest);
+        List<AppBuildingVO> list = page.getContent().stream().map(AppBuildingVO::new).collect(Collectors.toList());
+        return new PageImpl<>(list, pageRequest, page.getTotalElements());
+    }
+
+    public Page<AppBuildingVO> findByPage(String appName, PageRequest pageRequest) {
+        Page<AppBuilding> page = buildingRepository.findAllByAppConfig_AppName(appName, pageRequest);
+        List<AppBuildingVO> list = page.getContent().stream().map(AppBuildingVO::new).collect(Collectors.toList());
+        return new PageImpl<>(list, pageRequest, page.getTotalElements());
+    }
+}

+ 2 - 2
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/impl/BuildAppImpl.java

@@ -36,7 +36,7 @@ import java.util.concurrent.ExecutorService;
 @Slf4j
 @Service
 public class BuildAppImpl implements BuildApp {
-    private final IdGenerator idGenerator = new IdGenerator(32, "build-log-id");
+    private final IdGenerator idGenerator = new IdGenerator(10, "build-log-id");
     private final ExecutorService threadPool = ThreadPoolWrapper.threadPool("build-pool", 10);
     private final BuildStat buildStat;
     private final DeployApp deployApp;
@@ -80,7 +80,7 @@ public class BuildAppImpl implements BuildApp {
     private void localBuild(AppDto appDto, String buildBy, boolean deploy) throws Exception {
         BuildTools.init(appDto);
         BuildChainParam buildParam = new BuildChainParam(appDto, deploy);
-        String buildLogId = idGenerator.getUuid();
+        String buildLogId = idGenerator.stringId();
         BuildChainResult buildResult = new BuildChainResult(buildLogId, appDto, buildBy);
         Bootstrap<BuildChainParam, BuildChainResult> buildChain = new Bootstrap<>(list, buildParam, buildResult);
 

+ 46 - 67
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/impl/BuildStatImpl.java

@@ -1,6 +1,7 @@
 package cn.reghao.devops.manager.app.service.bd.impl;
 
 import cn.reghao.devops.common.build.model.AppDto;
+import cn.reghao.devops.manager.app.db.repository.AppBuildingRepository;
 import cn.reghao.devops.manager.app.db.repository.config.AppConfigRepository;
 import cn.reghao.devops.manager.app.db.repository.log.BuildLogRepository;
 import cn.reghao.devops.manager.app.model.constant.BuildStatus;
@@ -8,22 +9,17 @@ import cn.reghao.devops.manager.app.model.po.AppBuilding;
 import cn.reghao.devops.manager.app.model.po.config.AppConfig;
 import cn.reghao.devops.manager.app.model.po.log.BuildLog;
 import cn.reghao.devops.manager.app.service.bd.DeployStat;
-import cn.reghao.devops.common.build.tool.repo.CommitInfo;
 import cn.reghao.devops.manager.app.model.vo.AppBuildingVO;
-import cn.reghao.devops.manager.app.service.bd.BuildDeployStat;
 import cn.reghao.devops.manager.app.service.bd.BuildStat;
 import cn.reghao.devops.common.build.chain.impl.BuildChainResult;
-import cn.reghao.jutil.jdk.db.PageBound;
 import cn.reghao.jutil.jdk.db.PageList;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.ResultStatus;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
 import java.time.LocalDateTime;
 import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 /**
@@ -33,56 +29,50 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 public class BuildStatImpl implements BuildStat {
-    // appId -> AppBuilding
-    private final static Map<String, AppBuilding> appBuildings = new ConcurrentHashMap<>();
-    private final BuildDeployStat buildDeployStat;
     private final BuildLogRepository buildLogRepository;
     private final DeployStat deployStat;
-    private AppConfigRepository appConfigRepository;
+    private final AppConfigRepository appConfigRepository;
+    private final AppBuildingRepository buildingRepository;
 
-    public BuildStatImpl(BuildDeployStat buildDeployStat, BuildLogRepository buildLogRepository,
-                         DeployStat deployStat, AppConfigRepository appConfigRepository) {
-        this.buildDeployStat = buildDeployStat;
+    public BuildStatImpl(BuildLogRepository buildLogRepository, DeployStat deployStat,
+                         AppConfigRepository appConfigRepository, AppBuildingRepository buildingRepository) {
         this.buildLogRepository = buildLogRepository;
         this.deployStat = deployStat;
         this.appConfigRepository = appConfigRepository;
-    }
-
-    @PostConstruct
-    private void loadFromDataSource() {
-        buildDeployStat.getAppBuildings().forEach(appBuilding -> {
-            String appId = appBuilding.getAppConfig().getAppId();
-            appBuildings.put(appId, appBuilding);
-        });
+        this.buildingRepository = buildingRepository;
     }
 
     @Override
     public void add(AppConfig appConfig) {
-        appBuildings.put(appConfig.getAppId(), new AppBuilding(appConfig));
+        AppBuilding appBuilding = new AppBuilding(appConfig);
+        buildingRepository.save(appBuilding);
     }
 
     @Override
     public void update(AppConfig appConfig) {
         String appId = appConfig.getAppId();
-        appBuildings.get(appId).setAppConfig(appConfig);
+        AppBuilding appBuilding1 = buildingRepository.findAllByAppConfig_AppId(appId);
+        appBuilding1.setAppConfig(appConfig);
+        buildingRepository.save(appBuilding1);
     }
 
     @Override
     public void delete(AppConfig appConfig) {
         String appId = appConfig.getAppId();
-        appBuildings.remove(appId);
+        AppBuilding appBuilding1 = buildingRepository.findAllByAppConfig_AppId(appId);
+        buildingRepository.delete(appBuilding1);
     }
 
     @Override
     public void beforeBuild(String appId, String buildBy) {
-        AppBuilding appBuilding = appBuildings.get(appId);
-        appBuilding.beforeBuild(buildBy);
-
-        appBuilding.setOnBuilding(true);
-        appBuilding.setCommitId(null);
-        appBuilding.setCommitTime(null);
-        appBuilding.setBuildTime(LocalDateTime.now());
-        appBuilding.setBuildResult(BuildStatus.onBuilding.getDesc());
+        AppBuilding appBuilding1 = buildingRepository.findAllByAppConfig_AppId(appId);
+        appBuilding1.beforeBuild(buildBy);
+        appBuilding1.setOnBuilding(true);
+        appBuilding1.setCommitId(null);
+        appBuilding1.setCommitTime(null);
+        appBuilding1.setBuildTime(LocalDateTime.now());
+        appBuilding1.setBuildResult(BuildStatus.onBuilding.getDesc());
+        buildingRepository.save(appBuilding1);
     }
 
     @Override
@@ -91,15 +81,18 @@ public class BuildStatImpl implements BuildStat {
         String appId = appDto.getAppId();
         AppConfig appConfig = appConfigRepository.findByAppId(appId);
         BuildLog buildLog = new BuildLog(buildChainResult, appConfig);
-        AppBuilding appBuilding = appBuildings.get(appId);
+
+        AppBuilding appBuilding1 = buildingRepository.findAllByAppConfig_AppId(appId);
         try {
             buildLogRepository.save(buildLog);
-            appBuilding.afterBuild(buildLog);
-            deployStat.afterBuild(appBuilding);
-            return appBuilding;
+            appBuilding1.afterBuild(buildLog);
+            buildingRepository.save(appBuilding1);
+            deployStat.afterBuild(appBuilding1);
+            return appBuilding1;
         } catch (Exception e) {
             String errMsg = e.getMessage();
-            appBuilding.afterBuild(buildLog, errMsg);
+            appBuilding1.afterBuild(buildLog, errMsg);
+            buildingRepository.save(appBuilding1);
             log.error("持久化 BuidlLog 抛出异常: {}", errMsg);
         }
 
@@ -108,54 +101,40 @@ public class BuildStatImpl implements BuildStat {
 
     @Override
     public PageList<AppBuildingVO> getByPage(String env, String appType, int pageNumber, int pageSize) {
-        List<AppBuilding> list = appBuildings.values().stream()
-                .filter(appBuilding -> appBuilding.getAppConfig().getEnv().equals(env)
-                        && appBuilding.getAppConfig().getAppType().equals(appType))
-                // 降序
-                .sorted(Comparator.comparing(AppBuilding::getBuildTime).reversed())
-                .collect(Collectors.toList());
-
+        PageRequest pageRequest = PageRequest.of(pageNumber, pageSize);
+        Page<AppBuilding> page = buildingRepository.findAllByAppConfig_EnvAndAppConfig_AppType(env, appType, pageRequest);
+        List<AppBuildingVO> list = page.getContent().stream().map(AppBuildingVO::new).collect(Collectors.toList());
         int total = list.size();
-        PageBound pageBound = PageBound.getPageBound(pageNumber, pageSize, total);
-        List<AppBuildingVO> list1 = list.subList(pageBound.getStart(), pageBound.getEnd()).stream()
-                .map(AppBuildingVO::new)
-                .collect(Collectors.toList());
-        return PageList.pageList(pageNumber, pageSize, total, list1);
+        return PageList.pageList(pageNumber, pageSize, total, list);
     }
 
     @Override
     public PageList<AppBuildingVO> getByName(String appName, int pageNumber, int pageSize) {
-        List<AppBuilding> list = appBuildings.values().stream()
-                .filter(appBuilding -> appBuilding.getAppConfig().getAppName().contains(appName))
-                // 降序
-                .sorted(Comparator.comparing(AppBuilding::getBuildTime).reversed())
-                .collect(Collectors.toList());
-
-        int total = list.size();
-        PageBound pageBound = PageBound.getPageBound(pageNumber, pageSize, total);
-        List<AppBuildingVO> list1 = list.subList(pageBound.getStart(), pageBound.getEnd()).stream()
-                .map(AppBuildingVO::new)
-                .collect(Collectors.toList());
-        return PageList.pageList(pageNumber, pageSize, total, list1);
+        PageRequest pageRequest = PageRequest.of(pageNumber, pageSize);
+        Page<AppBuilding> page = buildingRepository.findAllByAppConfig_AppName(appName, pageRequest);
+        List<AppBuildingVO> list = page.getContent().stream().map(AppBuildingVO::new).collect(Collectors.toList());
+        return PageList.pageList(pageNumber, pageSize, (int) page.getTotalElements(), list);
     }
 
     @Override
     public AppConfig getAppConfig(String appId) {
-        return appBuildings.get(appId).getAppConfig();
+        AppBuilding appBuilding1 = buildingRepository.findAllByAppConfig_AppId(appId);
+        return appBuilding1.getAppConfig();
     }
 
     @Override
     public AppBuilding getAppBuilding(String appId) {
-        return appBuildings.get(appId);
+        AppBuilding appBuilding1 = buildingRepository.findAllByAppConfig_AppId(appId);
+        return appBuilding1;
     }
 
     @Override
     public boolean isBuilding(String appId) {
-        AppBuilding appBuilding = appBuildings.get(appId);
-        if (appBuilding == null) {
+        AppBuilding appBuilding1 = buildingRepository.findAllByAppConfig_AppId(appId);
+        if (appBuilding1 == null) {
             return false;
         }
 
-        return appBuilding.isOnBuilding();
+        return appBuilding1.isOnBuilding();
     }
 }

+ 78 - 102
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/impl/DeployStatImpl.java

@@ -3,6 +3,7 @@ package cn.reghao.devops.manager.app.service.bd.impl;
 import cn.reghao.devops.common.agent.app.dto.AppInfo;
 import cn.reghao.devops.common.msg.constant.NodeStatus;
 import cn.reghao.devops.common.msg.event.EvtAppStatResult;
+import cn.reghao.devops.manager.app.db.repository.AppDeployingRepository;
 import cn.reghao.devops.manager.app.db.repository.log.BuildLogRepository;
 import cn.reghao.devops.manager.app.db.repository.log.DeployLogRepository;
 import cn.reghao.devops.manager.app.model.constant.DeployStatus;
@@ -16,20 +17,18 @@ import cn.reghao.devops.manager.app.model.vo.AppDeployingVO;
 import cn.reghao.devops.manager.app.model.vo.AppRunning;
 import cn.reghao.devops.manager.app.model.vo.AppRunningVO;
 import cn.reghao.devops.manager.app.service.bd.BuildDeployNotify;
-import cn.reghao.devops.manager.app.service.bd.BuildDeployStat;
 import cn.reghao.devops.manager.app.service.bd.DeployStat;
 import cn.reghao.devops.manager.machine.model.po.MachineHost;
 import cn.reghao.devops.manager.machine.service.MachineService;
 import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import cn.reghao.jutil.jdk.db.PageBound;
 import cn.reghao.jutil.jdk.db.PageList;
 import cn.reghao.jutil.jdk.result.ResultStatus;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
 import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 /**
@@ -39,65 +38,50 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 public class DeployStatImpl implements DeployStat {
-    // appId -> machineId -> AppDeploying
-    private final static Map<String, Map<String, AppDeploying>> appDeployings = new ConcurrentHashMap<>();
-
-    private final BuildDeployStat buildDeployStat;
     private final BuildLogRepository buildLogRepository;
     private final DeployLogRepository deployLogRepository;
     private final BuildDeployNotify buildDeployNotify;
     private final MachineService machineService;
+    private final AppDeployingRepository deployingRepository;
 
-    public DeployStatImpl(BuildDeployStat buildDeployStat, BuildLogRepository buildLogRepository,
-                          DeployLogRepository deployLogRepository, BuildDeployNotify buildDeployNotify,
-                          MachineService machineService) {
-        this.buildDeployStat = buildDeployStat;
+    public DeployStatImpl(BuildLogRepository buildLogRepository, DeployLogRepository deployLogRepository,
+                          BuildDeployNotify buildDeployNotify, MachineService machineService,
+                          AppDeployingRepository deployingRepository) {
         this.buildLogRepository = buildLogRepository;
         this.deployLogRepository = deployLogRepository;
         this.buildDeployNotify = buildDeployNotify;
         this.machineService = machineService;
-    }
-
-    @PostConstruct
-    private void loadFromDataSource() {
-        buildDeployStat.getAppDeployings().forEach(appDeploying -> {
-            String appId = appDeploying.getAppDeployConfig().getAppConfig().getAppId();
-            String machineId = appDeploying.getAppDeployConfig().getMachineHost().getMachineId();
-            appDeployings.computeIfAbsent(appId, k -> new HashMap<>()).put(machineId, appDeploying);
-        });
+        this.deployingRepository = deployingRepository;
     }
 
     @Override
     public void add(AppDeployConfig appDeployConfig) {
-        String appId = appDeployConfig.getAppConfig().getAppId();
-        String machineId = appDeployConfig.getMachineHost().getMachineId();
-
         AppDeploying appDeploying = new AppDeploying(appDeployConfig);
-        appDeployings.computeIfAbsent(appId, k -> new HashMap<>()).putIfAbsent(machineId, appDeploying);
+        deployingRepository.save(appDeploying);
     }
 
     @Override
     public void update(AppDeployConfig appDeployConfig) {
         String appId = appDeployConfig.getAppConfig().getAppId();
         String machineId = appDeployConfig.getMachineHost().getMachineId();
-        appDeployings.get(appId).get(machineId).setAppDeployConfig(appDeployConfig);
+        AppDeploying appDeploying = deployingRepository.findAllByAppDeployConfig_AppConfig_AppIdAndAppDeployConfig_MachineHost_MachineId(appId, machineId);
+        appDeploying.setAppDeployConfig(appDeployConfig);
+        deployingRepository.save(appDeploying);
     }
 
     @Override
     public boolean delete(AppDeployConfig appDeployConfig) {
         String appId = appDeployConfig.getAppConfig().getAppId();
-        if (appDeployings.get(appId) == null) {
+        String machineId = appDeployConfig.getMachineHost().getMachineId();
+        AppDeploying appDeploying = deployingRepository.findAllByAppDeployConfig_AppConfig_AppIdAndAppDeployConfig_MachineHost_MachineId(appId, machineId);
+        if (appDeploying == null) {
             return true;
         }
 
-        String machineId = appDeployConfig.getMachineHost().getMachineId();
         boolean running = isRunning(appId, machineId);
         if (!running) {
-            appDeployings.get(appId).remove(machineId);
-            if (appDeployings.get(appId).isEmpty()) {
-                appDeployings.remove(appId);
-                return true;
-            }
+            deployingRepository.delete(appDeploying);
+            return true;
         }
 
         return false;
@@ -106,22 +90,24 @@ public class DeployStatImpl implements DeployStat {
     @Override
     public void afterBuild(AppBuilding appBuilding) {
         String appId = appBuilding.getAppConfig().getAppId();
-        Map<String, AppDeploying> map = appDeployings.get(appId);
-        if (map == null) {
-            return;
-        }
-
-        map.values().forEach(appDeploying -> {
+        List<AppDeploying> list = deployingRepository.findAllByAppDeployConfig_AppConfig_AppId(appId);
+        list.forEach(appDeploying -> {
             appDeploying.afterBuild(appBuilding);
         });
+        deployingRepository.saveAll(list);
     }
 
     @Override
     public void beforeDeploy(AppBuilding appBuilding, String machineId, String deployBy) {
         String appId = appBuilding.getAppConfig().getAppId();
-        Map<String, AppDeploying> map = appDeployings.computeIfAbsent(appId, k -> new HashMap<>());
-        AppDeploying appDeploying = map.get(machineId);
-        appDeploying.beforeDeploy(appBuilding, deployBy);
+        List<AppDeploying> list = deployingRepository.findAllByAppDeployConfig_AppConfig_AppId(appId);
+        for (AppDeploying appDeploying : list) {
+            String machineId1 = appDeploying.getAppDeployConfig().getMachineHost().getMachineId();
+            if (machineId1.equals(machineId)) {
+                appDeploying.beforeDeploy(appBuilding, deployBy);
+                deployingRepository.save(appDeploying);
+            }
+        }
     }
 
     @Override
@@ -130,20 +116,25 @@ public class DeployStatImpl implements DeployStat {
 
         String appId = deployResult.getAppId();
         String machineId = deployResult.getMachineId();
-        AppDeploying appDeploying = appDeployings.get(appId).get(machineId);
-        appDeploying.afterDeploy(deployResult);
-
-        if (deployResult.getResult().getCode() == ResultStatus.SUCCESS.getCode()) {
-            setAppStatus(appDeploying, deployResult);
+        List<AppDeploying> list = deployingRepository.findAllByAppDeployConfig_AppConfig_AppId(appId);
+        for (AppDeploying appDeploying : list) {
+            String machineId1 = appDeploying.getAppDeployConfig().getMachineHost().getMachineId();
+            if (machineId1.equals(machineId)) {
+                appDeploying.afterDeploy(deployResult);
+                if (deployResult.getResult().getCode() == ResultStatus.SUCCESS.getCode()) {
+                    setAppStatus(appDeploying, deployResult);
+                }
+                deployingRepository.save(appDeploying);
+
+                MachineHost machineHost = appDeploying.getAppDeployConfig().getMachineHost();
+                BuildLog buildLog = buildLogRepository.findByBuildLogId(appDeploying.getAppBuilding().getBuildLogId());
+                DeployLog deployLog = new DeployLog(buildLog, machineHost, deployResult);
+                deployLogRepository.save(deployLog);
+
+                buildDeployNotify.deployNotify(deployLog);
+                log.info("{} 的通知已发送", deployResult.getAppId());
+            }
         }
-
-        MachineHost machineHost = appDeploying.getAppDeployConfig().getMachineHost();
-        BuildLog buildLog = buildLogRepository.findByBuildLogId(appDeploying.getAppBuilding().getBuildLogId());
-        DeployLog deployLog = new DeployLog(buildLog, machineHost, deployResult);
-        deployLogRepository.save(deployLog);
-
-        buildDeployNotify.deployNotify(deployLog);
-        log.info("{} 的通知已发送", deployResult.getAppId());
     }
 
     private void setAppStatus(AppDeploying appDeploying, EvtAppStatResult deployResult) {
@@ -157,15 +148,19 @@ public class DeployStatImpl implements DeployStat {
     public void refresh(EvtAppStatResult statResult) {
         String appId = statResult.getAppId();
         String machineId = statResult.getMachineId();
-        AppDeploying appDeploying = appDeployings.get(appId).get(machineId);
-        setAppStatus(appDeploying, statResult);
+        List<AppDeploying> list = deployingRepository.findAllByAppDeployConfig_AppConfig_AppId(appId);
+        for (AppDeploying appDeploying : list) {
+            String machineId1 = appDeploying.getAppDeployConfig().getMachineHost().getMachineId();
+            if (machineId1.equals(machineId)) {
+                setAppStatus(appDeploying, statResult);
+                deployingRepository.save(appDeploying);
+            }
+        }
     }
 
     @Override
     public List<AppInfo> getAppsByMachineId(String machineId) {
-        return appDeployings.values().stream()
-                .map(Map::values)
-                .flatMap(Collection::stream)
+        return deployingRepository.findAll().stream()
                 .filter(appDeploying -> appDeploying.getAppDeployConfig().getMachineHost().getMachineId().equals(machineId))
                 .map(appDeploying -> {
                     String packType = appDeploying.getAppDeployConfig().getAppConfig().getPackerConfig().getType();
@@ -177,13 +172,12 @@ public class DeployStatImpl implements DeployStat {
 
     @Override
     public List<AppDeployingVO> get(String appId, AppBuilding appBuilding) {
-        Map<String, AppDeploying> map = appDeployings.get(appId);
-        if (map == null) {
+        List<AppDeploying> list = deployingRepository.findAllByAppDeployConfig_AppConfig_AppId(appId);
+        if (list.isEmpty()) {
             return Collections.emptyList();
         }
 
-        return map.values().stream()
-                .map(appDeploying -> {
+        return list.stream().map(appDeploying -> {
                     MachineHost machineHost = appDeploying.getAppDeployConfig().getMachineHost();
                     String machineStatus = machineService.isAgentOnline(machineHost.getMachineId())
                             ? NodeStatus.Online.name() : NodeStatus.Offline.name();
@@ -208,39 +202,24 @@ public class DeployStatImpl implements DeployStat {
 
     @Override
     public PageList<AppRunningVO> getByPage(String env, int pageNumber, int pageSize) {
-        List<Map<String, AppDeploying>> list0 = appDeployings.values().stream()
-                .map(appDeployingMap -> appDeployingMap.entrySet().stream()
-                        .filter(entry1 -> entry1.getValue().getAppDeployConfig().getAppConfig().getEnv().equals(env))
-                        .filter(entry1 -> entry1.getValue().isDeployed())
-                        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
-                .filter(map -> !map.isEmpty())
-                .collect(Collectors.toList());
-
-        int total = list0.size();
-        if (total == 0) {
-            return PageList.empty();
-        }
+        PageRequest pageRequest = PageRequest.of(pageNumber, pageSize);
+        Page<AppDeploying> page = deployingRepository.findAllByAppDeployConfig_AppConfig_Env(env, pageRequest);
+        List<AppRunningVO> list2 = page.getContent().stream().map(appDeploying -> {
+            AppConfig appConfig = appDeploying.getAppDeployConfig().getAppConfig();
+            String appId = appConfig.getAppId();
+            String appName = appConfig.getAppName();
+            String bindPorts = appConfig.getBindPorts();
+            String packagePath = appDeploying.getAppBuilding().getPackagePath();
+            int totalDeployed = 0;
+            return new AppRunningVO(appId, appName, bindPorts, packagePath, totalDeployed);
+        }).collect(Collectors.toList());
 
-        PageBound pageBound = PageBound.getPageBound(pageNumber, pageSize, total);
-        List<AppRunningVO> list2 = list0.subList(pageBound.getStart(), pageBound.getEnd()).stream()
-                .map(map -> {
-                    AppDeploying appDeploying = map.values().iterator().next();
-                    AppConfig appConfig = appDeploying.getAppDeployConfig().getAppConfig();
-                    String appId = appConfig.getAppId();
-                    String appName = appConfig.getAppName();
-                    String bindPorts = appConfig.getBindPorts();
-                    String packagePath = appDeploying.getAppBuilding().getPackagePath();
-                    int totalDeployed = map.size();
-                    return new AppRunningVO(appId, appName, bindPorts, packagePath, totalDeployed);
-                })
-                .collect(Collectors.toList());
-
-        return PageList.pageList(pageNumber, pageSize, total, list2);
+        return PageList.pageList(pageNumber, pageSize, (int) page.getTotalElements(), list2);
     }
 
     @Override
     public List<AppRunning> getAppRunning(String appId) {
-        return appDeployings.get(appId).values().stream()
+        return deployingRepository.findAllByAppDeployConfig_AppConfig_AppId(appId).stream()
                 .filter(AppDeploying::isDeployed)
                 //.sorted(Comparator.comparing(AppDeploying::getDeployTime).reversed())
                 .map(AppRunning::new)
@@ -249,25 +228,22 @@ public class DeployStatImpl implements DeployStat {
 
     @Override
     public boolean isDeploying(String appId, String machineId) {
-        AppDeploying appDeploying = appDeployings.get(appId).get(machineId);
+        AppDeploying appDeploying = deployingRepository.findAllByAppDeployConfig_AppConfig_AppIdAndAppDeployConfig_MachineHost_MachineId(appId, machineId);
         return appDeploying.isOnDeploying();
     }
 
     @Override
     public boolean isRunning(String appId) {
-        Map<String, AppDeploying> map = appDeployings.get(appId);
-        return map != null;
+        List<AppDeploying> list = deployingRepository.findAllByAppDeployConfig_AppConfig_AppId(appId);
+        return !list.isEmpty();
     }
 
     @Override
     public boolean isRunning(String appId, String machineId) {
-        Map<String, AppDeploying> map = appDeployings.get(appId);
-        if (map != null) {
-            AppDeploying appDeploying = map.get(machineId);
-            if (appDeploying != null) {
-                int pid = appDeploying.getPid();
-                return pid != -1;
-            }
+        AppDeploying appDeploying = deployingRepository.findAllByAppDeployConfig_AppConfig_AppIdAndAppDeployConfig_MachineHost_MachineId(appId, machineId);
+        if (appDeploying != null) {
+            int pid = appDeploying.getPid();
+            return pid != -1;
         }
 
         return false;

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/notification/model/BuildNotifyMsg.java

@@ -36,7 +36,7 @@ public class BuildNotifyMsg {
     }
 
     public DingMsg dingMsg() {
-        String title = "应用构建消息";
+        String title = "应用构建通知";
 
         StringBuilder sb = new StringBuilder();
         sb.append("应用构建").append(System.lineSeparator());

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/notification/model/DeployNotifyMsg.java

@@ -45,7 +45,7 @@ public class DeployNotifyMsg {
     }
 
     public DingMsg dingMsg() {
-        String title = "应用部署消息";
+        String title = "应用部署通知";
 
         StringBuilder sb = new StringBuilder();
         sb.append("应用部署").append(System.lineSeparator());

+ 1 - 4
manager/src/main/resources/application-dev.yml

@@ -1,6 +1,3 @@
-dubbo:
-  registry:
-    address: zookeeper://192.168.0.110:2181
 spring:
   datasource:
     url: jdbc:mysql://192.168.0.110:3306/reghao_devops_tdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
@@ -14,5 +11,5 @@ spring:
       username: dev
       password: Dev@123456
 webhook:
-  name: ding-cicd
+  name: ding-tnb
   url: https://oapi.dingtalk.com/robot/send?access_token=2ede844511f6a12a0429a25585222ef1f0eb99094421ea4b3155f17fda0f4662

+ 1 - 1
manager/src/main/resources/application-dev1.yml

@@ -11,5 +11,5 @@ spring:
       username: dev
       password: Dev@123456
 webhook:
-  name: ding-cicd
+  name: ding-tnb
   url: https://oapi.dingtalk.com/robot/send?access_token=2ede844511f6a12a0429a25585222ef1f0eb99094421ea4b3155f17fda0f4662

+ 1 - 1
manager/src/main/resources/application-test.yml

@@ -4,5 +4,5 @@ spring:
     username: test
     password: Test@123456
 webhook:
-  name: ding-cicd
+  name: ding-tnb
   url: https://oapi.dingtalk.com/robot/send?access_token=2ede844511f6a12a0429a25585222ef1f0eb99094421ea4b3155f17fda0f4662

+ 28 - 1
manager/src/test/java/AccountTest.java

@@ -1,4 +1,10 @@
 import cn.reghao.devops.manager.ManagerApplication;
+import cn.reghao.devops.manager.app.db.repository.AppBuildingRepository;
+import cn.reghao.devops.manager.app.db.repository.AppDeployingRepository;
+import cn.reghao.devops.manager.app.db.repository.config.AppConfigRepository;
+import cn.reghao.devops.manager.app.db.repository.config.AppDeployConfigRepository;
+import cn.reghao.devops.manager.app.model.po.AppBuilding;
+import cn.reghao.devops.manager.app.model.po.AppDeploying;
 import cn.reghao.devops.manager.notification.NotifyService;
 import cn.reghao.devops.manager.notification.notifier.ding.DingMsg;
 import cn.reghao.devops.manager.rbac.service.UserService;
@@ -42,7 +48,7 @@ public class AccountTest {
     NotifyService notifyService;
     @Test
     public void notifyTest() throws InterruptedException {
-        String title = "测试";
+        String title = "通知测试";
         String text = "应用测试内容";
         DingMsg dingMsg = new DingMsg(title, text);
         notifyService.notify(dingMsg);
@@ -57,4 +63,25 @@ public class AccountTest {
         List<String> serviceIds = consulService.getServices();
         System.out.println();
     }
+
+    @Autowired
+    AppBuildingRepository buildingRepository;
+    @Autowired
+    AppDeployingRepository deployingRepository;
+    @Autowired
+    AppConfigRepository configRepository;
+    @Autowired
+    AppDeployConfigRepository deployConfigRepository;
+    @Test
+    public void test11() {
+        configRepository.findAll().forEach(appConfig -> {
+            AppBuilding appBuilding = new AppBuilding(appConfig);
+            buildingRepository.save(appBuilding);
+        });
+
+        /*deployConfigRepository.findAll().forEach(appDeployConfig -> {
+            AppDeploying appDeploying = new AppDeploying(appDeployConfig);
+            deployingRepository.save(appDeploying);
+        });*/
+    }
 }