refactor: 资源池校验优化
This commit is contained in:
parent
07357b4e47
commit
baafb0459a
|
@ -1,23 +0,0 @@
|
|||
package io.metersphere.controller;
|
||||
|
||||
import io.metersphere.dto.TestResourcePoolDTO;
|
||||
import io.metersphere.service.BaseTestResourcePoolService;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/testresourcepool")
|
||||
public class BaseResourcePoolController {
|
||||
|
||||
@Resource
|
||||
private BaseTestResourcePoolService baseTestResourcePoolService;
|
||||
|
||||
@GetMapping("list/all/valid")
|
||||
public List<TestResourcePoolDTO> listValidResourcePools() {
|
||||
return baseTestResourcePoolService.listValidResourcePools();
|
||||
}
|
||||
}
|
|
@ -6,12 +6,9 @@ import io.metersphere.base.domain.TestResourcePool;
|
|||
import io.metersphere.base.domain.TestResourcePoolExample;
|
||||
import io.metersphere.base.mapper.TestResourceMapper;
|
||||
import io.metersphere.base.mapper.TestResourcePoolMapper;
|
||||
import io.metersphere.base.mapper.ext.BaseTaskMapper;
|
||||
import io.metersphere.commons.exception.MSException;
|
||||
import io.metersphere.commons.utils.JSON;
|
||||
import io.metersphere.commons.utils.LogUtil;
|
||||
import io.metersphere.dto.TestResourcePoolDTO;
|
||||
import io.metersphere.i18n.Translator;
|
||||
import io.metersphere.log.utils.ReflexObjectUtil;
|
||||
import io.metersphere.log.vo.DetailColumn;
|
||||
import io.metersphere.log.vo.OperatingLogDetails;
|
||||
|
@ -29,11 +26,8 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static io.metersphere.commons.constants.ResourceStatusEnum.*;
|
||||
import static io.metersphere.commons.constants.ResourceStatusEnum.DELETE;
|
||||
|
||||
/**
|
||||
* @author dongbin
|
||||
*/
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class BaseTestResourcePoolService {
|
||||
|
@ -42,61 +36,6 @@ public class BaseTestResourcePoolService {
|
|||
private TestResourcePoolMapper testResourcePoolMapper;
|
||||
@Resource
|
||||
private TestResourceMapper testResourceMapper;
|
||||
@Resource
|
||||
private NodeResourcePoolService nodeResourcePoolService;
|
||||
@Resource
|
||||
private BaseTaskMapper baseTaskMapper;
|
||||
|
||||
|
||||
public void checkTestResourcePool(TestResourcePoolDTO testResourcePoolDTO) {
|
||||
String resourcePoolName = testResourcePoolDTO.getName();
|
||||
if (StringUtils.isBlank(resourcePoolName)) {
|
||||
MSException.throwException(Translator.get("test_resource_pool_name_is_null"));
|
||||
}
|
||||
|
||||
TestResourcePoolExample example = new TestResourcePoolExample();
|
||||
TestResourcePoolExample.Criteria criteria = example.createCriteria();
|
||||
criteria.andNameEqualTo(resourcePoolName);
|
||||
if (StringUtils.isNotBlank(testResourcePoolDTO.getId())) {
|
||||
criteria.andIdNotEqualTo(testResourcePoolDTO.getId());
|
||||
}
|
||||
criteria.andStatusNotEqualTo(DELETE.name());
|
||||
|
||||
if (testResourcePoolMapper.countByExample(example) > 0) {
|
||||
MSException.throwException(Translator.get("test_resource_pool_name_already_exists"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void updateTestResourcePoolStatus(String poolId, String status) {
|
||||
TestResourcePool testResourcePool = testResourcePoolMapper.selectByPrimaryKey(poolId);
|
||||
if (testResourcePool == null) {
|
||||
MSException.throwException("Resource Pool not found.");
|
||||
}
|
||||
testResourcePool.setUpdateTime(System.currentTimeMillis());
|
||||
testResourcePool.setStatus(status);
|
||||
// 禁用/删除 资源池
|
||||
if (INVALID.name().equals(status) || DELETE.name().equals(status)) {
|
||||
testResourcePoolMapper.updateByPrimaryKeySelective(testResourcePool);
|
||||
return;
|
||||
}
|
||||
TestResourcePoolDTO testResourcePoolDTO = new TestResourcePoolDTO();
|
||||
try {
|
||||
BeanUtils.copyProperties(testResourcePoolDTO, testResourcePool);
|
||||
TestResourceExample example2 = new TestResourceExample();
|
||||
example2.createCriteria().andTestResourcePoolIdEqualTo(poolId);
|
||||
List<TestResource> testResources = testResourceMapper.selectByExampleWithBLOBs(example2);
|
||||
testResourcePoolDTO.setResources(testResources);
|
||||
if (validateTestResourcePool(testResourcePoolDTO)) {
|
||||
testResourcePoolMapper.updateByPrimaryKeySelective(testResourcePool);
|
||||
} else {
|
||||
MSException.throwException("Resource Pool is invalid.");
|
||||
}
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
LogUtil.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<TestResourcePoolDTO> listResourcePools(QueryResourcePoolRequest request) {
|
||||
TestResourcePoolExample example = new TestResourcePoolExample();
|
||||
|
@ -127,43 +66,11 @@ public class BaseTestResourcePoolService {
|
|||
return testResourcePoolDTOS;
|
||||
}
|
||||
|
||||
private boolean validateTestResourcePool(TestResourcePoolDTO testResourcePool) {
|
||||
// todo
|
||||
// if (StringUtils.equalsIgnoreCase(testResourcePool.getType(), ResourcePoolTypeEnum.K8S.name())) {
|
||||
// KubernetesResourcePoolService resourcePoolService = CommonBeanFactory.getBean(KubernetesResourcePoolService.class);
|
||||
// if (resourcePoolService == null) {
|
||||
// return false;
|
||||
// }
|
||||
// return resourcePoolService.validate(testResourcePool);
|
||||
// }
|
||||
return nodeResourcePoolService.validate(testResourcePool);
|
||||
}
|
||||
|
||||
public TestResourcePool getResourcePool(String resourcePoolId) {
|
||||
return testResourcePoolMapper.selectByPrimaryKey(resourcePoolId);
|
||||
}
|
||||
|
||||
public List<TestResourcePoolDTO> listValidResourcePools() {
|
||||
QueryResourcePoolRequest request = new QueryResourcePoolRequest();
|
||||
List<TestResourcePoolDTO> testResourcePools = listResourcePools(request);
|
||||
// 重新校验 pool
|
||||
for (TestResourcePoolDTO pool : testResourcePools) {
|
||||
// 手动设置成无效的, 排除
|
||||
if (INVALID.name().equals(pool.getStatus())) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
validateTestResourcePool(pool);
|
||||
} catch (Throwable e) {
|
||||
LogUtil.error(e.getMessage(), e);
|
||||
pool.setStatus(INVALID.name());
|
||||
pool.setUpdateTime(System.currentTimeMillis());
|
||||
testResourcePoolMapper.updateByPrimaryKeySelective(pool);
|
||||
}
|
||||
}
|
||||
request.setStatus(VALID.name());
|
||||
return listResourcePools(request);
|
||||
}
|
||||
|
||||
public String getLogDetails(String id) {
|
||||
TestResourcePool pool = testResourcePoolMapper.selectByPrimaryKey(id);
|
||||
|
|
|
@ -19,4 +19,9 @@ public class ValidQuotaResourcePoolController {
|
|||
public List<TestResourcePoolDTO> listValidQuotaResourcePools() {
|
||||
return validQuotaResourcePoolService.listValidQuotaResourcePools();
|
||||
}
|
||||
|
||||
@GetMapping("list/all/valid")
|
||||
public List<TestResourcePoolDTO> listValidResourcePools() {
|
||||
return validQuotaResourcePoolService.listValidResourcePools();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,16 @@
|
|||
package io.metersphere.xpack.resourcepool.service;
|
||||
|
||||
import io.metersphere.base.mapper.TestResourcePoolMapper;
|
||||
import io.metersphere.commons.constants.ResourcePoolTypeEnum;
|
||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||
import io.metersphere.commons.utils.LogUtil;
|
||||
import io.metersphere.dto.TestResourcePoolDTO;
|
||||
import io.metersphere.request.resourcepool.QueryResourcePoolRequest;
|
||||
import io.metersphere.service.BaseTestResourcePoolService;
|
||||
import io.metersphere.service.NodeResourcePoolService;
|
||||
import io.metersphere.xpack.quota.service.QuotaService;
|
||||
import io.metersphere.xpack.resourcepool.engine.KubernetesResourcePoolService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
@ -11,13 +18,20 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static io.metersphere.commons.constants.ResourceStatusEnum.INVALID;
|
||||
import static io.metersphere.commons.constants.ResourceStatusEnum.VALID;
|
||||
|
||||
@Service
|
||||
public class ValidQuotaResourcePoolService {
|
||||
@Resource
|
||||
private BaseTestResourcePoolService baseTestResourcePoolService;
|
||||
@Resource
|
||||
private NodeResourcePoolService nodeResourcePoolService;
|
||||
@Resource
|
||||
private TestResourcePoolMapper testResourcePoolMapper;
|
||||
|
||||
public List<TestResourcePoolDTO> listValidQuotaResourcePools() {
|
||||
return filterQuota(baseTestResourcePoolService.listValidResourcePools());
|
||||
return filterQuota(listValidResourcePools());
|
||||
}
|
||||
|
||||
private List<TestResourcePoolDTO> filterQuota(List<TestResourcePoolDTO> list) {
|
||||
|
@ -31,4 +45,39 @@ public class ValidQuotaResourcePoolService {
|
|||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
private boolean validateTestResourcePool(TestResourcePoolDTO testResourcePool) {
|
||||
if (StringUtils.equalsIgnoreCase(testResourcePool.getType(), ResourcePoolTypeEnum.K8S.name())) {
|
||||
KubernetesResourcePoolService resourcePoolService = CommonBeanFactory.getBean(KubernetesResourcePoolService.class);
|
||||
if (resourcePoolService == null) {
|
||||
return false;
|
||||
}
|
||||
return resourcePoolService.validate(testResourcePool);
|
||||
}
|
||||
return nodeResourcePoolService.validate(testResourcePool);
|
||||
}
|
||||
|
||||
|
||||
public List<TestResourcePoolDTO> listValidResourcePools() {
|
||||
QueryResourcePoolRequest request = new QueryResourcePoolRequest();
|
||||
List<TestResourcePoolDTO> testResourcePools = baseTestResourcePoolService.listResourcePools(request);
|
||||
// 重新校验 pool
|
||||
for (TestResourcePoolDTO pool : testResourcePools) {
|
||||
// 手动设置成无效的, 排除
|
||||
if (INVALID.name().equals(pool.getStatus())) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
validateTestResourcePool(pool);
|
||||
} catch (Throwable e) {
|
||||
LogUtil.error(e.getMessage(), e);
|
||||
pool.setStatus(INVALID.name());
|
||||
pool.setUpdateTime(System.currentTimeMillis());
|
||||
testResourcePoolMapper.updateByPrimaryKeySelective(pool);
|
||||
}
|
||||
}
|
||||
request.setStatus(VALID.name());
|
||||
return baseTestResourcePoolService.listResourcePools(request);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue