Преглед на файлове

调整构建部署和应用管理的 API

reghao преди 5 години
родител
ревизия
e5c84f9938
променени са 17 файла, в които са добавени 217 реда и са изтрити 156 реда
  1. 31 1
      common/src/main/java/cn/reghao/autodop/common/utils/DateTimeUtil.java
  2. 34 20
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppBuildController.java
  3. 0 55
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppLogController.java
  4. 28 17
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppManageController.java
  5. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppOrchestrateController.java
  6. 2 30
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/IndexController.java
  7. 3 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java
  8. 4 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployResult.java
  9. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/AppDAO.java
  10. 22 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/AppBuildService.java
  11. 2 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java
  12. 2 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/AppToBuild.java
  13. 5 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildLogVO.java
  14. 39 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/CommitLogVO.java
  15. 6 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/DeployLogVO.java
  16. 32 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/DeployResultVO.java
  17. 4 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/webresult/WebResult.java

+ 31 - 1
common/src/main/java/cn/reghao/autodop/common/utils/DateTimeUtil.java

@@ -1,14 +1,29 @@
 package cn.reghao.autodop.common.utils;
 
 import java.time.Instant;
+import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
 
 /**
+ * 时间日期工具类
+ *
  * @author reghao
  * @date 2020-03-20 10:20:01
  */
 public class DateTimeUtil {
+    public static String now() {
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        return dtf.format(now);
+    }
+
+    public static String format(LocalDateTime localDateTime) {
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        return dtf.format(localDateTime);
+    }
+
     /**
      * 毫秒时间戳转换为日期时间
      *
@@ -22,6 +37,21 @@ public class DateTimeUtil {
         return dateTime.toLocalDateTime().toString();
     }
 
+    /**
+     * 毫秒时间戳转换为指定格式的日期时间字符串
+     *
+     * @param
+     * @return
+     * @date 2020-06-02 下午5:22
+     */
+    public static String msTimestampFormat(long timestamp) {
+        Instant instant = Instant.ofEpochMilli(timestamp);
+        ZonedDateTime dateTime = instant.atZone(ZoneId.of("Asia/Shanghai"));
+        LocalDateTime localDateTime = dateTime.toLocalDateTime();
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        return dtf.format(localDateTime);
+    }
+
     /**
      * 秒时间戳转换为日期时间
      *
@@ -29,7 +59,7 @@ public class DateTimeUtil {
      * @return
      * @date 2020-03-20 上午10:20
      */
-    public static String timestamp(long timestamp) {
+    public static String timestamp(int timestamp) {
         Instant instant = Instant.ofEpochMilli(timestamp);
         ZonedDateTime dateTime = instant.atZone(ZoneId.of("Asia/Shanghai"));
         return dateTime.toLocalDateTime().toString();

+ 34 - 20
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppBuildController.java

@@ -3,11 +3,14 @@ package cn.reghao.autodop.dmaster.app.controller;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildDeployLog;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
+import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.service.AppBuildService;
 import cn.reghao.autodop.dmaster.app.service.tools.updater.CommitLog;
 import cn.reghao.autodop.dmaster.app.vo.AppToBuild;
 import cn.reghao.autodop.dmaster.app.vo.PageList;
 import cn.reghao.autodop.dmaster.app.vo.log.BuildLogVO;
+import cn.reghao.autodop.dmaster.app.vo.log.CommitLogVO;
+import cn.reghao.autodop.dmaster.app.vo.log.DeployLogVO;
 import cn.reghao.autodop.dmaster.app.vo.result.BuildResult;
 import cn.reghao.autodop.dmaster.app.service.OssService;
 import cn.reghao.autodop.dmaster.app.service.build.BuildDispatcher;
@@ -36,7 +39,7 @@ import java.util.stream.Collectors;
 @Slf4j
 @Api(tags = "应用构建部署接口")
 @RestController
-@RequestMapping("/api/app")
+@RequestMapping("/api/app/bd")
 public class AppBuildController {
     private AppBuildService buildService;
     private BuildDispatcher buildDispatcher;
@@ -51,11 +54,11 @@ public class AppBuildController {
     // TODO 添加一个 from 参数来表示构建部署请求来自何处,是主动构建还是自动构建
     @ApiOperation(value = "构建部署应用")
     @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="一个或多个应用(多个应用间使用 , 分隔)",
-                    paramType="path", dataType = "String")
+            @ApiImplicitParam(name="appId", value="应用标识(多个应用间使用 , 分隔)",
+                    paramType="query", dataType = "String")
     )
-    @PostMapping("/pipeline/{appId}")
-    public String buildAndDeploy(@PathVariable("appId") String appId) throws Exception {
+    @PostMapping("/pipeline")
+    public String buildAndDeploy(@RequestParam("appId") String appId) throws Exception {
         Set<String> apps = checkArgs(appId);
         List<BuildDeployLog> buildDeployLogs;
         if (apps.size() == 0) {
@@ -72,11 +75,11 @@ public class AppBuildController {
 
     @ApiOperation(value = "构建应用")
     @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="一个或多个应用(多个应用间使用 , 分隔)",
-                    paramType="path", dataType = "String")
+            @ApiImplicitParam(name="appId", value="应用标识(多个应用间使用 , 分隔)",
+                    paramType="query", dataType = "String")
     )
-    @PostMapping("/build/{appId}")
-    public String build(@PathVariable("appId") String appId) throws Exception {
+    @PostMapping("/build")
+    public String build(@RequestParam("appId") String appId) throws Exception {
         Set<String> apps = checkArgs(appId);
         List<BuildDeployLog> buildDeployLogs;
         if (apps.size() == 0) {
@@ -104,8 +107,7 @@ public class AppBuildController {
 
     @ApiOperation(value = "部署 OSS 资源")
     @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="一个或多个应用(多个应用间使用 , 分隔)",
-                    paramType="path", dataType = "String")
+            @ApiImplicitParam(name="appId", value="应用标识", paramType="query", dataType = "String")
     )
     @PostMapping("/deploy/oss/{appId}")
     public String deployOss(@PathVariable("appId") String appId) throws SVNException {
@@ -127,7 +129,7 @@ public class AppBuildController {
     }
 
     @ApiOperation(value = "待构建的应用列表")
-    @GetMapping("/build/list")
+    @GetMapping("/list")
     public ResponseEntity<String> buildList(/*@RequestParam("env") String env
             @RequestParam("page") int page, @RequestParam("size") int size*/) {
         //PageRequest pageRequest = PageRequest.of(page-1, size);
@@ -141,23 +143,35 @@ public class AppBuildController {
     }
 
     @ApiOperation(value = "")
-    @GetMapping("/build/commitlog")
+    @GetMapping("/logs/commit")
     public ResponseEntity<String> commitLog() {
-        List<CommitLog> res = buildService.commitLogs();
-        return ResponseEntity.ok().body(WebResult.success(res));
+        List<CommitLogVO> res = buildService.commitLogs();
+        PageList<CommitLogVO> logs = new PageList<>();
+        logs.setList(res);
+        logs.setSize(res.size());
+
+        return ResponseEntity.ok().body(WebResult.success(logs));
     }
 
     @ApiOperation(value = "")
-    @GetMapping("/build/buildlog")
+    @GetMapping("/logs/build")
     public ResponseEntity<String> buildLog() {
         List<BuildLogVO> res = buildService.buildLogs();
-        return ResponseEntity.ok().body(WebResult.success(res));
+        PageList<BuildLogVO> logs = new PageList<>();
+        logs.setList(res);
+        logs.setSize(res.size());
+
+        return ResponseEntity.ok().body(WebResult.success(logs));
     }
 
     @ApiOperation(value = "")
-    @GetMapping("/deploy/deploylog")
+    @GetMapping("/logs/deploy")
     public ResponseEntity<String> deployLog() {
-        List<DeployLog> res = buildService.deployLogs();
-        return ResponseEntity.ok().body(WebResult.success(res));
+        List<DeployLogVO> res = buildService.deployLogs();
+        PageList<DeployLogVO> logs = new PageList<>();
+        logs.setList(res);
+        logs.setSize(res.size());
+
+        return ResponseEntity.ok().body(WebResult.success(logs));
     }
 }

+ 0 - 55
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppLogController.java

@@ -1,55 +0,0 @@
-package cn.reghao.autodop.dmaster.app.controller;
-
-import cn.reghao.autodop.dmaster.app.service.AppLogManager;
-import cn.reghao.autodop.dmaster.common.webresult.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-02-28 11:33:23
- */
-@Slf4j
-@Api(tags = "应用日志接口")
-@RestController
-@RequestMapping("/api/app")
-public class AppLogController {
-    private AppLogManager logManager;
-
-    public AppLogController(AppLogManager logManager) {
-        this.logManager = logManager;
-    }
-
-    @ApiOperation(value = "获取应用所有日志")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="应用 ID", paramType="path", dataType = "String")
-    )
-    @GetMapping("/logs/{appId}")
-    public ResponseEntity<String> appLogs(@PathVariable("appId") String appId,
-                                          @RequestParam("logType") String logType,
-                                          @RequestParam("logLevel") String logLevel) throws Exception {
-        List<String> logs = logManager.logFiles(appId, logType, logLevel);
-
-        return ResponseEntity.ok().body(WebResult.success(logs));
-    }
-
-    @ApiOperation(value = "获取应用日志内容")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="应用 ID", paramType="path", dataType = "String")
-    )
-    @GetMapping("/logs/content/{appId}")
-    public ResponseEntity<String> appLog(@PathVariable("appId") String appId,
-                                         @RequestParam("logType") String logType,
-                                         @RequestParam("logLevel") String logLevel,
-                                         @RequestParam("logName") String logName) throws Exception {
-        List<String> logs = logManager.logContent(appId, logType, logLevel, logName);
-        return ResponseEntity.ok().body(WebResult.success(logs));
-    }
-}

+ 28 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppStatusController.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppManageController.java

@@ -3,6 +3,7 @@ package cn.reghao.autodop.dmaster.app.controller;
 import cn.reghao.autodop.common.deploy.AppStatus;
 import cn.reghao.autodop.common.dockerc.exception.DockerException;
 import cn.reghao.autodop.dmaster.app.entity.constant.BuildDeployEnv;
+import cn.reghao.autodop.dmaster.app.service.AppLogManager;
 import cn.reghao.autodop.dmaster.app.service.AppStatusManager;
 import cn.reghao.autodop.dmaster.app.vo.PageList;
 import cn.reghao.autodop.dmaster.common.webresult.WebResult;
@@ -21,21 +22,19 @@ import java.util.List;
  * @date 2020-02-28 11:33:23
  */
 @Slf4j
-@Api(tags = "应用状态管理接口")
+@Api(tags = "应用管理接口")
 @RestController
-@RequestMapping("/api/app")
-public class AppStatusController {
+@RequestMapping("/api/app/manage")
+public class AppManageController {
     private AppStatusManager statusManager;
+    private AppLogManager logManager;
     
-    public AppStatusController(AppStatusManager statusManager) {
+    public AppManageController(AppStatusManager statusManager, AppLogManager logManager) {
         this.statusManager = statusManager;
+        this.logManager = logManager;
     }
 
     @ApiOperation(value = "启动应用")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="一个或多个应用(多个应用间使用 , 分隔)",
-                    paramType="path", dataType = "String")
-    )
     @PostMapping("/start/{appId}")
     public ResponseEntity<String> start(@PathVariable("appId") String appId) throws DockerException {
         statusManager.start(appId);
@@ -43,10 +42,6 @@ public class AppStatusController {
     }
 
     @ApiOperation(value = "停止应用")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="一个或多个应用(多个应用间使用 , 分隔)",
-                    paramType="path", dataType = "String")
-    )
     @PostMapping("/stop/{appId}")
     public ResponseEntity<String> stop(@PathVariable("appId") String appId) throws DockerException {
         statusManager.stop(appId);
@@ -54,17 +49,13 @@ public class AppStatusController {
     }
 
     @ApiOperation(value = "重启应用")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="一个或多个应用(多个应用间使用 , 分隔)",
-                    paramType="path", dataType = "String")
-    )
     @PostMapping("/restart/{appId}")
     public ResponseEntity<String> restart(@PathVariable("appId") String appId) throws DockerException {
         statusManager.restart(appId);
         return ResponseEntity.ok().body("ok");
     }
 
-    @ApiOperation(value = "获取所有已注册应用的运行状态")
+    @ApiOperation(value = "获取所有已部署应用的运行状态")
     @GetMapping("/status")
     public ResponseEntity<String> status(/*@RequestParam("env") String env*/) throws DockerException {
         //String env1 = BuildDeployEnv.valueOf(env).name();
@@ -75,4 +66,24 @@ public class AppStatusController {
 
         return ResponseEntity.ok().body(WebResult.success(pageList));
     }
+
+    @ApiOperation(value = "获取应用所有日志")
+    @GetMapping("/logs")
+    public ResponseEntity<String> appLogs(@RequestParam("appId") String appId,
+                                          @RequestParam("logType") String logType,
+                                          @RequestParam("logLevel") String logLevel) throws Exception {
+        List<String> logs = logManager.logFiles(appId, logType, logLevel);
+
+        return ResponseEntity.ok().body(WebResult.success(logs));
+    }
+
+    @ApiOperation(value = "获取应用日志内容")
+    @GetMapping("/logs/content")
+    public ResponseEntity<String> appLog(@RequestParam("appId") String appId,
+                                         @RequestParam("logType") String logType,
+                                         @RequestParam("logLevel") String logLevel,
+                                         @RequestParam("logName") String logName) throws Exception {
+        List<String> logs = logManager.logContent(appId, logType, logLevel, logName);
+        return ResponseEntity.ok().body(WebResult.success(logs));
+    }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppOrchestrateController.java

@@ -82,7 +82,7 @@ public class AppOrchestrateController {
     }
 
     @ApiOperation(value = "获取编排应用时需要用到的配置")
-    @GetMapping("/app/builds")
+    @GetMapping("/build")
     public ResponseEntity<String> getAppBuilds() {
         AppBuildVO appBuildVO = appOrchestrateService.appBuilds();
         return ResponseEntity.ok().body(WebResult.success(appBuildVO));

+ 2 - 30
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/IndexController.java

@@ -1,19 +1,10 @@
 package cn.reghao.autodop.dmaster.app.controller;
 
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 /**
  * @author reghao
  * @date 2020-02-28 11:33:23
@@ -22,27 +13,8 @@ import java.util.Map;
 @Api(tags = "测试接口")
 @RestController
 public class IndexController {
-    @ApiOperation(value = "获取用户信息")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="应用 ID", paramType="path", dataType = "String")
-    )
-    @GetMapping("/admin/getInfo")
+    @GetMapping("/test")
     public ResponseEntity<String> adminInfo() {
-        String result = "{\"code\":0,\"data\":{\"name\":\"admin\",\"roles\":[\"Home\",\"Dashbord\",\"Driver\",\"Driver-index\",\"Permission\",\"PageUser\",\"PageAdmin\",\"Roles\",\"Table\",\"BaseTable\",\"ComplexTable\",\"Icons\",\"Icons-index\",\"Components\",\"Sldie-yz\",\"Upload\",\"Carousel\",\"Echarts\",\"Sldie-chart\",\"Dynamic-chart\",\"Map-chart\",\"Excel\",\"Excel-out\",\"Excel-in\",\"Mutiheader-out\",\"Error\",\"Page404\",\"Github\",\"NavTest\",\"Nav1\",\"Nav2\",\"Nav2-1\",\"Nav2-2\",\"Nav2-2-1\",\"Nav2-2-2\",\"*404\"],\"introduce\":\"哈哈哈\"},\"_res\":{\"status\":200}}";
-        return ResponseEntity.ok().body(result);
-    }
-
-    @Data
-    static class Result {
-        private int code;
-        private Map<String, Integer> _res;
-        private String data;
-    }
-
-    @Data
-    static class AdminInfo {
-        private String name;
-        private String introduce;
-        private List<String> roles;
+        return ResponseEntity.ok().body("ok");
     }
 }

+ 3 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java

@@ -8,6 +8,8 @@ import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.*;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -32,5 +34,5 @@ public class BuildLog extends BaseEntity {
     private AppOrchestration app;
     private CommitLog commitLog;
     private String appPath;
-    private Date buildTime;
+    private LocalDateTime buildTime;
 }

+ 4 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployResult.java

@@ -3,7 +3,7 @@ package cn.reghao.autodop.dmaster.app.entity.log;
 import lombok.Data;
 
 import javax.persistence.Embeddable;
-import java.util.Date;
+import java.time.LocalDateTime;
 
 /**
  * 应用部署到远程主机的结果
@@ -18,14 +18,14 @@ public class DeployResult {
     private int code;
     private String msg;
     private String host;
-    private Date deployTime;
+    private LocalDateTime deployTime;
 
     public static DeployResult success(String host) {
         DeployResult deployResult = new DeployResult();
         deployResult.setCode(0);
         deployResult.setMsg("部署成功");
         deployResult.setHost(host);
-        deployResult.setDeployTime(new Date());
+        deployResult.setDeployTime(LocalDateTime.now());
         return deployResult;
     }
 
@@ -34,7 +34,7 @@ public class DeployResult {
         deployResult.setCode(1);
         deployResult.setMsg(msg);
         deployResult.setHost(host);
-        deployResult.setDeployTime(new Date());
+        deployResult.setDeployTime(LocalDateTime.now());
         return deployResult;
     }
 }

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/AppDAO.java

@@ -23,8 +23,8 @@ public class AppDAO {
     public List findBuildApps(String env) {
         try (Session session = (Session) em.getDelegate()) {
             // 实际执行 cross join
-            String hql = "select app.appId,app.env,log.buildLog.commitLog.commitId,log.buildLog.commitLog.commitAuthor,log.buildLog.commitLog.commitMsg " +
-                    "from AppOrchestration app,BuildDeployLog log " +
+            String hql = "select app.appId,app.env,log.commitLog.commitId,log.msg " +
+                    "from AppOrchestration app,BuildLog log " +
                     "where log.app = app and app.enable=:enable and app.env=:env " +
                     "group by app.appId";
 

+ 22 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/AppBuildService.java

@@ -6,9 +6,11 @@ import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.repository.log.BuildLogRepository;
 import cn.reghao.autodop.dmaster.app.repository.log.DeployLogRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.*;
-import cn.reghao.autodop.dmaster.app.service.tools.updater.CommitLog;
 import cn.reghao.autodop.dmaster.app.vo.AppToBuild;
 import cn.reghao.autodop.dmaster.app.vo.log.BuildLogVO;
+import cn.reghao.autodop.dmaster.app.vo.log.CommitLogVO;
+import cn.reghao.autodop.dmaster.app.vo.log.DeployLogVO;
+import cn.reghao.autodop.dmaster.app.vo.log.DeployResultVO;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -60,9 +62,9 @@ public class AppBuildService {
         return appToBuilds;
     }
 
-    public List<CommitLog> commitLogs() {
+    public List<CommitLogVO> commitLogs() {
         return buildLogRepository.findAll().stream()
-                .map(BuildLog::getCommitLog)
+                .map(buildLog -> CommitLogVO.of(buildLog.getApp().getAppId(), buildLog.getCommitLog()))
                 .collect(Collectors.toList());
     }
 
@@ -73,8 +75,23 @@ public class AppBuildService {
                 .collect(Collectors.toList());
     }
 
-    public List<DeployLog> deployLogs() {
+    public List<DeployLogVO> deployLogs() {
         List<DeployLog> deployLogs = deployLogRepository.findAll();
-        return deployLogs;
+        List<DeployLogVO> deployLogVOS = new ArrayList<>();
+        for (DeployLog deployLog : deployLogs) {
+            BuildLog buildLog = deployLog.getBuildLog();
+            String appId = buildLog.getApp().getAppId();
+            String env = buildLog.getApp().getEnv();
+            String remoteRepoUrl = buildLog.getCommitLog().getRemoteRepoUrl();
+            String branch = buildLog.getCommitLog().getBranch();
+            String commitId = buildLog.getCommitLog().getCommitId();
+
+            Set<DeployResultVO> deployResultVOS = deployLog.getDeployResults().stream()
+                    .map(DeployResultVO::of)
+                    .collect(Collectors.toSet());
+            deployLogVOS.add(new DeployLogVO(appId, env, remoteRepoUrl, branch, commitId, deployResultVOS));
+        }
+
+        return deployLogVOS;
     }
 }

+ 2 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java

@@ -24,6 +24,7 @@ import cn.reghao.autodop.dmaster.app.service.tools.updater.SvnImpl;
 import cn.reghao.autodop.dmaster.common.config.SysConfig;
 import lombok.extern.slf4j.Slf4j;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.Map;
 
@@ -241,7 +242,7 @@ public class AppIntegrate {
             String appPath = codePacker.pack(app.getAppId(), lastCommitLog.getCommitId(),
                     appCompileDir + app.getEntryDir());
             buildLog.setAppPath(appPath);
-            buildLog.setBuildTime(new Date());
+            buildLog.setBuildTime(LocalDateTime.now());
             return true;
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/AppToBuild.java

@@ -9,20 +9,13 @@ import lombok.Data;
  * @author reghao
  * @date 2020-05-25 11:23:28
  */
+@AllArgsConstructor
 @Data
 public class AppToBuild {
     private String appId;
     private String env;
     private String commitId;
-    private String commitAuthor;
-    private String commitMsg;
-
-    public AppToBuild(String appId, String env, String commitId, String commitAuthor) {
-        this.appId = appId;
-        this.env = env;
-        this.commitId = commitId;
-        this.commitAuthor = commitAuthor;
-    }
+    private String status;
 
     public AppToBuild(String appId, String env) {
         this.appId = appId;

+ 5 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildLogVO.java

@@ -1,10 +1,9 @@
 package cn.reghao.autodop.dmaster.app.vo.log;
 
+import cn.reghao.autodop.common.utils.DateTimeUtil;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
 import lombok.Data;
 
-import java.util.Date;
-
 /**
  * @author reghao
  * @date 2020-06-02 14:32:45
@@ -14,20 +13,22 @@ public class BuildLogVO {
     private String appId;
     private String env;
     private String remoteRepoUrl;
+    private String branch;
     private String commitId;
     private String status;
     private String appPath;
-    private Date buildTime;
+    private String buildTime;
 
     public static BuildLogVO of(BuildLog buildLog) {
         BuildLogVO buildLogVO = new BuildLogVO();
         buildLogVO.setAppId(buildLog.getApp().getAppId());
         buildLogVO.setEnv(buildLog.getApp().getEnv());
         buildLogVO.setRemoteRepoUrl(buildLog.getCommitLog().getRemoteRepoUrl());
+        buildLogVO.setBranch(buildLog.getCommitLog().getBranch());
         buildLogVO.setCommitId(buildLog.getCommitLog().getCommitId());
         buildLogVO.setStatus(buildLog.getMsg());
         buildLogVO.setAppPath(buildLog.getAppPath());
-        buildLogVO.setBuildTime(buildLog.getBuildTime());
+        buildLogVO.setBuildTime(DateTimeUtil.format(buildLog.getBuildTime()));
 
         return buildLogVO;
     }

+ 39 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/CommitLogVO.java

@@ -0,0 +1,39 @@
+package cn.reghao.autodop.dmaster.app.vo.log;
+
+import cn.reghao.autodop.common.utils.DateTimeUtil;
+import cn.reghao.autodop.dmaster.app.service.tools.updater.ChangedFile;
+import cn.reghao.autodop.dmaster.app.service.tools.updater.CommitLog;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-06-02 16:58:10
+ */
+@Data
+public class CommitLogVO {
+    private String appId;
+    private String remoteRepoUrl;
+    private String branch;
+    private String commitId;
+    private String commitAuthor;
+    private String commitMsg;
+    // 毫秒级时间戳
+    private String commitTime;
+    private List<ChangedFile> changedFiles;
+
+    public static CommitLogVO of(String appId, CommitLog commitLog) {
+        CommitLogVO commitLogVO = new CommitLogVO();
+        commitLogVO.setAppId(appId);
+        commitLogVO.setRemoteRepoUrl(commitLog.getRemoteRepoUrl());
+        commitLogVO.setBranch(commitLog.getBranch());
+        commitLogVO.setCommitId(commitLog.getCommitId());
+        commitLogVO.setCommitAuthor(commitLog.getCommitAuthor());
+        commitLogVO.setCommitMsg(commitLog.getCommitMsg());
+        commitLogVO.setCommitTime(DateTimeUtil.msTimestampFormat(commitLog.getCommitTime()));
+        commitLogVO.setChangedFiles(commitLog.getChangedFiles());
+
+        return commitLogVO;
+    }
+}

+ 6 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/DeployLogVO.java

@@ -1,15 +1,21 @@
 package cn.reghao.autodop.dmaster.app.vo.log;
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
 
+import java.util.Set;
+
 /**
  * @author reghao
  * @date 2020-06-02 14:40:17
  */
+@AllArgsConstructor
 @Data
 public class DeployLogVO {
     private String appId;
     private String env;
     private String remoteRepoUrl;
+    private String branch;
     private String commitId;
+    private Set<DeployResultVO> deployResults;
 }

+ 32 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/DeployResultVO.java

@@ -0,0 +1,32 @@
+package cn.reghao.autodop.dmaster.app.vo.log;
+
+import cn.reghao.autodop.common.utils.DateTimeUtil;
+import cn.reghao.autodop.dmaster.app.entity.log.DeployResult;
+import lombok.Data;
+
+import javax.persistence.Embeddable;
+
+/**
+ * 应用部署到远程主机的结果
+ *
+ * @author reghao
+ * @date 2020-05-20 17:08:44
+ */
+@Data
+@Embeddable
+public class DeployResultVO {
+    // 0 - 部署成功 1 - 部署失败
+    private int code;
+    private String msg;
+    private String host;
+    private String deployTime;
+
+    public static DeployResultVO of(DeployResult deployResult) {
+        DeployResultVO deployResultVO = new DeployResultVO();
+        deployResultVO.setCode(deployResult.getCode());
+        deployResultVO.setMsg(deployResult.getMsg());
+        deployResultVO.setHost(deployResult.getHost());
+        deployResultVO.setDeployTime(DateTimeUtil.format(deployResult.getDeployTime()));
+        return deployResultVO;
+    }
+}

+ 4 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/webresult/WebResult.java

@@ -1,12 +1,10 @@
 package cn.reghao.autodop.dmaster.common.webresult;
 
+import cn.reghao.autodop.common.utils.DateTimeUtil;
 import cn.reghao.autodop.common.utils.JsonUtil;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
 import static cn.reghao.autodop.dmaster.common.webresult.ResultCode.*;
 
 /**
@@ -30,21 +28,21 @@ public class WebResult {
 
     public static String success(Object data) {
         WebResult webResult = new WebResult(SUCCESS.getCode(), SUCCESS.getStatus());
-        webResult.setTimestamp((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date()));
+        webResult.setTimestamp(DateTimeUtil.now());
         webResult.setData(data);
         return JsonUtil.objectToJson(webResult);
     }
 
     public static String fail(Object data) {
         WebResult webResult = new WebResult(FAIL.getCode(), FAIL.getStatus());
-        webResult.setTimestamp((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date()));
+        webResult.setTimestamp(DateTimeUtil.now());
         webResult.setData(data);
         return JsonUtil.objectToJson(webResult);
     }
 
     public static String error(Object data) {
         WebResult webResult = new WebResult(ERROR.getCode(), ERROR.getStatus());
-        webResult.setTimestamp((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date()));
+        webResult.setTimestamp(DateTimeUtil.now());
         webResult.setData(data);
         return JsonUtil.objectToJson(webResult);
     }