diff --git a/.gitignore b/.gitignore index 154a6d15..dfc12eff 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ neutrino-proxy-vuepress/deploy.sh .NEUTRINO_PROXY_CLIENT_ID logs **/ixxxk.com/** +neutrino-proxy-server/src/main/resources/static/** diff --git a/docs/开发问题汇总.MD b/docs/开发问题汇总.MD index b8978af5..369508e9 100644 --- a/docs/开发问题汇总.MD +++ b/docs/开发问题汇总.MD @@ -1,3 +1,13 @@ +# native 打包 +```shell +mvn clean install -pl neutrino-proxy-core -am -DskipTests + +cd neutrino-proxy-server + +mvn clean native:compile -P native -DskipTests + +``` + # 管理后台问题汇总 ## 问题1... > 描述、解决方式 diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/ProxyClient.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/ProxyClient.java index a1ef6aaa..a22a9489 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/ProxyClient.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/ProxyClient.java @@ -1,15 +1,9 @@ package org.dromara.neutrinoproxy.client; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.noear.solon.Solon; -import org.noear.solon.SolonApp; import org.noear.solon.annotation.SolonMain; -import org.slf4j.LoggerFactory; /** * @@ -28,8 +22,6 @@ public class ProxyClient { setAlias("neutrino.proxy.tunnel.jksPath", "jksPath"); setAlias("neutrino.proxy.tunnel.keyStorePassword", "keyStorePassword"); setAlias("neutrino.proxy.tunnel.licenseKey", "licenseKey"); - // 设置日志级别 - setLogLevel(app); }); } @@ -45,20 +37,4 @@ public class ProxyClient { } } - private static void setLogLevel(SolonApp app) { - String loggerLevel = app.cfg().get("neutrino.proxy.logger.level"); - if (StringUtils.isBlank(loggerLevel)) { - return; - } - - try { - Level level = Level.toLevel(loggerLevel); - LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); - for (Logger logger : loggerContext.getLoggerList()) { - logger.setLevel(level); - } - } catch (Exception e) { - log.error("logger level set failed", e); - } - } } diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageAuthHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageAuthHandler.java index 03cdc89f..ff41bc10 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageAuthHandler.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageAuthHandler.java @@ -1,14 +1,14 @@ package org.dromara.neutrinoproxy.client.handler; -import com.alibaba.fastjson.JSONObject; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; import org.dromara.neutrinoproxy.client.config.ProxyConfig; import org.dromara.neutrinoproxy.core.Constants; import org.dromara.neutrinoproxy.core.ExceptionEnum; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.core.ProxyMessageHandler; import org.dromara.neutrinoproxy.core.dispatcher.Match; -import io.netty.channel.ChannelHandlerContext; -import lombok.extern.slf4j.Slf4j; +import org.noear.snack.ONode; import org.noear.solon.Solon; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; @@ -27,8 +27,8 @@ public class ProxyMessageAuthHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext context, ProxyMessage proxyMessage) { String info = proxyMessage.getInfo(); - JSONObject data = JSONObject.parseObject(info); - Integer code = data.getInteger("code"); + ONode load = ONode.load(info); + Integer code = load.get("code").getInt(); log.info("Auth result:{}", info); if (ExceptionEnum.AUTH_FAILED.getCode().equals(code)) { // 客户端认证失败,直接停止服务 diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageErrorHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageErrorHandler.java index 8fad40f1..8d986f8e 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageErrorHandler.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageErrorHandler.java @@ -1,11 +1,14 @@ package org.dromara.neutrinoproxy.client.handler; -import com.alibaba.fastjson.JSONObject; -import org.dromara.neutrinoproxy.core.*; -import org.dromara.neutrinoproxy.core.*; -import org.dromara.neutrinoproxy.core.dispatcher.Match; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; +import org.dromara.neutrinoproxy.core.Constants; +import org.dromara.neutrinoproxy.core.ExceptionEnum; +import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; +import org.dromara.neutrinoproxy.core.ProxyMessage; +import org.dromara.neutrinoproxy.core.ProxyMessageHandler; +import org.dromara.neutrinoproxy.core.dispatcher.Match; +import org.noear.snack.ONode; import org.noear.solon.annotation.Component; /** @@ -21,8 +24,8 @@ public class ProxyMessageErrorHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) { log.info("error: {}", proxyMessage.getInfo()); - JSONObject data = JSONObject.parseObject(proxyMessage.getInfo()); - Integer code = data.getInteger("code"); + ONode load = ONode.load(proxyMessage.getInfo()); + Integer code = load.get("code").getInt(); if (ExceptionEnum.AUTH_FAILED.getCode().equals(code)) { System.exit(0); } diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageConnectHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageConnectHandler.java index bac3db9f..bc0e9bb0 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageConnectHandler.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageConnectHandler.java @@ -1,6 +1,5 @@ package org.dromara.neutrinoproxy.client.handler; -import com.alibaba.fastjson.JSONObject; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; @@ -13,6 +12,7 @@ import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.core.ProxyMessageHandler; import org.dromara.neutrinoproxy.core.dispatcher.Match; +import org.noear.snack.ONode; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; @@ -32,7 +32,7 @@ public class UdpProxyMessageConnectHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) { final Channel cmdChannel = ctx.channel(); - final ProxyMessage.UdpBaseInfo udpBaseInfo = JSONObject.parseObject(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); + final ProxyMessage.UdpBaseInfo udpBaseInfo = ONode.deserialize(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); log.info("[UDP connect]info:{}", proxyMessage.getInfo()); // 获取连接 diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageTransferHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageTransferHandler.java index 2ff61e4e..a3d111d5 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageTransferHandler.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageTransferHandler.java @@ -1,6 +1,5 @@ package org.dromara.neutrinoproxy.client.handler; -import com.alibaba.fastjson.JSONObject; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; @@ -13,10 +12,10 @@ import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.core.ProxyMessageHandler; import org.dromara.neutrinoproxy.core.dispatcher.Match; +import org.noear.snack.ONode; import org.noear.solon.annotation.Component; import java.net.InetSocketAddress; -import java.nio.charset.StandardCharsets; /** * @author: aoshiguchen @@ -29,7 +28,7 @@ public class UdpProxyMessageTransferHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) { - final ProxyMessage.UdpBaseInfo udpBaseInfo = JSONObject.parseObject(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); + final ProxyMessage.UdpBaseInfo udpBaseInfo = ONode.deserialize(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); log.debug("[UDP transfer]info:{} data:{}", proxyMessage.getInfo(), new String(proxyMessage.getData())); Channel channel = UdpServerUtil.takeChannel(udpBaseInfo, ctx.channel()); if (null == channel) { diff --git a/neutrino-proxy-client/src/main/resources/app.yml b/neutrino-proxy-client/src/main/resources/app.yml index 29e02100..33923186 100644 --- a/neutrino-proxy-client/src/main/resources/app.yml +++ b/neutrino-proxy-client/src/main/resources/app.yml @@ -1,3 +1,15 @@ +# 日志级别 +solon.logging.appender: + console: + pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %magenta(${PID:-}) --- %-15([%15.15thread]) %-56(%cyan(%-40.40logger{39}%L)) : %msg%n" + file: + pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- %-15([%15.15thread]) %-56(%-40.40logger{39}%L) : %msg%n" + name: "logs/${neutrino.application.name}" + rolling: "logs/${neutrino.application.name}_%d{yyyy-MM-dd}_%i.log.gz" +solon.logging.logger: + "root": + # level: ${LOG_LEVEL:info} + level: info neutrino: application: name: neutrino-proxy-client @@ -12,9 +24,6 @@ neutrino: read-idle-time: 120 write-idle-time: 20 all-idle-time-seconds: 0 - logger: - # 日志级别 - level: ${LOG_LEVEL:info} tunnel: # 线程池相关配置,用于技术调优,可忽略 thread-count: 50 diff --git a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessage.java b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessage.java index b77e3829..78de8f56 100644 --- a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessage.java +++ b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessage.java @@ -22,9 +22,9 @@ package org.dromara.neutrinoproxy.core; -import com.alibaba.fastjson.JSONObject; import lombok.Data; import lombok.experimental.Accessors; +import org.noear.snack.ONode; import java.util.Arrays; @@ -118,12 +118,12 @@ public class ProxyMessage { } public static ProxyMessage buildAuthResultMessage(Integer code, String msg, String licenseKey) { - JSONObject data = new JSONObject(); - data.put("code", code); - data.put("msg", msg); - data.put("licenseKey", licenseKey); + ONode data = ONode.newObject(); + data.set("code", code); + data.set("msg", msg); + data.set("licenseKey", licenseKey); return create().setType(TYPE_AUTH) - .setInfo(data.toJSONString()); + .setInfo(data.toJson()); } public static ProxyMessage buildConnectMessage(String visitorId) { @@ -158,12 +158,12 @@ public class ProxyMessage { } public static ProxyMessage buildErrMessage(ExceptionEnum exceptionEnum, String info) { - JSONObject data = new JSONObject(); - data.put("code", exceptionEnum.getCode()); - data.put("msg", exceptionEnum.getMsg()); - data.put("info", info); + ONode data = ONode.newObject(); + data.set("code", exceptionEnum.getCode()); + data.set("msg", exceptionEnum.getMsg()); + data.set("info", info); return create().setType(TYPE_ERROR) - .setInfo(data.toJSONString()); + .setInfo(data.toJson()); } public static ProxyMessage buildErrMessage(ExceptionEnum exceptionEnum) { @@ -188,7 +188,7 @@ public class ProxyMessage { */ private long proxyTimeoutMs; public String toJsonString() { - return JSONObject.toJSONString(this); + return ONode.serialize(this); } } } diff --git a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/dispatcher/DefaultDispatcher.java b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/dispatcher/DefaultDispatcher.java index 7d7a2896..fa6f094d 100644 --- a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/dispatcher/DefaultDispatcher.java +++ b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/dispatcher/DefaultDispatcher.java @@ -3,9 +3,9 @@ package org.dromara.neutrinoproxy.core.dispatcher; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import org.dromara.neutrinoproxy.core.util.TypeUtil; import lombok.extern.slf4j.Slf4j; +import org.dromara.neutrinoproxy.core.util.TypeUtil; +import org.noear.snack.ONode; import java.util.HashMap; import java.util.List; @@ -71,7 +71,7 @@ public class DefaultDispatcher implements Dispatcher handler = handlerMap.get(type); diff --git a/neutrino-proxy-server/pom.xml b/neutrino-proxy-server/pom.xml index fc37a896..20f278eb 100644 --- a/neutrino-proxy-server/pom.xml +++ b/neutrino-proxy-server/pom.xml @@ -28,24 +28,20 @@ org.noear - activerecord-solon-plugin + wood-solon-plugin org.dromara.solon-plugins job-solon-plugin - - org.dromara.solon-plugins - orika-solon-plugin - org.dromara.neutrino-proxy neutrino-proxy-core ${revision} - org.xerial - sqlite-jdbc + com.h2database + h2 mysql @@ -59,6 +55,13 @@ com.zaxxer HikariCP + + + + org.noear + solon.aot + + diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/ProxyServer.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/ProxyServer.java index 9bc95bc5..eaba8930 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/ProxyServer.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/ProxyServer.java @@ -1,18 +1,10 @@ package org.dromara.neutrinoproxy.server; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.dromara.solonplugins.job.annotation.EnableJob; import org.noear.solon.Solon; -import org.noear.solon.SolonApp; import org.noear.solon.annotation.SolonMain; import org.noear.solon.web.cors.CrossFilter; -import org.slf4j.LoggerFactory; - -import java.util.List; /** * @@ -28,25 +20,6 @@ public class ProxyServer { Solon.start(ProxyServer.class, args, app -> { // 跨域支持。加-1 优先级更高 app.filter(-1, new CrossFilter().allowedOrigins("*")); - // 设置日志级别 - setLogLevel(app); }); } - - private static void setLogLevel(SolonApp app) { - String loggerLevel = app.cfg().get("neutrino.proxy.logger.level"); - if (StringUtils.isBlank(loggerLevel)) { - return; - } - - try { - Level level = Level.toLevel(loggerLevel); - LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); - for (Logger logger : loggerContext.getLoggerList()) { - logger.setLevel(level); - } - } catch (Exception e) { - log.error("logger level set failed", e); - } - } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/NeutrinoRuntimeNativeRegistrar.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/NeutrinoRuntimeNativeRegistrar.java new file mode 100644 index 00000000..545823ac --- /dev/null +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/NeutrinoRuntimeNativeRegistrar.java @@ -0,0 +1,114 @@ +package org.dromara.neutrinoproxy.server.base; + +import org.apache.ibatis.io.DefaultVFS; +import org.apache.ibatis.io.JBoss6VFS; +import org.dromara.neutrinoproxy.server.base.proxy.ProxyConfig; +import org.dromara.neutrinoproxy.server.base.rest.ResponseBody; +import org.dromara.neutrinoproxy.server.dal.ClientConnectRecordMapper; +import org.dromara.neutrinoproxy.server.dal.FlowReportDayMapper; +import org.dromara.neutrinoproxy.server.dal.FlowReportHourMapper; +import org.dromara.neutrinoproxy.server.dal.FlowReportMinuteMapper; +import org.dromara.neutrinoproxy.server.dal.FlowReportMonthMapper; +import org.dromara.neutrinoproxy.server.dal.JobInfoMapper; +import org.dromara.neutrinoproxy.server.dal.LicenseMapper; +import org.dromara.neutrinoproxy.server.dal.PortMappingMapper; +import org.dromara.neutrinoproxy.server.dal.PortPoolMapper; +import org.dromara.neutrinoproxy.server.dal.UserLoginRecordMapper; +import org.dromara.neutrinoproxy.server.dal.UserMapper; +import org.dromara.neutrinoproxy.server.dal.UserTokenMapper; +import org.dromara.neutrinoproxy.server.service.ClientConnectRecordService; +import org.dromara.neutrinoproxy.server.service.JobInfoService; +import org.dromara.neutrinoproxy.server.service.JobLogService; +import org.dromara.neutrinoproxy.server.service.LicenseService; +import org.dromara.neutrinoproxy.server.service.PortGroupService; +import org.dromara.neutrinoproxy.server.service.PortMappingService; +import org.dromara.neutrinoproxy.server.service.PortPoolService; +import org.dromara.neutrinoproxy.server.service.ReportService; +import org.dromara.neutrinoproxy.server.service.UserLoginRecordService; +import org.dromara.neutrinoproxy.server.service.UserService; +import org.dromara.solonplugins.job.JobBean; +import org.noear.solon.Solon; +import org.noear.solon.SolonApp; +import org.noear.solon.annotation.Component; +import org.noear.solon.aot.RuntimeNativeMetadata; +import org.noear.solon.aot.RuntimeNativeRegistrar; +import org.noear.solon.aot.hint.MemberCategory; +import org.noear.solon.core.AppContext; +import org.noear.solon.core.util.ResourceUtil; +import org.noear.solon.core.wrap.ParamWrap; + +import java.lang.reflect.Type; +import java.util.Collection; + +/** + * @author songyinyin + * @since 2023/10/20 11:24 + */ +@Component +public class NeutrinoRuntimeNativeRegistrar implements RuntimeNativeRegistrar { + @Override + public void register(AppContext context, RuntimeNativeMetadata metadata) { + + // 使用 MP lambda 的类,需要注册序列化 + metadata.registerLambdaSerialization(ClientConnectRecordService.class); + metadata.registerLambdaSerialization(JobInfoService.class); + metadata.registerLambdaSerialization(JobLogService.class); + metadata.registerLambdaSerialization(LicenseService.class); + metadata.registerLambdaSerialization(PortGroupService.class); + metadata.registerLambdaSerialization(PortMappingService.class); + metadata.registerLambdaSerialization(PortPoolService.class); + metadata.registerLambdaSerialization(ReportService.class); + metadata.registerLambdaSerialization(UserLoginRecordService.class); + metadata.registerLambdaSerialization(UserService.class); + + metadata.registerLambdaSerialization(LicenseMapper.class); + metadata.registerLambdaSerialization(ClientConnectRecordMapper.class); + metadata.registerLambdaSerialization(FlowReportDayMapper.class); + metadata.registerLambdaSerialization(FlowReportHourMapper.class); + metadata.registerLambdaSerialization(FlowReportMinuteMapper.class); + metadata.registerLambdaSerialization(FlowReportMonthMapper.class); + metadata.registerLambdaSerialization(JobInfoMapper.class); + metadata.registerLambdaSerialization(PortMappingMapper.class); + metadata.registerLambdaSerialization(PortPoolMapper.class); + metadata.registerLambdaSerialization(UserLoginRecordMapper.class); + metadata.registerLambdaSerialization(UserMapper.class); + metadata.registerLambdaSerialization(UserTokenMapper.class); + + + // mybatis + metadata.registerReflection(JBoss6VFS.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS); + metadata.registerReflection(DefaultVFS.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS); + + Collection> classes = ResourceUtil.scanClasses("org.dromara.neutrinoproxy.server.dal.entity.*"); + for (Class clazz : classes) { + metadata.registerReflection(clazz, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS); + } + + Solon.context().methodForeach(method -> { + ParamWrap[] paramWraps = method.getParamWraps(); + for (ParamWrap paramWrap : paramWraps) { + Class paramType = paramWrap.getType(); + metadata.registerReflection(paramType, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + + Type genericType = paramWrap.getGenericType(); + metadata.registerReflection(genericType.getTypeName(), MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + } + + Class returnType = method.getReturnType(); + metadata.registerReflection(returnType, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + + }); + + metadata.registerReflection(ResponseBody.class, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + metadata.registerSerialization(ResponseBody.class); + + metadata.registerReflection(ProxyConfig.Protocol.class, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + metadata.registerReflection(ProxyConfig.Server.class, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + metadata.registerReflection(ProxyConfig.Tunnel.class, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + metadata.registerReflection(ProxyConfig.Tcp.class, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + metadata.registerReflection(ProxyConfig.Udp.class, MemberCategory.DECLARED_FIELDS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_METHODS); + + metadata.registerReflection(JobBean.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS); + + } +} diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/db/DBInitialize.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/db/DBInitialize.java index a880798b..23a67d2c 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/db/DBInitialize.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/db/DBInitialize.java @@ -24,16 +24,17 @@ package org.dromara.neutrinoproxy.server.base.db; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.google.common.collect.Lists; -import com.jfinal.plugin.activerecord.Db; +import lombok.extern.slf4j.Slf4j; import org.dromara.neutrinoproxy.core.util.Assert; import org.dromara.neutrinoproxy.core.util.FileUtil; import org.dromara.neutrinoproxy.server.constant.DbTypeEnum; -import lombok.extern.slf4j.Slf4j; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Init; import org.noear.solon.annotation.Inject; import org.noear.solon.core.event.AppLoadEndEvent; import org.noear.solon.core.event.EventListener; +import org.noear.wood.DbContext; +import org.noear.wood.annotation.Db; import java.util.List; @@ -51,6 +52,9 @@ public class DBInitialize implements EventListener { private DbTypeEnum dbTypeEnum; + @Db + DbContext dbContext; + @Init public void init() throws Throwable { Assert.notNull(dbConfig.getType(), "neutrino.data.db.type不能为空!"); @@ -83,7 +87,7 @@ public class DBInitialize implements EventListener { sql += "\r\n" + line.trim(); if (sql.endsWith(";")) { log.debug("init database table sql:{}", sql); - Db.update(sql); + dbContext.exe(sql); sql = ""; } } @@ -101,8 +105,8 @@ public class DBInitialize implements EventListener { for (String tableName : initDataTableNameList) { // 表里没有数据的时候,才进行初始化操作 - int count = Db.queryInt(String.format("select count(1) from `%s`", tableName)); - if (count > 0) { + Object result = dbContext.exe(String.format("select count(1) from `%s`", tableName)); + if (result != null && ((Number) result).intValue() > 0) { continue; } List lines = FileUtil.readContentAsStringList(String.format("classpath:/sql/%s/%s.data.sql", dbConfig.getType(), tableName)); @@ -117,7 +121,7 @@ public class DBInitialize implements EventListener { sql += "\r\n" + line.trim(); if (sql.endsWith(";")) { log.debug("init database data[table={}] sql:{}", tableName, sql); - Db.update(sql); + dbContext.exe(sql); sql = ""; } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/db/DbConfiguration.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/db/DbConfiguration.java index a55e3129..456795e5 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/db/DbConfiguration.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/db/DbConfiguration.java @@ -12,8 +12,6 @@ import org.dromara.neutrinoproxy.server.constant.DbTypeEnum; import org.noear.solon.annotation.Bean; import org.noear.solon.annotation.Configuration; import org.noear.solon.annotation.Inject; -import org.sqlite.SQLiteConfig; -import org.sqlite.SQLiteDataSource; import javax.sql.DataSource; @@ -27,11 +25,8 @@ public class DbConfiguration { @Bean(value = "db", typed = true) public DataSource dataSource(@Inject DbConfig dbConfig) { DbTypeEnum dbTypeEnum = DbTypeEnum.of(dbConfig.getType()); - if (DbTypeEnum.SQLITE == dbTypeEnum) { - SQLiteDataSource dataSource = new SQLiteDataSource(); - dataSource.setUrl(dbConfig.getUrl()); - dataSource.setJournalMode(SQLiteConfig.JournalMode.WAL.getValue()); - return dataSource; + if (DbTypeEnum.H2 == dbTypeEnum) { + return newHikariDataSource(dbConfig, "org.h2.Driver"); } else if (DbTypeEnum.MYSQL == dbTypeEnum) { String driver = "com.mysql.cj.jdbc.Driver"; try { @@ -68,7 +63,7 @@ public class DbConfiguration { @Bean public void db1_ext2(@Db("db") MybatisConfiguration config) { - config.getTypeHandlerRegistry().register("fun.asgc.neutrino.proxy.server.dal"); + config.getTypeHandlerRegistry().register("org.dromara.neutrinoproxy.server.dal.entity"); config.setDefaultEnumTypeHandler(null); MybatisPlusInterceptor plusInterceptor = new MybatisPlusInterceptor(); diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/proxy/ProxyConfiguration.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/proxy/ProxyConfiguration.java index 588bbb4d..cbe1252a 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/proxy/ProxyConfiguration.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/proxy/ProxyConfiguration.java @@ -48,7 +48,10 @@ public class ProxyConfiguration implements LifecycleBean { @Bean("tcpServerBossGroup") public NioEventLoopGroup tcpServerBossGroup(@Inject ProxyConfig proxyConfig) { - return new NioEventLoopGroup(proxyConfig.getServer().getTcp().getBossThreadCount()); + ProxyConfig.Server server = proxyConfig.getServer(); + System.out.println("==> server:" + server); + ProxyConfig.Tcp tcp = server.getTcp(); + return new NioEventLoopGroup(tcp.getBossThreadCount()); } @Bean("tcpServerWorkerGroup") @@ -79,12 +82,12 @@ public class ProxyConfiguration implements LifecycleBean { } @Bean("udpServerBossGroup") - private NioEventLoopGroup udpServerBossGroup(@Inject ProxyConfig proxyConfig) { + public NioEventLoopGroup udpServerBossGroup(@Inject ProxyConfig proxyConfig) { return new NioEventLoopGroup(proxyConfig.getServer().getUdp().getBossThreadCount()); } @Bean("udpServerWorkerGroup") - private NioEventLoopGroup udpServerWorkerGroup(@Inject ProxyConfig proxyConfig) { + public NioEventLoopGroup udpServerWorkerGroup(@Inject ProxyConfig proxyConfig) { return new NioEventLoopGroup(proxyConfig.getServer().getUdp().getWorkThreadCount()); } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/rest/interceptor/VisitLogInterceptor.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/rest/interceptor/VisitLogInterceptor.java index 8273b703..c0a1064c 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/rest/interceptor/VisitLogInterceptor.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/base/rest/interceptor/VisitLogInterceptor.java @@ -1,7 +1,7 @@ package org.dromara.neutrinoproxy.server.base.rest.interceptor; -import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; +import org.noear.snack.ONode; import org.noear.solon.annotation.Component; import org.noear.solon.core.handle.Action; import org.noear.solon.core.handle.Context; @@ -33,8 +33,8 @@ public class VisitLogInterceptor implements RouterInterceptor { long elapsedTime = now.getTime() - startTime.getTime(); log.debug("\n-----------------------------------------------------------------interface request log:\n{} url:{} elapsed time:{}\nrequest:{}\nresponse:{}\nclient ip:{}\n", ctx.method(), ctx.path(), getElapsedTimeStr(elapsedTime), - JSONObject.toJSONString(ctx.paramMap()), - JSONObject.toJSONString(JSONObject.toJSONString(ctx.result)), + ONode.serialize(ctx.paramMap()), + ONode.serialize(ctx.result), ctx.realIp() ); } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/constant/DbTypeEnum.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/constant/DbTypeEnum.java index cef27e46..a77e83f1 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/constant/DbTypeEnum.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/constant/DbTypeEnum.java @@ -37,7 +37,7 @@ import java.util.stream.Stream; @Getter @AllArgsConstructor public enum DbTypeEnum { - SQLITE("sqlite"), + H2("h2"), MYSQL("mysql"), MARIADB("mariadb"), ; diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/ClientConnectRecordDO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/ClientConnectRecordDO.java index 04dc06f3..1e90ce7f 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/ClientConnectRecordDO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/ClientConnectRecordDO.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; +import org.dromara.neutrinoproxy.server.controller.res.log.ClientConnectRecordListRes; import java.util.Date; @@ -34,4 +35,17 @@ public class ClientConnectRecordDO { * 创建时间 */ private Date createTime; + + public ClientConnectRecordListRes toRes() { + ClientConnectRecordListRes res = new ClientConnectRecordListRes(); + res.setId(id); + res.setIp(ip); + res.setLicenseId(licenseId); + res.setType(type); + res.setMsg(msg); + res.setCode(code); + res.setErr(err); + res.setCreateTime(createTime); + return res; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/JobInfoDO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/JobInfoDO.java index 6c7b6444..eb067139 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/JobInfoDO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/JobInfoDO.java @@ -29,6 +29,7 @@ import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; import org.dromara.neutrinoproxy.server.constant.EnableStatusEnum; +import org.dromara.neutrinoproxy.server.controller.res.system.JobInfoListRes; import java.util.Date; @@ -64,4 +65,19 @@ public class JobInfoDO { * 更新时间 */ private Date updateTime; + + public JobInfoListRes toRes() { + JobInfoListRes res = new JobInfoListRes(); + res.setId(id); + res.setCron(cron); + res.setDesc(desc); + res.setAlarmEmail(alarmEmail); + res.setAlarmDing(alarmDing); + res.setHandler(handler); + res.setParam(param); + res.setEnable(enable); + res.setCreateTime(createTime); + res.setUpdateTime(updateTime); + return res; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/JobLogDO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/JobLogDO.java index aae9dd12..4fc9328d 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/JobLogDO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/JobLogDO.java @@ -27,6 +27,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; +import org.dromara.neutrinoproxy.server.controller.res.log.JobLogListRes; import java.util.Date; @@ -52,4 +53,17 @@ public class JobLogDO { * 创建时间 */ private Date createTime; + + public JobLogListRes toRes() { + JobLogListRes res = new JobLogListRes(); + res.setId(id); + res.setJobId(jobId); + res.setHandler(handler); + res.setParam(param); + res.setCode(code); + res.setMsg(msg); + res.setAlarmStatus(alarmStatus); + res.setCreateTime(createTime); + return res; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/LicenseDO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/LicenseDO.java index 0b80c95b..a672b522 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/LicenseDO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/LicenseDO.java @@ -30,6 +30,7 @@ import org.dromara.neutrinoproxy.server.constant.OnlineStatusEnum; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; +import org.dromara.neutrinoproxy.server.controller.res.proxy.LicenseListRes; import java.util.Date; @@ -76,4 +77,17 @@ public class LicenseDO { * 更新时间 */ private Date updateTime; + + public LicenseListRes toRes() { + LicenseListRes res = new LicenseListRes(); + res.setId(id); + res.setName(name); + res.setKey(key); + res.setUserId(userId); + res.setIsOnline(isOnline); + res.setEnable(enable); + res.setCreateTime(createTime); + res.setUpdateTime(updateTime); + return res; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/PortMappingDO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/PortMappingDO.java index f83d656f..5e010d59 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/PortMappingDO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/PortMappingDO.java @@ -29,6 +29,7 @@ import org.dromara.neutrinoproxy.server.constant.OnlineStatusEnum; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; +import org.dromara.neutrinoproxy.server.controller.res.proxy.PortMappingListRes; import java.util.Date; @@ -99,4 +100,24 @@ public class PortMappingDO { * 更新时间 */ private Date updateTime; + + + public PortMappingListRes toRes() { + PortMappingListRes res = new PortMappingListRes(); + res.setId(id); + res.setLicenseId(licenseId); + res.setProtocal(protocal); + res.setSubdomain(subdomain); + res.setServerPort(serverPort); + res.setClientIp(clientIp); + res.setClientPort(clientPort); + res.setDescription(description); + res.setIsOnline(isOnline); + res.setProxyResponses(proxyResponses); + res.setProxyTimeoutMs(proxyTimeoutMs); + res.setEnable(enable); + res.setCreateTime(createTime); + res.setUpdateTime(updateTime); + return res; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/PortPoolDO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/PortPoolDO.java index 1086abc6..4ef5d05d 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/PortPoolDO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/PortPoolDO.java @@ -27,6 +27,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; +import org.dromara.neutrinoproxy.server.controller.res.system.PortPoolListRes; import java.util.Date; @@ -64,4 +65,15 @@ public class PortPoolDO { * 更新时间 */ private Date updateTime; + + public PortPoolListRes toRes() { + PortPoolListRes res = new PortPoolListRes(); + res.setId(id); + res.setGroupId(groupId); + res.setPort(port); + res.setEnable(enable); + res.setCreateTime(createTime); + res.setUpdateTime(updateTime); + return res; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/UserDO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/UserDO.java index bec67963..c5926a48 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/UserDO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/UserDO.java @@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.ToString; +import org.dromara.neutrinoproxy.server.controller.res.system.UserListRes; import java.util.Date; @@ -36,7 +37,7 @@ import java.util.Date; */ @ToString @Data -@TableName("user") +@TableName("`user`") public class UserDO { @TableId(type = IdType.AUTO) private Integer id; @@ -64,4 +65,15 @@ public class UserDO { * 更新时间 */ private Date updateTime; + + public UserListRes toRes() { + UserListRes res = new UserListRes(); + res.setId(id); + res.setName(name); + res.setLoginName(loginName); + res.setEnable(enable); + res.setCreateTime(createTime); + res.setUpdateTime(updateTime); + return res; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/UserLoginRecordDO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/UserLoginRecordDO.java index 3d72b449..c019849c 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/UserLoginRecordDO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/dal/entity/UserLoginRecordDO.java @@ -18,6 +18,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; +import org.dromara.neutrinoproxy.server.controller.res.log.UserLoginRecordListRes; import java.util.Date; @@ -62,4 +63,14 @@ public class UserLoginRecordDO { * 创建时间 */ private Date createTime; + + public UserLoginRecordListRes toRes() { + UserLoginRecordListRes res = new UserLoginRecordListRes(); + res.setId(id); + res.setUserId(userId); + res.setIp(ip); + res.setType(type); + res.setCreateTime(createTime); + return res; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/job/DataCleanJob.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/job/DataCleanJob.java index 766b0495..e69fc945 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/job/DataCleanJob.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/job/DataCleanJob.java @@ -1,14 +1,19 @@ package org.dromara.neutrinoproxy.server.job; -import com.alibaba.fastjson.JSONObject; -import org.dromara.neutrinoproxy.core.util.DateUtil; -import org.dromara.neutrinoproxy.server.dal.*; import lombok.Data; import lombok.experimental.Accessors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.dromara.neutrinoproxy.core.util.DateUtil; +import org.dromara.neutrinoproxy.server.dal.ClientConnectRecordMapper; +import org.dromara.neutrinoproxy.server.dal.FlowReportDayMapper; +import org.dromara.neutrinoproxy.server.dal.FlowReportHourMapper; +import org.dromara.neutrinoproxy.server.dal.FlowReportMinuteMapper; +import org.dromara.neutrinoproxy.server.dal.JobLogMapper; +import org.dromara.neutrinoproxy.server.dal.UserLoginRecordMapper; import org.dromara.solonplugins.job.IJobHandler; import org.dromara.solonplugins.job.annotation.JobHandler; +import org.noear.snack.ONode; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; @@ -108,7 +113,7 @@ public class DataCleanJob implements IJobHandler { public static JobParams getParams(String s) { try { if (StringUtils.isNotBlank(s)) { - return JSONObject.parseObject(s, JobParams.class); + return ONode.deserialize(s, JobParams.class); } } catch (Exception e) { // ignore diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/UdpProxyMessageConnectHandler.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/UdpProxyMessageConnectHandler.java index e2b38436..4e048e20 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/UdpProxyMessageConnectHandler.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/UdpProxyMessageConnectHandler.java @@ -1,11 +1,13 @@ package org.dromara.neutrinoproxy.server.proxy.handler; -import com.alibaba.fastjson.JSONObject; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelOption; import lombok.extern.slf4j.Slf4j; -import org.dromara.neutrinoproxy.core.*; +import org.dromara.neutrinoproxy.core.Constants; +import org.dromara.neutrinoproxy.core.ExceptionEnum; +import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; +import org.dromara.neutrinoproxy.core.ProxyMessage; +import org.dromara.neutrinoproxy.core.ProxyMessageHandler; import org.dromara.neutrinoproxy.core.dispatcher.Match; import org.dromara.neutrinoproxy.server.constant.EnableStatusEnum; import org.dromara.neutrinoproxy.server.dal.PortMappingMapper; @@ -16,6 +18,7 @@ import org.dromara.neutrinoproxy.server.proxy.domain.ProxyAttachment; import org.dromara.neutrinoproxy.server.service.LicenseService; import org.dromara.neutrinoproxy.server.service.UserService; import org.dromara.neutrinoproxy.server.util.ProxyUtil; +import org.noear.snack.ONode; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; @@ -36,7 +39,7 @@ public class UdpProxyMessageConnectHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) { - final ProxyMessage.UdpBaseInfo udpBaseInfo = JSONObject.parseObject(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); + final ProxyMessage.UdpBaseInfo udpBaseInfo = ONode.deserialize(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); final String licenseKey = new String(proxyMessage.getData()); log.info("[UDP connect]info:{} licenseKey:{}", proxyMessage.getInfo(), licenseKey); diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/UdpProxyMessageTransferHandler.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/UdpProxyMessageTransferHandler.java index a8fd0ba2..5a9f0d86 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/UdpProxyMessageTransferHandler.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/UdpProxyMessageTransferHandler.java @@ -1,7 +1,5 @@ package org.dromara.neutrinoproxy.server.proxy.handler; -import com.alibaba.fastjson.JSONObject; -import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; @@ -12,9 +10,8 @@ import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.core.ProxyMessageHandler; import org.dromara.neutrinoproxy.core.dispatcher.Match; -import org.dromara.neutrinoproxy.server.proxy.domain.VisitorChannelAttachInfo; import org.dromara.neutrinoproxy.server.service.FlowReportService; -import org.dromara.neutrinoproxy.server.util.ProxyUtil; +import org.noear.snack.ONode; import org.noear.solon.Solon; import org.noear.solon.annotation.Component; @@ -30,7 +27,7 @@ import java.net.InetSocketAddress; public class UdpProxyMessageTransferHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) { - final ProxyMessage.UdpBaseInfo udpBaseInfo = JSONObject.parseObject(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); + final ProxyMessage.UdpBaseInfo udpBaseInfo = ONode.deserialize(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); log.debug("[UDP transfer]info:{} data:{}", proxyMessage.getInfo(), new String(proxyMessage.getData())); Channel visitorChannel = ctx.channel().attr(Constants.NEXT_CHANNEL).get(); diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/ClientConnectRecordService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/ClientConnectRecordService.java index e11f77d8..9d912ac9 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/ClientConnectRecordService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/ClientConnectRecordService.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; -import ma.glasnost.orika.MapperFacade; import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.server.base.page.PageInfo; import org.dromara.neutrinoproxy.server.base.page.PageQuery; @@ -19,7 +18,6 @@ import org.dromara.neutrinoproxy.server.dal.entity.ClientConnectRecordDO; import org.dromara.neutrinoproxy.server.dal.entity.LicenseDO; import org.dromara.neutrinoproxy.server.dal.entity.UserDO; import org.noear.solon.annotation.Component; -import org.noear.solon.annotation.Inject; import java.util.List; import java.util.Map; @@ -34,8 +32,6 @@ import java.util.stream.Collectors; @Slf4j @Component public class ClientConnectRecordService { - @Inject - private MapperFacade mapperFacade; @Db private ClientConnectRecordMapper clientConnectRecordMapper; @Db @@ -52,7 +48,7 @@ public class ClientConnectRecordService { .eq(null != req.getLicenseId(), ClientConnectRecordDO::getLicenseId, req.getLicenseId()) .orderByDesc(ClientConnectRecordDO::getId) ); - List respList = mapperFacade.mapAsList(pageResult.getRecords(), ClientConnectRecordListRes.class); + List respList = pageResult.getRecords().stream().map(ClientConnectRecordDO::toRes).collect(Collectors.toList()); if (CollectionUtils.isEmpty(pageResult.getRecords())) { return PageInfo.of(respList, pageResult.getTotal(), pageQuery.getCurrent(), pageQuery.getSize()); } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/JobInfoService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/JobInfoService.java index cf2c1bac..35379fbb 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/JobInfoService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/JobInfoService.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; -import ma.glasnost.orika.MapperFacade; import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.server.base.page.PageInfo; import org.dromara.neutrinoproxy.server.base.page.PageQuery; @@ -41,6 +40,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author: aoshiguchen @@ -49,8 +49,6 @@ import java.util.Map; @Slf4j @Component public class JobInfoService implements IJobSource { - @Inject - private MapperFacade mapperFacade; @Db private JobInfoMapper jobInfoMapper; @Inject @@ -81,7 +79,7 @@ public class JobInfoService implements IJobSource { Page page = jobInfoMapper.selectPage(new Page<>(pageQuery.getCurrent(), pageQuery.getSize()), new LambdaQueryWrapper() .orderByAsc(JobInfoDO::getId) ); - List respList = mapperFacade.mapAsList(page.getRecords(), JobInfoListRes.class); + List respList = page.getRecords().stream().map(JobInfoDO::toRes).collect(Collectors.toList()); return PageInfo.of(respList, page); } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/JobLogService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/JobLogService.java index 40997d68..766419ac 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/JobLogService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/JobLogService.java @@ -23,23 +23,22 @@ package org.dromara.neutrinoproxy.server.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.server.base.page.PageInfo; import org.dromara.neutrinoproxy.server.base.page.PageQuery; import org.dromara.neutrinoproxy.server.controller.req.log.JobLogListReq; import org.dromara.neutrinoproxy.server.controller.res.log.JobLogListRes; import org.dromara.neutrinoproxy.server.dal.JobLogMapper; import org.dromara.neutrinoproxy.server.dal.entity.JobLogDO; -import lombok.extern.slf4j.Slf4j; -import ma.glasnost.orika.MapperFacade; -import org.apache.commons.lang3.exception.ExceptionUtils; -import org.apache.ibatis.solon.annotation.Db; import org.dromara.solonplugins.job.IJobCallback; import org.dromara.solonplugins.job.JobInfo; import org.noear.solon.annotation.Component; -import org.noear.solon.annotation.Inject; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * @@ -49,8 +48,6 @@ import java.util.List; @Slf4j @Component public class JobLogService implements IJobCallback { - @Inject - private MapperFacade mapperFacade; @Db private JobLogMapper jobLogMapper; @@ -82,7 +79,7 @@ public class JobLogService implements IJobCallback { .eq(null != req.getJobId(), JobLogDO::getJobId, req.getJobId()) .orderByDesc(JobLogDO::getId) ); - List respList = mapperFacade.mapAsList(page.getRecords(), JobLogListRes.class); + List respList = page.getRecords().stream().map(JobLogDO::toRes).collect(Collectors.toList()); return PageInfo.of(respList, page); } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/LicenseService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/LicenseService.java index 3d9c8f68..f1830055 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/LicenseService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/LicenseService.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; import com.google.common.collect.Sets; -import ma.glasnost.orika.MapperFacade; import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.server.base.db.DBInitialize; import org.dromara.neutrinoproxy.server.base.page.PageInfo; @@ -19,7 +18,11 @@ import org.dromara.neutrinoproxy.server.controller.req.proxy.LicenseCreateReq; import org.dromara.neutrinoproxy.server.controller.req.proxy.LicenseListReq; import org.dromara.neutrinoproxy.server.controller.req.proxy.LicenseUpdateEnableStatusReq; import org.dromara.neutrinoproxy.server.controller.req.proxy.LicenseUpdateReq; -import org.dromara.neutrinoproxy.server.controller.res.proxy.*; +import org.dromara.neutrinoproxy.server.controller.res.proxy.LicenseCreateRes; +import org.dromara.neutrinoproxy.server.controller.res.proxy.LicenseDetailRes; +import org.dromara.neutrinoproxy.server.controller.res.proxy.LicenseListRes; +import org.dromara.neutrinoproxy.server.controller.res.proxy.LicenseUpdateEnableStatusRes; +import org.dromara.neutrinoproxy.server.controller.res.proxy.LicenseUpdateRes; import org.dromara.neutrinoproxy.server.dal.LicenseMapper; import org.dromara.neutrinoproxy.server.dal.PortMappingMapper; import org.dromara.neutrinoproxy.server.dal.UserMapper; @@ -32,7 +35,12 @@ import org.noear.solon.annotation.Init; import org.noear.solon.annotation.Inject; import org.noear.solon.core.bean.LifecycleBean; -import java.util.*; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.function.Function; import java.util.stream.Collectors; @@ -44,8 +52,6 @@ import java.util.stream.Collectors; */ @Component public class LicenseService implements LifecycleBean { - @Inject - private MapperFacade mapperFacade; @Db private LicenseMapper licenseMapper; @Db @@ -64,7 +70,7 @@ public class LicenseService implements LifecycleBean { .eq(req.getEnable() != null, LicenseDO::getEnable, req.getEnable()) .orderByAsc(Arrays.asList(LicenseDO::getUserId, LicenseDO::getId)) ); - List respList = mapperFacade.mapAsList(page.getRecords(), LicenseListRes.class); + List respList = page.getRecords().stream().map(LicenseDO::toRes).collect(Collectors.toList()); if (CollectionUtils.isEmpty(page.getRecords())) { return PageInfo.of(respList, page); } @@ -92,7 +98,7 @@ public class LicenseService implements LifecycleBean { } private List assembleConvertLicenses(List list) { - List licenseList = mapperFacade.mapAsList(list, LicenseListRes.class); + List licenseList = list.stream().map(LicenseDO::toRes).collect(Collectors.toList()); if (!CollectionUtil.isEmpty(licenseList)) { Set userIds = licenseList.stream().map(LicenseListRes::getUserId).collect(Collectors.toSet()); List userList = userMapper.findByIds(userIds); diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortGroupService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortGroupService.java index 58baec8d..3302dce6 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortGroupService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortGroupService.java @@ -2,6 +2,7 @@ package org.dromara.neutrinoproxy.server.service; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; +import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.server.base.page.PageInfo; import org.dromara.neutrinoproxy.server.base.page.PageQuery; import org.dromara.neutrinoproxy.server.base.rest.ServiceException; @@ -20,10 +21,7 @@ import org.dromara.neutrinoproxy.server.dal.PortPoolMapper; import org.dromara.neutrinoproxy.server.dal.entity.PortGroupDO; import org.dromara.neutrinoproxy.server.dal.entity.PortPoolDO; import org.dromara.neutrinoproxy.server.util.ParamCheckUtil; -import ma.glasnost.orika.MapperFacade; -import org.apache.ibatis.solon.annotation.Db; import org.noear.solon.annotation.Component; -import org.noear.solon.annotation.Inject; import java.util.Date; import java.util.List; @@ -35,9 +33,6 @@ import java.util.Objects; @Component public class PortGroupService { - @Inject - private MapperFacade mapperFacade; - @Db private PortGroupMapper portGroupMapper; diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortMappingService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortMappingService.java index dca22a10..1683f708 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortMappingService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortMappingService.java @@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; import com.google.common.collect.Sets; -import ma.glasnost.orika.MapperFacade; import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.server.base.db.DBInitialize; import org.dromara.neutrinoproxy.server.base.page.PageInfo; @@ -22,7 +21,11 @@ import org.dromara.neutrinoproxy.server.controller.req.proxy.PortMappingCreateRe import org.dromara.neutrinoproxy.server.controller.req.proxy.PortMappingListReq; import org.dromara.neutrinoproxy.server.controller.req.proxy.PortMappingUpdateEnableStatusReq; import org.dromara.neutrinoproxy.server.controller.req.proxy.PortMappingUpdateReq; -import org.dromara.neutrinoproxy.server.controller.res.proxy.*; +import org.dromara.neutrinoproxy.server.controller.res.proxy.PortMappingCreateRes; +import org.dromara.neutrinoproxy.server.controller.res.proxy.PortMappingDetailRes; +import org.dromara.neutrinoproxy.server.controller.res.proxy.PortMappingListRes; +import org.dromara.neutrinoproxy.server.controller.res.proxy.PortMappingUpdateEnableStatusRes; +import org.dromara.neutrinoproxy.server.controller.res.proxy.PortMappingUpdateRes; import org.dromara.neutrinoproxy.server.dal.LicenseMapper; import org.dromara.neutrinoproxy.server.dal.PortMappingMapper; import org.dromara.neutrinoproxy.server.dal.PortPoolMapper; @@ -38,7 +41,11 @@ import org.noear.solon.annotation.Init; import org.noear.solon.annotation.Inject; import org.noear.solon.core.bean.LifecycleBean; -import java.util.*; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -48,8 +55,6 @@ import java.util.stream.Collectors; */ @Component public class PortMappingService implements LifecycleBean { - @Inject - private MapperFacade mapperFacade; @Db private PortMappingMapper portMappingMapper; @Db @@ -82,7 +87,7 @@ public class PortMappingService implements LifecycleBean { Page page = new Page<>(pageQuery.getCurrent(), pageQuery.getSize()); List list = portMappingMapper.selectPortMappingByCondition(page, req); - List respList = mapperFacade.mapAsList(list, PortMappingListRes.class); + List respList = list.stream().map(PortMappingDO::toRes).collect(Collectors.toList()); if (CollectionUtils.isEmpty(list)) { return PageInfo.of(respList, page.getTotal(), pageQuery.getCurrent(), pageQuery.getSize()); } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortPoolService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortPoolService.java index 8ff5de76..e651daca 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortPoolService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/PortPoolService.java @@ -4,26 +4,34 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.server.base.page.PageInfo; import org.dromara.neutrinoproxy.server.base.page.PageQuery; import org.dromara.neutrinoproxy.server.base.rest.ServiceException; import org.dromara.neutrinoproxy.server.constant.EnableStatusEnum; import org.dromara.neutrinoproxy.server.constant.ExceptionConstant; -import org.dromara.neutrinoproxy.server.controller.req.system.*; -import org.dromara.neutrinoproxy.server.controller.res.system.*; +import org.dromara.neutrinoproxy.server.controller.req.system.AvailablePortListReq; +import org.dromara.neutrinoproxy.server.controller.req.system.PortPoolCreateReq; +import org.dromara.neutrinoproxy.server.controller.req.system.PortPoolListReq; +import org.dromara.neutrinoproxy.server.controller.req.system.PortPoolUpdateEnableStatusReq; +import org.dromara.neutrinoproxy.server.controller.req.system.PortPoolUpdateGroupReq; +import org.dromara.neutrinoproxy.server.controller.req.system.PortPoolUpdateReq; +import org.dromara.neutrinoproxy.server.controller.res.system.PortPoolCreateRes; +import org.dromara.neutrinoproxy.server.controller.res.system.PortPoolListRes; +import org.dromara.neutrinoproxy.server.controller.res.system.PortPoolUpdateEnableStatusRes; +import org.dromara.neutrinoproxy.server.controller.res.system.PortPoolUpdateGroupRes; +import org.dromara.neutrinoproxy.server.controller.res.system.PortPoolUpdateRes; import org.dromara.neutrinoproxy.server.dal.LicenseMapper; import org.dromara.neutrinoproxy.server.dal.PortGroupMapper; import org.dromara.neutrinoproxy.server.dal.PortMappingMapper; import org.dromara.neutrinoproxy.server.dal.PortPoolMapper; import org.dromara.neutrinoproxy.server.dal.entity.LicenseDO; +import org.dromara.neutrinoproxy.server.dal.entity.PortGroupDO; import org.dromara.neutrinoproxy.server.dal.entity.PortMappingDO; import org.dromara.neutrinoproxy.server.dal.entity.PortPoolDO; import org.dromara.neutrinoproxy.server.util.ParamCheckUtil; -import lombok.extern.slf4j.Slf4j; -import ma.glasnost.orika.MapperFacade; -import org.apache.commons.lang3.StringUtils; -import org.apache.ibatis.solon.annotation.Db; -import org.dromara.neutrinoproxy.server.dal.entity.PortGroupDO; import org.dromara.neutrinoproxy.server.util.PortAvailableUtil; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; @@ -34,7 +42,9 @@ import java.util.Objects; import java.util.function.Consumer; import java.util.stream.Collectors; -import static org.dromara.neutrinoproxy.server.constant.ExceptionConstant.*; +import static org.dromara.neutrinoproxy.server.constant.ExceptionConstant.PORT_CANNOT_REPEAT; +import static org.dromara.neutrinoproxy.server.constant.ExceptionConstant.PORT_GROUP_NAME_DOES_NOT_EXIST; +import static org.dromara.neutrinoproxy.server.constant.ExceptionConstant.PORT_RANGE_FAIL; /** * @@ -44,8 +54,6 @@ import static org.dromara.neutrinoproxy.server.constant.ExceptionConstant.*; @Slf4j @Component public class PortPoolService { - @Inject - private MapperFacade mapperFacade; @Db private PortPoolMapper portPoolMapper; @Inject @@ -68,7 +76,9 @@ public class PortPoolService { List list = portPoolMapper.selectList(new LambdaQueryWrapper() .eq(PortPoolDO::getEnable, EnableStatusEnum.ENABLE.getStatus()) ); - return mapperFacade.mapAsList(this.filterUsedPorts(list), PortPoolListRes.class); + + List resultList = this.filterUsedPorts(list); + return resultList.stream().map(PortPoolDO::toRes).collect(Collectors.toList()); } private List filterUsedPorts(List list) { @@ -149,7 +159,7 @@ public class PortPoolService { public List portListByGroupId(String groupId) { List portPoolDOList = portPoolMapper.getByGroupId(groupId); - List portPoolListReList = mapperFacade.mapAsList(portPoolDOList, PortPoolListRes.class); + List portPoolListReList = portPoolDOList.stream().map(PortPoolDO::toRes).collect(Collectors.toList()); return portPoolListReList; } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/ReportService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/ReportService.java index 09a55203..7f738f4a 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/ReportService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/ReportService.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.core.util.DateUtil; import org.dromara.neutrinoproxy.server.base.db.DbConfig; import org.dromara.neutrinoproxy.server.base.page.PageInfo; @@ -14,7 +16,11 @@ import org.dromara.neutrinoproxy.server.controller.req.report.LicenseFlowMonthRe import org.dromara.neutrinoproxy.server.controller.req.report.LicenseFlowReportReq; import org.dromara.neutrinoproxy.server.controller.req.report.UserFlowMonthReportReq; import org.dromara.neutrinoproxy.server.controller.req.report.UserFlowReportReq; -import org.dromara.neutrinoproxy.server.controller.res.report.*; +import org.dromara.neutrinoproxy.server.controller.res.report.HomeDataView; +import org.dromara.neutrinoproxy.server.controller.res.report.LicenseFlowMonthReportRes; +import org.dromara.neutrinoproxy.server.controller.res.report.LicenseFlowReportRes; +import org.dromara.neutrinoproxy.server.controller.res.report.UserFlowMonthReportRes; +import org.dromara.neutrinoproxy.server.controller.res.report.UserFlowReportRes; import org.dromara.neutrinoproxy.server.dal.LicenseMapper; import org.dromara.neutrinoproxy.server.dal.PortMappingMapper; import org.dromara.neutrinoproxy.server.dal.ReportMapper; @@ -23,13 +29,16 @@ import org.dromara.neutrinoproxy.server.dal.entity.PortMappingDO; import org.dromara.neutrinoproxy.server.service.bo.FlowBO; import org.dromara.neutrinoproxy.server.service.bo.SingleDayFlowBO; import org.dromara.neutrinoproxy.server.util.FormatUtil; -import lombok.extern.slf4j.Slf4j; -import ma.glasnost.orika.MapperFacade; -import org.apache.ibatis.solon.annotation.Db; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; -import java.util.*; +import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -39,8 +48,6 @@ import java.util.stream.Collectors; @Slf4j @Component public class ReportService { - @Inject - private MapperFacade mapperFacade; @Db private ReportMapper reportMapper; @Db @@ -76,17 +83,17 @@ public class ReportService { // 今日流量 Date now = new Date(); FlowBO todayFlow = reportMapper.homeTodayFlow(DateUtil.getDayBegin(now), now); - homeDataView.setTodayFlow(mapperFacade.map(todayFlow, HomeDataView.TodayFlow.class)); + homeDataView.setTodayFlow(todayFlow.todayFlow()); // 总流量 FlowBO totalFlow = reportMapper.homeTotalFlow(DateUtil.getMonthBegin(now), DateUtil.getDayBegin(now), now); - homeDataView.setTotalFlow(mapperFacade.map(totalFlow, HomeDataView.TotalFlow.class)); + homeDataView.setTotalFlow(totalFlow.totalFlow()); // 最近n日流量 Integer days = Constants.HOME_FLOW_DAYS; List last7dFlowList = reportMapper.homeLast7dFlowList(DateUtil.getDayBegin(DateUtil.addDate(now, Calendar.DATE, -(days - 1))), DateUtil.getDayBegin(now), now); homeDataView.setLast7dFlow(new HomeDataView.Last7dFlow()); - homeDataView.getLast7dFlow().setDataList(mapperFacade.mapAsList(last7dFlowList, HomeDataView.SingleDayFlow.class)); + homeDataView.getLast7dFlow().setDataList(last7dFlowList.stream().map(SingleDayFlowBO::toSingleDayFlow).collect(Collectors.toList())); // 数据处理 fillHomeDataView(homeDataView, now); diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/UserLoginRecordService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/UserLoginRecordService.java index 5bb997a8..10f0fc0e 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/UserLoginRecordService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/UserLoginRecordService.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; +import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.server.base.page.PageInfo; import org.dromara.neutrinoproxy.server.base.page.PageQuery; import org.dromara.neutrinoproxy.server.controller.req.log.UserLoginRecordListReq; @@ -12,10 +13,7 @@ import org.dromara.neutrinoproxy.server.dal.UserLoginRecordMapper; import org.dromara.neutrinoproxy.server.dal.UserMapper; import org.dromara.neutrinoproxy.server.dal.entity.UserDO; import org.dromara.neutrinoproxy.server.dal.entity.UserLoginRecordDO; -import ma.glasnost.orika.MapperFacade; -import org.apache.ibatis.solon.annotation.Db; import org.noear.solon.annotation.Component; -import org.noear.solon.annotation.Inject; import java.util.List; import java.util.Map; @@ -30,8 +28,6 @@ import java.util.stream.Collectors; */ @Component public class UserLoginRecordService { - @Inject - private MapperFacade mapperFacade; @Db private UserLoginRecordMapper userLoginRecordMapper; @Db @@ -42,7 +38,7 @@ public class UserLoginRecordService { .eq(null != req.getUserId(), UserLoginRecordDO::getUserId, req.getUserId()) .orderByDesc(UserLoginRecordDO::getCreateTime) ); - List respList = mapperFacade.mapAsList(page.getRecords(), UserLoginRecordListRes.class); + List respList = page.getRecords().stream().map(UserLoginRecordDO::toRes).collect(Collectors.toList()); if (CollectionUtils.isEmpty(page.getRecords())) { return PageInfo.of(respList, page); } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/UserService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/UserService.java index 1c9d5cc7..5394fc51 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/UserService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/UserService.java @@ -3,6 +3,7 @@ package org.dromara.neutrinoproxy.server.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.solon.plugins.pagination.Page; +import org.apache.ibatis.solon.annotation.Db; import org.dromara.neutrinoproxy.core.util.DateUtil; import org.dromara.neutrinoproxy.server.base.page.PageInfo; import org.dromara.neutrinoproxy.server.base.page.PageQuery; @@ -10,8 +11,20 @@ import org.dromara.neutrinoproxy.server.base.rest.ServiceException; import org.dromara.neutrinoproxy.server.base.rest.SystemContextHolder; import org.dromara.neutrinoproxy.server.constant.EnableStatusEnum; import org.dromara.neutrinoproxy.server.constant.ExceptionConstant; -import org.dromara.neutrinoproxy.server.controller.req.system.*; -import org.dromara.neutrinoproxy.server.controller.res.system.*; +import org.dromara.neutrinoproxy.server.controller.req.system.LoginReq; +import org.dromara.neutrinoproxy.server.controller.req.system.UserCreateReq; +import org.dromara.neutrinoproxy.server.controller.req.system.UserInfoReq; +import org.dromara.neutrinoproxy.server.controller.req.system.UserListReq; +import org.dromara.neutrinoproxy.server.controller.req.system.UserUpdateEnableStatusReq; +import org.dromara.neutrinoproxy.server.controller.req.system.UserUpdatePasswordReq; +import org.dromara.neutrinoproxy.server.controller.req.system.UserUpdateReq; +import org.dromara.neutrinoproxy.server.controller.res.system.LoginRes; +import org.dromara.neutrinoproxy.server.controller.res.system.UserCreateRes; +import org.dromara.neutrinoproxy.server.controller.res.system.UserInfoRes; +import org.dromara.neutrinoproxy.server.controller.res.system.UserListRes; +import org.dromara.neutrinoproxy.server.controller.res.system.UserUpdateEnableStatusRes; +import org.dromara.neutrinoproxy.server.controller.res.system.UserUpdatePasswordRes; +import org.dromara.neutrinoproxy.server.controller.res.system.UserUpdateRes; import org.dromara.neutrinoproxy.server.dal.UserLoginRecordMapper; import org.dromara.neutrinoproxy.server.dal.UserMapper; import org.dromara.neutrinoproxy.server.dal.UserTokenMapper; @@ -20,8 +33,6 @@ import org.dromara.neutrinoproxy.server.dal.entity.UserLoginRecordDO; import org.dromara.neutrinoproxy.server.dal.entity.UserTokenDO; import org.dromara.neutrinoproxy.server.util.Md5Util; import org.dromara.neutrinoproxy.server.util.ParamCheckUtil; -import ma.glasnost.orika.MapperFacade; -import org.apache.ibatis.solon.annotation.Db; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; @@ -29,6 +40,7 @@ import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; /** * @@ -38,8 +50,7 @@ import java.util.UUID; @Component public class UserService { private static final String DEFAULT_PASSWORD = "123456"; - @Inject - private MapperFacade mapperFacade; + @Db private UserMapper userMapper; @Db @@ -122,7 +133,7 @@ public class UserService { Page page = userMapper.selectPage(new Page<>(pageQuery.getCurrent(), pageQuery.getSize()), new LambdaQueryWrapper() .orderByAsc(UserDO::getId) ); - List respList = mapperFacade.mapAsList(page.getRecords(), UserListRes.class); + List respList = page.getRecords().stream().map(UserDO::toRes).collect(Collectors.toList()); return PageInfo.of(respList, page); } @@ -131,7 +142,7 @@ public class UserService { .eq(UserDO::getEnable, EnableStatusEnum.ENABLE.getStatus()) .orderByAsc(UserDO::getId) ); - return mapperFacade.mapAsList(userDOList, UserListRes.class); + return userDOList.stream().map(UserDO::toRes).collect(Collectors.toList()); } public UserInfoRes info(UserInfoReq req) { diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/bo/FlowBO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/bo/FlowBO.java index 970a78b8..87d4c924 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/bo/FlowBO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/bo/FlowBO.java @@ -1,6 +1,7 @@ package org.dromara.neutrinoproxy.server.service.bo; import lombok.Data; +import org.dromara.neutrinoproxy.server.controller.res.report.HomeDataView; /** * @author: aoshiguchen @@ -16,4 +17,18 @@ public class FlowBO { * 下行流量字节数 */ private Long downFlowBytes; + + public HomeDataView.TodayFlow todayFlow() { + HomeDataView.TodayFlow todayFlow = new HomeDataView.TodayFlow(); + todayFlow.setUpFlowBytes(upFlowBytes); + todayFlow.setDownFlowBytes(downFlowBytes); + return todayFlow; + } + + public HomeDataView.TotalFlow totalFlow() { + HomeDataView.TotalFlow totalFlow = new HomeDataView.TotalFlow(); + totalFlow.setUpFlowBytes(upFlowBytes); + totalFlow.setDownFlowBytes(downFlowBytes); + return totalFlow; + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/bo/SingleDayFlowBO.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/bo/SingleDayFlowBO.java index cff17909..350bd478 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/bo/SingleDayFlowBO.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/bo/SingleDayFlowBO.java @@ -1,6 +1,7 @@ package org.dromara.neutrinoproxy.server.service.bo; import lombok.Data; +import org.dromara.neutrinoproxy.server.controller.res.report.HomeDataView; import java.util.Date; @@ -23,4 +24,12 @@ public class SingleDayFlowBO { * 下行流量字节数 */ private Long downFlowBytes; + + public HomeDataView.SingleDayFlow toSingleDayFlow() { + HomeDataView.SingleDayFlow singleDayFlow = new HomeDataView.SingleDayFlow(); + singleDayFlow.setDate(date); + singleDayFlow.setUpFlowBytes(upFlowBytes); + singleDayFlow.setDownFlowBytes(downFlowBytes); + return singleDayFlow; + } } diff --git a/neutrino-proxy-server/src/main/resources/app.yml b/neutrino-proxy-server/src/main/resources/app.yml index a8a71f21..d92bd55e 100644 --- a/neutrino-proxy-server/src/main/resources/app.yml +++ b/neutrino-proxy-server/src/main/resources/app.yml @@ -2,6 +2,25 @@ server: # 服务端web端口,用于支持HTTP接口,管理后台页面访问 port: ${WEB_PORT:8888} context-path: /neutrino-proxy-server +solon: + app: + name: neutrino-proxy-server +# aot: +# jvmArguments: --add-opens java.base/java.lang=ALL-UNNAMED +# 日志级别 +solon.logging.appender: + console: + pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %magenta(${PID:-}) --- %-15([%15.15thread]) %-56(%cyan(%-40.40logger{39}%L)) : %msg%n" + file: + enable: false + pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- %-15([%15.15thread]) %-56(%-40.40logger{39}%L) : %msg%n" + name: "logs/${solon.app.name}" + rolling: "logs/${solon.app.name}_%d{yyyy-MM-dd}_%i.log" +solon.logging.logger: + "root": +# level: ${LOG_LEVEL:info} + level: info + neutrino: proxy: @@ -14,9 +33,6 @@ neutrino: read-idle-time: 120 write-idle-time: 20 all-idle-time-seconds: 0 - logger: - # 日志级别 - level: ${LOG_LEVEL:info} # 隧道相关配置-用于维持服务端与客户端的通信 tunnel: # 线程池相关配置,用于技术调优,可忽略 @@ -58,10 +74,10 @@ neutrino: transfer-log-enable: ${SERVER_LOG:false} data: db: - # 数据库类型,目前支持sqlite、mysql、mariadb - type: ${DB_TYPE:sqlite} + # 数据库类型,目前支持h2、mysql、mariadb + type: ${DB_TYPE:h2} # 数据库连接URL - url: ${DB_URL:jdbc:sqlite:data.db} + url: ${DB_URL:jdbc:h2:file:~/.neutrino-proxy/data/db;MODE=MySQL;AUTO_SERVER=TRUE} # 数据库用户名 username: ${DB_USER:} # 数据库密码 diff --git a/neutrino-proxy-server/src/main/resources/logback.xml b/neutrino-proxy-server/src/main/resources/logback.xml deleted file mode 100644 index 005ce00d..00000000 --- a/neutrino-proxy-server/src/main/resources/logback.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - DEBUG - - - ${LOG_PATTERN} - - - - - - ${LOG_FILE} - - ${LOG_FILE}.%d{yyyy-MM-dd}.zip - 7 - - - ${LOG_PATTERN} - - - - - - - - - - - - diff --git a/neutrino-proxy-server/src/main/resources/mapper/ReportMapper.xml b/neutrino-proxy-server/src/main/resources/mapper/ReportMapper.xml index dc894f50..8c4aa5c9 100644 --- a/neutrino-proxy-server/src/main/resources/mapper/ReportMapper.xml +++ b/neutrino-proxy-server/src/main/resources/mapper/ReportMapper.xml @@ -4,16 +4,16 @@ SELECT - l.id AS 'licenseId', - l.name AS 'licenseName', - u.id AS 'userId', - u.name AS 'userName', - SUM(IFNULL(frm.write_bytes,0) + IFNULL(frd.write_bytes,0) + IFNULL(frm2.write_bytes,0)) AS 'upFlowBytes', - SUM(IFNULL(frm.read_bytes,0) + IFNULL(frd.read_bytes,0) + IFNULL(frm2.read_bytes,0)) AS 'downFlowBytes', - IFNULL(SUM(frm.write_bytes),0) monthWriteBytes, - IFNULL(SUM(frm.read_bytes),0) monthReadBytes, - IFNULL(SUM(frd.write_bytes),0) dayWriteBytes, - IFNULL(SUM(frd.read_bytes),0) dayReadBytes, - IFNULL(SUM(frm2.write_bytes),0) minuteWriteBytes, - IFNULL(SUM(frm2.read_bytes),0) minuteReadBytes + l.id AS licenseId, + l.name AS licenseName, + u.id AS userId, + u.name AS userName, + SUM(COALESCE(frm.write_bytes,0) + COALESCE(frd.write_bytes,0) + COALESCE(frm2.write_bytes,0)) AS upFlowBytes, + SUM(COALESCE(frm.read_bytes,0) + COALESCE(frd.read_bytes,0) + COALESCE(frm2.read_bytes,0)) AS downFlowBytes, + COALESCE(SUM(frm.write_bytes),0) monthWriteBytes, + COALESCE(SUM(frm.read_bytes),0) monthReadBytes, + COALESCE(SUM(frd.write_bytes),0) dayWriteBytes, + COALESCE(SUM(frd.read_bytes),0) dayReadBytes, + COALESCE(SUM(frm2.write_bytes),0) minuteWriteBytes, + COALESCE(SUM(frm2.read_bytes),0) minuteReadBytes FROM `license` l LEFT JOIN `user` u ON l.user_id = u.id LEFT JOIN (SELECT license_id,sum(write_bytes) write_bytes,sum(read_bytes) read_bytes from flow_report_month GROUP BY license_id) frm ON l.id = frm.license_id @@ -64,7 +64,7 @@ SELECT T2.user_id, - u.name AS 'userName', + u.name AS userName, T2.license_id, - l.`name` AS 'licenseName', + l.`name` AS licenseName, T2.date, T2.upFlowBytes, T2.downFlowBytes @@ -136,8 +136,8 @@ frm.user_id, frm.license_id, frm.date, - IFNULL(SUM(frm.write_bytes),0) AS 'upFlowBytes', - IFNULL(SUM(frm.read_bytes),0) AS 'downFlowBytes' + COALESCE(SUM(frm.write_bytes),0) AS upFlowBytes, + COALESCE(SUM(frm.read_bytes),0) AS downFlowBytes FROM flow_report_month frm GROUP BY frm.user_id,frm.license_id,frm.date @@ -146,16 +146,16 @@ SELECT T1.user_id, T1.license_id, - #{curMonthBeginDate} AS 'date', - IFNULL(SUM(T1.upFlowBytes),0) AS 'upFlowBytes', - IFNULL(SUM(T1.downFlowBytes),0) AS 'downFlowBytes' + #{curMonthBeginDate} AS date, + COALESCE(SUM(T1.upFlowBytes),0) AS upFlowBytes, + COALESCE(SUM(T1.downFlowBytes),0) AS downFlowBytes FROM ( SELECT frd.user_id, frd.license_id, - frd.write_bytes AS 'upFlowBytes', - frd.read_bytes AS 'downFlowBytes', + frd.write_bytes AS upFlowBytes, + frd.read_bytes AS downFlowBytes, frd.date FROM flow_report_day frd WHERE frd.date >= #{curMonthBeginDate} AND frd.date <= #{curDayBeginDate} @@ -165,9 +165,9 @@ SELECT frm.user_id, frm.license_id, - IFNULL(SUM(frm.write_bytes),0) AS 'upFlowBytes', - IFNULL(SUM(frm.read_bytes),0) AS 'downFlowBytes', - #{curDayBeginDate} AS 'date' + COALESCE(SUM(frm.write_bytes),0) AS upFlowBytes, + COALESCE(SUM(frm.read_bytes),0) AS downFlowBytes, + #{curDayBeginDate} AS date FROM flow_report_minute frm WHERE frm.date >= #{curDayBeginDate} AND frm.date <= #{curDate} GROUP BY frm.user_id,frm.license_id @@ -191,35 +191,35 @@