This is an automated email from the ASF dual-hosted git repository.

wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new 637c7941 BIGTOP-4359: Adjust APIs related to cluster creation for UI 
needs (#175)
637c7941 is described below

commit 637c794100e20799ecb1551141a13cc15d1070b4
Author: Zhiguo Wu <[email protected]>
AuthorDate: Tue Feb 11 14:13:01 2025 +0800

    BIGTOP-4359: Adjust APIs related to cluster creation for UI needs (#175)
---
 .../manager/server/controller/HostController.java  |  8 +++---
 .../manager/server/controller/JobController.java   |  6 +++++
 .../manager/server/controller/StackController.java |  8 ++++++
 .../bigtop/manager/server/model/vo/JobVO.java      |  4 +++
 .../bigtop/manager/server/model/vo/StageVO.java    |  4 +++
 .../bigtop/manager/server/service/HostService.java |  4 +--
 .../bigtop/manager/server/service/JobService.java  |  2 ++
 .../manager/server/service/StackService.java       |  9 +++++++
 .../server/service/impl/HostServiceImpl.java       | 30 ++++++++++++++--------
 .../server/service/impl/JobServiceImpl.java        | 26 +++++++++++++++++++
 .../server/service/impl/StackServiceImpl.java      | 28 ++++++++++++++++++++
 11 files changed, 114 insertions(+), 15 deletions(-)

diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/HostController.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/HostController.java
index 50b914eb..340a14b7 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/HostController.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/HostController.java
@@ -46,6 +46,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
 
 import jakarta.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 
 @Tag(name = "Host Controller")
@@ -107,9 +108,10 @@ public class HostController {
 
     @Operation(summary = "Install dependencies", description = "Install 
dependencies on a host")
     @PostMapping("/install-dependencies")
-    public ResponseEntity<Boolean> installDependencies(@RequestBody @Validated 
HostReq hostReq) {
-        HostDTO hostDTO = HostConverter.INSTANCE.fromReq2DTO(hostReq);
-        return 
ResponseEntity.success(hostService.installDependencies(hostDTO));
+    public ResponseEntity<Boolean> installDependencies(@RequestBody @Validated 
List<HostReq> hostReqs) {
+        List<HostDTO> hostDTOList = new ArrayList<>();
+        hostReqs.forEach(hostReq -> 
hostDTOList.add(HostConverter.INSTANCE.fromReq2DTO(hostReq)));
+        return 
ResponseEntity.success(hostService.installDependencies(hostDTOList));
     }
 
     @Operation(summary = "Installed status", description = "Install status for 
a host")
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/JobController.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/JobController.java
index 384d0980..d266536d 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/JobController.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/JobController.java
@@ -71,6 +71,12 @@ public class JobController {
         return ResponseEntity.success(jobService.jobs(clusterId));
     }
 
+    @Operation(summary = "job details", description = "Get job details")
+    @GetMapping("/{jobId}")
+    public ResponseEntity<JobVO> jobDetails(@PathVariable Long clusterId, 
@PathVariable Long jobId) {
+        return ResponseEntity.success(jobService.jobDetails(clusterId, jobId));
+    }
+
     @Operation(summary = "stages", description = "List stages")
     @Parameters({
         @Parameter(in = ParameterIn.QUERY, name = "pageNum", schema = 
@Schema(type = "integer", defaultValue = "1")),
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/StackController.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/StackController.java
index b6a9e967..0df4f53d 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/StackController.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/StackController.java
@@ -18,11 +18,13 @@
  */
 package org.apache.bigtop.manager.server.controller;
 
+import org.apache.bigtop.manager.server.model.vo.ClusterVO;
 import org.apache.bigtop.manager.server.model.vo.StackVO;
 import org.apache.bigtop.manager.server.service.StackService;
 import org.apache.bigtop.manager.server.utils.ResponseEntity;
 
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -45,4 +47,10 @@ public class StackController {
     public ResponseEntity<List<StackVO>> list() {
         return ResponseEntity.success(stackService.list());
     }
+
+    @Operation(summary = "service clusters", description = "Get service 
clusters")
+    @GetMapping("/services/{serviceName}/clusters")
+    public ResponseEntity<List<ClusterVO>> serviceClusters(@PathVariable 
String serviceName) {
+        return 
ResponseEntity.success(stackService.serviceClusters(serviceName));
+    }
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/JobVO.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/JobVO.java
index 38e04fbe..ef554a1e 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/JobVO.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/JobVO.java
@@ -20,6 +20,8 @@ package org.apache.bigtop.manager.server.model.vo;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class JobVO {
 
@@ -32,4 +34,6 @@ public class JobVO {
     private String createTime;
 
     private String updateTime;
+
+    private List<StageVO> stages;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/StageVO.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/StageVO.java
index e5ace5af..f1a27b0e 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/StageVO.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/StageVO.java
@@ -20,6 +20,8 @@ package org.apache.bigtop.manager.server.model.vo;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class StageVO {
 
@@ -34,4 +36,6 @@ public class StageVO {
     private String createTime;
 
     private String updateTime;
+
+    private List<TaskVO> tasks;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/HostService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/HostService.java
index 9b50de26..9bd0590f 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/HostService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/HostService.java
@@ -76,10 +76,10 @@ public interface HostService {
     /**
      * Install dependencies
      *
-     * @param hostDTO host infos
+     * @param hostDTOList host infos
      * @return true if all dependencies are installed
      */
-    Boolean installDependencies(HostDTO hostDTO);
+    Boolean installDependencies(List<HostDTO> hostDTOList);
 
     /**
      * Get dependency installed status
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/JobService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/JobService.java
index 463e6d9f..2e297831 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/JobService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/JobService.java
@@ -27,6 +27,8 @@ public interface JobService {
 
     PageVO<JobVO> jobs(Long clusterId);
 
+    JobVO jobDetails(Long clusterId, Long jobId);
+
     PageVO<StageVO> stages(Long jobId);
 
     PageVO<TaskVO> tasks(Long stageId);
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/StackService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/StackService.java
index d010852e..bf104078 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/StackService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/StackService.java
@@ -18,6 +18,7 @@
  */
 package org.apache.bigtop.manager.server.service;
 
+import org.apache.bigtop.manager.server.model.vo.ClusterVO;
 import org.apache.bigtop.manager.server.model.vo.StackVO;
 
 import java.util.List;
@@ -30,4 +31,12 @@ public interface StackService {
      * @return Stacks
      */
     List<StackVO> list();
+
+    /**
+     * Get service clusters.
+     *
+     * @param serviceName Service name
+     * @return Clusters
+     */
+    List<ClusterVO> serviceClusters(String serviceName);
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
index 3f008116..9846c256 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
@@ -173,7 +173,7 @@ public class HostServiceImpl implements HostService {
     }
 
     @Override
-    public Boolean installDependencies(HostDTO hostDTO) {
+    public Boolean installDependencies(List<HostDTO> hostDTOList) {
         List<RepoPO> repoPOList = repoDao.findAll();
         Map<String, RepoPO> archRepoMap = repoPOList.stream()
                 .filter(repoPO -> repoPO.getType() == 2)
@@ -182,14 +182,24 @@ public class HostServiceImpl implements HostService {
         // Clear cache list
         installedStatus.clear();
 
-        for (String hostname : hostDTO.getHostnames()) {
-            InstalledStatusVO installedStatusVO = new InstalledStatusVO();
-            installedStatusVO.setHostname(hostname);
-            installedStatusVO.setStatus(InstalledStatusEnum.INSTALLING);
-            installedStatus.add(installedStatusVO);
-
-            // Async install dependencies
-            executorService.submit(() -> installDependencies(archRepoMap, 
hostDTO, hostname, installedStatusVO));
+        for (HostDTO hostDTO : hostDTOList) {
+            for (String hostname : hostDTO.getHostnames()) {
+                InstalledStatusVO installedStatusVO = new InstalledStatusVO();
+                installedStatusVO.setHostname(hostname);
+                installedStatusVO.setStatus(InstalledStatusEnum.INSTALLING);
+                installedStatus.add(installedStatusVO);
+
+                // Async install dependencies
+                executorService.submit(() -> {
+                    try {
+                        installDependencies(archRepoMap, hostDTO, hostname, 
installedStatusVO);
+                    } catch (Exception e) {
+                        log.error("Unable to install dependencies on host, 
hostname: {}", hostname, e);
+                        
installedStatusVO.setStatus(InstalledStatusEnum.FAILED);
+                        installedStatusVO.setMessage(e.getMessage());
+                    }
+                });
+            }
         }
 
         return true;
@@ -290,7 +300,7 @@ public class HostServiceImpl implements HostService {
             };
         } catch (Exception e) {
             log.error("Unable to exec command on host, hostname: {}, command: 
{}", hostname, command, e);
-            throw new 
ApiException(ApiExceptionEnum.HOST_UNABLE_TO_EXEC_COMMAND, hostname);
+            throw new RuntimeException(e);
         }
     }
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/JobServiceImpl.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/JobServiceImpl.java
index f66712ca..fa3a6999 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/JobServiceImpl.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/JobServiceImpl.java
@@ -37,6 +37,8 @@ import org.apache.bigtop.manager.server.command.task.Task;
 import org.apache.bigtop.manager.server.enums.ApiExceptionEnum;
 import org.apache.bigtop.manager.server.exception.ApiException;
 import org.apache.bigtop.manager.server.model.converter.JobConverter;
+import org.apache.bigtop.manager.server.model.converter.StageConverter;
+import org.apache.bigtop.manager.server.model.converter.TaskConverter;
 import org.apache.bigtop.manager.server.model.query.PageQuery;
 import org.apache.bigtop.manager.server.model.vo.JobVO;
 import org.apache.bigtop.manager.server.model.vo.PageVO;
@@ -52,6 +54,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 
 import jakarta.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -82,6 +85,29 @@ public class JobServiceImpl implements JobService {
         }
     }
 
+    @Override
+    public JobVO jobDetails(Long clusterId, Long jobId) {
+        JobPO jobPO = jobDao.findById(jobId);
+        List<StageVO> stages = new ArrayList<>();
+        List<StagePO> stagePOList = stageDao.findByJobId(jobId);
+        for (int i = 0; i < stagePOList.size(); i++) {
+            StagePO stagePO = findCorrectStagePO(stagePOList, i + 1);
+            if (stagePO == null) {
+                throw new ApiException(ApiExceptionEnum.JOB_NOT_FOUND);
+            }
+
+            StageVO stageVO = StageConverter.INSTANCE.fromPO2VO(stagePO);
+            List<TaskPO> taskPOList = taskDao.findByStageId(stagePO.getId());
+            List<TaskVO> taskVOList = 
TaskConverter.INSTANCE.fromPO2VO(taskPOList);
+            stageVO.setTasks(taskVOList);
+            stages.add(stageVO);
+        }
+
+        JobVO jobVO = JobConverter.INSTANCE.fromPO2VO(jobPO);
+        jobVO.setStages(stages);
+        return jobVO;
+    }
+
     @Override
     public PageVO<StageVO> stages(Long jobId) {
         PageQuery pageQuery = PageUtils.getPageQuery();
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/StackServiceImpl.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/StackServiceImpl.java
index 3d777a99..08517a52 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/StackServiceImpl.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/StackServiceImpl.java
@@ -18,10 +18,17 @@
  */
 package org.apache.bigtop.manager.server.service.impl;
 
+import org.apache.bigtop.manager.dao.po.ClusterPO;
+import org.apache.bigtop.manager.dao.po.ServicePO;
+import org.apache.bigtop.manager.dao.query.ServiceQuery;
+import org.apache.bigtop.manager.dao.repository.ClusterDao;
+import org.apache.bigtop.manager.dao.repository.ServiceDao;
+import org.apache.bigtop.manager.server.model.converter.ClusterConverter;
 import org.apache.bigtop.manager.server.model.converter.ServiceConverter;
 import org.apache.bigtop.manager.server.model.converter.StackConverter;
 import org.apache.bigtop.manager.server.model.dto.ServiceDTO;
 import org.apache.bigtop.manager.server.model.dto.StackDTO;
+import org.apache.bigtop.manager.server.model.vo.ClusterVO;
 import org.apache.bigtop.manager.server.model.vo.StackVO;
 import org.apache.bigtop.manager.server.service.StackService;
 import org.apache.bigtop.manager.server.utils.StackUtils;
@@ -30,6 +37,7 @@ import org.springframework.stereotype.Service;
 
 import lombok.extern.slf4j.Slf4j;
 
+import jakarta.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -38,6 +46,12 @@ import java.util.Map;
 @Service
 public class StackServiceImpl implements StackService {
 
+    @Resource
+    private ClusterDao clusterDao;
+
+    @Resource
+    private ServiceDao serviceDao;
+
     @Override
     public List<StackVO> list() {
         List<StackVO> stackVOList = new ArrayList<>();
@@ -56,4 +70,18 @@ public class StackServiceImpl implements StackService {
 
         return stackVOList;
     }
+
+    @Override
+    public List<ClusterVO> serviceClusters(String serviceName) {
+        ServiceQuery query = ServiceQuery.builder().name(serviceName).build();
+        List<ServicePO> servicePOList = serviceDao.findByQuery(query);
+        if (servicePOList.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        List<Long> clusterIds =
+                servicePOList.stream().map(ServicePO::getClusterId).toList();
+        List<ClusterPO> clusterPOList = clusterDao.findByIds(clusterIds);
+        return ClusterConverter.INSTANCE.fromPO2VO(clusterPOList);
+    }
 }

Reply via email to