build : 添加skywalking

This commit is contained in:
clay
2024-05-08 21:28:53 +08:00
parent 41fbf21128
commit 52a230d7fb
13 changed files with 125 additions and 60 deletions

View File

@@ -8,6 +8,7 @@ import cn.fateverse.common.decrypt.annotation.EncryptField;
import cn.fateverse.query.entity.dto.DataAdapterCodeDto;
import cn.fateverse.query.entity.dto.MockParam;
import cn.fateverse.query.entity.dto.PortalDto;
import cn.fateverse.query.entity.dto.PortalPublish;
import cn.fateverse.query.entity.query.PortalQuery;
import cn.fateverse.query.entity.vo.PortalIdWrapper;
import cn.fateverse.query.entity.vo.PortalVo;
@@ -116,6 +117,25 @@ public class PortalController {
return Result.ok();
}
@ApiOperation("列表接口发布")
@PostMapping("/list/publish")
@Encrypt(Encrypt.Position.IN)
@PreAuthorize("@ss.hasPermission('query:portal:edit')")
public Result<Void> listPublish(@RequestBody @Validated PortalPublish portalPublish) {
portalService.publish(portalPublish, Boolean.TRUE);
return Result.ok();
}
@ApiOperation("设计器接口发布")
@PostMapping("/publish")
@PreAuthorize("@ss.hasPermission('query:portal:edit')")
public Result<Void> publish(@RequestBody @Validated PortalPublish portalPublish) {
if (ObjectUtils.isEmpty(portalPublish.getCode())){
return Result.error("代码不能为空!");
}
portalService.publish(portalPublish, Boolean.FALSE);
return Result.ok();
}
@ApiOperation("撤销发布")
@Encrypt

View File

@@ -1,7 +1,11 @@
package cn.fateverse.query.dubbo;
import cn.fateverse.query.constant.QueryConstant;
import cn.fateverse.query.entity.Portal;
import cn.fateverse.query.entity.PortalMapping;
import cn.fateverse.query.entity.bo.PortalBo;
import cn.fateverse.query.mapper.PortalMapper;
import cn.fateverse.query.mapper.PortalMappingMapper;
import cn.fateverse.query.portal.service.HandlerMethodService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
@@ -9,6 +13,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import java.util.List;
/**
* @author Clay
@@ -18,10 +23,14 @@ import javax.annotation.Resource;
@DubboService(scope = "remote")
public class DubboDispatchServletPublishImpl implements DubboDispatchServletPublish {
@Resource
private HandlerMethodService methodService;
@Resource
private PortalMapper portalMapper;
@Resource
private PortalMappingMapper portalMappingMapper;
@Resource
private RedisTemplate<String, PortalBo> redisTemplate;
@@ -30,7 +39,13 @@ public class DubboDispatchServletPublishImpl implements DubboDispatchServletPubl
public Boolean publish(String path, String requestMethod) {
PortalBo portalBo = redisTemplate.opsForValue().get(QueryConstant.PORTAL_KEY + path + ":" + requestMethod);
if (portalBo == null) {
return Boolean.FALSE;
Portal portal = portalMapper.selectByPath(path, requestMethod);
if (portal == null) {
return Boolean.FALSE;
}
List<PortalMapping> portalMappings = portalMappingMapper.selectByPortalId(portal.getPortalId());
portalBo = PortalBo.toPortalBo(portal, portalMappings);
redisTemplate.opsForValue().set(QueryConstant.PORTAL_KEY + portalBo.getPath() + ":" + portalBo.getRequestMethod(), portalBo);
}
try {
log.info("registerMapping, path:{}, requestMethod:{}", path, requestMethod);

View File

@@ -0,0 +1,26 @@
package cn.fateverse.query.entity.dto;
import cn.fateverse.common.decrypt.annotation.EncryptField;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @author Clay
* @date 2024/4/30 16:58
*/
@Data
public class PortalPublish {
@EncryptField
@NotBlank(message = "接口id不能为空")
private String portalId;
private String code;
public Long getLongPortalId() {
return Long.valueOf(portalId);
}
}

View File

@@ -61,6 +61,11 @@ public class JavaScriptEngineExecuteHandler implements EngineExecuteHandler {
@Override
public Boolean remove(DataAdapter dataAdapter) {
return Boolean.FALSE;
if (!DataAdapterType.JAVA_SCRIPT.equals(dataAdapter.getType())) {
return Boolean.FALSE;
}
JavaScriptEngine.remove("execute" + dataAdapter.getAdapterId());
return Boolean.TRUE;
}
}

View File

@@ -7,7 +7,6 @@ import cn.fateverse.query.entity.Portal;
import cn.fateverse.query.entity.PortalMapping;
import cn.fateverse.query.entity.bo.PortalBo;
import cn.fateverse.query.handler.reader.DataAdapterHandlerReader;
import cn.fateverse.query.mapper.DataAdapterMapper;
import cn.fateverse.query.mapper.PortalMapper;
import cn.fateverse.query.mapper.PortalMappingMapper;
import org.springframework.data.redis.core.RedisTemplate;
@@ -31,19 +30,14 @@ public class PortalDispatchServlet {
private final PortalMapper portalMapper;
private final DataAdapterMapper dataAdapterMapper;
private final PortalMappingMapper portalMappingMapper;
private final DataAdapterHandlerReader dataAdapterHandler;
public PortalDispatchServlet(PortalMapper portalMapper,
DataAdapterMapper dataAdapterMapper,
PortalMappingMapper portalMappingMapper,
DataAdapterHandlerReader dataAdapterHandler) {
this.portalMapper = portalMapper;
this.dataAdapterMapper = dataAdapterMapper;
this.portalMappingMapper = portalMappingMapper;
this.dataAdapterHandler = dataAdapterHandler;
}
@@ -67,12 +61,7 @@ public class PortalDispatchServlet {
redisTemplate.opsForValue().set(QueryConstant.PORTAL_KEY + portalBo.getPath() + ":" + portalBo.getRequestMethod(), portalBo);
}
//进行数据适配器的执行逻辑
Object result = null;
// if (portalBo.getState() == 1 || portalBo.getState() == 2) {
result = dataAdapterHandler.execute(portalBo, request);
// } else {
// result = dataAdapterHandler.mockExecute(portalBo, request);
// }
Object result = dataAdapterHandler.execute(portalBo, request);
//将返回结果放入response
ResponseRender.renderString(response, Result.ok(result));
}

View File

@@ -2,28 +2,12 @@ package cn.fateverse.query.portal.service;
import cn.fateverse.common.core.exception.CustomException;
import cn.fateverse.common.core.utils.SpringContextHolder;
import cn.fateverse.query.dubbo.DubboDispatchServletPublish;
import cn.fateverse.query.portal.PortalDispatchServlet;
import cn.fateverse.query.portal.config.DubboServiceBean;
import cn.fateverse.query.portal.event.DispatchSyncEvent;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.cloud.nacos.registry.NacosRegistration;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.RpcContextAttachment;
import org.apache.dubbo.rpc.cluster.specifyaddress.Address;
import org.apache.dubbo.rpc.cluster.specifyaddress.UserSpecifiedAddressUtil;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -32,12 +16,7 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* @author Clay
@@ -49,7 +28,7 @@ public class HandlerMethodService implements ApplicationContextAware {
public static final String CUSTOM_INTERFACE = "customInterface:";
private RequestMappingHandlerMapping mapping;
private RequestMappingHandlerMapping handlerMapping;
private Method mappingMethod;
@@ -73,7 +52,7 @@ public class HandlerMethodService implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
//获取到web mvc的接口存储mapping
mapping = (RequestMappingHandlerMapping) applicationContext.getBean("requestMappingHandlerMapping");
handlerMapping = (RequestMappingHandlerMapping) applicationContext.getBean("requestMappingHandlerMapping");
}
/**
@@ -92,12 +71,12 @@ public class HandlerMethodService implements ApplicationContextAware {
.consumes(empty)
.produces(empty)
.mappingName(CUSTOM_INTERFACE + path);
RequestMappingInfo requestMappingInfo = builder.options(mapping.getBuilderConfiguration()).build();
Map<RequestMappingInfo, HandlerMethod> handlerMethods = mapping.getHandlerMethods();
RequestMappingInfo requestMappingInfo = builder.options(handlerMapping.getBuilderConfiguration()).build();
Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();
if (handlerMethods.containsKey(requestMappingInfo)) {
throw new CustomException("path is exist");
}
mapping.registerMapping(requestMappingInfo, "portalDispatchServlet", mappingMethod);
handlerMapping.registerMapping(requestMappingInfo, "portalDispatchServlet", mappingMethod);
// 判断是否需要发起同步
if (sync) {
//使用事件监听机制,避免循环注入
@@ -112,12 +91,12 @@ public class HandlerMethodService implements ApplicationContextAware {
* @param requestMethod 请求类型
*/
public void unregisterMapping(String path, RequestMethod requestMethod, Boolean sync) {
Map<RequestMappingInfo, HandlerMethod> handlerMethods = mapping.getHandlerMethods();
Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();
for (RequestMappingInfo mappingInfo : handlerMethods.keySet()) {
if (!ObjectUtils.isEmpty(mappingInfo.getName())
&& (CUSTOM_INTERFACE + path).equals(mappingInfo.getName())
&& mappingInfo.getMethodsCondition().getMethods().contains(requestMethod)) {
mapping.unregisterMapping(mappingInfo);
handlerMapping.unregisterMapping(mappingInfo);
if (sync) {
SpringContextHolder.publishEvent(new DispatchSyncEvent(path, requestMethod.name(), Boolean.FALSE));
}

View File

@@ -4,6 +4,7 @@ import cn.fateverse.common.core.result.page.TableDataInfo;
import cn.fateverse.query.entity.dto.DataAdapterCodeDto;
import cn.fateverse.query.entity.dto.MockParam;
import cn.fateverse.query.entity.dto.PortalDto;
import cn.fateverse.query.entity.dto.PortalPublish;
import cn.fateverse.query.entity.query.PortalQuery;
import cn.fateverse.query.entity.vo.PortalIdWrapper;
import cn.fateverse.query.entity.vo.PortalVo;
@@ -79,6 +80,14 @@ public interface PortalService {
*/
PortalIdWrapper edit(PortalDto portalDto);
/**
* 发布接口
*
* @param portalPublish 发布接口对象
* @param isList 是否为list发布
*/
void publish(PortalPublish portalPublish, Boolean isList);
/**
* 取消发布
*

View File

@@ -7,11 +7,13 @@ import cn.fateverse.query.entity.*;
import cn.fateverse.query.entity.bo.PortalBo;
import cn.fateverse.query.entity.dto.DataAdapterCodeDto;
import cn.fateverse.query.entity.dto.MockParam;
import cn.fateverse.query.entity.dto.PortalPublish;
import cn.fateverse.query.entity.vo.DataAdapterVo;
import cn.fateverse.query.entity.vo.PortalIdWrapper;
import cn.fateverse.query.enums.DataAdapterType;
import cn.fateverse.query.enums.PortalPremEnum;
import cn.fateverse.query.handler.reader.DataAdapterHandlerReader;
import cn.fateverse.query.handler.reader.EngineExecuteHandlerReader;
import cn.fateverse.query.mapper.*;
import cn.fateverse.query.portal.service.HandlerMethodService;
import cn.fateverse.query.constant.QueryConstant;
@@ -60,6 +62,8 @@ public class PortalServiceImpl implements PortalService {
private final DataAdapterHandlerReader handlerReader;
private final EngineExecuteHandlerReader executeHandlerReader;
public PortalServiceImpl(PortalMapper portalMapper,
UniQueryMapper queryMapper,
DataAdapterMapper adapterMapper,
@@ -67,7 +71,8 @@ public class PortalServiceImpl implements PortalService {
ThreadPoolTaskExecutor taskExecuteExecutor,
HandlerMethodService methodService,
PortalInterfaceMapper portalInterfaceMapper,
DataAdapterHandlerReader handlerReader) {
DataAdapterHandlerReader handlerReader,
EngineExecuteHandlerReader executeHandlerReader) {
this.portalMapper = portalMapper;
this.queryMapper = queryMapper;
this.adapterMapper = adapterMapper;
@@ -75,6 +80,7 @@ public class PortalServiceImpl implements PortalService {
this.methodService = methodService;
this.portalInterfaceMapper = portalInterfaceMapper;
this.handlerReader = handlerReader;
this.executeHandlerReader = executeHandlerReader;
taskExecuteExecutor.execute(() -> {
PortalQuery query = new PortalQuery();
// query.setState(QueryConstant.PORTAL_PUBLISH);
@@ -354,6 +360,24 @@ public class PortalServiceImpl implements PortalService {
}
}
@Override
public void publish(PortalPublish portalPublish, Boolean isList) {
Long portalId = portalPublish.getLongPortalId();
Portal portal = portalMapper.selectById(portalId);
List<PortalMapping> mappings = portalMappingMapper.selectByPortalId(portalId);
if (!isList && portal.getCreateDataAdapter() && !ObjectUtils.isEmpty(portal.getAdapterId())) {
DataAdapter dataAdapter = adapterMapper.selectById(portal.getAdapterId());
dataAdapter.setCode(portalPublish.getCode());
adapterMapper.updateCode(dataAdapter);
}
portalMapper.updateState(portalId, QueryConstant.PORTAL_PUBLISH);
if (PortalPremEnum.EXTERNAL.equals(portal.getPermissionType()) || PortalPremEnum.ANONYMITY.equals(portal.getPermissionType())) {
publishPortal(portal, mappings, Boolean.TRUE);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long portalId) {