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);
+ }
}