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

@@ -74,7 +74,7 @@ volumes:
path: /home/build/fateverse
- name: skywalking
host:
path: /home/skywalking-agent
path: /home/build/skywalking-agent
- name: config # k8s对接的配置文件
host:
path: /home/kubect

View File

@@ -2,17 +2,15 @@ FROM azul/zulu-openjdk:11.0.22-jdk
VOLUME /tmp
RUN useradd -b /home -m -s /bin/bash clay
RUN chmod a+xr -R /home/clay && chown clay:clay -R /home/clay
#COPY skywalking /home/clay/skywalking-agent
#RUN chmod a+xr -R /home/clay/skywalking-agent && chown clay:clay -R /home/clay/skywalking-agent
COPY skywalking /home/clay/skywalking-agent
RUN chmod a+xr -R /home/clay/skywalking-agent && chown clay:clay -R /home/clay/skywalking-agent
USER clay
ARG NAME=$DRONE_COMMIT_BRANCH
COPY ./$NAME.jar /home/clay/$NAME.jar
COPY start.sh /home/clay/start.sh
WORKDIR /home/clay
RUN mkdir -p /home/clay/logs && touch /home/clay/logs/spring.log
#RUN mkdir -p /home/clay/code
#RUN chmod 777 /home/clay/code
#RUN mkdir -p /home/clay/skywalking-agent/logs && touch /home/clay/skywalking-agent/logs/skywalking-api.log
RUN mkdir -p /home/clay/skywalking-agent/logs && touch /home/clay/skywalking-agent/logs/skywalking-api.log
ENV REF_NAME dev
EXPOSE 8080
CMD bash /home/clay/start.sh $REF_NAME && echo "start logging..." && : > /home/clay/logs/spring.log && tail -F -n 500 /home/clay/logs/spring.log

View File

@@ -22,8 +22,8 @@
| 依赖 | 版本 |
|----------------------|------------|
| Spring Boot | 2.7.3 |
| Spring Cloud | 2021.0.5 |
| Spring Cloud Alibaba | 2021.0.4.0 |
| Spring Cloud | 2021.0.3 |
| Spring Cloud Alibaba | 2021.0.1.0 |
| Mybatis | 3.5.2 |
| Vue | 3.1.3 |
| React | 18.2.0 |

View File

@@ -96,7 +96,7 @@ public class JavaScriptEngine {
}
private static void remove(String functionName) {
public static void remove(String functionName) {
SegmentLock.lock(functionName, () -> {
functionMap.remove(functionName);
return null;

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) {

View File

@@ -31,13 +31,13 @@ batch=${DRONE_COMMIT_BRANCH}
ignoreArr=("monitor","sentinel-dashboard-pro","sentinel-dashboard")
#if [[ "${ignoreArr[*]}" =~ "${batch}" ]]; then
# JAVA_AGENT="-javaagent:/home/clay/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=$DRONE_COMMIT_BRANCH -Dskywalking.trace.ignore_path=/actuator/** -Dskywalking.collector.backend_service=10.7.89.101:11800 --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dio.netty.tryReflectionSetAccessible=true"
# nohup java -jar $JAVA_AGENT $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
#else
# echo "exist";
# nohup java -jar $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
#fi
if [[ "${ignoreArr[*]}" =~ "${batch}" ]]; then
JAVA_AGENT="-javaagent:/home/clay/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=$DRONE_COMMIT_BRANCH -Dskywalking.trace.ignore_path=/actuator/** -Dskywalking.collector.backend_service=10.7.125.151:11800 --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dio.netty.tryReflectionSetAccessible=true"
nohup java -jar $JAVA_AGENT $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
else
echo "exist";
nohup java -jar $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &
fi
nohup java -jar $JAVA_OPTS $JAVA_MEM_OPTS $DRONE_COMMIT_BRANCH.jar --spring.profiles.active=pro --server.port=8080 >./logs/spring.log 2>&1 &