feat(任务中心): 资源池节点状态检查
This commit is contained in:
parent
1007d7f4eb
commit
394bd7aa20
|
@ -2,10 +2,7 @@ package io.metersphere.system.controller;
|
|||
|
||||
import io.metersphere.sdk.constants.PermissionConstants;
|
||||
import io.metersphere.system.dto.sdk.BasePageRequest;
|
||||
import io.metersphere.system.dto.taskhub.ResourcePoolOptionsDTO;
|
||||
import io.metersphere.system.dto.taskhub.TaskHubDTO;
|
||||
import io.metersphere.system.dto.taskhub.TaskHubItemDTO;
|
||||
import io.metersphere.system.dto.taskhub.TaskHubScheduleDTO;
|
||||
import io.metersphere.system.dto.taskhub.*;
|
||||
import io.metersphere.system.dto.taskhub.request.TaskHubItemRequest;
|
||||
import io.metersphere.system.dto.taskhub.response.TaskStatisticsResponse;
|
||||
import io.metersphere.system.service.BaseTaskHubService;
|
||||
|
@ -15,6 +12,7 @@ import io.swagger.v3.oas.annotations.Parameter;
|
|||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.shiro.authz.annotation.Logical;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
@ -68,6 +66,13 @@ public class SystemTaskHubController {
|
|||
return baseTaskHubService.getResourcePoolOptions();
|
||||
}
|
||||
|
||||
@PostMapping("/resource-pool/status")
|
||||
@Operation(summary = "任务详情节点状态接口")
|
||||
@RequiresPermissions(value = {PermissionConstants.SYSTEM_CASE_TASK_CENTER_READ, PermissionConstants.ORGANIZATION_CASE_TASK_CENTER_READ, PermissionConstants.PROJECT_CASE_TASK_CENTER_READ}, logical = Logical.OR)
|
||||
@Parameter(name = "ids", description = "详情ID集合", schema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED))
|
||||
public List<ResourcePoolStatusDTO> resourcePoolStatus(@RequestBody List<String> ids) {
|
||||
return baseTaskHubService.getResourcePoolStatus(ids);
|
||||
}
|
||||
//TODO 检查节点状态
|
||||
|
||||
//TODO 系统&组织&项目 任务按钮操作:删除 停止 失败重跑 查看报告 批量删除 批量停止 批量失败重跑
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package io.metersphere.system.dto.taskhub;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author wx
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class ResourcePoolStatusDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "详情的id")
|
||||
private String id;
|
||||
|
||||
@Schema(description = "状态 (true 正常 false 异常)")
|
||||
private boolean status;
|
||||
}
|
|
@ -16,4 +16,6 @@ public interface ExtExecTaskItemMapper {
|
|||
List<TaskHubItemDTO> selectList(@Param("request") TaskHubItemRequest request, @Param("orgId") String orgId, @Param("projectId") String projectId);
|
||||
|
||||
List<ExecTaskItem> selectItemByTaskIds(@Param("taskIds") List<String> taskIds, @Param("orgId") String orgId, @Param("projectId") String projectId);
|
||||
|
||||
List<ExecTaskItem> selectPoolNodeByIds(@Param("ids") List<String> ids);
|
||||
}
|
||||
|
|
|
@ -49,4 +49,11 @@
|
|||
</if>
|
||||
</select>
|
||||
|
||||
<select id="selectPoolNodeByIds" resultType="io.metersphere.system.domain.ExecTaskItem">
|
||||
select id, resource_pool_node from exec_task_item where id in
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
</mapper>
|
|
@ -11,12 +11,10 @@ import io.metersphere.sdk.util.JSON;
|
|||
import io.metersphere.sdk.util.SubListUtils;
|
||||
import io.metersphere.system.domain.*;
|
||||
import io.metersphere.system.dto.pool.TestResourceDTO;
|
||||
import io.metersphere.system.dto.pool.TestResourceNodeDTO;
|
||||
import io.metersphere.system.dto.sdk.BasePageRequest;
|
||||
import io.metersphere.system.dto.sdk.OptionDTO;
|
||||
import io.metersphere.system.dto.taskhub.ResourcePoolOptionsDTO;
|
||||
import io.metersphere.system.dto.taskhub.TaskHubDTO;
|
||||
import io.metersphere.system.dto.taskhub.TaskHubItemDTO;
|
||||
import io.metersphere.system.dto.taskhub.TaskHubScheduleDTO;
|
||||
import io.metersphere.system.dto.taskhub.*;
|
||||
import io.metersphere.system.dto.taskhub.request.TaskHubItemRequest;
|
||||
import io.metersphere.system.dto.taskhub.response.TaskStatisticsResponse;
|
||||
import io.metersphere.system.mapper.*;
|
||||
|
@ -68,6 +66,8 @@ public class BaseTaskHubService {
|
|||
private ExtResourcePoolMapper extResourcePoolMapper;
|
||||
@Resource
|
||||
private ProjectTestResourcePoolMapper projectTestResourcePoolMapper;
|
||||
@Resource
|
||||
private NodeResourcePoolService nodeResourcePoolService;
|
||||
|
||||
/**
|
||||
* 系统-获取执行任务列表
|
||||
|
@ -316,4 +316,30 @@ public class BaseTaskHubService {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<ResourcePoolStatusDTO> getResourcePoolStatus(List<String> ids) {
|
||||
List<ResourcePoolStatusDTO> statusDTOS = new ArrayList<>();
|
||||
List<ExecTaskItem> itemList = extExecTaskItemMapper.selectPoolNodeByIds(ids);
|
||||
Map<String, List<ExecTaskItem>> poolNodeMap = itemList.stream().collect(Collectors.groupingBy(ExecTaskItem::getResourcePoolNode));
|
||||
poolNodeMap.forEach((k, v) -> {
|
||||
String[] split = k.split(":");
|
||||
TestResourceNodeDTO node = new TestResourceNodeDTO();
|
||||
boolean status = false;
|
||||
try {
|
||||
node.setIp(split[0]);
|
||||
node.setPort(split[1]);
|
||||
status = nodeResourcePoolService.validateNode(node);
|
||||
} catch (Exception e) {
|
||||
status = false;
|
||||
}
|
||||
boolean finalStatus = status;
|
||||
v.forEach(item -> {
|
||||
ResourcePoolStatusDTO poolStatusDTO = new ResourcePoolStatusDTO();
|
||||
poolStatusDTO.setId(item.getId());
|
||||
poolStatusDTO.setStatus(finalStatus);
|
||||
statusDTOS.add(poolStatusDTO);
|
||||
});
|
||||
});
|
||||
return statusDTOS;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ public class NodeResourcePoolService {
|
|||
}
|
||||
}
|
||||
|
||||
private boolean validateNode(TestResourceNodeDTO node) {
|
||||
public boolean validateNode(TestResourceNodeDTO node) {
|
||||
try {
|
||||
ResultHolder body = TaskRunnerClient.get(String.format(nodeControllerUrl, node.getIp(), node.getPort()));
|
||||
if (body == null) {
|
||||
|
|
|
@ -36,6 +36,7 @@ public class BaseTaskHubControllerTests extends BaseTest {
|
|||
public static final String SYSTEM_TASK_ITEM_PAGE = "/system/task-center/exec-task/item/page";
|
||||
public static final String SYSTEM_STATISTICS = "/system/task-center/exec-task/statistics";
|
||||
public static final String SYSTEM_RESOURCE_POOL_OPTIONS = "/system/task-center/resource-pool/options";
|
||||
public static final String SYSTEM_RESOURCE_POOL_STATUS = "/system/task-center/resource-pool/status";
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
|
@ -98,7 +99,7 @@ public class BaseTaskHubControllerTests extends BaseTest {
|
|||
@Test
|
||||
@Order(3)
|
||||
public void getStatistics() throws Exception {
|
||||
List<String> ids = List.of("1", "2");
|
||||
List<String> ids = List.of("1");
|
||||
MvcResult mvcResult = this.requestPostWithOkAndReturn(SYSTEM_STATISTICS, ids);
|
||||
// 获取返回值
|
||||
String returnData = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
|
||||
|
@ -121,6 +122,21 @@ public class BaseTaskHubControllerTests extends BaseTest {
|
|||
Assertions.assertNotNull(resultHolder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验资源池节点状态
|
||||
*/
|
||||
@Test
|
||||
@Order(3)
|
||||
public void getResourcePoolStatus() throws Exception {
|
||||
List<String> ids = List.of("1");
|
||||
MvcResult mvcResult = this.requestPostWithOkAndReturn(SYSTEM_RESOURCE_POOL_STATUS, ids);
|
||||
// 获取返回值
|
||||
String returnData = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
|
||||
ResultHolder resultHolder = JSON.parseObject(returnData, ResultHolder.class);
|
||||
// 返回请求正常
|
||||
Assertions.assertNotNull(resultHolder);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 组织任务中心测试用例
|
||||
|
|
Loading…
Reference in New Issue