mirror of https://gitee.com/stylefeng/roses
【7.1.6】【scanner】更新devops资源汇报
parent
1b56ce2966
commit
d88039c274
|
@ -25,9 +25,9 @@
|
|||
package cn.stylefeng.roses.kernel.scanner.api;
|
||||
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportProperties;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 向DevOps一体化平台汇报资源的api
|
||||
|
@ -40,11 +40,11 @@ public interface DevOpsReportApi {
|
|||
/**
|
||||
* 向DevOps一体化平台汇报资源
|
||||
*
|
||||
* @param devOpsReportProperties DevOps平台的系统配置
|
||||
* @param resourceDefinitions 资源汇报具体数据
|
||||
* @param devOpsReportProperties DevOps平台的系统配置
|
||||
* @param sysResourcePersistencePojoList 资源汇报具体数据
|
||||
* @author fengshuonan
|
||||
* @date 2022/1/11 15:02
|
||||
*/
|
||||
void reportResources(DevOpsReportProperties devOpsReportProperties, Map<String, Map<String, ResourceDefinition>> resourceDefinitions);
|
||||
void reportResources(DevOpsReportProperties devOpsReportProperties, List<SysResourcePersistencePojo> sysResourcePersistencePojoList);
|
||||
|
||||
}
|
||||
|
|
|
@ -25,10 +25,13 @@
|
|||
package cn.stylefeng.roses.kernel.scanner.api;
|
||||
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ReportResourceParam;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 资源持久化服务api,将扫描的资源汇报给系统管理用
|
||||
*
|
||||
|
@ -51,4 +54,18 @@ public interface ResourceReportApi {
|
|||
@RequestMapping(value = "/resourceService/reportResources", method = RequestMethod.POST)
|
||||
void reportResources(@RequestBody ReportResourceParam reportResourceReq);
|
||||
|
||||
/**
|
||||
* 持久化资源集合到某个服务中
|
||||
* <p>
|
||||
* 如果是单体项目,则吧资源汇报给本服务
|
||||
* <p>
|
||||
* 如果是微服务项目,则会有个consumer会将本服务的资源发送给资源管理者(一般为system服务)
|
||||
*
|
||||
* @param reportResourceReq 资源汇报接口
|
||||
* @author fengshuonan
|
||||
* @date 2020/10/19 22:02
|
||||
*/
|
||||
@RequestMapping(value = "/resourceService/reportResourcesAndGetResult", method = RequestMethod.POST)
|
||||
List<SysResourcePersistencePojo> reportResourcesAndGetResult(@RequestBody ReportResourceParam reportResourceReq);
|
||||
|
||||
}
|
||||
|
|
|
@ -25,11 +25,11 @@
|
|||
package cn.stylefeng.roses.kernel.scanner.api.pojo.devops;
|
||||
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 资源发送到DevOps一体化平台的参数
|
||||
|
@ -56,17 +56,17 @@ public class DevOpsReportResourceParam extends BaseRequest {
|
|||
* <p>
|
||||
* 第二个key是资源的编码
|
||||
*/
|
||||
private Map<String, Map<String, ResourceDefinition>> resourceDefinitions;
|
||||
private List<SysResourcePersistencePojo> sysResourcePersistencePojoList;
|
||||
|
||||
/**
|
||||
* FieldMetadata类的全路径
|
||||
*/
|
||||
private String fieldMetadataClassPath;
|
||||
|
||||
public DevOpsReportResourceParam(String projectUniqueCode, String interactionToken, Map<String, Map<String, ResourceDefinition>> resourceDefinitions, String fieldMetadataClassPath) {
|
||||
public DevOpsReportResourceParam(String projectUniqueCode, String interactionToken, List<SysResourcePersistencePojo> sysResourcePersistencePojoList, String fieldMetadataClassPath) {
|
||||
this.projectUniqueCode = projectUniqueCode;
|
||||
this.interactionToken = interactionToken;
|
||||
this.resourceDefinitions = resourceDefinitions;
|
||||
this.sysResourcePersistencePojoList = sysResourcePersistencePojoList;
|
||||
this.fieldMetadataClassPath = fieldMetadataClassPath;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,161 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.scanner.api.pojo.resource;
|
||||
|
||||
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 资源表
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/11/23 22:45
|
||||
*/
|
||||
@Data
|
||||
public class SysResourcePersistencePojo {
|
||||
|
||||
/**
|
||||
* 资源id
|
||||
*/
|
||||
@ChineseDescription("资源id")
|
||||
private Long resourceId;
|
||||
|
||||
/**
|
||||
* 应用编码
|
||||
*/
|
||||
@ChineseDescription("应用编码")
|
||||
private String appCode;
|
||||
|
||||
/**
|
||||
* 资源编码
|
||||
*/
|
||||
@ChineseDescription("资源编码")
|
||||
private String resourceCode;
|
||||
|
||||
/**
|
||||
* 资源名称
|
||||
*/
|
||||
@ChineseDescription("资源名称")
|
||||
private String resourceName;
|
||||
|
||||
/**
|
||||
* 项目编码
|
||||
*/
|
||||
@ChineseDescription("项目编码")
|
||||
private String projectCode;
|
||||
|
||||
/**
|
||||
* 类名称
|
||||
*/
|
||||
@ChineseDescription("类名称")
|
||||
private String className;
|
||||
|
||||
/**
|
||||
* 方法名称
|
||||
*/
|
||||
@ChineseDescription("方法名称")
|
||||
private String methodName;
|
||||
|
||||
/**
|
||||
* 资源模块编码
|
||||
*/
|
||||
@ChineseDescription("资源模块编码")
|
||||
private String modularCode;
|
||||
|
||||
/**
|
||||
* 资源模块名称
|
||||
*/
|
||||
@ChineseDescription("资源模块名称")
|
||||
private String modularName;
|
||||
|
||||
/**
|
||||
* 资源初始化的服务器ip地址
|
||||
*/
|
||||
@ChineseDescription("资源初始化的服务器ip地址")
|
||||
private String ipAddress;
|
||||
|
||||
/**
|
||||
* 是否是视图类型:Y-是,N-否
|
||||
* 如果是视图类型,url需要以 '/view' 开头,
|
||||
* 视图类型的接口会渲染出html界面,而不是json数据,
|
||||
* 视图层一般会在前后端不分离项目出现
|
||||
*/
|
||||
@ChineseDescription("是否是视图类型")
|
||||
private String viewFlag;
|
||||
|
||||
/**
|
||||
* 资源url
|
||||
*/
|
||||
@ChineseDescription("资源url")
|
||||
private String url;
|
||||
|
||||
/**
|
||||
* http请求方法
|
||||
*/
|
||||
@ChineseDescription("http请求方法")
|
||||
private String httpMethod;
|
||||
|
||||
/**
|
||||
* 是否需要登录:Y-是,N-否
|
||||
*/
|
||||
@ChineseDescription("是否需要登录:Y-是,N-否")
|
||||
private String requiredLoginFlag;
|
||||
|
||||
/**
|
||||
* 是否需要鉴权:Y-是,N-否
|
||||
*/
|
||||
@ChineseDescription("是否需要鉴权:Y-是,N-否")
|
||||
private String requiredPermissionFlag;
|
||||
|
||||
/**
|
||||
* 需要进行参数校验的分组
|
||||
* <p>
|
||||
* json形式存储
|
||||
*/
|
||||
@ChineseDescription("需要进行参数校验的分组")
|
||||
private String validateGroups;
|
||||
|
||||
/**
|
||||
* 接口参数的字段描述
|
||||
* <p>
|
||||
* json形式存储
|
||||
*/
|
||||
@ChineseDescription("接口参数的字段描述")
|
||||
private String paramFieldDescriptions;
|
||||
|
||||
/**
|
||||
* 接口返回结果的字段描述
|
||||
* <p>
|
||||
* json形式存储
|
||||
*/
|
||||
@ChineseDescription("接口返回结果的字段描述")
|
||||
private String responseFieldDescriptions;
|
||||
|
||||
/**
|
||||
* 应用名称
|
||||
*/
|
||||
private transient String appName;
|
||||
|
||||
}
|
|
@ -34,12 +34,14 @@ import cn.stylefeng.roses.kernel.scanner.api.holder.InitScanFlagHolder;
|
|||
import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportProperties;
|
||||
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.SysResourcePersistencePojo;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.scanner.ScannerProperties;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.Ordered;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
@ -71,7 +73,7 @@ public class ResourceReportListener extends ApplicationReadyListener implements
|
|||
|
||||
// 持久化资源,发送资源到资源服务或本项目
|
||||
ResourceReportApi resourceService = applicationContext.getBean(ResourceReportApi.class);
|
||||
resourceService.reportResources(new ReportResourceParam(scannerProperties.getAppCode(), modularResources));
|
||||
List<SysResourcePersistencePojo> persistencePojos = resourceService.reportResourcesAndGetResult(new ReportResourceParam(scannerProperties.getAppCode(), modularResources));
|
||||
|
||||
// 向DevOps一体化平台汇报资源
|
||||
DevOpsReportProperties devOpsReportProperties = applicationContext.getBean(DevOpsReportProperties.class);
|
||||
|
@ -82,7 +84,7 @@ public class ResourceReportListener extends ApplicationReadyListener implements
|
|||
devOpsReportProperties.getProjectUniqueCode(),
|
||||
devOpsReportProperties.getServerHost())) {
|
||||
DevOpsReportApi devOpsReportApi = applicationContext.getBean(DevOpsReportApi.class);
|
||||
devOpsReportApi.reportResources(devOpsReportProperties, modularResources);
|
||||
devOpsReportApi.reportResources(devOpsReportProperties, persistencePojos);
|
||||
}
|
||||
|
||||
// 设置标识已经扫描过
|
||||
|
|
|
@ -24,6 +24,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;
|
||||
|
@ -53,6 +54,7 @@ import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportResourcePar
|
|||
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;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo;
|
||||
import cn.stylefeng.roses.kernel.system.api.ResourceServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.RoleServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.resource.LayuiApiResourceTreeNode;
|
||||
|
@ -64,7 +66,6 @@ import cn.stylefeng.roses.kernel.system.modular.resource.mapper.SysResourceMappe
|
|||
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.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
|
@ -290,12 +291,16 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
|||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void reportResources(@RequestBody ReportResourceParam reportResourceReq) {
|
||||
this.reportResourcesAndGetResult(reportResourceReq);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysResourcePersistencePojo> reportResourcesAndGetResult(ReportResourceParam reportResourceReq) {
|
||||
String projectCode = reportResourceReq.getProjectCode();
|
||||
Map<String, Map<String, ResourceDefinition>> resourceDefinitions = reportResourceReq.getResourceDefinitions();
|
||||
|
||||
if (ObjectUtil.isEmpty(projectCode) || resourceDefinitions == null) {
|
||||
return;
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
//根据project删除该项目下的所有资源
|
||||
|
@ -321,6 +326,16 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
|||
for (Map.Entry<String, ResourceDefinition> entry : resourceDefinitionMap.entrySet()) {
|
||||
resourceCache.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
// 组装返回结果
|
||||
ArrayList<SysResourcePersistencePojo> finalResult = new ArrayList<>();
|
||||
for (SysResource item : allResources) {
|
||||
SysResourcePersistencePojo sysResourcePersistencePojo = new SysResourcePersistencePojo();
|
||||
BeanUtil.copyProperties(item, sysResourcePersistencePojo);
|
||||
finalResult.add(sysResourcePersistencePojo);
|
||||
}
|
||||
|
||||
return finalResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -386,7 +401,7 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
|||
}
|
||||
|
||||
@Override
|
||||
public void reportResources(DevOpsReportProperties devOpsReportProperties, Map<String, Map<String, ResourceDefinition>> resourceDefinitions) {
|
||||
public void reportResources(DevOpsReportProperties devOpsReportProperties, List<SysResourcePersistencePojo> sysResourcePersistencePojoList) {
|
||||
|
||||
// 去掉请求地址结尾的左斜杠
|
||||
String serverHost = devOpsReportProperties.getServerHost();
|
||||
|
@ -407,11 +422,11 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
|||
|
||||
// 组装请求参数
|
||||
DevOpsReportResourceParam devOpsReportResourceParam = new DevOpsReportResourceParam(
|
||||
devOpsReportProperties.getProjectUniqueCode(), jwtToken, resourceDefinitions, devOpsReportProperties.getFieldMetadataClassPath());
|
||||
devOpsReportProperties.getProjectUniqueCode(), jwtToken, sysResourcePersistencePojoList, devOpsReportProperties.getFieldMetadataClassPath());
|
||||
|
||||
// 进行post请求,汇报资源
|
||||
HttpRequest httpRequest = HttpUtil.createPost(devopsReportUrl);
|
||||
httpRequest.body(JSON.toJSONString(devOpsReportResourceParam, SerializerFeature.WriteClassName));
|
||||
httpRequest.body(JSON.toJSONString(devOpsReportResourceParam));
|
||||
httpRequest.setConnectionTimeout(Convert.toInt(DEVOPS_REPORT_CONNECTION_TIMEOUT_SECONDS * 1000));
|
||||
try {
|
||||
HttpResponse execute = httpRequest.execute();
|
||||
|
|
Loading…
Reference in New Issue