[ Server ] [ Project ] - 完成project-Server的代码及测试部分

This commit is contained in:
zeaslity
2023-10-11 10:29:51 +08:00
parent 493741c2bc
commit 346512e770
13 changed files with 295 additions and 31 deletions

View File

@@ -3,7 +3,7 @@ package io.wdd.func.xray.persisit;
import io.wdd.func.xray.beans.node.ProxyNode; import io.wdd.func.xray.beans.node.ProxyNode;
import io.wdd.func.xray.beans.node.ProxyNodeType; import io.wdd.func.xray.beans.node.ProxyNodeType;
import io.wdd.func.xray.beans.node.XrayConfigInfo; import io.wdd.func.xray.beans.node.XrayConfigInfo;
import io.wdd.server.beans.vo.ServerInfoVO; import io.wdd.server.beans.po.ServerInfoPO;
import io.wdd.server.coreService.CoreServerService; import io.wdd.server.coreService.CoreServerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -43,13 +43,13 @@ public class XrayDBOperator {
*/ */
public void CacheAllProxyNodeInfo() { public void CacheAllProxyNodeInfo() {
List<ServerInfoVO> serverInfoVOList = coreServerService.serverGetAll(); List<ServerInfoPO> serverInfoPOList = coreServerService.serverGetAll();
transferServerInfoToProxyNode(serverInfoVOList); transferServerInfoToProxyNode(serverInfoPOList);
} }
private void transferServerInfoToProxyNode(List<ServerInfoVO> serverInfoVOList) { private void transferServerInfoToProxyNode(List<ServerInfoPO> serverInfoVOList) {
// 临时内容 // 临时内容
int[] bitmap = new int[ALL_SERVER_CITY_INDEX.size() * 10 + 10]; int[] bitmap = new int[ALL_SERVER_CITY_INDEX.size() * 10 + 10];
@@ -90,9 +90,6 @@ public class XrayDBOperator {
.publicIPv6(serverInfoVO.getServerIpPbV6()) .publicIPv6(serverInfoVO.getServerIpPbV6())
.name(serverCity + serverGraphNum) .name(serverCity + serverGraphNum)
.agentName(serverInfoVO.getServerName()) .agentName(serverInfoVO.getServerName())
.proxyNodeType(
convertNodeType(serverInfoVO.getProxyType())
)
.location(serverCity) .location(serverCity)
.xrayConfigInfo(new XrayConfigInfo()) .xrayConfigInfo(new XrayConfigInfo())
.build(); .build();

View File

@@ -2,7 +2,7 @@ package io.wdd.rpc.status;
import io.wdd.common.utils.TimeUtils; import io.wdd.common.utils.TimeUtils;
import io.wdd.server.beans.vo.ServerInfoVO; import io.wdd.server.beans.po.ServerInfoPO;
import io.wdd.server.coreService.CoreServerService; import io.wdd.server.coreService.CoreServerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
@@ -101,7 +101,7 @@ public class CommonAndStatusCache {
public void updateAllAgentTopicNameCache() { public void updateAllAgentTopicNameCache() {
//查询DB //查询DB
List<ServerInfoVO> allAgentInfo = coreServerService.serverGetAll(); List<ServerInfoPO> allAgentInfo = coreServerService.serverGetAll();
if (CollectionUtils.isEmpty(allAgentInfo)) { if (CollectionUtils.isEmpty(allAgentInfo)) {
log.warn("[Serer Boot Up] Octopus Serer First Boot Up ! No Agent Registered Ever!"); log.warn("[Serer Boot Up] Octopus Serer First Boot Up ! No Agent Registered Ever!");
@@ -113,7 +113,7 @@ public class CommonAndStatusCache {
List<String> collect = allAgentInfo List<String> collect = allAgentInfo
.stream() .stream()
.map(ServerInfoVO::getTopicName) .map(ServerInfoPO::getTopicName)
.collect(Collectors.toList()); .collect(Collectors.toList());
ALL_AGENT_TOPIC_NAME_LIST.addAll(collect); ALL_AGENT_TOPIC_NAME_LIST.addAll(collect);

View File

@@ -3,7 +3,10 @@ package io.wdd.server.beans.po;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -13,7 +16,11 @@ import java.time.LocalDateTime;
*/ */
@TableName(value = "project_info") @TableName(value = "project_info")
@Data @Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder(toBuilder = true)
public class ProjectInfoPO implements Serializable { public class ProjectInfoPO implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**

View File

@@ -8,6 +8,7 @@ import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
/** /**
*
* @TableName project_server_relation * @TableName project_server_relation
*/ */
@TableName(value = "project_server_relation") @TableName(value = "project_server_relation")

View File

@@ -2,20 +2,112 @@ package io.wdd.server.controller;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.wdd.common.response.R; import io.wdd.common.response.R;
import org.springframework.web.bind.annotation.GetMapping; import io.wdd.server.beans.request.ProjectQueryEntity;
import org.springframework.web.bind.annotation.RequestMapping; import io.wdd.server.beans.vo.ProjectServerVO;
import org.springframework.web.bind.annotation.RestController; import io.wdd.server.coreService.CoreProjectServerService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController @RestController
@RequestMapping("/project-server") @RequestMapping("/project-server")
@Api("Project-Server绑定") @Api("Project-Server绑定")
public class ProjectServerController { public class ProjectServerController {
@Resource
CoreProjectServerService coreProjectServerService;
@GetMapping("/all") @GetMapping("/all")
@ApiOperation("Project-Server查询所有项目的服务器信息") @ApiOperation("Project-Server查询所有项目的服务器信息")
public R<String> projectServerAll() { public R<List<ProjectServerVO>> projectServerAll() {
return null;
List<ProjectServerVO> projectServerVOS = coreProjectServerService.projectServerAll();
return R.ok(projectServerVOS);
}
@PostMapping("/one")
@ApiOperation("Project-Server查询单个项目的服务器信息")
public R<ProjectServerVO> projectServerOne(
@RequestParam(value = "projectId", name = "projectId")
@ApiParam(value = "projectId") Long projectId
) {
ProjectServerVO projectServerVO = coreProjectServerService.projectServerOne(projectId);
return R.ok(projectServerVO);
}
@PostMapping("/query/one")
@ApiOperation("Project-Server查询特定项目的服务器信息")
public R<ProjectServerVO> projectServerOne(
@RequestBody @Validated ProjectQueryEntity projectQueryEntity
) {
ProjectServerVO projectServerVO = coreProjectServerService.projectServerQuery(projectQueryEntity);
return R.ok(projectServerVO);
}
@PostMapping("/create")
@ApiOperation("Project-Server-创建一个Project-Server半丁关系")
public R<String> projectServerCreate(
@RequestParam(value = "projectId", name = "projectId")
@ApiParam(value = "projectId") Long projectId,
@RequestParam(value = "serverId", name = "serverId")
@ApiParam(value = "serverId") Long serverId
) {
String result = "创建Project-Server成功";
if (!coreProjectServerService.projectServerCreate(
projectId,
serverId
)) {
result = "创建Project-Server失败";
}
return R.ok(result);
}
@PostMapping("/update")
@ApiOperation("Project-Server-更新一个Project-Server")
public R<String> projectServerUpdate(
@RequestParam(value = "projectId", name = "projectId")
@ApiParam(value = "projectId") Long projectId,
@RequestParam(value = "serverId", name = "serverId")
@ApiParam(value = "serverId") Long serverId
) {
String result = "更新Project-Server成功";
if (!coreProjectServerService.projectServerUpdate(
projectId,
serverId
)) {
result = "更新Project-Server失败";
}
return R.ok(result);
}
@PostMapping("/delete")
@ApiOperation("Project-Server-删除一个Project-Server")
public R<String> projectServerDelete(
@RequestParam(value = "projectId", name = "projectId")
@ApiParam(value = "projectId") Long projectId,
@RequestParam(value = "serverId", name = "serverId")
@ApiParam(value = "serverId") Long serverId
) {
String result = "删除Project-Server成功";
if (!coreProjectServerService.projectServerDelete(
projectId,
serverId
)) {
result = "删除Project-Server失败";
}
return R.ok(result);
} }

View File

@@ -14,7 +14,7 @@ public interface CoreServerService {
List<ServerInfoVO> serverGetSingle(String serverName, String ipv4, String serverLocation); List<ServerInfoVO> serverGetSingle(String serverName, String ipv4, String serverLocation);
List<ServerInfoVO> serverGetAll(); List<ServerInfoPO> serverGetAll();
/** /**
* 查询主机信息,但是是条件查询 * 查询主机信息,但是是条件查询

View File

@@ -33,9 +33,18 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService {
@Resource @Resource
ServerInfoService serverInfoService; ServerInfoService serverInfoService;
@Override @Override
public List<ProjectServerVO> projectServerAll() { public List<ProjectServerVO> projectServerAll() {
return null;
return coreProjectService
.projectGetAll()
.stream()
.map(
projectInfoPO -> this.projectServerOne(projectInfoPO.getProjectId())
)
.collect(Collectors.toList());
} }
@Override @Override
@@ -54,12 +63,16 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService {
.get(0); .get(0);
// 为了统一 再查一次 // 为了统一 再查一次
return this.projectServerOne(projectInfoPO.getProjectId()); return this.projectServerOne(projectInfoPO.getProjectId());
} }
@Override @Override
public ProjectServerVO projectServerOne(Long projectId) { public ProjectServerVO projectServerOne(Long projectId) {
// 首先查询projectId是否存在 pass
// 查询与之绑定的所有server // 查询与之绑定的所有server
// serverId projectId // serverId projectId
List<ProjectServerRelationPO> projectServerRelationPOList = new LambdaQueryChainWrapper<ProjectServerRelationPO>(projectServerRelationService.getBaseMapper()) List<ProjectServerRelationPO> projectServerRelationPOList = new LambdaQueryChainWrapper<ProjectServerRelationPO>(projectServerRelationService.getBaseMapper())
@@ -94,7 +107,6 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService {
projectInfoPO, projectInfoPO,
projectServerVO projectServerVO
); );
projectServerVO.setBindingServerList(serverInfoPOS); projectServerVO.setBindingServerList(serverInfoPOS);
return projectServerVO; return projectServerVO;
@@ -102,16 +114,48 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService {
@Override @Override
public boolean projectServerCreate(Long projectId, Long serverId) { public boolean projectServerCreate(Long projectId, Long serverId) {
return false;
ProjectServerRelationPO byId = projectServerRelationService.getById(serverId);
if (byId != null && byId
.getProjectId()
.equals(projectId)) {
log.debug("ProjectServer绑定关系已经存在");
return true;
}
// no exist then create
// 判定 serverId 和 projectId是否合规
if (coreProjectService.projectGetOne(projectId) == null || serverInfoService.getById(serverId) == null) {
log.warn("传入的 projectId 或者 serverId 有误!");
return false;
}
ProjectServerRelationPO projectServerRelationPO = new ProjectServerRelationPO();
projectServerRelationPO.setProjectId(projectId);
projectServerRelationPO.setServerId(serverId);
return projectServerRelationService.save(projectServerRelationPO);
} }
@Override @Override
public boolean projectServerUpdate(Long projectId, Long serverId) { public boolean projectServerUpdate(Long projectId, Long serverId) {
return false; return this.projectServerCreate(projectId,
serverId);
} }
@Override @Override
public boolean projectServerDelete(Long projectId, Long serverId) { public boolean projectServerDelete(Long projectId, Long serverId) {
return false;
ProjectServerRelationPO byId = projectServerRelationService.getById(serverId);
if (byId != null && byId
.getProjectId()
.equals(projectId)) {
return projectServerRelationService.removeById(serverId);
}
return true;
} }
} }

View File

@@ -76,15 +76,12 @@ public class CoreServerServiceImpl implements CoreServerService {
} }
@Override @Override
public List<ServerInfoVO> serverGetAll() { public List<ServerInfoPO> serverGetAll() {
List<ServerInfoPO> serverInfoPOWithOutDelete = serverInfoService.list(); List<ServerInfoPO> serverInfoPOWithOutDelete = serverInfoService.list();
return covertServerPOtoVO( return serverInfoPOWithOutDelete;
serverInfoPOWithOutDelete,
0
);
} }
@Override @Override

View File

@@ -6,7 +6,7 @@ import io.wdd.server.beans.po.ProjectServerRelationPO;
/** /**
* @author wdd * @author wdd
* @description 针对表【project_server_relation】的数据库操作Mapper * @description 针对表【project_server_relation】的数据库操作Mapper
* @createDate 2023-10-09 16:11:10 * @createDate 2023-10-09 17:36:26
* @Entity io.wdd.server.beans.po.ProjectServerRelationPO * @Entity io.wdd.server.beans.po.ProjectServerRelationPO
*/ */
public interface ProjectServerRelationMapper extends BaseMapper<ProjectServerRelationPO> { public interface ProjectServerRelationMapper extends BaseMapper<ProjectServerRelationPO> {

View File

@@ -6,7 +6,7 @@ import io.wdd.server.beans.po.ProjectServerRelationPO;
/** /**
* @author wdd * @author wdd
* @description 针对表【project_server_relation】的数据库操作Service * @description 针对表【project_server_relation】的数据库操作Service
* @createDate 2023-10-09 16:11:10 * @createDate 2023-10-09 17:36:26
*/ */
public interface ProjectServerRelationService extends IService<ProjectServerRelationPO> { public interface ProjectServerRelationService extends IService<ProjectServerRelationPO> {

View File

@@ -1,7 +1,7 @@
package io.wdd.server.service; package io.wdd.server.service;
import io.wdd.server.beans.po.ServerAppRelationPO;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import io.wdd.server.beans.po.ServerAppRelationPO;
/** /**
* @author wdd * @author wdd
@@ -9,5 +9,4 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @createDate 2022-11-27 13:53:22 * @createDate 2022-11-27 13:53:22
*/ */
public interface ServerAppRelationService extends IService<ServerAppRelationPO> { public interface ServerAppRelationService extends IService<ServerAppRelationPO> {
} }

View File

@@ -9,7 +9,7 @@ import org.springframework.stereotype.Service;
/** /**
* @author wdd * @author wdd
* @description 针对表【project_server_relation】的数据库操作Service实现 * @description 针对表【project_server_relation】的数据库操作Service实现
* @createDate 2023-10-09 16:11:10 * @createDate 2023-10-09 17:36:26
*/ */
@Service @Service
public class ProjectServerRelationServiceImpl extends ServiceImpl<ProjectServerRelationMapper, ProjectServerRelationPO> public class ProjectServerRelationServiceImpl extends ServiceImpl<ProjectServerRelationMapper, ProjectServerRelationPO>

View File

@@ -0,0 +1,127 @@
package io.wdd.server.controller;
import io.wdd.common.response.R;
import io.wdd.server.beans.po.ProjectInfoPO;
import io.wdd.server.beans.po.ServerInfoPO;
import io.wdd.server.beans.vo.ProjectServerVO;
import io.wdd.server.coreService.CoreProjectService;
import io.wdd.server.coreService.CoreServerService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@SpringBootTest
public class ProjectServerTest {
@Resource
ProjectServerController projectServerController;
@Resource
CoreProjectService coreProjectService;
@Resource
CoreServerService coreServerService;
@Test
public void test_create_valid_input_success() {
List<ProjectInfoPO> projectInfoPOS = coreProjectService.projectGetAll();
ProjectInfoPO projectInfoPO = projectInfoPOS
.stream()
.skip(new Random().nextInt(projectInfoPOS.size()))
.findFirst()
.get();
List<ServerInfoPO> serverInfoVOList = coreServerService.serverGetAll();
List<Long> serverIdList = serverInfoVOList
.stream()
.skip(new Random().nextInt(serverInfoVOList.size()))
.map(
serverInfoPO -> serverInfoPO.getServerId()
)
.collect(Collectors.toList());
serverIdList
.stream()
.forEach(
serverId -> {
R<String> result = projectServerController.projectServerCreate(
projectInfoPO.getProjectId(),
serverId
);
assertEquals(
"创建Project-Server成功",
result.getData()
);
}
);
}
@Test
public void test_query_all_project_servers() {
R<List<ProjectServerVO>> result = projectServerController.projectServerAll();
assertNotNull(result.getData());
}
@Test
public void test_query_nonexistent_project_server_error() {
Long nonexistentProjectId = -1L;
R<ProjectServerVO> result = projectServerController.projectServerOne(nonexistentProjectId);
assertEquals(
null,
result.getData()
);
}
@Test
public void test_create_invalid_project_id_error() {
Long invalidProjectId = -1L;
List<ServerInfoPO> serverInfoVOList = coreServerService.serverGetAll();
ServerInfoPO serverInfoPO = serverInfoVOList
.stream()
.skip(new Random().nextInt(serverInfoVOList.size()))
.findFirst()
.get();
R<String> result = projectServerController.projectServerCreate(
invalidProjectId,
serverInfoPO.getServerId()
);
assertEquals(
"创建Project-Server失败",
result.getData()
);
}
@Test
public void test_create_invalid_server_id_error() {
List<ProjectInfoPO> projectInfoPOS = coreProjectService.projectGetAll();
ProjectInfoPO projectInfoPO = projectInfoPOS
.stream()
.skip(new Random().nextInt(projectInfoPOS.size()))
.findFirst()
.get();
Long invalidServerId = -1L;
R<String> result = projectServerController.projectServerCreate(
projectInfoPO.getProjectId(),
invalidServerId
);
assertEquals(
"创建Project-Server失败",
result.getData()
);
}
}