diff --git a/kernel-d-scanner/scanner-sdk-scanner/pom.xml b/kernel-d-scanner/scanner-sdk-scanner/pom.xml index 357f693fa..7a88322de 100644 --- a/kernel-d-scanner/scanner-sdk-scanner/pom.xml +++ b/kernel-d-scanner/scanner-sdk-scanner/pom.xml @@ -24,6 +24,13 @@ ${roses.version} + + + cn.stylefeng.roses + jwt-sdk + ${roses.version} + + org.springframework diff --git a/kernel-d-scanner/scanner-sdk-scanner/src/main/java/cn/stylefeng/roses/kernel/scanner/DevOpsReportImpl.java b/kernel-d-scanner/scanner-sdk-scanner/src/main/java/cn/stylefeng/roses/kernel/scanner/DevOpsReportImpl.java new file mode 100644 index 000000000..fb3cd5d31 --- /dev/null +++ b/kernel-d-scanner/scanner-sdk-scanner/src/main/java/cn/stylefeng/roses/kernel/scanner/DevOpsReportImpl.java @@ -0,0 +1,76 @@ +package cn.stylefeng.roses.kernel.scanner; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import cn.stylefeng.roses.kernel.jwt.JwtTokenOperator; +import cn.stylefeng.roses.kernel.jwt.api.pojo.config.JwtConfig; +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.scanner.api.DevOpsReportApi; +import cn.stylefeng.roses.kernel.scanner.api.exception.ScannerException; +import cn.stylefeng.roses.kernel.scanner.api.exception.enums.DevOpsExceptionEnum; +import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportProperties; +import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportResourceParam; +import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo; +import com.alibaba.fastjson.JSON; + +import java.util.HashMap; +import java.util.List; + +import static cn.stylefeng.roses.kernel.scanner.api.constants.ScannerConstants.*; + +/** + * 运维平台资源汇报过程 + * + * @author fengshuonan + * @date 2022/4/2 14:38 + */ +public class DevOpsReportImpl implements DevOpsReportApi { + + @Override + public void reportResources(DevOpsReportProperties devOpsReportProperties, List sysResourcePersistencePojoList) { + + // 去掉请求地址结尾的左斜杠 + String serverHost = devOpsReportProperties.getServerHost(); + if (StrUtil.endWith(serverHost, "/")) { + serverHost = StrUtil.removeSuffix(serverHost, "/"); + } + + // 组装请求DevOps平台的地址 + String devopsReportUrl = serverHost + DEVOPS_REQUEST_PATH; + + // jwt token生成 + String projectInteractionSecretKey = devOpsReportProperties.getProjectInteractionSecretKey(); + Long tokenValidityPeriodSeconds = devOpsReportProperties.getTokenValidityPeriodSeconds(); + JwtConfig jwtConfig = new JwtConfig(); + jwtConfig.setJwtSecret(projectInteractionSecretKey); + jwtConfig.setExpiredSeconds(ObjectUtil.isNotEmpty(tokenValidityPeriodSeconds) ? tokenValidityPeriodSeconds : DEVOPS_REPORT_TIMEOUT_SECONDS); + JwtTokenOperator jwtTokenOperator = new JwtTokenOperator(jwtConfig); + String jwtToken = jwtTokenOperator.generateToken(new HashMap<>()); + + // 组装请求参数 + DevOpsReportResourceParam devOpsReportResourceParam = new DevOpsReportResourceParam( + devOpsReportProperties.getProjectUniqueCode(), jwtToken, sysResourcePersistencePojoList, devOpsReportProperties.getFieldMetadataClassPath()); + + // 进行post请求,汇报资源 + HttpRequest httpRequest = HttpUtil.createPost(devopsReportUrl); + httpRequest.body(JSON.toJSONString(devOpsReportResourceParam)); + httpRequest.setConnectionTimeout(Convert.toInt(DEVOPS_REPORT_CONNECTION_TIMEOUT_SECONDS * 1000)); + ResponseData responseData = null; + HttpResponse execute = httpRequest.execute(); + String body = execute.body(); + responseData = JSON.parseObject(body, ResponseData.class); + // 返回结果为空 + if (responseData == null) { + throw new ScannerException(DevOpsExceptionEnum.HTTP_RESPONSE_EMPTY); + } + // 返回失败 + if (!responseData.getSuccess()) { + throw new ScannerException(DevOpsExceptionEnum.HTTP_RESPONSE_ERROR, responseData.getMessage()); + } + } + +} diff --git a/kernel-d-scanner/scanner-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/scanner/starter/GunsResourceAutoConfiguration.java b/kernel-d-scanner/scanner-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/scanner/starter/GunsResourceAutoConfiguration.java index 7bf463a78..fbd8c24c3 100644 --- a/kernel-d-scanner/scanner-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/scanner/starter/GunsResourceAutoConfiguration.java +++ b/kernel-d-scanner/scanner-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/scanner/starter/GunsResourceAutoConfiguration.java @@ -27,6 +27,8 @@ package cn.stylefeng.roses.kernel.scanner.starter; import cn.hutool.core.util.StrUtil; import cn.stylefeng.roses.kernel.scanner.ApiResourceScanner; import cn.stylefeng.roses.kernel.scanner.DefaultResourceCollector; +import cn.stylefeng.roses.kernel.scanner.DevOpsReportImpl; +import cn.stylefeng.roses.kernel.scanner.api.DevOpsReportApi; import cn.stylefeng.roses.kernel.scanner.api.ResourceCollectorApi; import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportProperties; import cn.stylefeng.roses.kernel.scanner.api.pojo.scanner.ScannerProperties; @@ -112,4 +114,15 @@ public class GunsResourceAutoConfiguration { return new DefaultResourceCollector(); } + /** + * 向DevOps平台汇报资源 + * + * @author fengshuonan + * @date 2022/4/2 14:41 + */ + @Bean + public DevOpsReportApi devOpsReportApi() { + return new DevOpsReportImpl(); + } + } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java index b27b91fce..ecb41145e 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java @@ -25,12 +25,7 @@ package cn.stylefeng.roses.kernel.system.modular.resource.service.impl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import cn.hutool.http.HttpUtil; import cn.stylefeng.roses.kernel.auth.api.LoginUserApi; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; @@ -38,19 +33,11 @@ import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; -import cn.stylefeng.roses.kernel.jwt.JwtTokenOperator; -import cn.stylefeng.roses.kernel.jwt.api.pojo.config.JwtConfig; import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; import cn.stylefeng.roses.kernel.rule.constants.TreeConstants; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; -import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory; -import cn.stylefeng.roses.kernel.scanner.api.DevOpsReportApi; import cn.stylefeng.roses.kernel.scanner.api.ResourceReportApi; -import cn.stylefeng.roses.kernel.scanner.api.exception.ScannerException; -import cn.stylefeng.roses.kernel.scanner.api.exception.enums.DevOpsExceptionEnum; -import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportProperties; -import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportResourceParam; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ReportResourceParam; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceUrlParam; @@ -65,7 +52,6 @@ import cn.stylefeng.roses.kernel.system.modular.resource.factory.ResourceFactory import cn.stylefeng.roses.kernel.system.modular.resource.mapper.SysResourceMapper; import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService; -import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; @@ -81,8 +67,6 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import static cn.stylefeng.roses.kernel.scanner.api.constants.ScannerConstants.*; - /** * 资源表 服务实现类 * @@ -91,7 +75,7 @@ import static cn.stylefeng.roses.kernel.scanner.api.constants.ScannerConstants.* */ @Service @Slf4j -public class SysResourceServiceImpl extends ServiceImpl implements SysResourceService, ResourceReportApi, ResourceServiceApi, DevOpsReportApi { +public class SysResourceServiceImpl extends ServiceImpl implements SysResourceService, ResourceReportApi, ResourceServiceApi { @Resource private SysResourceMapper resourceMapper; @@ -399,49 +383,6 @@ public class SysResourceServiceImpl extends ServiceImpl sysResourcePersistencePojoList) { - - // 去掉请求地址结尾的左斜杠 - String serverHost = devOpsReportProperties.getServerHost(); - if (StrUtil.endWith(serverHost, "/")) { - serverHost = StrUtil.removeSuffix(serverHost, "/"); - } - - // 组装请求DevOps平台的地址 - String devopsReportUrl = serverHost + DEVOPS_REQUEST_PATH; - - // jwt token生成 - String projectInteractionSecretKey = devOpsReportProperties.getProjectInteractionSecretKey(); - Long tokenValidityPeriodSeconds = devOpsReportProperties.getTokenValidityPeriodSeconds(); - JwtConfig jwtConfig = new JwtConfig(); - jwtConfig.setJwtSecret(projectInteractionSecretKey); - jwtConfig.setExpiredSeconds(ObjectUtil.isNotEmpty(tokenValidityPeriodSeconds) ? tokenValidityPeriodSeconds : DEVOPS_REPORT_TIMEOUT_SECONDS); - JwtTokenOperator jwtTokenOperator = new JwtTokenOperator(jwtConfig); - String jwtToken = jwtTokenOperator.generateToken(new HashMap<>()); - - // 组装请求参数 - DevOpsReportResourceParam devOpsReportResourceParam = new DevOpsReportResourceParam( - devOpsReportProperties.getProjectUniqueCode(), jwtToken, sysResourcePersistencePojoList, devOpsReportProperties.getFieldMetadataClassPath()); - - // 进行post请求,汇报资源 - HttpRequest httpRequest = HttpUtil.createPost(devopsReportUrl); - httpRequest.body(JSON.toJSONString(devOpsReportResourceParam)); - httpRequest.setConnectionTimeout(Convert.toInt(DEVOPS_REPORT_CONNECTION_TIMEOUT_SECONDS * 1000)); - ResponseData responseData = null; - HttpResponse execute = httpRequest.execute(); - String body = execute.body(); - responseData = JSON.parseObject(body, ResponseData.class); - // 返回结果为空 - if (responseData == null) { - throw new ScannerException(DevOpsExceptionEnum.HTTP_RESPONSE_EMPTY); - } - // 返回失败 - if (!responseData.getSuccess()) { - throw new ScannerException(DevOpsExceptionEnum.HTTP_RESPONSE_ERROR, responseData.getMessage()); - } - } - /** * 创建wrapper *