From 346512e770f385fd6c958f7e55af54d570dbc4e9 Mon Sep 17 00:00:00 2001 From: zeaslity Date: Wed, 11 Oct 2023 10:29:51 +0800 Subject: [PATCH] =?UTF-8?q?[=20Server=20]=20[=20Project=20]=20-=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90project-Server=E7=9A=84=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=8F=8A=E6=B5=8B=E8=AF=95=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../func/xray/persisit/XrayDBOperator.java | 11 +- .../wdd/rpc/status/CommonAndStatusCache.java | 6 +- .../io/wdd/server/beans/po/ProjectInfoPO.java | 7 + .../beans/po/ProjectServerRelationPO.java | 1 + .../controller/ProjectServerController.java | 102 +++++++++++++- .../server/coreService/CoreServerService.java | 2 +- .../impl/CoreProjectServerServiceImpl.java | 54 +++++++- .../impl/CoreServerServiceImpl.java | 7 +- .../mapper/ProjectServerRelationMapper.java | 2 +- .../service/ProjectServerRelationService.java | 2 +- .../service/ServerAppRelationService.java | 3 +- .../ProjectServerRelationServiceImpl.java | 2 +- .../server/controller/ProjectServerTest.java | 127 ++++++++++++++++++ 13 files changed, 295 insertions(+), 31 deletions(-) create mode 100644 server/src/test/java/io/wdd/server/controller/ProjectServerTest.java diff --git a/server/src/main/java/io/wdd/func/xray/persisit/XrayDBOperator.java b/server/src/main/java/io/wdd/func/xray/persisit/XrayDBOperator.java index 25d1d54..547869b 100644 --- a/server/src/main/java/io/wdd/func/xray/persisit/XrayDBOperator.java +++ b/server/src/main/java/io/wdd/func/xray/persisit/XrayDBOperator.java @@ -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.ProxyNodeType; 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 lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -43,13 +43,13 @@ public class XrayDBOperator { */ public void CacheAllProxyNodeInfo() { - List serverInfoVOList = coreServerService.serverGetAll(); + List serverInfoPOList = coreServerService.serverGetAll(); - transferServerInfoToProxyNode(serverInfoVOList); + transferServerInfoToProxyNode(serverInfoPOList); } - private void transferServerInfoToProxyNode(List serverInfoVOList) { + private void transferServerInfoToProxyNode(List serverInfoVOList) { // 临时内容 int[] bitmap = new int[ALL_SERVER_CITY_INDEX.size() * 10 + 10]; @@ -90,9 +90,6 @@ public class XrayDBOperator { .publicIPv6(serverInfoVO.getServerIpPbV6()) .name(serverCity + serverGraphNum) .agentName(serverInfoVO.getServerName()) - .proxyNodeType( - convertNodeType(serverInfoVO.getProxyType()) - ) .location(serverCity) .xrayConfigInfo(new XrayConfigInfo()) .build(); diff --git a/server/src/main/java/io/wdd/rpc/status/CommonAndStatusCache.java b/server/src/main/java/io/wdd/rpc/status/CommonAndStatusCache.java index edb4856..b09f8fb 100644 --- a/server/src/main/java/io/wdd/rpc/status/CommonAndStatusCache.java +++ b/server/src/main/java/io/wdd/rpc/status/CommonAndStatusCache.java @@ -2,7 +2,7 @@ package io.wdd.rpc.status; 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 lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -101,7 +101,7 @@ public class CommonAndStatusCache { public void updateAllAgentTopicNameCache() { //查询DB - List allAgentInfo = coreServerService.serverGetAll(); + List allAgentInfo = coreServerService.serverGetAll(); if (CollectionUtils.isEmpty(allAgentInfo)) { log.warn("[Serer Boot Up] Octopus Serer First Boot Up ! No Agent Registered Ever!"); @@ -113,7 +113,7 @@ public class CommonAndStatusCache { List collect = allAgentInfo .stream() - .map(ServerInfoVO::getTopicName) + .map(ServerInfoPO::getTopicName) .collect(Collectors.toList()); ALL_AGENT_TOPIC_NAME_LIST.addAll(collect); diff --git a/server/src/main/java/io/wdd/server/beans/po/ProjectInfoPO.java b/server/src/main/java/io/wdd/server/beans/po/ProjectInfoPO.java index 7bb4901..19e1393 100644 --- a/server/src/main/java/io/wdd/server/beans/po/ProjectInfoPO.java +++ b/server/src/main/java/io/wdd/server/beans/po/ProjectInfoPO.java @@ -3,7 +3,10 @@ package io.wdd.server.beans.po; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import java.io.Serializable; import java.time.LocalDateTime; @@ -13,7 +16,11 @@ import java.time.LocalDateTime; */ @TableName(value = "project_info") @Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder(toBuilder = true) public class ProjectInfoPO implements Serializable { + @TableField(exist = false) private static final long serialVersionUID = 1L; /** diff --git a/server/src/main/java/io/wdd/server/beans/po/ProjectServerRelationPO.java b/server/src/main/java/io/wdd/server/beans/po/ProjectServerRelationPO.java index 2fba31c..1422930 100644 --- a/server/src/main/java/io/wdd/server/beans/po/ProjectServerRelationPO.java +++ b/server/src/main/java/io/wdd/server/beans/po/ProjectServerRelationPO.java @@ -8,6 +8,7 @@ import lombok.Data; import java.io.Serializable; /** + * * @TableName project_server_relation */ @TableName(value = "project_server_relation") diff --git a/server/src/main/java/io/wdd/server/controller/ProjectServerController.java b/server/src/main/java/io/wdd/server/controller/ProjectServerController.java index 29c9258..16aa341 100644 --- a/server/src/main/java/io/wdd/server/controller/ProjectServerController.java +++ b/server/src/main/java/io/wdd/server/controller/ProjectServerController.java @@ -2,20 +2,112 @@ package io.wdd.server.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import io.wdd.common.response.R; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import io.wdd.server.beans.request.ProjectQueryEntity; +import io.wdd.server.beans.vo.ProjectServerVO; +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 @RequestMapping("/project-server") @Api("Project-Server绑定") public class ProjectServerController { + @Resource + CoreProjectServerService coreProjectServerService; + @GetMapping("/all") @ApiOperation("Project-Server查询所有项目的服务器信息") - public R projectServerAll() { - return null; + public R> projectServerAll() { + + List projectServerVOS = coreProjectServerService.projectServerAll(); + return R.ok(projectServerVOS); + } + + @PostMapping("/one") + @ApiOperation("Project-Server查询单个项目的服务器信息") + public R 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 projectServerOne( + @RequestBody @Validated ProjectQueryEntity projectQueryEntity + ) { + + ProjectServerVO projectServerVO = coreProjectServerService.projectServerQuery(projectQueryEntity); + return R.ok(projectServerVO); + } + + + @PostMapping("/create") + @ApiOperation("Project-Server-创建一个Project-Server半丁关系") + public R 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 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 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); } diff --git a/server/src/main/java/io/wdd/server/coreService/CoreServerService.java b/server/src/main/java/io/wdd/server/coreService/CoreServerService.java index 5a2512b..eb2a282 100644 --- a/server/src/main/java/io/wdd/server/coreService/CoreServerService.java +++ b/server/src/main/java/io/wdd/server/coreService/CoreServerService.java @@ -14,7 +14,7 @@ public interface CoreServerService { List serverGetSingle(String serverName, String ipv4, String serverLocation); - List serverGetAll(); + List serverGetAll(); /** * 查询主机信息,但是是条件查询 diff --git a/server/src/main/java/io/wdd/server/coreService/impl/CoreProjectServerServiceImpl.java b/server/src/main/java/io/wdd/server/coreService/impl/CoreProjectServerServiceImpl.java index fb94ea1..aa4bae5 100644 --- a/server/src/main/java/io/wdd/server/coreService/impl/CoreProjectServerServiceImpl.java +++ b/server/src/main/java/io/wdd/server/coreService/impl/CoreProjectServerServiceImpl.java @@ -33,9 +33,18 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService { @Resource ServerInfoService serverInfoService; + @Override public List projectServerAll() { - return null; + + return coreProjectService + .projectGetAll() + .stream() + .map( + projectInfoPO -> this.projectServerOne(projectInfoPO.getProjectId()) + ) + .collect(Collectors.toList()); + } @Override @@ -54,12 +63,16 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService { .get(0); // 为了统一 再查一次 + return this.projectServerOne(projectInfoPO.getProjectId()); } @Override public ProjectServerVO projectServerOne(Long projectId) { + // 首先查询projectId是否存在 pass + + // 查询与之绑定的所有server // serverId projectId List projectServerRelationPOList = new LambdaQueryChainWrapper(projectServerRelationService.getBaseMapper()) @@ -94,7 +107,6 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService { projectInfoPO, projectServerVO ); - projectServerVO.setBindingServerList(serverInfoPOS); return projectServerVO; @@ -102,16 +114,48 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService { @Override 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 public boolean projectServerUpdate(Long projectId, Long serverId) { - return false; + return this.projectServerCreate(projectId, + serverId); } @Override 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; } } diff --git a/server/src/main/java/io/wdd/server/coreService/impl/CoreServerServiceImpl.java b/server/src/main/java/io/wdd/server/coreService/impl/CoreServerServiceImpl.java index 8efef19..3f2e5fa 100644 --- a/server/src/main/java/io/wdd/server/coreService/impl/CoreServerServiceImpl.java +++ b/server/src/main/java/io/wdd/server/coreService/impl/CoreServerServiceImpl.java @@ -76,15 +76,12 @@ public class CoreServerServiceImpl implements CoreServerService { } @Override - public List serverGetAll() { + public List serverGetAll() { List serverInfoPOWithOutDelete = serverInfoService.list(); - return covertServerPOtoVO( - serverInfoPOWithOutDelete, - 0 - ); + return serverInfoPOWithOutDelete; } @Override diff --git a/server/src/main/java/io/wdd/server/mapper/ProjectServerRelationMapper.java b/server/src/main/java/io/wdd/server/mapper/ProjectServerRelationMapper.java index 8a1f5de..5d7504f 100644 --- a/server/src/main/java/io/wdd/server/mapper/ProjectServerRelationMapper.java +++ b/server/src/main/java/io/wdd/server/mapper/ProjectServerRelationMapper.java @@ -6,7 +6,7 @@ import io.wdd.server.beans.po.ProjectServerRelationPO; /** * @author wdd * @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 */ public interface ProjectServerRelationMapper extends BaseMapper { diff --git a/server/src/main/java/io/wdd/server/service/ProjectServerRelationService.java b/server/src/main/java/io/wdd/server/service/ProjectServerRelationService.java index ba42767..aefc9a1 100644 --- a/server/src/main/java/io/wdd/server/service/ProjectServerRelationService.java +++ b/server/src/main/java/io/wdd/server/service/ProjectServerRelationService.java @@ -6,7 +6,7 @@ import io.wdd.server.beans.po.ProjectServerRelationPO; /** * @author wdd * @description 针对表【project_server_relation】的数据库操作Service - * @createDate 2023-10-09 16:11:10 + * @createDate 2023-10-09 17:36:26 */ public interface ProjectServerRelationService extends IService { diff --git a/server/src/main/java/io/wdd/server/service/ServerAppRelationService.java b/server/src/main/java/io/wdd/server/service/ServerAppRelationService.java index dd6ca39..e3e2b09 100644 --- a/server/src/main/java/io/wdd/server/service/ServerAppRelationService.java +++ b/server/src/main/java/io/wdd/server/service/ServerAppRelationService.java @@ -1,7 +1,7 @@ package io.wdd.server.service; -import io.wdd.server.beans.po.ServerAppRelationPO; import com.baomidou.mybatisplus.extension.service.IService; +import io.wdd.server.beans.po.ServerAppRelationPO; /** * @author wdd @@ -9,5 +9,4 @@ import com.baomidou.mybatisplus.extension.service.IService; * @createDate 2022-11-27 13:53:22 */ public interface ServerAppRelationService extends IService { - } diff --git a/server/src/main/java/io/wdd/server/service/impl/ProjectServerRelationServiceImpl.java b/server/src/main/java/io/wdd/server/service/impl/ProjectServerRelationServiceImpl.java index 29edc01..07ec2a0 100644 --- a/server/src/main/java/io/wdd/server/service/impl/ProjectServerRelationServiceImpl.java +++ b/server/src/main/java/io/wdd/server/service/impl/ProjectServerRelationServiceImpl.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; /** * @author wdd * @description 针对表【project_server_relation】的数据库操作Service实现 - * @createDate 2023-10-09 16:11:10 + * @createDate 2023-10-09 17:36:26 */ @Service public class ProjectServerRelationServiceImpl extends ServiceImpl diff --git a/server/src/test/java/io/wdd/server/controller/ProjectServerTest.java b/server/src/test/java/io/wdd/server/controller/ProjectServerTest.java new file mode 100644 index 0000000..2f475c4 --- /dev/null +++ b/server/src/test/java/io/wdd/server/controller/ProjectServerTest.java @@ -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 projectInfoPOS = coreProjectService.projectGetAll(); + ProjectInfoPO projectInfoPO = projectInfoPOS + .stream() + .skip(new Random().nextInt(projectInfoPOS.size())) + .findFirst() + .get(); + + List serverInfoVOList = coreServerService.serverGetAll(); + List serverIdList = serverInfoVOList + .stream() + .skip(new Random().nextInt(serverInfoVOList.size())) + .map( + serverInfoPO -> serverInfoPO.getServerId() + ) + .collect(Collectors.toList()); + + serverIdList + .stream() + .forEach( + serverId -> { + R result = projectServerController.projectServerCreate( + projectInfoPO.getProjectId(), + serverId + ); + assertEquals( + "创建Project-Server成功!", + result.getData() + ); + } + ); + + + } + + @Test + public void test_query_all_project_servers() { + R> result = projectServerController.projectServerAll(); + assertNotNull(result.getData()); + } + + + @Test + public void test_query_nonexistent_project_server_error() { + Long nonexistentProjectId = -1L; + R result = projectServerController.projectServerOne(nonexistentProjectId); + assertEquals( + null, + result.getData() + ); + } + + @Test + public void test_create_invalid_project_id_error() { + Long invalidProjectId = -1L; + List serverInfoVOList = coreServerService.serverGetAll(); + ServerInfoPO serverInfoPO = serverInfoVOList + .stream() + .skip(new Random().nextInt(serverInfoVOList.size())) + .findFirst() + .get(); + + R result = projectServerController.projectServerCreate( + invalidProjectId, + serverInfoPO.getServerId() + ); + assertEquals( + "创建Project-Server失败!", + result.getData() + ); + } + + @Test + public void test_create_invalid_server_id_error() { + List projectInfoPOS = coreProjectService.projectGetAll(); + ProjectInfoPO projectInfoPO = projectInfoPOS + .stream() + .skip(new Random().nextInt(projectInfoPOS.size())) + .findFirst() + .get(); + + Long invalidServerId = -1L; + R result = projectServerController.projectServerCreate( + projectInfoPO.getProjectId(), + invalidServerId + ); + assertEquals( + "创建Project-Server失败!", + result.getData() + ); + } + +}