mirror of
https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network.git
synced 2026-02-04 15:05:54 +08:00
Compare commits
8 Commits
17306c348a
...
ca87968469
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca87968469 | ||
|
|
903ba88787 | ||
|
|
0505d6d201 | ||
|
|
556cb3fd1b | ||
|
|
ddb709c3a8 | ||
|
|
9cd85abe1d | ||
|
|
664bafdc86 | ||
|
|
3b9379a7aa |
@@ -10,8 +10,8 @@ mvn native:build -Pnative
|
||||
### 构建docker镜像
|
||||
|
||||
```shell
|
||||
docker build -t docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-native-SNAPSHOT_latest -f Native-Dockerfile .
|
||||
docker push docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-native-SNAPSHOT_latest
|
||||
docker build -t docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-NATIVE-SNAPSHOT_latest -f Native-Dockerfile .
|
||||
docker push docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-NATIVE-SNAPSHOT_latest
|
||||
```
|
||||
|
||||
## BUILD IMAGE
|
||||
|
||||
@@ -25,12 +25,14 @@ public class NettyHttpClientProxyClientRealHandler extends SimpleChannelInboundH
|
||||
log.debug("客户端代理客户端,接收目标客户端真实服务数据:{}", new String(bytes));
|
||||
String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel());
|
||||
String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel());
|
||||
Integer visitorPort = ChannelAttributeKeyUtils.getVisitorPort(ctx.channel());
|
||||
// 访客通信通道 上报服务端代理完成
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(ctx.channel());
|
||||
NettyProxyMsg returnMessage = new NettyProxyMsg();
|
||||
returnMessage.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_);
|
||||
returnMessage.setVisitorId(visitorId);
|
||||
returnMessage.setClientId(clientId);
|
||||
returnMessage.setVisitorPort(visitorPort);
|
||||
returnMessage.setData(bytes);
|
||||
|
||||
nextChannel.writeAndFlush(returnMessage);
|
||||
|
||||
@@ -28,8 +28,8 @@ public class NettyHttpClientProxyClientRealSocket {
|
||||
|
||||
|
||||
public static void buildRealServer(String clientId,
|
||||
String clientTargetIp,
|
||||
Integer clientTargetPort,
|
||||
String targetIp,
|
||||
Integer targetPort,
|
||||
String visitorId,
|
||||
NettyClientProperties nettyClientProperties,
|
||||
List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList) {
|
||||
@@ -52,25 +52,26 @@ public class NettyHttpClientProxyClientRealSocket {
|
||||
;
|
||||
|
||||
|
||||
bootstrap.connect(clientTargetIp, clientTargetPort).addListener((ChannelFutureListener) future -> {
|
||||
bootstrap.connect(targetIp, targetPort).addListener((ChannelFutureListener) future -> {
|
||||
if (future.isSuccess()) {
|
||||
// 客户端链接真实服务成功 设置自动读写false 等待访客连接成功后设置成true
|
||||
Channel realChannel = future.channel();
|
||||
// realChannel.config().setOption(ChannelOption.AUTO_READ, false);
|
||||
|
||||
log.info("访客通过 客户端:【{}】,visitorId:{},绑定本地服务,IP:{},端口:{} 新建通道成功", clientId, visitorId, clientTargetIp, clientTargetPort);
|
||||
log.info("访客通过 客户端:【{}】,visitorId:{},绑定本地服务,IP:{},端口:{} 新建通道成功", clientId, visitorId, targetIp, targetPort);
|
||||
// 客户端真实通道
|
||||
NettyRealIdContext.pushReal(realChannel, visitorId);
|
||||
// 绑定访客ID到当前真实通道属性
|
||||
ChannelAttributeKeyUtils.buildVisitorId(realChannel, visitorId);
|
||||
ChannelAttributeKeyUtils.buildClientId(realChannel, clientId);
|
||||
ChannelAttributeKeyUtils.buildVisitorPort(realChannel, targetPort);
|
||||
|
||||
// 连接服务端 然后绑定通道
|
||||
// 新建一个通道处理
|
||||
newVisitorConnect2Server(
|
||||
clientId,
|
||||
clientTargetIp,
|
||||
clientTargetPort,
|
||||
targetIp,
|
||||
targetPort,
|
||||
visitorId,
|
||||
realChannel,
|
||||
nettyClientProperties,
|
||||
@@ -79,7 +80,7 @@ public class NettyHttpClientProxyClientRealSocket {
|
||||
|
||||
|
||||
} else {
|
||||
log.error("客户:【{}】,无法连接当前网络内的目标IP:【{}】,目标端口:【{}】", clientId, clientTargetIp, clientTargetPort);
|
||||
log.error("客户:【{}】,无法连接当前网络内的目标IP:【{}】,目标端口:【{}】", clientId, targetIp, targetPort);
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
|
||||
@@ -72,7 +72,7 @@ public class NettyHttpClientProxyServerProxySocket {
|
||||
if (futureListener.isSuccess()) {
|
||||
|
||||
NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
|
||||
nettyProxyMsg.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_);
|
||||
nettyProxyMsg.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_);
|
||||
// other clientId
|
||||
nettyProxyMsg.setClientId(clientId);
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ public class NettySocksClientProxyServerSocket {
|
||||
nettyProxyMsg.setClientTargetIp(targetIp);
|
||||
nettyProxyMsg.setClientTargetPort(targetPort);
|
||||
|
||||
nettyProxyMsg.setClientId(clientId);
|
||||
nettyProxyMsg.setVisitorId(visitorId);
|
||||
nettyProxyMsg.setData(new byte[]{socks5AddressTypeByteValue});
|
||||
transferChannel.writeAndFlush(nettyProxyMsg);
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.adapter;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.HandleChannelFlowAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.ChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.HandleChannelProxyFlowAdvanced;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.LinkedBlockingDeque;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 通道流量适配器
|
||||
*
|
||||
* @see HandleChannelFlowAdvanced
|
||||
*/
|
||||
@Slf4j
|
||||
public class ChannelProxyFlowAdapter {
|
||||
|
||||
|
||||
ThreadPoolExecutor CHANNEL_FLOW_ADAPTER_EXECUTOR =
|
||||
new ThreadPoolExecutor(20, 200, 3L, TimeUnit.MINUTES,
|
||||
new LinkedBlockingDeque<>(500),new ThreadPoolExecutor.AbortPolicy());
|
||||
// 线程使用完后使用主线程执行
|
||||
|
||||
|
||||
|
||||
protected final List<HandleChannelProxyFlowAdvanced> handleChannelProxyFlowAdvancedList;
|
||||
|
||||
public ChannelProxyFlowAdapter(List<HandleChannelProxyFlowAdvanced> handleChannelProxyFlowAdvancedList) {
|
||||
this.handleChannelProxyFlowAdvancedList = handleChannelProxyFlowAdvancedList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param channelProxyFlow 通道数据
|
||||
*/
|
||||
public void handler(Channel channel, ChannelProxyFlow channelProxyFlow) {
|
||||
for (HandleChannelProxyFlowAdvanced handleChannelProxyFlowAdvanced : handleChannelProxyFlowAdvancedList) {
|
||||
if (handleChannelProxyFlowAdvanced.support(channelProxyFlow)) {
|
||||
try {
|
||||
handleChannelProxyFlowAdvanced.handler(channel, channelProxyFlow);
|
||||
} catch (Exception e) {
|
||||
log.error("流量统计失败:{}", e.getMessage());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步处理当前数据
|
||||
*
|
||||
* @param channelProxyFlow 通道数据
|
||||
*/
|
||||
public void asyncHandler(Channel channel, ChannelProxyFlow channelProxyFlow) {
|
||||
// TODO 流量并发异常
|
||||
CHANNEL_FLOW_ADAPTER_EXECUTOR.submit(() -> handler(channel, channelProxyFlow));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
|
||||
/**
|
||||
* 处理通道流量适配者 抽象类
|
||||
*
|
||||
* @see HandleChannelProxyFlowAdvanced
|
||||
*/
|
||||
public abstract class AbstractHandleChannelProxyFlowAdvanced implements HandleChannelProxyFlowAdvanced {
|
||||
|
||||
/**
|
||||
* 是否支持当前这种类型
|
||||
*
|
||||
* @param channelProxyFlow 数据
|
||||
* @return boolean
|
||||
*/
|
||||
@Override
|
||||
public boolean support(ChannelProxyFlow channelProxyFlow) {
|
||||
return doSupport(channelProxyFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理是否支持这种类型
|
||||
*
|
||||
* @param channelProxyFlow 数据
|
||||
* @return boolean
|
||||
*/
|
||||
protected abstract boolean doSupport(ChannelProxyFlow channelProxyFlow);
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param channel 当前通道
|
||||
* @param channelProxyFlow 通道数据
|
||||
*/
|
||||
@Override
|
||||
public void handler(Channel channel, ChannelProxyFlow channelProxyFlow) {
|
||||
doHandler(channel, channelProxyFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param channel 当前通道
|
||||
* @param channelProxyFlow 通道数据
|
||||
*/
|
||||
protected abstract void doHandler(Channel channel, ChannelProxyFlow channelProxyFlow);
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
public interface ChannelProxyFlow {
|
||||
|
||||
/**
|
||||
* 通道客户端ID
|
||||
*
|
||||
* @return 通道客户端ID
|
||||
*/
|
||||
String clientId();
|
||||
|
||||
/**
|
||||
* ip
|
||||
* @return ip
|
||||
*/
|
||||
String ip();
|
||||
|
||||
/**
|
||||
* 通道使用的端口(服务端访客端口、客户端真实端口)
|
||||
*
|
||||
* @return 端口
|
||||
*/
|
||||
Integer port();
|
||||
|
||||
/**
|
||||
* 通道流量类型
|
||||
*
|
||||
* @return ChannelFlowEnum
|
||||
* @see ChannelFlowEnum
|
||||
*/
|
||||
ChannelFlowEnum channelFlowEnum();
|
||||
|
||||
/**
|
||||
* 代理流量类型
|
||||
* @see ChannelProtocolType
|
||||
*/
|
||||
ChannelProtocolType channelProtocolType();
|
||||
|
||||
/**
|
||||
* 代理类型
|
||||
* @see ChannelProxyType
|
||||
*/
|
||||
ChannelProxyType channelProxyType();
|
||||
|
||||
/**
|
||||
* 流量
|
||||
*
|
||||
* @return 流量
|
||||
*/
|
||||
Integer flow();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
|
||||
/**
|
||||
* 处理通道流量适配者
|
||||
*/
|
||||
public interface HandleChannelProxyFlowAdvanced {
|
||||
|
||||
/**
|
||||
* 是否支持当前这种类型
|
||||
*
|
||||
* @param channelProxyFlow 数据
|
||||
* @return boolean
|
||||
*/
|
||||
boolean support(ChannelProxyFlow channelProxyFlow);
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param channel 当前通道
|
||||
* @param channelProxyFlow 通道数据
|
||||
*/
|
||||
void handler(Channel channel, ChannelProxyFlow channelProxyFlow);
|
||||
}
|
||||
@@ -201,6 +201,24 @@ public class NettyProxyMsg {
|
||||
return new String(clientTargetPort, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取访客ID
|
||||
* @return
|
||||
*/
|
||||
public String getVisitorIdString() {
|
||||
if (ObjectUtils.isEmpty(visitorId)) {
|
||||
return null;
|
||||
}
|
||||
return new String(visitorId, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
public Integer getVisitorPortInt() {
|
||||
if (ObjectUtils.isEmpty(visitorPort)) {
|
||||
return null;
|
||||
}
|
||||
return Integer.valueOf(new String(visitorPort, StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
public void setClientTargetIp(byte[] clientTargetIp) {
|
||||
this.clientTargetIp = clientTargetIp;
|
||||
}
|
||||
@@ -253,4 +271,6 @@ public class NettyProxyMsg {
|
||||
public void setIsSsl(byte isSsl) {
|
||||
this.isSsl = isSsl;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
|
||||
|
||||
public abstract class AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||
|
||||
|
||||
/**
|
||||
* 是否支持当前类型
|
||||
*
|
||||
* @param nettyProxyMsg 通道数据
|
||||
* @return 布尔类型 是、否
|
||||
*/
|
||||
@Override
|
||||
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||
return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType();
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeE
|
||||
* 服务端处理客户端上报的代理请求数据
|
||||
* @param <MSG>
|
||||
*/
|
||||
public abstract class AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||
public abstract class AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||
|
||||
|
||||
/**
|
||||
@@ -20,6 +20,6 @@ public abstract class AbstractHandleHttpReportClientProxyServerTransferTypeAdvan
|
||||
*/
|
||||
@Override
|
||||
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||
return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_.getTypeByte() == nettyProxyMsg.getType();
|
||||
return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
|
||||
|
||||
/**
|
||||
* 服务端处理客户端上报的代理请求数据
|
||||
* @param <MSG>
|
||||
*/
|
||||
public abstract class AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||
|
||||
|
||||
/**
|
||||
* 是否支持当前类型
|
||||
*
|
||||
* @param nettyProxyMsg 通道数据
|
||||
* @return 布尔类型 是、否
|
||||
*/
|
||||
@Override
|
||||
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||
return ProxyMessageTypeEnums.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_.getTypeByte() == nettyProxyMsg.getType();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
|
||||
|
||||
public abstract class AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||
|
||||
|
||||
/**
|
||||
* 是否支持当前类型
|
||||
*
|
||||
* @param nettyProxyMsg 通道数据
|
||||
* @return 布尔类型 是、否
|
||||
*/
|
||||
@Override
|
||||
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||
return ProxyMessageTypeEnums.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_.getTypeByte() == nettyProxyMsg.getType();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
|
||||
|
||||
public abstract class AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||
|
||||
|
||||
/**
|
||||
* 是否支持当前类型
|
||||
*
|
||||
* @param nettyProxyMsg 通道数据
|
||||
* @return 布尔类型 是、否
|
||||
*/
|
||||
@Override
|
||||
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||
return ProxyMessageTypeEnums.SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType();
|
||||
}
|
||||
}
|
||||
@@ -42,19 +42,29 @@ public class ProxyMessageType {
|
||||
*/
|
||||
public static final byte HTTP_CLIENT_PROXY_SERVER_ = HTTP_CLIENT_PROXY_CLIENT_ + 1;
|
||||
/**
|
||||
* http 远程服务端代理传输数据上报
|
||||
* http 远程服务端代理传输数据上报请求
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_
|
||||
* @see AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced
|
||||
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_
|
||||
* @see AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced
|
||||
*/
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_ = HTTP_CLIENT_PROXY_SERVER_ + 1;
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ = HTTP_CLIENT_PROXY_SERVER_ + 1;
|
||||
|
||||
/**
|
||||
* http 远程服务端代理传输数据上报请求结果
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
|
||||
* @see AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced
|
||||
*/
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_ = HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ + 1;
|
||||
|
||||
|
||||
/**
|
||||
* http 远程代理服务通道关闭
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_
|
||||
* @see AbstractHandleHttpReportClientProxyServerTransferCloseTypeAdvanced
|
||||
*/
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_ + 1;
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_ + 1;
|
||||
|
||||
|
||||
/**
|
||||
@@ -74,6 +84,14 @@ public class ProxyMessageType {
|
||||
*/
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_ + 1;
|
||||
|
||||
/**
|
||||
* http 另一个客户端将返回数据通过传输通道返回
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_
|
||||
* @see AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced
|
||||
*/
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ + 1;
|
||||
|
||||
|
||||
/**
|
||||
* http 另一个客户端将返回数据通过传输通道返回
|
||||
@@ -81,7 +99,7 @@ public class ProxyMessageType {
|
||||
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_
|
||||
* @see AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced
|
||||
*/
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CHANNEL_INIT_SUCCESSFUL_ + 1;
|
||||
public static final byte HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ = HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ + 1;
|
||||
|
||||
/**
|
||||
* 上报传输通道关闭
|
||||
@@ -165,6 +183,14 @@ public class ProxyMessageType {
|
||||
*/
|
||||
public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CONNECTION_ + 1;
|
||||
|
||||
/**
|
||||
* socket 上报客户端代理服务端结果
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
|
||||
* @see AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced
|
||||
*/
|
||||
public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ + 1;
|
||||
|
||||
|
||||
/**
|
||||
* socket 上报客户端代理服务端传输通道关闭
|
||||
@@ -172,7 +198,7 @@ public class ProxyMessageType {
|
||||
* @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_
|
||||
* @see AbstractHandleSocksReportClientProxyServerTransferCloseTypeAdvanced
|
||||
*/
|
||||
public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_ + 1;
|
||||
public static final byte SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_ + 1;
|
||||
|
||||
|
||||
|
||||
@@ -253,13 +279,21 @@ public class ProxyMessageType {
|
||||
public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_CONNECTION_SUCCESS_ = SOCKS_SERVER_PROXY_CLIENT_ + 1;
|
||||
|
||||
|
||||
/**
|
||||
* socket 上报客户端代理服务端 请求
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_
|
||||
* @see AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced
|
||||
*/
|
||||
public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_ = SOCKS_REPORT_SERVER_PROXY_CLIENT_CONNECTION_SUCCESS_ + 1;
|
||||
|
||||
/**
|
||||
* socket 上报客户端代理服务端 结果返回
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_RESPONSE_
|
||||
* @see AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced
|
||||
*/
|
||||
public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_RESPONSE_ = SOCKS_REPORT_SERVER_PROXY_CLIENT_CONNECTION_SUCCESS_ + 1;
|
||||
public static final byte SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_RESPONSE_ = SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_ + 1;
|
||||
|
||||
/**
|
||||
* socket 上报客户端代理服务端 传输通道关闭
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 代理流量类型
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum ChannelProtocolType {
|
||||
|
||||
// HTTP
|
||||
HTTP,
|
||||
// Socks
|
||||
SOCKS
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.common.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 代理类型
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum ChannelProxyType {
|
||||
|
||||
SERVER_PROXY_SERVER("服务端代理服务端"),
|
||||
SERVER_PROXY_CLIENT("服务端远程客户端"),
|
||||
CLIENT_PROXY_CLIENT("客户端远程客户端"),
|
||||
CLIENT_PROXY_SEVER("客户端远程服务端");
|
||||
|
||||
private final String desc;
|
||||
}
|
||||
@@ -40,9 +40,16 @@ public enum ProxyMessageTypeEnums {
|
||||
HTTP_CLIENT_PROXY_SERVER_(ProxyMessageType.HTTP_CLIENT_PROXY_SERVER_, "http远程服务端代理"),
|
||||
/**
|
||||
* http 远程服务端代理传输数据上报
|
||||
* @see AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced
|
||||
* @see AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced
|
||||
*/
|
||||
HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_, "http远程服务端代理传输数据上报"),
|
||||
HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_, "远程服务端代理传输数据上报请求"),
|
||||
/**
|
||||
* http 远程服务端代理传输数据上报请求结果
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
|
||||
* @see AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced
|
||||
*/
|
||||
HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_, "远程服务端代理传输数据上报请求结果"),
|
||||
/**
|
||||
* http 远程服务端代理传输数据下发
|
||||
* @see AbstractHandleHttpDistributeClientProxyServerTransferTypeAdvanced
|
||||
@@ -103,6 +110,14 @@ public enum ProxyMessageTypeEnums {
|
||||
* @see AbstractHandleHttpDistributeClientProxyClientTransferRequestTypeAdvanced
|
||||
*/
|
||||
HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_, "http 下发数据到另一个客户端"),
|
||||
|
||||
/**
|
||||
* http 另一个客户端将返回数据通过传输通道 请求
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_
|
||||
* @see AbstractHandleHttpReportClientProxyClientTransferRequestTypeAdvanced
|
||||
*/
|
||||
HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_, "http 另一个客户端将返回数据通过传输通道请求"),
|
||||
/**
|
||||
* http 另一个客户端将返回数据通过传输通道返回
|
||||
*
|
||||
@@ -214,6 +229,13 @@ public enum ProxyMessageTypeEnums {
|
||||
* @see AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced
|
||||
*/
|
||||
SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_, "socket 上报客户端代理服务端请求"),
|
||||
/**
|
||||
* socket 上报客户端代理服务端结果
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
|
||||
* @see AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced
|
||||
*/
|
||||
SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_, "socket 上报客户端代理服务端结果"),
|
||||
/**
|
||||
* socket 下发客户端代理服务端数据返回
|
||||
*
|
||||
@@ -344,6 +366,14 @@ public enum ProxyMessageTypeEnums {
|
||||
* @see AbstractHandleSocksDistributeServerProxyClientRequestTypeAdvanced
|
||||
*/
|
||||
SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_, "socket 下发客户端代理服务端 请求数据"),
|
||||
/**
|
||||
* socket 上报客户端代理服务端 请求
|
||||
*
|
||||
* @see ProxyMessageTypeEnums#SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_
|
||||
* @see AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced
|
||||
*/
|
||||
SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_, "socket 上报客户端代理服务端 请求"),
|
||||
|
||||
/**
|
||||
* socket 上报客户端代理服务端 结果返回
|
||||
*
|
||||
|
||||
@@ -16,6 +16,9 @@ public class ChannelAttributeKeyUtils {
|
||||
private static final AttributeKey<String> APP_KEY = AttributeKey.newInstance("appKey");
|
||||
private static final AttributeKey<String> APP_SECRET = AttributeKey.newInstance("appSecret");
|
||||
private static final AttributeKey<String> ORIGINAL_IP = AttributeKey.newInstance("originalIp");
|
||||
private static final AttributeKey<String> TARGET_IP = AttributeKey.newInstance("targetIp");
|
||||
private static final AttributeKey<Integer> TARGET_PORT = AttributeKey.newInstance("targetPort");
|
||||
private static final AttributeKey<String> TARGET_CLIENT_ID = AttributeKey.newInstance("targetClientId");
|
||||
private static final AttributeKey<Integer> OUT_FLOW = AttributeKey.newInstance("outFlow");
|
||||
private static final AttributeKey<Integer> IN_FLOW = AttributeKey.newInstance("inFlow");
|
||||
|
||||
@@ -85,6 +88,36 @@ public class ChannelAttributeKeyUtils {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 为通道绑定 访客属性
|
||||
*
|
||||
* @param channel 通道
|
||||
* @param targetClientId 客户端ID
|
||||
*/
|
||||
public static void buildTargetClientId(Channel channel, byte[] targetClientId) {
|
||||
channel.attr(TARGET_CLIENT_ID).set(new String(targetClientId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 为通道绑定 访客属性
|
||||
*
|
||||
* @param channel 通道
|
||||
* @param targetClientId 客户端ID
|
||||
*/
|
||||
public static void buildTargetClientId(Channel channel, String targetClientId) {
|
||||
channel.attr(TARGET_CLIENT_ID).set(targetClientId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 通道中访客ID
|
||||
*
|
||||
* @param channel 通道
|
||||
*/
|
||||
public static String getTargetClientId(Channel channel) {
|
||||
return channel.attr(TARGET_CLIENT_ID).get();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 为通道绑定 出口流量
|
||||
*
|
||||
@@ -259,6 +292,45 @@ public class ChannelAttributeKeyUtils {
|
||||
return channel.attr(ORIGINAL_IP).get();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 为通道绑定 目标IP
|
||||
*
|
||||
* @param channel 通道
|
||||
* @param targetIp 目标IP
|
||||
*/
|
||||
public static void buildTargetIp(Channel channel, String targetIp) {
|
||||
channel.attr(TARGET_IP).set(targetIp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 通道中 目标IP
|
||||
*
|
||||
* @param channel 通道
|
||||
*/
|
||||
public static String getTargetIp(Channel channel) {
|
||||
return channel.attr(TARGET_IP).get();
|
||||
}
|
||||
|
||||
/**
|
||||
* 为通道绑定 目标端口
|
||||
*
|
||||
* @param channel 通道
|
||||
* @param targetIp 目标端口
|
||||
*/
|
||||
public static void buildTargetPort(Channel channel, Integer targetPort) {
|
||||
channel.attr(TARGET_PORT).set(targetPort);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 通道中 目标端口
|
||||
*
|
||||
* @param channel 通道
|
||||
*/
|
||||
public static Integer getTargetPort(Channel channel) {
|
||||
return channel.attr(TARGET_PORT).get();
|
||||
}
|
||||
|
||||
/**
|
||||
* 为通道绑定 请求地址类型
|
||||
*
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.framework.lazy.cloud.network.heartbeat.server.config;
|
||||
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.permeate.tcp.advanced.*;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.permeate.udp.advanced.*;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advanced.*;
|
||||
@@ -202,18 +203,24 @@ public class ServerAutoConfiguration {
|
||||
@Configuration()
|
||||
static class ServerHttpProxyConfiguration {
|
||||
@Bean
|
||||
public ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferTypeAdvanced() {
|
||||
return new ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced();
|
||||
public ServerHandleHttpReportClientProxyServerTransferRequestTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleHttpReportClientProxyServerTransferRequestTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerHandleHttpReportClientProxyServerTransferResponseTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleHttpReportClientProxyServerTransferResponseTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
|
||||
@Bean
|
||||
public ServerHandleHttpReportClientProxyServerTransferCloseTypeAdvanced serverHandleHttpReportClientProxyServerTransferCloseTypeAdvanced() {
|
||||
return new ServerHandleHttpReportClientProxyServerTransferCloseTypeAdvanced();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced serverHandleHttpReportClientProxyClientConnectTransferTypeAdvanced() {
|
||||
return new ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced();
|
||||
public ServerHandleHttpReportClientProxyClientTransferRequestTypeAdvanced serverHandleHttpReportClientProxyClientConnectTransferTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleHttpReportClientProxyClientTransferRequestTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -222,8 +229,8 @@ public class ServerAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced serverHandleHttpReportClientProxyClientTransferResponseTypeAdvanced() {
|
||||
return new ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced();
|
||||
public ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced serverHandleHttpReportClientProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
@Bean
|
||||
public ServerHandleHttpReportServerProxyClientTransferTypeAdvanced serverHandleHttpReportClientProxyServerProxyTransferTypeAdvanced1() {
|
||||
@@ -235,13 +242,13 @@ public class ServerAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced serverHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced() {
|
||||
return new ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced();
|
||||
public ServerHandleHttpReportServerProxyClientTransferRequestTypeAdvanced serverHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleHttpReportServerProxyClientTransferRequestTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced serverHandleHttpReportServerProxyClientTransferResponseTypeAdvanced() {
|
||||
return new ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced();
|
||||
public ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced serverHandleHttpReportServerProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -261,8 +268,13 @@ public class ServerAutoConfiguration {
|
||||
return new ServerHandleSocksReportClientProxyServerTransferCloseTypeAdvanced();
|
||||
}
|
||||
@Bean
|
||||
public ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced serverHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(){
|
||||
return new ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced();
|
||||
public ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced serverHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerHandleSocksReportClientProxyServerTransferResponseTypeAdvanced serverHandleSocksReportClientProxyServerTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleSocksReportClientProxyServerTransferResponseTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -276,8 +288,8 @@ public class ServerAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced serverHandleSocksReportClientProxyClientTransferRequestTypeAdvanced() {
|
||||
return new ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced();
|
||||
public ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced serverHandleSocksReportClientProxyClientTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
return new ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -285,8 +297,8 @@ public class ServerAutoConfiguration {
|
||||
return new ServerHandleSocksReportClientProxyClientOtherConnectionTransferSuccessTypeAdvanced();
|
||||
}
|
||||
@Bean
|
||||
public ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced serverHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(){
|
||||
return new ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced();
|
||||
public ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced serverHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter){
|
||||
return new ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -300,8 +312,12 @@ public class ServerAutoConfiguration {
|
||||
return new ServerHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanced();
|
||||
}
|
||||
@Bean
|
||||
public ServerHandleSocksReportServerProxyClientResponseTypeAdvanced serverHandleSocksReportServerProxyClientResponseTypeAdvanced(){
|
||||
return new ServerHandleSocksReportServerProxyClientResponseTypeAdvanced();
|
||||
public ServerHandleSocksReportServerProxyClientResponseTypeAdvanced serverHandleSocksReportServerProxyClientResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter){
|
||||
return new ServerHandleSocksReportServerProxyClientResponseTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
@Bean
|
||||
public ServerHandleSocksReportServerProxyClientRequestTypeAdvanced serverHandleSocksReportServerProxyClientRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter){
|
||||
return new ServerHandleSocksReportServerProxyClientRequestTypeAdvanced(channelProxyFlowAdapter);
|
||||
}
|
||||
@Bean
|
||||
public ServerHandleSocksReportServerProxyClientTransferCloseTypeAdvanced serverHandleSocksReportServerProxyClientTransferCloseTypeAdvanced(){
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.config;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.HandleChannelProxyFlowAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.ServerHandlerInFlowHandler;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerHandlerInProxyFlowHandler;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.ServerHandlerOutFlowHandler;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerHandlerOutProxyFlowHandler;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
@@ -55,4 +60,43 @@ public class ServerFlowConfiguration {
|
||||
return new ChannelFlowAdapter(handleChannelFlowAdvancedList);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 进口数据处理
|
||||
*
|
||||
* @return serverHandlerInProxyFlowHandler
|
||||
*/
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@Bean
|
||||
public ServerHandlerInProxyFlowHandler serverHandlerInProxyFlowHandler(LazyProxyFlowApplication lazyProxyFlowApplication,ServerNodeProperties serverNodeProperties) {
|
||||
return new ServerHandlerInProxyFlowHandler(lazyProxyFlowApplication,serverNodeProperties);
|
||||
}
|
||||
|
||||
/**
|
||||
* 出口数据处理
|
||||
*
|
||||
* @return serverHandlerOutProxyFlowHandler
|
||||
*/
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@Bean
|
||||
public ServerHandlerOutProxyFlowHandler serverHandlerOutProxyFlowHandler(LazyProxyFlowApplication lazyProxyFlowApplication, ServerNodeProperties serverNodeProperties) {
|
||||
return new ServerHandlerOutProxyFlowHandler(lazyProxyFlowApplication,serverNodeProperties);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 服务端流量适配器
|
||||
*
|
||||
* @param handleChannelProxyFlowAdvancedList 服务端流量适配者
|
||||
* @return 服务端流量适配器
|
||||
*/
|
||||
@ConditionalOnMissingBean(ChannelProxyFlowAdapter.class)
|
||||
@Bean
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
public ChannelProxyFlowAdapter channelProxyFlowAdapter(List<HandleChannelProxyFlowAdvanced> handleChannelProxyFlowAdvancedList) {
|
||||
return new ChannelProxyFlowAdapter(handleChannelProxyFlowAdvancedList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.ChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
public class ServerChannelProxyFlow implements ChannelProxyFlow {
|
||||
private String clientId;
|
||||
private String ip;
|
||||
private Integer port;
|
||||
private ChannelFlowEnum channelFlowEnum;
|
||||
private ChannelProtocolType channelProtocolType;
|
||||
private ChannelProxyType channelProxyType;
|
||||
private Integer flow;
|
||||
|
||||
/**
|
||||
* 通道客户端ID
|
||||
*
|
||||
* @return 通道客户端ID
|
||||
*/
|
||||
@Override
|
||||
public String clientId() {
|
||||
return clientId;
|
||||
}
|
||||
|
||||
/**
|
||||
* ip
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String ip() {
|
||||
return ip;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通道使用的端口(服务端访客端口、客户端真实端口)
|
||||
*
|
||||
* @return 端口
|
||||
*/
|
||||
@Override
|
||||
public Integer port() {
|
||||
return port;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通道流量类型
|
||||
*
|
||||
* @return ChannelFlowEnum
|
||||
* @see ChannelFlowEnum
|
||||
*/
|
||||
@Override
|
||||
public ChannelFlowEnum channelFlowEnum() {
|
||||
return channelFlowEnum;
|
||||
}
|
||||
|
||||
/**
|
||||
* 代理流量类型
|
||||
*
|
||||
* @see ChannelProtocolType
|
||||
*/
|
||||
@Override
|
||||
public ChannelProtocolType channelProtocolType() {
|
||||
return channelProtocolType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 代理类型
|
||||
*
|
||||
* @see ChannelProxyType
|
||||
*/
|
||||
@Override
|
||||
public ChannelProxyType channelProxyType() {
|
||||
return channelProxyType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 流量
|
||||
*
|
||||
* @return 流量
|
||||
*/
|
||||
@Override
|
||||
public Integer flow() {
|
||||
return flow;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.AbstractHandleChannelProxyFlowAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.ChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowStoryCommand;
|
||||
|
||||
/**
|
||||
* 进口流量处理
|
||||
*/
|
||||
public class ServerHandlerInProxyFlowHandler extends AbstractHandleChannelProxyFlowAdvanced {
|
||||
|
||||
private final LazyProxyFlowApplication lazyProxyFlowApplication;
|
||||
private final ServerNodeProperties serverNodeProperties;
|
||||
|
||||
public ServerHandlerInProxyFlowHandler(LazyProxyFlowApplication lazyProxyFlowApplication, ServerNodeProperties serverNodeProperties) {
|
||||
this.lazyProxyFlowApplication = lazyProxyFlowApplication;
|
||||
this.serverNodeProperties = serverNodeProperties;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理是否支持这种类型
|
||||
*
|
||||
* @param channelProxyFlow 数据
|
||||
* @return boolean
|
||||
*/
|
||||
@Override
|
||||
protected boolean doSupport(ChannelProxyFlow channelProxyFlow) {
|
||||
if (serverNodeProperties.getEnableFlowControl()) {
|
||||
return ChannelFlowEnum.IN_FLOW.equals(channelProxyFlow.channelFlowEnum());
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param channel 当前通道
|
||||
* @param channelProxyFlow 通道数据
|
||||
*/
|
||||
@Override
|
||||
protected void doHandler(Channel channel, ChannelProxyFlow channelProxyFlow) {
|
||||
String clientId = channelProxyFlow.clientId();
|
||||
String ip = channelProxyFlow.ip();
|
||||
Integer port = channelProxyFlow.port();
|
||||
Integer flow = channelProxyFlow.flow();
|
||||
ChannelProtocolType channelProtocolType = channelProxyFlow.channelProtocolType();
|
||||
ChannelProxyType channelProxyType = channelProxyFlow.channelProxyType();
|
||||
|
||||
// TODO
|
||||
// 进口流量处理
|
||||
LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand = new LazyProxyFlowStoryCommand();
|
||||
lazyProxyFlowStoryCommand.setInFlow(flow);
|
||||
lazyProxyFlowStoryCommand.setClientId(clientId);
|
||||
lazyProxyFlowStoryCommand.setIp(ip);
|
||||
lazyProxyFlowStoryCommand.setPort(port);
|
||||
lazyProxyFlowStoryCommand.setProtocolType(channelProtocolType);
|
||||
lazyProxyFlowStoryCommand.setProxyType(channelProxyType);
|
||||
|
||||
lazyProxyFlowStoryCommand.setIsDeleted(false);
|
||||
lazyProxyFlowApplication.flowIncreaseStory(lazyProxyFlowStoryCommand);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.AbstractHandleChannelProxyFlowAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.ChannelFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.proxy.ChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowStoryCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.flow.LazyVisitorPortFlowStoryCommand;
|
||||
|
||||
/**
|
||||
* 出口流量处理
|
||||
*/
|
||||
public class ServerHandlerOutProxyFlowHandler extends AbstractHandleChannelProxyFlowAdvanced {
|
||||
private final LazyProxyFlowApplication lazyProxyFlowApplication;
|
||||
private final ServerNodeProperties serverNodeProperties;
|
||||
|
||||
public ServerHandlerOutProxyFlowHandler(LazyProxyFlowApplication lazyProxyFlowApplication, ServerNodeProperties serverNodeProperties) {
|
||||
this.lazyProxyFlowApplication = lazyProxyFlowApplication;
|
||||
this.serverNodeProperties = serverNodeProperties;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理是否支持这种类型
|
||||
*
|
||||
* @param channelProxyFlow 数据
|
||||
* @return boolean
|
||||
*/
|
||||
@Override
|
||||
protected boolean doSupport(ChannelProxyFlow channelProxyFlow) {
|
||||
if (serverNodeProperties.getEnableFlowControl()) {
|
||||
return ChannelFlowEnum.OUT_FLOW.equals(channelProxyFlow.channelFlowEnum());
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param channel 当前通道
|
||||
* @param channelProxyFlow 通道数据
|
||||
*/
|
||||
@Override
|
||||
protected void doHandler(Channel channel, ChannelProxyFlow channelProxyFlow) {
|
||||
String clientId = channelProxyFlow.clientId();
|
||||
String ip = channelProxyFlow.ip();
|
||||
Integer port = channelProxyFlow.port();
|
||||
Integer flow = channelProxyFlow.flow();
|
||||
ChannelProtocolType channelProtocolType = channelProxyFlow.channelProtocolType();
|
||||
ChannelProxyType channelProxyType = channelProxyFlow.channelProxyType();
|
||||
|
||||
|
||||
// 出口流量处理
|
||||
LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand = new LazyProxyFlowStoryCommand();
|
||||
lazyProxyFlowStoryCommand.setOutFlow(flow);
|
||||
lazyProxyFlowStoryCommand.setClientId(clientId);
|
||||
lazyProxyFlowStoryCommand.setIp(ip);
|
||||
lazyProxyFlowStoryCommand.setPort(port);
|
||||
lazyProxyFlowStoryCommand.setProtocolType(channelProtocolType);
|
||||
lazyProxyFlowStoryCommand.setProxyType(channelProxyType);
|
||||
|
||||
lazyProxyFlowStoryCommand.setIsDeleted(false);
|
||||
lazyProxyFlowApplication.flowIncreaseStory(lazyProxyFlowStoryCommand);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -43,6 +43,6 @@ public class NettyHttpClientProxyServerTransfer {
|
||||
/**
|
||||
* 是否是ssl
|
||||
*/
|
||||
private boolean isSsl;
|
||||
private boolean isSsl;
|
||||
|
||||
}
|
||||
|
||||
@@ -5,12 +5,17 @@ import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyClientConnectionTransferTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -23,9 +28,15 @@ import org.springframework.stereotype.Component;
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
|
||||
public class ServerHandleHttpReportClientProxyClientTransferRequestTypeAdvanced
|
||||
extends AbstractHandleHttpReportClientProxyClientConnectionTransferTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleHttpReportClientProxyClientTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
@@ -38,6 +49,7 @@ public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
|
||||
Channel channel = nettyChannelContext.channel();
|
||||
// 创建链接、发送数据
|
||||
String targetPortString = nettyProxyMsg.getTargetPortString();
|
||||
Integer targetPort = Integer.parseInt(targetPortString);
|
||||
String targetIpString = nettyProxyMsg.getTargetIpString();
|
||||
byte[] data = nettyProxyMsg.getData();
|
||||
byte[] visitorId = nettyProxyMsg.getVisitorId();
|
||||
@@ -45,6 +57,9 @@ public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
|
||||
String msgVisitorId = new String(visitorId);
|
||||
ChannelAttributeKeyUtils.buildClientId(channel, clientId);
|
||||
ChannelAttributeKeyUtils.buildVisitorId(channel, msgVisitorId);
|
||||
ChannelAttributeKeyUtils.buildTargetClientId(channel, clientId);
|
||||
ChannelAttributeKeyUtils.buildTargetIp(channel, targetIpString);
|
||||
ChannelAttributeKeyUtils.buildTargetPort(channel, targetPort);
|
||||
|
||||
NettyTransferChannelContext.pushVisitor(channel, msgVisitorId);
|
||||
NettyByteBuf nettyByteBuf = new NettyByteBuf();
|
||||
@@ -56,7 +71,7 @@ public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
|
||||
NettyProxyMsg clientConnectTagetNettyProxyMsg = new NettyProxyMsg();
|
||||
clientConnectTagetNettyProxyMsg.setVisitorId(msgVisitorId);
|
||||
clientConnectTagetNettyProxyMsg.setClientTargetIp(targetIpString);
|
||||
clientConnectTagetNettyProxyMsg.setClientTargetPort(Integer.parseInt(targetPortString));
|
||||
clientConnectTagetNettyProxyMsg.setClientTargetPort(targetPort);
|
||||
clientConnectTagetNettyProxyMsg.setClientId(clientId);
|
||||
clientConnectTagetNettyProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESSFUL_);
|
||||
if (loadBalance != null) {
|
||||
@@ -65,6 +80,18 @@ public class ServerHandleHttpReportClientProxyClientConnectTransferTypeAdvanced
|
||||
}else {
|
||||
log.error("can not find target client:【】 channel",clientId);
|
||||
}
|
||||
// 记录进口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIpString)
|
||||
.clientId(new String(clientId))
|
||||
.channelProxyType(ChannelProxyType.CLIENT_PROXY_CLIENT)
|
||||
.channelProtocolType(ChannelProtocolType.HTTP)
|
||||
.flow(data.length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
|
||||
|
||||
}
|
||||
|
||||
@@ -3,11 +3,16 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advan
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -23,6 +28,11 @@ import org.wu.framework.core.utils.ObjectUtils;
|
||||
@Component
|
||||
public class ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced
|
||||
extends AbstractHandleHttpReportClientProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> {
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@@ -37,12 +47,31 @@ public class ServerHandleHttpReportClientProxyClientTransferResponseTypeAdvanced
|
||||
// 将返回数据下发客户端
|
||||
Channel transferNextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(channel);
|
||||
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(transferNextChannel);
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(transferNextChannel);
|
||||
|
||||
String clientId = nettyProxyMsg.getClientIdString();
|
||||
Integer visitorPort = nettyProxyMsg.getVisitorPortInt();
|
||||
String visitorId = nettyProxyMsg.getVisitorIdString();
|
||||
if(ObjectUtils.isNotEmpty(transferNextChannel)) {
|
||||
log.info("目标客户端返回数据通过服务端下发到原始通道");
|
||||
NettyProxyMsg responseProxyMsg = new NettyProxyMsg();
|
||||
responseProxyMsg.setData(nettyProxyMsg.getData());
|
||||
responseProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_);
|
||||
transferNextChannel.writeAndFlush(responseProxyMsg);
|
||||
|
||||
// 记录出口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIp)
|
||||
.clientId(clientId)
|
||||
.channelProxyType(ChannelProxyType.CLIENT_PROXY_CLIENT)
|
||||
.channelProtocolType(ChannelProtocolType.HTTP)
|
||||
.flow(responseProxyMsg.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
|
||||
}else {
|
||||
log.error("无法将数据下发给原始客户端");
|
||||
}
|
||||
|
||||
@@ -4,10 +4,16 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advan
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.NettyHttpClientProxyServerTransfer;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.socket.NettyHttpClientProxyServerRealSocket;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
@@ -21,14 +27,19 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* 服务端处理客户端代理到服务端的请求
|
||||
* HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_
|
||||
* HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_REQUEST_
|
||||
*/
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced
|
||||
extends AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced<NettyProxyMsg> {
|
||||
public class ServerHandleHttpReportClientProxyServerTransferRequestTypeAdvanced
|
||||
extends AbstractHandleHttpReportClientProxyServerTransferRequestTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleHttpReportClientProxyServerTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
@@ -41,16 +52,25 @@ public class ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced
|
||||
Channel channel = nettyChannelContext.channel();
|
||||
// 创建链接、发送数据
|
||||
String targetPortString = nettyProxyMsg.getTargetPortString();
|
||||
int targetPort = Integer.parseInt(targetPortString);
|
||||
String targetIpString = nettyProxyMsg.getTargetIpString();
|
||||
String clientIdString = nettyProxyMsg.getClientIdString();
|
||||
byte[] data = nettyProxyMsg.getData();
|
||||
byte[] visitorId = nettyProxyMsg.getVisitorId();
|
||||
|
||||
|
||||
ChannelAttributeKeyUtils.buildClientId(channel, clientIdString);
|
||||
ChannelAttributeKeyUtils.buildTargetClientId(channel, clientIdString);
|
||||
ChannelAttributeKeyUtils.buildTargetIp(channel, targetIpString);
|
||||
ChannelAttributeKeyUtils.buildTargetPort(channel,targetPort);
|
||||
|
||||
List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList = new ArrayList<>(SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values());
|
||||
NettyClientProperties nettyClientProperties = SpringContextHolder.getBean(NettyClientProperties.class);
|
||||
// 判断代理到客户端还是服务端
|
||||
NettyHttpClientProxyServerTransfer nettyHttpClientProxyServerTransfer = new NettyHttpClientProxyServerTransfer();
|
||||
nettyHttpClientProxyServerTransfer.setSsl(false);
|
||||
nettyHttpClientProxyServerTransfer.setTargetIp(targetIpString);
|
||||
nettyHttpClientProxyServerTransfer.setTargetPort(Integer.parseInt(targetPortString));
|
||||
nettyHttpClientProxyServerTransfer.setTargetPort(targetPort);
|
||||
|
||||
|
||||
nettyHttpClientProxyServerTransfer.setHandleChannelTypeAdvancedList(handleChannelTypeAdvancedList);
|
||||
@@ -60,6 +80,19 @@ public class ServerHandleHttpReportClientProxyServerProxyTransferTypeAdvanced
|
||||
NettyHttpClientProxyServerRealSocket
|
||||
.buildRealServer(nettyHttpClientProxyServerTransfer, channel,new String(visitorId));
|
||||
|
||||
|
||||
// 记录进口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIpString)
|
||||
.clientId(clientIdString)
|
||||
.channelProxyType(ChannelProxyType.CLIENT_PROXY_SEVER)
|
||||
.channelProtocolType(ChannelProtocolType.HTTP)
|
||||
.flow(data.length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advanced;
|
||||
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
/**
|
||||
* 服务端处理客户端代理到服务端的请求
|
||||
* HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_
|
||||
*/
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ServerHandleHttpReportClientProxyServerTransferResponseTypeAdvanced
|
||||
extends AbstractHandleHttpReportClientProxyServerTransferResponseTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleHttpReportClientProxyServerTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param nettyChannelContext 当前通道
|
||||
* @param nettyProxyMsg 通道数据
|
||||
*/
|
||||
@Override
|
||||
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
|
||||
Channel channel = nettyChannelContext.channel();
|
||||
|
||||
byte[] data = nettyProxyMsg.getData();
|
||||
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
|
||||
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
|
||||
// 将数据返回给客户端
|
||||
NettyProxyMsg responseNettyProxyMsg = new NettyProxyMsg();
|
||||
responseNettyProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_);
|
||||
responseNettyProxyMsg.setData(data);
|
||||
|
||||
nextChannel.writeAndFlush(responseNettyProxyMsg);
|
||||
|
||||
String clientId = ChannelAttributeKeyUtils.getClientId(nextChannel);
|
||||
Integer visitorPort = ChannelAttributeKeyUtils.getVisitorPort(nextChannel);
|
||||
|
||||
// 记录出口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIp)
|
||||
.clientId(clientId)
|
||||
.channelProxyType(ChannelProxyType.CLIENT_PROXY_SEVER)
|
||||
.channelProtocolType(ChannelProtocolType.HTTP)
|
||||
.flow(data.length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,12 +4,17 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advan
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -18,9 +23,14 @@ import org.springframework.stereotype.Component;
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced
|
||||
public class ServerHandleHttpReportServerProxyClientTransferRequestTypeAdvanced
|
||||
extends AbstractHandleHttpReportServerProxyClientTransferChannelInitSuccessfulTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleHttpReportServerProxyClientTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
@@ -35,11 +45,19 @@ public class ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfu
|
||||
// 数据下发
|
||||
byte[] msgVisitorId = nettyProxyMsg.getVisitorId();
|
||||
|
||||
byte[] msgClientTargetIp = nettyProxyMsg.getClientTargetIp();
|
||||
byte[] msgClientTargetPort = nettyProxyMsg.getClientTargetPort();
|
||||
String targetIpString = nettyProxyMsg.getTargetIpString();
|
||||
String targetPortString = nettyProxyMsg.getTargetPortString();
|
||||
Integer targetPort = Integer.parseInt(targetPortString);
|
||||
|
||||
|
||||
byte[] clientId = nettyProxyMsg.getClientId();
|
||||
|
||||
|
||||
ChannelAttributeKeyUtils.buildTargetClientId(channel, clientId);
|
||||
ChannelAttributeKeyUtils.buildTargetIp(channel, targetIpString);
|
||||
ChannelAttributeKeyUtils.buildTargetPort(channel, targetPort);
|
||||
|
||||
|
||||
// next
|
||||
Channel nextChannel = NettyTransferChannelContext.getVisitor(msgVisitorId);
|
||||
ChannelAttributeKeyUtils.buildNextChannel(nextChannel, channel);
|
||||
@@ -54,8 +72,8 @@ public class ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfu
|
||||
NettyProxyMsg clientConnectTagetNettyProxyMsg = new NettyProxyMsg();
|
||||
clientConnectTagetNettyProxyMsg.setVisitorId(msgVisitorId);
|
||||
|
||||
clientConnectTagetNettyProxyMsg.setClientTargetIp(msgClientTargetIp);
|
||||
clientConnectTagetNettyProxyMsg.setClientTargetPort(msgClientTargetPort);
|
||||
clientConnectTagetNettyProxyMsg.setClientTargetIp(targetIpString);
|
||||
clientConnectTagetNettyProxyMsg.setClientTargetPort(targetPort);
|
||||
clientConnectTagetNettyProxyMsg.setClientId(clientId);
|
||||
clientConnectTagetNettyProxyMsg.setData(nettyByteBufData.getData());
|
||||
|
||||
@@ -63,6 +81,19 @@ public class ServerHandleHttpReportServerProxyClientTransferChannelInitSuccessfu
|
||||
|
||||
channel.writeAndFlush(clientConnectTagetNettyProxyMsg);
|
||||
|
||||
// 记录进口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIpString)
|
||||
.clientId(new String(clientId))
|
||||
.channelProxyType(ChannelProxyType.SERVER_PROXY_CLIENT)
|
||||
.channelProtocolType(ChannelProtocolType.HTTP)
|
||||
.flow(nettyByteBufData.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,10 +4,15 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.advan
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportServerProxyClientTransferResponseTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -20,7 +25,11 @@ import org.wu.framework.core.utils.ObjectUtils;
|
||||
@Component
|
||||
public class ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced
|
||||
extends AbstractHandleHttpReportServerProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> {
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
@@ -31,14 +40,33 @@ public class ServerHandleHttpReportServerProxyClientTransferResponseTypeAdvanced
|
||||
@Override
|
||||
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
|
||||
Channel channel = nettyChannelContext.channel();
|
||||
|
||||
// 将返回数据
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
|
||||
String clientId = ChannelAttributeKeyUtils.getClientId(nextChannel);
|
||||
Integer visitorPort = ChannelAttributeKeyUtils.getVisitorPort(nextChannel);
|
||||
String targetClientId = ChannelAttributeKeyUtils.getTargetClientId(nextChannel);
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
|
||||
|
||||
if(ObjectUtils.isNotEmpty(nextChannel)) {
|
||||
log.info("目标客户端返回数据通过服务端下发到原始通道");
|
||||
ByteBuf buf = channel.config().getAllocator().buffer(nettyProxyMsg.getData().length);
|
||||
buf.writeBytes(nettyProxyMsg.getData());
|
||||
nextChannel.writeAndFlush(buf);
|
||||
|
||||
// 记录出口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIp)
|
||||
.clientId(targetClientId)
|
||||
.channelProxyType(ChannelProxyType.SERVER_PROXY_CLIENT)
|
||||
.channelProtocolType(ChannelProtocolType.HTTP)
|
||||
.flow(nettyProxyMsg.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
|
||||
}else {
|
||||
log.error("无法将数据下发给原始客户端");
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import io.netty.handler.ssl.SslContext;
|
||||
import io.netty.handler.ssl.SslContextBuilder;
|
||||
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.encoder.TransferEncoder;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer;
|
||||
@@ -19,6 +20,7 @@ public class NettyHttpClientProxyServerRealFilter extends DebugChannelInitialize
|
||||
|
||||
public NettyHttpClientProxyServerRealFilter(NettyHttpClientProxyServerTransfer nettyHttpClientProxyServerTransfer) {
|
||||
this.nettyHttpClientProxyServerTransfer = nettyHttpClientProxyServerTransfer;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,10 +47,12 @@ public class NettyHttpClientProxyServerRealFilter extends DebugChannelInitialize
|
||||
}
|
||||
}
|
||||
|
||||
ChannelTypeAdapter channelTypeAdapter = new ChannelTypeAdapter(nettyHttpClientProxyServerTransfer.getHandleChannelTypeAdvancedList());
|
||||
|
||||
// 解码、编码
|
||||
pipeline.addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10));
|
||||
pipeline.addLast(new TransferEncoder());
|
||||
pipeline.addLast(new NettyHttpClientProxyServerRealHandler());
|
||||
pipeline.addLast(new NettyHttpClientProxyServerRealHandler(channelTypeAdapter));
|
||||
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import io.netty.channel.ChannelOption;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
@@ -17,6 +18,13 @@ import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeK
|
||||
@Slf4j
|
||||
public class NettyHttpClientProxyServerRealHandler extends SimpleChannelInboundHandler<NettyByteBuf> {
|
||||
|
||||
|
||||
private final ChannelTypeAdapter channelTypeAdapter;
|
||||
|
||||
public NettyHttpClientProxyServerRealHandler(ChannelTypeAdapter channelTypeAdapter) {
|
||||
this.channelTypeAdapter = channelTypeAdapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void channelActive(ChannelHandlerContext ctx) throws Exception {
|
||||
// 根据访客ID 确认真实通道 读写打开
|
||||
@@ -32,17 +40,16 @@ public class NettyHttpClientProxyServerRealHandler extends SimpleChannelInboundH
|
||||
@Override
|
||||
public void channelRead0(ChannelHandlerContext ctx,NettyByteBuf nettyByteBuf) {
|
||||
|
||||
Channel channel = ctx.channel();
|
||||
byte[] bytes = nettyByteBuf.getData();
|
||||
log.debug("bytes.length:{}",bytes.length);
|
||||
log.debug("客户端代理服务端接收服务端真实服务数据:{}", new String(bytes));
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
|
||||
|
||||
// 将数据返回给客户端
|
||||
NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
|
||||
nettyProxyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_);
|
||||
nettyProxyMsg.setType(ProxyMessageType.HTTP_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_);
|
||||
nettyProxyMsg.setData(bytes);
|
||||
|
||||
nextChannel.writeAndFlush(nettyProxyMsg);
|
||||
channelTypeAdapter.handler(ctx,nettyProxyMsg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import io.netty.channel.*;
|
||||
import io.netty.channel.nio.NioEventLoopGroup;
|
||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.NettyHttpClientProxyServerTransfer;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.filter.NettyHttpClientProxyServerRealFilter;
|
||||
|
||||
@@ -52,6 +52,8 @@ public class ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced
|
||||
String msgVisitorId = new String(visitorId);
|
||||
ChannelAttributeKeyUtils.buildClientId(transferChannel, targetClientId);
|
||||
ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId);
|
||||
ChannelAttributeKeyUtils.buildTargetIp(transferChannel, host);
|
||||
ChannelAttributeKeyUtils.buildTargetPort(transferChannel, port);
|
||||
|
||||
NettyTransferChannelContext.pushVisitor(transferChannel, msgVisitorId);
|
||||
|
||||
|
||||
@@ -3,12 +3,16 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.adva
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.TcpMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
@@ -21,6 +25,11 @@ import org.springframework.stereotype.Component;
|
||||
public class ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced
|
||||
extends AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
@@ -33,15 +42,33 @@ public class ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced
|
||||
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
|
||||
Channel transferChannel = nettyChannelContext.channel();
|
||||
|
||||
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(transferChannel);
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(transferChannel);
|
||||
String clientId = ChannelAttributeKeyUtils.getClientId(transferChannel);
|
||||
|
||||
byte[] visitorId = nettyProxyMsg.getVisitorId();
|
||||
// 目标通道
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(transferChannel);
|
||||
|
||||
NettyProxyMsg requestMsg = new NettyProxyMsg();
|
||||
requestMsg.setVisitorId(visitorId);
|
||||
requestMsg.setData(nettyProxyMsg.getData());
|
||||
requestMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_);
|
||||
if (nextChannel != null) {
|
||||
nextChannel.writeAndFlush(requestMsg);
|
||||
// 记录进口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIp)
|
||||
.clientId(clientId)
|
||||
.channelProxyType(ChannelProxyType.CLIENT_PROXY_CLIENT)
|
||||
.channelProtocolType(ChannelProtocolType.SOCKS)
|
||||
.flow(nettyProxyMsg.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(transferChannel, serverChannelFlow);
|
||||
} else {
|
||||
log.error("can not find the channel");
|
||||
}
|
||||
|
||||
@@ -3,11 +3,16 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.adva
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientTransferResponseTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
@@ -20,6 +25,11 @@ import org.springframework.stereotype.Component;
|
||||
public class ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced
|
||||
extends AbstractHandleSocksReportClientProxyClientTransferResponseTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
@@ -39,10 +49,25 @@ public class ServerHandleSocksReportClientProxyClientTransferResponseTypeAdvance
|
||||
responseMsg.setVisitorId(visitorId);
|
||||
responseMsg.setData(nettyProxyMsg.getData());
|
||||
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
|
||||
String clientId = ChannelAttributeKeyUtils.getClientId(nextChannel);
|
||||
|
||||
responseMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_);
|
||||
if (nextChannel != null) {
|
||||
nextChannel.writeAndFlush(responseMsg);
|
||||
// 记录出口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
|
||||
.ip(targetIp)
|
||||
.port(targetPort)
|
||||
.clientId(clientId)
|
||||
.channelProxyType(ChannelProxyType.CLIENT_PROXY_CLIENT)
|
||||
.channelProtocolType(ChannelProtocolType.SOCKS)
|
||||
.flow(nettyProxyMsg.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(nextChannel, serverChannelFlow);
|
||||
}else {
|
||||
log.error("can not find the channel");
|
||||
}
|
||||
|
||||
@@ -9,7 +9,10 @@ import io.netty.handler.codec.socksx.v5.DefaultSocks5CommandResponse;
|
||||
import io.netty.handler.codec.socksx.v5.Socks5AddressType;
|
||||
import io.netty.handler.codec.socksx.v5.Socks5CommandStatus;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerConnectionTransferTypeAdvanced;
|
||||
@@ -21,8 +24,11 @@ import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handl
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.wu.framework.spring.utils.SpringContextHolder;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@@ -51,10 +57,16 @@ public class ServerHandleSocksReportClientProxyServerConnectTransferTypeAdvanced
|
||||
String msgVisitorId = new String(visitorId);
|
||||
ChannelAttributeKeyUtils.buildClientId(transferChannel, clientId);
|
||||
ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId);
|
||||
ChannelAttributeKeyUtils.buildTargetIp(transferChannel, host);
|
||||
ChannelAttributeKeyUtils.buildTargetPort(transferChannel, port);
|
||||
|
||||
NettyTransferChannelContext.pushVisitor(transferChannel, msgVisitorId);
|
||||
Socks5AddressType socks5AddressType = Socks5AddressType.valueOf(data[0]);
|
||||
|
||||
|
||||
List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList = new ArrayList<>(SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values());
|
||||
|
||||
ChannelTypeAdapter channelTypeAdapter = new ChannelTypeAdapter(handleChannelTypeAdvancedList);
|
||||
// 创建真实代理链接
|
||||
EventLoopGroup group = EventLoopGroupFactory.createClientWorkGroup();
|
||||
Bootstrap b = new Bootstrap();
|
||||
@@ -65,7 +77,7 @@ public class ServerHandleSocksReportClientProxyServerConnectTransferTypeAdvanced
|
||||
@Override
|
||||
protected void initChannel(SocketChannel ch) {
|
||||
ch.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024 * 10));
|
||||
ch.pipeline().addLast(new NettySocksClientProxyServerRealHandler());
|
||||
ch.pipeline().addLast(new NettySocksClientProxyServerRealHandler(channelTypeAdapter));
|
||||
}
|
||||
});
|
||||
log.info("准备连接目标服务器,ip = {},port = {}", host, port);
|
||||
|
||||
@@ -4,10 +4,15 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.adva
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
@@ -22,6 +27,12 @@ public class ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced
|
||||
extends AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
@@ -32,6 +43,10 @@ public class ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced
|
||||
@Override
|
||||
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
|
||||
Channel transferChannel = nettyChannelContext.channel();
|
||||
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(transferChannel);
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(transferChannel);
|
||||
String clientId = ChannelAttributeKeyUtils.getClientId(transferChannel);
|
||||
// 目标通道
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(transferChannel);
|
||||
// 目标数据发送
|
||||
@@ -39,6 +54,19 @@ public class ServerHandleSocksReportClientProxyServerTransferRequestTypeAdvanced
|
||||
ByteBuf buf = nextChannel.config().getAllocator().buffer(nettyProxyMsg.getData().length);
|
||||
buf.writeBytes(nettyProxyMsg.getData());
|
||||
nextChannel.writeAndFlush(buf);
|
||||
|
||||
// 记录进口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIp)
|
||||
.clientId(clientId)
|
||||
.channelProxyType(ChannelProxyType.CLIENT_PROXY_SEVER)
|
||||
.channelProtocolType(ChannelProtocolType.SOCKS)
|
||||
.flow(nettyProxyMsg.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(transferChannel, serverChannelFlow);
|
||||
} else {
|
||||
log.error("当前目标通道已经关闭或者不存在");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.advanced;
|
||||
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ServerHandleSocksReportClientProxyServerTransferResponseTypeAdvanced
|
||||
extends AbstractHandleSocksReportClientProxyServerTransferResponseTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleSocksReportClientProxyServerTransferResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param nettyChannelContext 当前通道
|
||||
* @param nettyProxyMsg 通道数据
|
||||
* @see NettySocksClientProxyServerRealHandler
|
||||
*/
|
||||
@Override
|
||||
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
|
||||
Channel channel = nettyChannelContext.channel();
|
||||
byte[] data = nettyProxyMsg.getData();
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
|
||||
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
|
||||
String clientId = ChannelAttributeKeyUtils.getClientId(nextChannel);
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
|
||||
if (nextChannel.isActive()) {
|
||||
// 将数据返回给客户端
|
||||
NettyProxyMsg nettyProxyMsgResponse = new NettyProxyMsg();
|
||||
nettyProxyMsgResponse.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_);
|
||||
nettyProxyMsgResponse.setData(data);
|
||||
|
||||
nextChannel.writeAndFlush(nettyProxyMsgResponse);
|
||||
|
||||
// 记录出口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
|
||||
.ip(targetIp)
|
||||
.port(targetPort)
|
||||
.clientId(clientId)
|
||||
.channelProxyType(ChannelProxyType.CLIENT_PROXY_SEVER)
|
||||
.channelProtocolType(ChannelProtocolType.SOCKS)
|
||||
.flow(nettyProxyMsg.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(nextChannel, serverChannelFlow);
|
||||
} else {
|
||||
log.info("释放内存");
|
||||
ReferenceCountUtil.release(nettyProxyMsg);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import io.netty.handler.codec.socksx.v5.Socks5CommandRequestDecoder;
|
||||
import io.netty.handler.codec.socksx.v5.Socks5CommandStatus;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanced;
|
||||
@@ -20,6 +21,7 @@ import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handl
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.wu.framework.spring.utils.SpringContextHolder;
|
||||
|
||||
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@@ -49,6 +51,8 @@ public class ServerHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanc
|
||||
ChannelAttributeKeyUtils.buildVisitorId(transferChannel,visitorId);
|
||||
ChannelAttributeKeyUtils.buildClientId(transferChannel,clientId);
|
||||
|
||||
|
||||
ChannelTypeAdapter channelTypeAdapter = SpringContextHolder.getBean(ChannelTypeAdapter.class);
|
||||
// 根据传输通道获取代理通道
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(transferChannel);
|
||||
|
||||
@@ -58,7 +62,7 @@ public class ServerHandleSocksReportServerProxyClientConnectionSuccessTypeAdvanc
|
||||
// TODO bug fix
|
||||
nextChannel.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10));
|
||||
// 请求数据开始上报
|
||||
nextChannel.pipeline().addLast(new NettySocksServerProxyClientVisitorInboundHandler());
|
||||
nextChannel.pipeline().addLast(new NettySocksServerProxyClientVisitorInboundHandler(channelTypeAdapter));
|
||||
DefaultSocks5CommandResponse commandResponse =
|
||||
new DefaultSocks5CommandResponse(Socks5CommandStatus.SUCCESS, socks5AddressType);
|
||||
nextChannel.writeAndFlush(commandResponse);
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.advanced;
|
||||
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ServerHandleSocksReportServerProxyClientRequestTypeAdvanced
|
||||
extends AbstractHandleSocksReportServerProxyClientRequestTypeAdvanced<NettyProxyMsg> {
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleSocksReportServerProxyClientRequestTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
*
|
||||
* @param nettyChannelContext 当前通道
|
||||
* @param nettyProxyMsg 通道数据
|
||||
* @see NettySocksClientProxyServerRealHandler
|
||||
*/
|
||||
@Override
|
||||
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
|
||||
|
||||
Channel channel = nettyChannelContext.channel();
|
||||
String targetClientId = ChannelAttributeKeyUtils.getTargetClientId(channel);
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(channel);
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(channel);
|
||||
|
||||
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
|
||||
|
||||
if (nextChannel.isActive()) {
|
||||
// 下发数据到服务端
|
||||
NettyProxyMsg nettyProxyMsgRequest = new NettyProxyMsg();
|
||||
nettyProxyMsgRequest.setType(ProxyMessageType.SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_);
|
||||
|
||||
nettyProxyMsgRequest.setData(nettyProxyMsg.getData());
|
||||
nextChannel.writeAndFlush(nettyProxyMsgRequest);
|
||||
// 记录进口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.IN_FLOW)
|
||||
.port(targetPort)
|
||||
.ip(targetIp)
|
||||
.clientId("SERVER")
|
||||
.channelProxyType(ChannelProxyType.SERVER_PROXY_CLIENT)
|
||||
.channelProtocolType(ChannelProtocolType.SOCKS)
|
||||
.flow(nettyProxyMsg.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(channel, serverChannelFlow);
|
||||
} else {
|
||||
log.info("释放内存");
|
||||
ReferenceCountUtil.release(nettyProxyMsg);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,11 +4,15 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.adva
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelProxyFlowAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.proxy.ServerChannelProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Role;
|
||||
@@ -22,6 +26,11 @@ import org.wu.framework.core.utils.ObjectUtils;
|
||||
public class ServerHandleSocksReportServerProxyClientResponseTypeAdvanced
|
||||
extends AbstractHandleSocksReportServerProxyClientResponseTypeAdvanced<NettyProxyMsg> {
|
||||
|
||||
private final ChannelProxyFlowAdapter channelProxyFlowAdapter;
|
||||
|
||||
public ServerHandleSocksReportServerProxyClientResponseTypeAdvanced(ChannelProxyFlowAdapter channelProxyFlowAdapter) {
|
||||
this.channelProxyFlowAdapter = channelProxyFlowAdapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理当前数据
|
||||
@@ -34,11 +43,28 @@ public class ServerHandleSocksReportServerProxyClientResponseTypeAdvanced
|
||||
public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
|
||||
|
||||
Channel channel = nettyChannelContext.channel();
|
||||
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
|
||||
|
||||
String targetClientId = ChannelAttributeKeyUtils.getTargetClientId(nextChannel);
|
||||
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
|
||||
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
|
||||
if(ObjectUtils.isNotEmpty(nextChannel)&&nextChannel.isActive()){
|
||||
ByteBuf buf = nextChannel.config().getAllocator().buffer(nettyProxyMsg.getData().length);
|
||||
buf.writeBytes(nettyProxyMsg.getData());
|
||||
nextChannel.writeAndFlush(buf);
|
||||
// 记录出口数据
|
||||
ServerChannelProxyFlow serverChannelFlow = ServerChannelProxyFlow
|
||||
.builder()
|
||||
.channelFlowEnum(ChannelFlowEnum.OUT_FLOW)
|
||||
.ip(targetIp)
|
||||
.port(targetPort)
|
||||
.clientId("SERVER")
|
||||
.channelProxyType(ChannelProxyType.SERVER_PROXY_CLIENT)
|
||||
.channelProtocolType(ChannelProtocolType.SOCKS)
|
||||
.flow(nettyProxyMsg.getData().length)
|
||||
.build();
|
||||
channelProxyFlowAdapter.asyncHandler(nextChannel, serverChannelFlow);
|
||||
}else {
|
||||
log.error("服务端代理客户端socks,本地通道已关闭!");
|
||||
}
|
||||
|
||||
@@ -38,6 +38,8 @@ public class ServerHandleSocksReportServerProxyClientTypeAdvanced
|
||||
String host = nettyProxyMsg.getTargetIpString();
|
||||
Integer port = Integer.parseInt(nettyProxyMsg.getTargetPortString());
|
||||
|
||||
|
||||
|
||||
byte[] visitorId = nettyProxyMsg.getVisitorId();
|
||||
byte[] targetClientId = nettyProxyMsg.getClientId();
|
||||
Socks5AddressType socks5AddressType = nettySocketChannelContext.getSocks5AddressType();
|
||||
@@ -45,8 +47,12 @@ public class ServerHandleSocksReportServerProxyClientTypeAdvanced
|
||||
|
||||
String msgVisitorId = new String(visitorId);
|
||||
ChannelAttributeKeyUtils.buildVisitorId(visitorrChannel, msgVisitorId);
|
||||
NettyTransferChannelContext.pushVisitor(visitorrChannel, msgVisitorId);
|
||||
ChannelAttributeKeyUtils.buildTargetIp(visitorrChannel, host);
|
||||
ChannelAttributeKeyUtils.buildTargetPort(visitorrChannel,port);
|
||||
ChannelAttributeKeyUtils.buildTargetClientId(visitorrChannel,targetClientId);
|
||||
|
||||
ChannelAttributeKeyUtils.buildSocks5AddressType(visitorrChannel,socks5AddressTypeByte);
|
||||
NettyTransferChannelContext.pushVisitor(visitorrChannel, msgVisitorId);
|
||||
|
||||
// 客户端连接客户端传输通道
|
||||
Channel loadBalance = ChannelContext.getLoadBalance(targetClientId);
|
||||
|
||||
@@ -8,6 +8,7 @@ import io.netty.channel.SimpleChannelInboundHandler;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
@@ -16,6 +17,11 @@ import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeK
|
||||
@Slf4j
|
||||
public class NettySocksClientProxyServerRealHandler extends SimpleChannelInboundHandler<NettyByteBuf> {
|
||||
|
||||
private final ChannelTypeAdapter channelTypeAdapter;
|
||||
|
||||
public NettySocksClientProxyServerRealHandler(ChannelTypeAdapter channelTypeAdapter) {
|
||||
this.channelTypeAdapter = channelTypeAdapter;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@@ -27,22 +33,16 @@ public class NettySocksClientProxyServerRealHandler extends SimpleChannelInbound
|
||||
public void channelRead0(ChannelHandlerContext ctx, NettyByteBuf nettyByteBuf) throws Exception {
|
||||
log.trace("开始写回客户端数据");
|
||||
// 结果下发
|
||||
Channel channel = ctx.channel();
|
||||
byte[] bytes = nettyByteBuf.getData();
|
||||
log.debug("bytes.length:{}", bytes.length);
|
||||
log.debug("客户端socks代理服务端接收服务端真实服务数据:{}", new String(bytes));
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
|
||||
if (nextChannel.isActive()) {
|
||||
// 将数据返回给客户端
|
||||
NettyProxyMsg nettyProxyMsgResponse = new NettyProxyMsg();
|
||||
nettyProxyMsgResponse.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_);
|
||||
nettyProxyMsgResponse.setData(bytes);
|
||||
|
||||
nextChannel.writeAndFlush(nettyProxyMsgResponse);
|
||||
} else {
|
||||
log.info("释放内存");
|
||||
ReferenceCountUtil.release(nettyByteBuf);
|
||||
}
|
||||
// 将数据返回给客户端
|
||||
NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
|
||||
nettyProxyMsg.setType(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_RESPONSE_);
|
||||
nettyProxyMsg.setData(bytes);
|
||||
|
||||
channelTypeAdapter.handler(ctx,nettyProxyMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,7 +26,6 @@ public class NettySocksServerProxyClientVisitorHandler extends SimpleChannelInbo
|
||||
@Override
|
||||
public void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyProxyMsg) throws Exception {
|
||||
channelTypeAdapter.handler(ctx, nettyProxyMsg);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -6,9 +6,9 @@ import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelFutureListener;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
@@ -17,7 +17,11 @@ import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeK
|
||||
@Slf4j
|
||||
public class NettySocksServerProxyClientVisitorInboundHandler extends SimpleChannelInboundHandler<NettyByteBuf> {
|
||||
|
||||
private final ChannelTypeAdapter channelTypeAdapter;
|
||||
|
||||
public NettySocksServerProxyClientVisitorInboundHandler(ChannelTypeAdapter channelTypeAdapter) {
|
||||
this.channelTypeAdapter = channelTypeAdapter;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@@ -28,24 +32,16 @@ public class NettySocksServerProxyClientVisitorInboundHandler extends SimpleChan
|
||||
@Override
|
||||
public void channelRead0(ChannelHandlerContext ctx, NettyByteBuf nettyByteBuf) throws Exception {
|
||||
log.info("【socks】转发服务端请求到客户端");
|
||||
// 结果下发
|
||||
Channel channel = ctx.channel();
|
||||
byte[] bytes = nettyByteBuf.getData();
|
||||
log.debug("bytes.length:{}",bytes.length);
|
||||
log.debug("服务端代理客户端,socks本地接收请求数据:{}", new String(bytes));
|
||||
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
|
||||
|
||||
if (nextChannel.isActive()) {
|
||||
// 下发数据到服务端
|
||||
NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
|
||||
nettyProxyMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_);
|
||||
// 将数据返回给客户端
|
||||
NettyProxyMsg nettyProxyMsg = new NettyProxyMsg();
|
||||
nettyProxyMsg.setType(ProxyMessageType.SOCKS_REPORT_SERVER_PROXY_CLIENT_TRANSFER_REQUEST_);
|
||||
nettyProxyMsg.setData(bytes);
|
||||
|
||||
nettyProxyMsg.setData(nettyByteBuf.getData());
|
||||
nextChannel.writeAndFlush(nettyProxyMsg);
|
||||
} else {
|
||||
log.info("释放内存");
|
||||
ReferenceCountUtil.release(nettyByteBuf);
|
||||
}
|
||||
channelTypeAdapter.handler(ctx, nettyProxyMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.*;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.flow.LazyVisitorPortFlowQueryListCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientProxyFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
import org.wu.framework.web.response.Result;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication
|
||||
**/
|
||||
|
||||
public interface LazyProxyFlowApplication {
|
||||
|
||||
|
||||
/**
|
||||
* describe 新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommand 新增代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyFlow> story(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand);
|
||||
|
||||
/**
|
||||
* 流量增长存储
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommand 代理流量
|
||||
*/
|
||||
Result<LazyProxyFlow> flowIncreaseStory(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand);
|
||||
|
||||
/**
|
||||
* describe 批量新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommandList 批量新增代理流量
|
||||
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlowStoryCommand> lazyProxyFlowStoryCommandList);
|
||||
|
||||
/**
|
||||
* describe 更新代理流量
|
||||
*
|
||||
* @param lazyProxyFlowUpdateCommand 更新代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyFlow> updateOne(LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand);
|
||||
|
||||
/**
|
||||
* describe 查询单个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryOneCommand 查询单个代理流量
|
||||
* @return {@link Result<LazyProxyFlowDTO>} 代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyFlowDTO> findOne(LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand);
|
||||
|
||||
/**
|
||||
* describe 查询多个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryListCommand 查询多个代理流量
|
||||
* @return {@link Result <List<LazyProxyFlowDTO>>} 代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<List<LazyProxyFlowDTO>> findList(LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);
|
||||
|
||||
/**
|
||||
* describe 分页查询多个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryListCommand 分页查询多个代理流量
|
||||
* @return {@link Result <LazyPage<LazyProxyFlowDTO>>} 分页代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyPage<LazyProxyFlowDTO>> findPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);
|
||||
|
||||
/**
|
||||
* describe 删除代理流量
|
||||
*
|
||||
* @param lazyProxyFlowRemoveCommand 删除代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyFlow> remove(LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand);
|
||||
|
||||
/**
|
||||
* 根据客户端查询流量
|
||||
*
|
||||
* @param size 分页大小
|
||||
* @param current 分页
|
||||
* @param lazyProxyFlowQueryListCommand 查询条件
|
||||
* @return {@link Result<LazyPage< LazyClientProxyFlowDTO >>} 分页访客端流量DTO对象
|
||||
*/
|
||||
Result<LazyPage<LazyClientProxyFlowDTO>> findClientFlowPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application;
|
||||
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.response.ResultFactory;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRemoveCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowUpdateCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryListCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryOneCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyPerDayFlowDTO;
|
||||
import java.util.List;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication
|
||||
**/
|
||||
|
||||
public interface LazyProxyPerDayFlowApplication {
|
||||
|
||||
|
||||
/**
|
||||
* describe 新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowStoryCommand 新增每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyPerDayFlow> story(LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand);
|
||||
|
||||
/**
|
||||
* describe 批量新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowStoryCommandList 批量新增每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<List<LazyProxyPerDayFlow>> batchStory(List<LazyProxyPerDayFlowStoryCommand> lazyProxyPerDayFlowStoryCommandList);
|
||||
|
||||
/**
|
||||
* describe 更新每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowUpdateCommand 更新每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyPerDayFlow> updateOne(LazyProxyPerDayFlowUpdateCommand lazyProxyPerDayFlowUpdateCommand);
|
||||
|
||||
/**
|
||||
* describe 查询单个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryOneCommand 查询单个每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlowDTO>} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyPerDayFlowDTO> findOne(LazyProxyPerDayFlowQueryOneCommand lazyProxyPerDayFlowQueryOneCommand);
|
||||
|
||||
/**
|
||||
* describe 查询多个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryListCommand 查询多个每日统计代理流量
|
||||
* @return {@link Result <List<LazyProxyPerDayFlowDTO>>} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result <List<LazyProxyPerDayFlowDTO>> findList(LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand);
|
||||
|
||||
/**
|
||||
* describe 分页查询多个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryListCommand 分页查询多个每日统计代理流量
|
||||
* @return {@link Result <LazyPage<LazyProxyPerDayFlowDTO>>} 分页每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result <LazyPage<LazyProxyPerDayFlowDTO>> findPage(int size,int current,LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand);
|
||||
|
||||
/**
|
||||
* describe 删除每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowRemoveCommand 删除每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyPerDayFlow> remove(LazyProxyPerDayFlowRemoveCommand lazyProxyPerDayFlowRemoveCommand);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowRemoveCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowStoryCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowUpdateCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowQueryListCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.LazyProxyFlowQueryOneCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
import org.mapstruct.Mapper;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler
|
||||
**/
|
||||
@Mapper
|
||||
public interface LazyProxyFlowDTOAssembler {
|
||||
|
||||
|
||||
/**
|
||||
* describe MapStruct 创建的代理对象
|
||||
*
|
||||
|
||||
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlowDTOAssembler INSTANCE = Mappers.getMapper(LazyProxyFlowDTOAssembler.class);
|
||||
/**
|
||||
* describe 应用层存储入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommand 保存代理流量对象
|
||||
* @return {@link LazyProxyFlow} 代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand);
|
||||
/**
|
||||
* describe 应用层更新入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyFlowUpdateCommand 更新代理流量对象
|
||||
* @return {@link LazyProxyFlow} 代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand);
|
||||
/**
|
||||
* describe 应用层查询入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyFlowQueryOneCommand 查询单个代理流量对象参数
|
||||
* @return {@link LazyProxyFlow} 代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand);
|
||||
/**
|
||||
* describe 应用层查询入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyFlowQueryListCommand 查询集合代理流量对象参数
|
||||
* @return {@link LazyProxyFlow} 代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);
|
||||
/**
|
||||
* describe 应用层删除入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyFlowRemoveCommand 删除代理流量对象参数
|
||||
* @return {@link LazyProxyFlow} 代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand);
|
||||
/**
|
||||
* describe 持久层领域对象转换成DTO对象
|
||||
*
|
||||
* @param lazyProxyFlow 代理流量领域对象
|
||||
* @return {@link LazyProxyFlowDTO} 代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlowDTO fromLazyProxyFlow(LazyProxyFlow lazyProxyFlow);
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRemoveCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowUpdateCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryListCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryOneCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyPerDayFlowDTO;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
import org.mapstruct.Mapper;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler
|
||||
**/
|
||||
@Mapper
|
||||
public interface LazyProxyPerDayFlowDTOAssembler {
|
||||
|
||||
|
||||
/**
|
||||
* describe MapStruct 创建的代理对象
|
||||
*
|
||||
|
||||
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlowDTOAssembler INSTANCE = Mappers.getMapper(LazyProxyPerDayFlowDTOAssembler.class);
|
||||
/**
|
||||
* describe 应用层存储入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyPerDayFlowStoryCommand 保存每日统计代理流量对象
|
||||
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand);
|
||||
/**
|
||||
* describe 应用层更新入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyPerDayFlowUpdateCommand 更新每日统计代理流量对象
|
||||
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowUpdateCommand lazyProxyPerDayFlowUpdateCommand);
|
||||
/**
|
||||
* describe 应用层查询入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryOneCommand 查询单个每日统计代理流量对象参数
|
||||
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowQueryOneCommand lazyProxyPerDayFlowQueryOneCommand);
|
||||
/**
|
||||
* describe 应用层查询入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryListCommand 查询集合每日统计代理流量对象参数
|
||||
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand);
|
||||
/**
|
||||
* describe 应用层删除入参转换成 领域对象
|
||||
*
|
||||
* @param lazyProxyPerDayFlowRemoveCommand 删除每日统计代理流量对象参数
|
||||
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowRemoveCommand lazyProxyPerDayFlowRemoveCommand);
|
||||
/**
|
||||
* describe 持久层领域对象转换成DTO对象
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 每日统计代理流量领域对象
|
||||
* @return {@link LazyProxyPerDayFlowDTO} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlowDTO fromLazyProxyPerDayFlow(LazyProxyPerDayFlow lazyProxyPerDayFlow);
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_flow_query_List_command",description = "代理流量")
|
||||
public class LazyProxyFlowQueryListCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_flow_query_one_command",description = "代理流量")
|
||||
public class LazyProxyFlowQueryOneCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_flow_remove_command",description = "代理流量")
|
||||
public class LazyProxyFlowRemoveCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_flow_story_command",description = "代理流量")
|
||||
public class LazyProxyFlowStoryCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_flow_update_command",description = "代理流量")
|
||||
public class LazyProxyFlowUpdateCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_per_day_flow_query_List_command",description = "每日统计代理流量")
|
||||
public class LazyProxyPerDayFlowQueryListCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description ="创建时间",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 日期
|
||||
*/
|
||||
@Schema(description ="日期",name ="day",example = "")
|
||||
private String day;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 修改时间
|
||||
*/
|
||||
@Schema(description ="修改时间",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_per_day_flow_query_one_command",description = "每日统计代理流量")
|
||||
public class LazyProxyPerDayFlowQueryOneCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description ="创建时间",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 日期
|
||||
*/
|
||||
@Schema(description ="日期",name ="day",example = "")
|
||||
private String day;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 修改时间
|
||||
*/
|
||||
@Schema(description ="修改时间",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_per_day_flow_remove_command",description = "每日统计代理流量")
|
||||
public class LazyProxyPerDayFlowRemoveCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description ="创建时间",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 日期
|
||||
*/
|
||||
@Schema(description ="日期",name ="day",example = "")
|
||||
private String day;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 修改时间
|
||||
*/
|
||||
@Schema(description ="修改时间",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_per_day_flow_story_command",description = "每日统计代理流量")
|
||||
public class LazyProxyPerDayFlowStoryCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description ="创建时间",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 日期
|
||||
*/
|
||||
@Schema(description ="日期",name ="day",example = "")
|
||||
private String day;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 修改时间
|
||||
*/
|
||||
@Schema(description ="修改时间",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_per_day_flow_update_command",description = "每日统计代理流量")
|
||||
public class LazyProxyPerDayFlowUpdateCommand {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description ="创建时间",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 日期
|
||||
*/
|
||||
@Schema(description ="日期",name ="day",example = "")
|
||||
private String day;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 修改时间
|
||||
*/
|
||||
@Schema(description ="修改时间",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.wu.framework.core.utils.ByteSizeUtil;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_flow_command_dto", description = "代理流量")
|
||||
public class LazyClientProxyFlowDTO {
|
||||
|
||||
|
||||
/**
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description = "客户端ID", name = "clientId", example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Schema(description = "", name = "createTime", example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description = "主键", name = "id", example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description = "当前访客当前进口流量", name = "inFlow", example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description = "目标ip", name = "ip", example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description = "是否删除", name = "isDeleted", example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description = "当前访客出口流量", name = "outFlow", example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description = "目标端口", name = "port", example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description = "协议类型", name = "protocolType", example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description = "代理类型", name = "proxyType", example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description = "服务端ID", name = "serverId", example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Schema(description = "", name = "updateTime", example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
public Integer getInFlowSize() {
|
||||
if (inFlow == null) return 0;
|
||||
return inFlow;
|
||||
}
|
||||
|
||||
public Integer getOutFlowSize() {
|
||||
if (outFlow == null) return 0;
|
||||
return outFlow;
|
||||
}
|
||||
|
||||
public String getInFlow() {
|
||||
if (inFlow == null) return "0b";
|
||||
return ByteSizeUtil.convertSize(inFlow);
|
||||
}
|
||||
|
||||
public String getOutFlow() {
|
||||
if (outFlow == null) return "0b";
|
||||
return ByteSizeUtil.convertSize(outFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前访客下所有端口的流量
|
||||
*/
|
||||
@Schema(description = "当前访客下所有端口的流量")
|
||||
private List<LazyProxyFlowDTO> lazyProxyFlowDTOList;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.wu.framework.core.utils.ByteSizeUtil;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_flow_command_dto", description = "代理流量")
|
||||
public class LazyProxyFlowDTO {
|
||||
|
||||
|
||||
/**
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description = "客户端ID", name = "clientId", example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Schema(description = "", name = "createTime", example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description = "主键", name = "id", example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description = "当前访客当前进口流量", name = "inFlow", example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description = "目标ip", name = "ip", example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description = "是否删除", name = "isDeleted", example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description = "当前访客出口流量", name = "outFlow", example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description = "目标端口", name = "port", example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description = "协议类型", name = "protocolType", example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description = "代理类型", name = "proxyType", example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description = "服务端ID", name = "serverId", example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Schema(description = "", name = "updateTime", example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
public Integer getInFlowSize() {
|
||||
if (inFlow == null) return 0;
|
||||
return inFlow;
|
||||
}
|
||||
|
||||
public Integer getOutFlowSize() {
|
||||
if (outFlow == null) return 0;
|
||||
return outFlow;
|
||||
}
|
||||
|
||||
public String getInFlow() {
|
||||
if (inFlow == null) return "0b";
|
||||
return ByteSizeUtil.convertSize(inFlow);
|
||||
}
|
||||
|
||||
public String getOutFlow() {
|
||||
if (outFlow == null) return "0b";
|
||||
return ByteSizeUtil.convertSize(outFlow);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_per_day_flow_command_dto",description = "每日统计代理流量")
|
||||
public class LazyProxyPerDayFlowDTO {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description ="创建时间",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 日期
|
||||
*/
|
||||
@Schema(description ="日期",name ="day",example = "")
|
||||
private String day;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 修改时间
|
||||
*/
|
||||
@Schema(description ="修改时间",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,300 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.impl;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler.LazyProxyFlowDTOAssembler;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler.LazyProxyPerDayFlowDTOAssembler;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.*;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientProxyFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlowRepository;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRepository;
|
||||
import org.wu.framework.core.utils.ObjectUtils;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
import org.wu.framework.lazy.orm.web.plus.stereotype.LazyApplication;
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.response.ResultFactory;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl
|
||||
**/
|
||||
@LazyApplication
|
||||
public class LazyProxyFlowApplicationImpl implements LazyProxyFlowApplication {
|
||||
|
||||
@Resource
|
||||
LazyProxyFlowRepository lazyProxyFlowRepository;
|
||||
@Resource
|
||||
LazyProxyPerDayFlowRepository lazyProxyPerDayFlowRepository;
|
||||
|
||||
@Resource
|
||||
ServerNodeProperties serverNodeProperties;
|
||||
|
||||
/**
|
||||
* describe 新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommand 新增代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyFlow> story(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand) {
|
||||
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowStoryCommand);
|
||||
String serverId = serverNodeProperties.getNodeId();
|
||||
lazyProxyFlow.setServerId(serverId);
|
||||
return lazyProxyFlowRepository.story(lazyProxyFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* 流量增长存储
|
||||
* 访客 ID 访客 端口必须
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommand 代理流量
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Result<LazyProxyFlow> flowIncreaseStory(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand) {
|
||||
String clientId = lazyProxyFlowStoryCommand.getClientId();
|
||||
String ip = lazyProxyFlowStoryCommand.getIp();
|
||||
ChannelProtocolType protocolType = lazyProxyFlowStoryCommand.getProtocolType();
|
||||
ChannelProxyType proxyType = lazyProxyFlowStoryCommand.getProxyType();
|
||||
Integer port = lazyProxyFlowStoryCommand.getPort();
|
||||
String serverId = serverNodeProperties.getNodeId();
|
||||
lazyProxyFlowStoryCommand.setServerId(serverId);
|
||||
|
||||
Integer realOutFlow = ObjectUtils.isEmpty(lazyProxyFlowStoryCommand.getOutFlow()) ? 0 : lazyProxyFlowStoryCommand.getOutFlow();
|
||||
Integer realInFlow = ObjectUtils.isEmpty(lazyProxyFlowStoryCommand.getInFlow()) ? 0 : lazyProxyFlowStoryCommand.getInFlow();
|
||||
// 查询是否存在已有流量 而后进行统计汇总
|
||||
LazyProxyFlow findOneLazyProxyFlowQuery = new LazyProxyFlow();
|
||||
findOneLazyProxyFlowQuery.setClientId(clientId);
|
||||
findOneLazyProxyFlowQuery.setPort(port);
|
||||
findOneLazyProxyFlowQuery.setIp(ip);
|
||||
findOneLazyProxyFlowQuery.setProtocolType(protocolType);
|
||||
findOneLazyProxyFlowQuery.setProxyType(proxyType);
|
||||
|
||||
findOneLazyProxyFlowQuery.setServerId(serverId);
|
||||
lazyProxyFlowRepository.findOne(findOneLazyProxyFlowQuery).accept(existVisitorFlow -> {
|
||||
Integer inFlow = existVisitorFlow.getInFlow();
|
||||
Integer outFlow = existVisitorFlow.getOutFlow();
|
||||
if (!ObjectUtils.isEmpty(inFlow)) {
|
||||
lazyProxyFlowStoryCommand.setInFlow(realInFlow + inFlow);
|
||||
}
|
||||
if (!ObjectUtils.isEmpty(outFlow)) {
|
||||
lazyProxyFlowStoryCommand.setOutFlow(realOutFlow + outFlow);
|
||||
}
|
||||
});
|
||||
LazyProxyFlow lazyLazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowStoryCommand);
|
||||
lazyProxyFlowRepository.story(lazyLazyProxyFlow);
|
||||
|
||||
// 日流量统计
|
||||
LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand = new LazyProxyPerDayFlowStoryCommand();
|
||||
lazyProxyPerDayFlowStoryCommand.setClientId(clientId);
|
||||
lazyProxyPerDayFlowStoryCommand.setPort(port);
|
||||
lazyProxyPerDayFlowStoryCommand.setIp(ip);
|
||||
lazyProxyPerDayFlowStoryCommand.setProtocolType(protocolType);
|
||||
lazyProxyPerDayFlowStoryCommand.setProxyType(proxyType);
|
||||
lazyProxyPerDayFlowStoryCommand.setDay(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
|
||||
lazyProxyPerDayFlowStoryCommand.setOutFlow(realOutFlow);
|
||||
lazyProxyPerDayFlowStoryCommand.setInFlow(realInFlow);
|
||||
lazyProxyPerDayFlowStoryCommand.setServerId(serverId);
|
||||
|
||||
LazyProxyPerDayFlow findOneLazyProxyPerDayFlowQuery = new LazyProxyPerDayFlow();
|
||||
findOneLazyProxyPerDayFlowQuery.setClientId(clientId);
|
||||
findOneLazyProxyPerDayFlowQuery.setPort(port);
|
||||
findOneLazyProxyPerDayFlowQuery.setDay(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
findOneLazyProxyPerDayFlowQuery.setServerId(serverId);
|
||||
findOneLazyProxyPerDayFlowQuery.setIp(ip);
|
||||
findOneLazyProxyPerDayFlowQuery.setProtocolType(protocolType);
|
||||
findOneLazyProxyPerDayFlowQuery.setProxyType(proxyType);
|
||||
|
||||
lazyProxyPerDayFlowRepository.findOne(findOneLazyProxyPerDayFlowQuery).accept(existLazyProxyPerDayFlow -> {
|
||||
Integer inFlow = existLazyProxyPerDayFlow.getInFlow();
|
||||
Integer outFlow = existLazyProxyPerDayFlow.getOutFlow();
|
||||
if (!ObjectUtils.isEmpty(inFlow)) {
|
||||
lazyProxyPerDayFlowStoryCommand.setInFlow(realInFlow + inFlow);
|
||||
}
|
||||
if (!ObjectUtils.isEmpty(outFlow)) {
|
||||
lazyProxyPerDayFlowStoryCommand.setOutFlow(realOutFlow + outFlow);
|
||||
}
|
||||
});
|
||||
LazyProxyPerDayFlow lazyVisitorPortPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowStoryCommand);
|
||||
lazyProxyPerDayFlowRepository.story(lazyVisitorPortPerDayFlow);
|
||||
|
||||
return ResultFactory.successOf();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* describe 批量新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommandList 批量新增代理流量
|
||||
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlowStoryCommand> lazyProxyFlowStoryCommandList) {
|
||||
|
||||
List<LazyProxyFlow> lazyProxyFlowList = lazyProxyFlowStoryCommandList
|
||||
.stream()
|
||||
.map(lazyProxyFlowStoryCommand -> {
|
||||
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowStoryCommand);
|
||||
String serverId = serverNodeProperties.getNodeId();
|
||||
lazyProxyFlow.setServerId(serverId);
|
||||
return lazyProxyFlow;
|
||||
}
|
||||
|
||||
)
|
||||
.collect(Collectors.toList());
|
||||
return lazyProxyFlowRepository.batchStory(lazyProxyFlowList);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 更新代理流量
|
||||
*
|
||||
* @param lazyProxyFlowUpdateCommand 更新代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyFlow> updateOne(LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand) {
|
||||
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowUpdateCommand);
|
||||
return lazyProxyFlowRepository.story(lazyProxyFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询单个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryOneCommand 查询单个代理流量
|
||||
* @return {@link Result<LazyProxyFlowDTO>} 代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyFlowDTO> findOne(LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand) {
|
||||
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowQueryOneCommand);
|
||||
return lazyProxyFlowRepository.findOne(lazyProxyFlow).convert(LazyProxyFlowDTOAssembler.INSTANCE::fromLazyProxyFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询多个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryListCommand 查询多个代理流量
|
||||
* @return {@link Result<List<LazyProxyFlowDTO>>} 代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<List<LazyProxyFlowDTO>> findList(LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
|
||||
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowQueryListCommand);
|
||||
return lazyProxyFlowRepository.findList(lazyProxyFlow).convert(lazyProxyFlows -> lazyProxyFlows.stream().map(LazyProxyFlowDTOAssembler.INSTANCE::fromLazyProxyFlow).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 分页查询多个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryListCommand 分页查询多个代理流量
|
||||
* @return {@link Result<LazyPage<LazyProxyFlowDTO>>} 分页代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyPage<LazyProxyFlowDTO>> findPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
|
||||
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowQueryListCommand);
|
||||
return lazyProxyFlowRepository.findPage(size, current, lazyProxyFlow).convert(page -> page.convert(LazyProxyFlowDTOAssembler.INSTANCE::fromLazyProxyFlow));
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 删除代理流量
|
||||
*
|
||||
* @param lazyProxyFlowRemoveCommand 删除代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyFlow> remove(LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand) {
|
||||
LazyProxyFlow lazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowRemoveCommand);
|
||||
return lazyProxyFlowRepository.remove(lazyProxyFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据客户端查询流量
|
||||
*
|
||||
* @param size 分页大小
|
||||
* @param current 分页
|
||||
* @param lazyProxyFlowQueryListCommand 查询条件
|
||||
* @return {@link Result<LazyPage< LazyVisitorFlowDTO >>} 分页访客端流量DTO对象
|
||||
*/
|
||||
@Override
|
||||
public Result<LazyPage<LazyClientProxyFlowDTO>> findClientFlowPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
|
||||
LazyProxyFlow lazyLazyProxyFlow = LazyProxyFlowDTOAssembler.INSTANCE.toLazyProxyFlow(lazyProxyFlowQueryListCommand);
|
||||
String serverId = serverNodeProperties.getNodeId();
|
||||
lazyLazyProxyFlow.setServerId(serverId);
|
||||
return lazyProxyFlowRepository.findPageGroupByClientId(size, current, lazyLazyProxyFlow).convert(lazyProxyFlowLazyPage -> {
|
||||
List<String> clientIdList = lazyProxyFlowLazyPage
|
||||
.getRecords()
|
||||
.stream()
|
||||
.map(LazyProxyFlow::getClientId)
|
||||
.toList();
|
||||
List<LazyProxyFlow> lazyLazyProxyFlowList = lazyProxyFlowRepository.findListByClientIds(clientIdList, serverId);
|
||||
|
||||
|
||||
// 根据客户端进行分组
|
||||
|
||||
List<LazyProxyFlowDTO> lazyLazyProxyFlowDTOList = lazyLazyProxyFlowList.stream().map(LazyProxyFlowDTOAssembler.INSTANCE::fromLazyProxyFlow).toList();
|
||||
|
||||
|
||||
Map<String/*客户端ID*/, List<LazyProxyFlowDTO>> client_port_flow_map = lazyLazyProxyFlowDTOList.stream().collect(Collectors.groupingBy(LazyProxyFlowDTO::getClientId));
|
||||
|
||||
Map<String/*客户端ID*/, Integer/*客户端进口流量*/> client_in_flow = lazyLazyProxyFlowDTOList.stream()
|
||||
.collect(
|
||||
Collectors.groupingBy(LazyProxyFlowDTO::getClientId,
|
||||
Collectors.summingInt(LazyProxyFlowDTO::getInFlowSize)));
|
||||
|
||||
Map<String/*客户端ID*/, Integer/*客户端出口流量*/> client_out_flow = lazyLazyProxyFlowDTOList.stream()
|
||||
.collect(
|
||||
Collectors.groupingBy(LazyProxyFlowDTO::getClientId,
|
||||
Collectors.summingInt(LazyProxyFlowDTO::getOutFlowSize)));
|
||||
|
||||
return lazyProxyFlowLazyPage.convert(lazyProxyFlow -> {
|
||||
String clientId = lazyProxyFlow.getClientId();
|
||||
LazyClientProxyFlowDTO lazyClientProxyFlowDTO = new LazyClientProxyFlowDTO();
|
||||
lazyClientProxyFlowDTO.setClientId(clientId);
|
||||
lazyClientProxyFlowDTO.setInFlow(client_in_flow.getOrDefault(clientId, 0));
|
||||
lazyClientProxyFlowDTO.setOutFlow(client_out_flow.getOrDefault(clientId, 0));
|
||||
lazyClientProxyFlowDTO.setLazyProxyFlowDTOList(client_port_flow_map.getOrDefault(clientId, new ArrayList<>()));
|
||||
return lazyClientProxyFlowDTO;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.impl;
|
||||
|
||||
import org.wu.framework.lazy.orm.web.plus.stereotype.LazyApplication;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyPerDayFlowApplication;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.response.ResultFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRemoveCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowUpdateCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryListCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryOneCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler.LazyProxyPerDayFlowDTOAssembler;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyPerDayFlowDTO;
|
||||
import java.util.stream.Collectors;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRepository;
|
||||
import java.util.List;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl
|
||||
**/
|
||||
@LazyApplication
|
||||
public class LazyProxyPerDayFlowApplicationImpl implements LazyProxyPerDayFlowApplication {
|
||||
|
||||
@Resource
|
||||
LazyProxyPerDayFlowRepository lazyProxyPerDayFlowRepository;
|
||||
/**
|
||||
* describe 新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowStoryCommand 新增每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyPerDayFlow> story(LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand) {
|
||||
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowStoryCommand);
|
||||
return lazyProxyPerDayFlowRepository.story(lazyProxyPerDayFlow);
|
||||
}
|
||||
/**
|
||||
* describe 批量新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowStoryCommandList 批量新增每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<List<LazyProxyPerDayFlow>> batchStory(List<LazyProxyPerDayFlowStoryCommand> lazyProxyPerDayFlowStoryCommandList) {
|
||||
List<LazyProxyPerDayFlow> lazyProxyPerDayFlowList = lazyProxyPerDayFlowStoryCommandList.stream().map( LazyProxyPerDayFlowDTOAssembler.INSTANCE::toLazyProxyPerDayFlow).collect(Collectors.toList());
|
||||
return lazyProxyPerDayFlowRepository.batchStory(lazyProxyPerDayFlowList);
|
||||
}
|
||||
/**
|
||||
* describe 更新每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowUpdateCommand 更新每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyPerDayFlow> updateOne(LazyProxyPerDayFlowUpdateCommand lazyProxyPerDayFlowUpdateCommand) {
|
||||
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowUpdateCommand);
|
||||
return lazyProxyPerDayFlowRepository.story(lazyProxyPerDayFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询单个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryOneCommand 查询单个每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlowDTO>} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyPerDayFlowDTO> findOne(LazyProxyPerDayFlowQueryOneCommand lazyProxyPerDayFlowQueryOneCommand) {
|
||||
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowQueryOneCommand);
|
||||
return lazyProxyPerDayFlowRepository.findOne(lazyProxyPerDayFlow).convert(LazyProxyPerDayFlowDTOAssembler.INSTANCE::fromLazyProxyPerDayFlow);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询多个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryListCommand 查询多个每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlowDTO>>} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<List<LazyProxyPerDayFlowDTO>> findList(LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand) {
|
||||
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowQueryListCommand);
|
||||
return lazyProxyPerDayFlowRepository.findList(lazyProxyPerDayFlow) .convert(lazyProxyPerDayFlows -> lazyProxyPerDayFlows.stream().map(LazyProxyPerDayFlowDTOAssembler.INSTANCE::fromLazyProxyPerDayFlow).collect(Collectors.toList())) ;
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 分页查询多个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryListCommand 分页查询多个每日统计代理流量
|
||||
* @return {@link Result<LazyPage<LazyProxyPerDayFlowDTO>>} 分页每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyPage<LazyProxyPerDayFlowDTO>> findPage(int size,int current,LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand) {
|
||||
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowQueryListCommand);
|
||||
return lazyProxyPerDayFlowRepository.findPage(size,current,lazyProxyPerDayFlow) .convert(page -> page.convert(LazyProxyPerDayFlowDTOAssembler.INSTANCE::fromLazyProxyPerDayFlow)) ;
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 删除每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowRemoveCommand 删除每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyPerDayFlow> remove(LazyProxyPerDayFlowRemoveCommand lazyProxyPerDayFlowRemoveCommand) {
|
||||
LazyProxyPerDayFlow lazyProxyPerDayFlow = LazyProxyPerDayFlowDTOAssembler.INSTANCE.toLazyProxyPerDayFlow(lazyProxyPerDayFlowRemoveCommand);
|
||||
return lazyProxyPerDayFlowRepository.remove(lazyProxyPerDayFlow);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.controller;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyFlowApplication;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.*;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientProxyFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.spring.EasyController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController
|
||||
**/
|
||||
@Tag(name = "代理流量提供者")
|
||||
@EasyController("/lazy/proxy/flow")
|
||||
public class LazyProxyFlowProvider {
|
||||
|
||||
@Resource
|
||||
private LazyProxyFlowApplication lazyProxyFlowApplication;
|
||||
|
||||
/**
|
||||
* describe 新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommand 新增代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "新增代理流量")
|
||||
@PostMapping("/story")
|
||||
public Result<LazyProxyFlow> story(@RequestBody LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand) {
|
||||
return lazyProxyFlowApplication.story(lazyProxyFlowStoryCommand);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 批量新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlowStoryCommandList 批量新增代理流量
|
||||
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "批量新增代理流量")
|
||||
@PostMapping("/batchStory")
|
||||
public Result<List<LazyProxyFlow>> batchStory(@RequestBody List<LazyProxyFlowStoryCommand> lazyProxyFlowStoryCommandList) {
|
||||
return lazyProxyFlowApplication.batchStory(lazyProxyFlowStoryCommandList);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 更新代理流量
|
||||
*
|
||||
* @param lazyProxyFlowUpdateCommand 更新代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "更新代理流量")
|
||||
@PutMapping("/updateOne")
|
||||
public Result<LazyProxyFlow> updateOne(@RequestBody LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand) {
|
||||
return lazyProxyFlowApplication.updateOne(lazyProxyFlowUpdateCommand);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询单个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryOneCommand 查询单个代理流量
|
||||
* @return {@link Result<LazyProxyFlowDTO>} 代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "查询单个代理流量")
|
||||
@GetMapping("/findOne")
|
||||
public Result<LazyProxyFlowDTO> findOne(@ModelAttribute LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand) {
|
||||
return lazyProxyFlowApplication.findOne(lazyProxyFlowQueryOneCommand);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询多个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryListCommand 查询多个代理流量
|
||||
* @return {@link Result<List<LazyProxyFlowDTO>>} 代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "查询多个代理流量")
|
||||
@GetMapping("/findList")
|
||||
public Result<List<LazyProxyFlowDTO>> findList(@ModelAttribute LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
|
||||
return lazyProxyFlowApplication.findList(lazyProxyFlowQueryListCommand);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 分页查询多个代理流量
|
||||
*
|
||||
* @param lazyProxyFlowQueryListCommand 分页查询多个代理流量
|
||||
* @return {@link Result<LazyPage<LazyProxyFlowDTO>>} 分页代理流量DTO对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "分页查询多个代理流量")
|
||||
@GetMapping("/findPage")
|
||||
public Result<LazyPage<LazyProxyFlowDTO>> findPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size,
|
||||
@Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
|
||||
return lazyProxyFlowApplication.findPage(size, current, lazyProxyFlowQueryListCommand);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据客户端查询流量
|
||||
*
|
||||
* @param size 分页大小
|
||||
* @param current 分页
|
||||
* @param lazyProxyFlowQueryListCommand 查询条件
|
||||
* @return {@link Result<LazyPage< LazyVisitorFlowDTO >>} 分页访客端流量DTO对象
|
||||
*/
|
||||
@Operation(summary = "分页查询多个访客端流量")
|
||||
@GetMapping("/findClientFlowPage")
|
||||
public Result<LazyPage<LazyClientProxyFlowDTO>> findClientFlowPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size,
|
||||
@Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current,
|
||||
@ModelAttribute LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand) {
|
||||
return lazyProxyFlowApplication.findClientFlowPage(size, current, lazyProxyFlowQueryListCommand);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 删除代理流量
|
||||
*
|
||||
* @param lazyProxyFlowRemoveCommand 删除代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "删除代理流量")
|
||||
@DeleteMapping("/remove")
|
||||
public Result<LazyProxyFlow> remove(@ModelAttribute LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand) {
|
||||
return lazyProxyFlowApplication.remove(lazyProxyFlowRemoveCommand);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.controller;
|
||||
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import org.wu.framework.web.spring.EasyController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.response.ResultFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRemoveCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowStoryCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowUpdateCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryListCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.per.day.flow.LazyProxyPerDayFlowQueryOneCommand;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyProxyPerDayFlowApplication;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyPerDayFlowDTO;
|
||||
import java.util.List;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController
|
||||
**/
|
||||
@Tag(name = "每日统计代理流量提供者")
|
||||
@EasyController("/lazy/proxy/per/day/flow")
|
||||
public class LazyProxyPerDayFlowProvider {
|
||||
|
||||
@Resource
|
||||
private LazyProxyPerDayFlowApplication lazyProxyPerDayFlowApplication;
|
||||
|
||||
/**
|
||||
* describe 新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowStoryCommand 新增每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "新增每日统计代理流量")
|
||||
@PostMapping("/story")
|
||||
public Result<LazyProxyPerDayFlow> story(@RequestBody LazyProxyPerDayFlowStoryCommand lazyProxyPerDayFlowStoryCommand){
|
||||
return lazyProxyPerDayFlowApplication.story(lazyProxyPerDayFlowStoryCommand);
|
||||
}
|
||||
/**
|
||||
* describe 批量新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowStoryCommandList 批量新增每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "批量新增每日统计代理流量")
|
||||
@PostMapping("/batchStory")
|
||||
public Result<List<LazyProxyPerDayFlow>> batchStory(@RequestBody List<LazyProxyPerDayFlowStoryCommand> lazyProxyPerDayFlowStoryCommandList){
|
||||
return lazyProxyPerDayFlowApplication.batchStory(lazyProxyPerDayFlowStoryCommandList);
|
||||
}
|
||||
/**
|
||||
* describe 更新每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowUpdateCommand 更新每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "更新每日统计代理流量")
|
||||
@PutMapping("/updateOne")
|
||||
public Result<LazyProxyPerDayFlow> updateOne(@RequestBody LazyProxyPerDayFlowUpdateCommand lazyProxyPerDayFlowUpdateCommand){
|
||||
return lazyProxyPerDayFlowApplication.updateOne(lazyProxyPerDayFlowUpdateCommand);
|
||||
}
|
||||
/**
|
||||
* describe 查询单个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryOneCommand 查询单个每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlowDTO>} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "查询单个每日统计代理流量")
|
||||
@GetMapping("/findOne")
|
||||
public Result<LazyProxyPerDayFlowDTO> findOne(@ModelAttribute LazyProxyPerDayFlowQueryOneCommand lazyProxyPerDayFlowQueryOneCommand){
|
||||
return lazyProxyPerDayFlowApplication.findOne(lazyProxyPerDayFlowQueryOneCommand);
|
||||
}
|
||||
/**
|
||||
* describe 查询多个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryListCommand 查询多个每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlowDTO>>} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "查询多个每日统计代理流量")
|
||||
@GetMapping("/findList")
|
||||
public Result<List<LazyProxyPerDayFlowDTO>> findList(@ModelAttribute LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand){
|
||||
return lazyProxyPerDayFlowApplication.findList(lazyProxyPerDayFlowQueryListCommand);
|
||||
}
|
||||
/**
|
||||
* describe 分页查询多个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowQueryListCommand 分页查询多个每日统计代理流量
|
||||
* @return {@link Result<LazyPage<LazyProxyPerDayFlowDTO>>} 分页每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "分页查询多个每日统计代理流量")
|
||||
@GetMapping("/findPage")
|
||||
public Result<LazyPage<LazyProxyPerDayFlowDTO>> findPage(@Parameter(description ="分页大小") @RequestParam(defaultValue = "10", value = "size") int size,
|
||||
@Parameter(description ="当前页数") @RequestParam(defaultValue = "1", value = "current") int current,@ModelAttribute LazyProxyPerDayFlowQueryListCommand lazyProxyPerDayFlowQueryListCommand){
|
||||
return lazyProxyPerDayFlowApplication.findPage(size,current,lazyProxyPerDayFlowQueryListCommand);
|
||||
}
|
||||
/**
|
||||
* describe 删除每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowRemoveCommand 删除每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Operation(summary = "删除每日统计代理流量")
|
||||
@DeleteMapping("/remove")
|
||||
public Result<LazyProxyPerDayFlow> remove(@ModelAttribute LazyProxyPerDayFlowRemoveCommand lazyProxyPerDayFlowRemoveCommand){
|
||||
return lazyProxyPerDayFlowApplication.remove(lazyProxyPerDayFlowRemoveCommand);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_flow",description = "代理流量")
|
||||
public class LazyProxyFlow {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.visitor.flow.LazyVisitorPortFlow;
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.response.ResultFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
|
||||
import java.util.List;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository
|
||||
**/
|
||||
|
||||
public interface LazyProxyFlowRepository {
|
||||
|
||||
|
||||
/**
|
||||
* describe 新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 新增代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyFlow> story(LazyProxyFlow lazyProxyFlow);
|
||||
|
||||
/**
|
||||
* describe 批量新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlowList 批量新增代理流量
|
||||
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlow> lazyProxyFlowList);
|
||||
|
||||
/**
|
||||
* describe 查询单个代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 查询单个代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyFlow> findOne(LazyProxyFlow lazyProxyFlow);
|
||||
|
||||
/**
|
||||
* describe 查询多个代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 查询多个代理流量
|
||||
* @return {@link Result<List<LazyProxyFlow>>} 代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<List<LazyProxyFlow>> findList(LazyProxyFlow lazyProxyFlow);
|
||||
|
||||
/**
|
||||
* describe 分页查询多个代理流量
|
||||
*
|
||||
* @param size 当前页数
|
||||
* @param current 当前页
|
||||
* @param lazyProxyFlow 分页查询多个代理流量
|
||||
* @return {@link Result<LazyPage<LazyProxyFlow>>} 分页代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyPage<LazyProxyFlow>> findPage(int size,int current,LazyProxyFlow lazyProxyFlow);
|
||||
|
||||
/**
|
||||
* describe 删除代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 删除代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyFlow> remove(LazyProxyFlow lazyProxyFlow);
|
||||
|
||||
/**
|
||||
* describe 是否存在代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 是否存在代理流量
|
||||
* @return {@link Result<Boolean>} 代理流量是否存在
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<Boolean> exists(LazyProxyFlow lazyProxyFlow);
|
||||
|
||||
/**
|
||||
* 根据客户端查询流量
|
||||
*
|
||||
* @param size 分页大小
|
||||
* @param current 分页
|
||||
* @param lazyProxyFlow 查询条件
|
||||
* @return {@link Result<LazyPage<LazyProxyFlow>>} 分页访客端流量DTO对象
|
||||
*/
|
||||
Result<LazyPage<LazyProxyFlow>> findPageGroupByClientId(int size, int current, LazyProxyFlow lazyProxyFlow);
|
||||
|
||||
/**
|
||||
* 根据客户端ID查询出 客户端所有的进出口流量
|
||||
*
|
||||
* @param clientIdList 客户端ID
|
||||
* @param serverId 服务ID
|
||||
* @return 客户端所有的进出口流量
|
||||
*/
|
||||
List<LazyProxyFlow> findListByClientIds(List<String> clientIdList, String serverId);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "lazy_proxy_per_day_flow",description = "每日统计代理流量")
|
||||
public class LazyProxyPerDayFlow {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description ="创建时间",name ="createTime",example = "")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 日期
|
||||
*/
|
||||
@Schema(description ="日期",name ="day",example = "")
|
||||
private String day;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 修改时间
|
||||
*/
|
||||
@Schema(description ="修改时间",name ="updateTime",example = "")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow;
|
||||
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.response.ResultFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
|
||||
import java.util.List;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository
|
||||
**/
|
||||
|
||||
public interface LazyProxyPerDayFlowRepository {
|
||||
|
||||
|
||||
/**
|
||||
* describe 新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 新增每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyPerDayFlow> story(LazyProxyPerDayFlow lazyProxyPerDayFlow);
|
||||
|
||||
/**
|
||||
* describe 批量新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowList 批量新增每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<List<LazyProxyPerDayFlow>> batchStory(List<LazyProxyPerDayFlow> lazyProxyPerDayFlowList);
|
||||
|
||||
/**
|
||||
* describe 查询单个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 查询单个每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyPerDayFlow> findOne(LazyProxyPerDayFlow lazyProxyPerDayFlow);
|
||||
|
||||
/**
|
||||
* describe 查询多个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 查询多个每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量DTO对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<List<LazyProxyPerDayFlow>> findList(LazyProxyPerDayFlow lazyProxyPerDayFlow);
|
||||
|
||||
/**
|
||||
* describe 分页查询多个每日统计代理流量
|
||||
*
|
||||
* @param size 当前页数
|
||||
* @param current 当前页
|
||||
* @param lazyProxyPerDayFlow 分页查询多个每日统计代理流量
|
||||
* @return {@link Result<LazyPage<LazyProxyPerDayFlow>>} 分页每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyPage<LazyProxyPerDayFlow>> findPage(int size,int current,LazyProxyPerDayFlow lazyProxyPerDayFlow);
|
||||
|
||||
/**
|
||||
* describe 删除每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 删除每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<LazyProxyPerDayFlow> remove(LazyProxyPerDayFlow lazyProxyPerDayFlow);
|
||||
|
||||
/**
|
||||
* describe 是否存在每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 是否存在每日统计代理流量
|
||||
* @return {@link Result<Boolean>} 每日统计代理流量是否存在
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
Result<Boolean> exists(LazyProxyPerDayFlow lazyProxyPerDayFlow);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyFlowDO;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
import org.mapstruct.Mapper;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter
|
||||
**/
|
||||
@Mapper
|
||||
public interface LazyProxyFlowConverter {
|
||||
|
||||
|
||||
/**
|
||||
* describe MapStruct 创建的代理对象
|
||||
*
|
||||
|
||||
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlowConverter INSTANCE = Mappers.getMapper(LazyProxyFlowConverter.class);
|
||||
/**
|
||||
* describe 实体对象 转换成领域对象
|
||||
*
|
||||
* @param lazyProxyFlowDO 代理流量实体对象
|
||||
* @return {@link LazyProxyFlow} 代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlow toLazyProxyFlow(LazyProxyFlowDO lazyProxyFlowDO);
|
||||
/**
|
||||
* describe 领域对象 转换成实体对象
|
||||
*
|
||||
* @param lazyProxyFlow 代理流量领域对象
|
||||
* @return {@link LazyProxyFlowDO} 代理流量实体对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyFlowDO fromLazyProxyFlow(LazyProxyFlow lazyProxyFlow);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyPerDayFlowDO;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
import org.mapstruct.Mapper;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter
|
||||
**/
|
||||
@Mapper
|
||||
public interface LazyProxyPerDayFlowConverter {
|
||||
|
||||
|
||||
/**
|
||||
* describe MapStruct 创建的代理对象
|
||||
*
|
||||
|
||||
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlowConverter INSTANCE = Mappers.getMapper(LazyProxyPerDayFlowConverter.class);
|
||||
/**
|
||||
* describe 实体对象 转换成领域对象
|
||||
*
|
||||
* @param lazyProxyPerDayFlowDO 每日统计代理流量实体对象
|
||||
* @return {@link LazyProxyPerDayFlow} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlow toLazyProxyPerDayFlow(LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO);
|
||||
/**
|
||||
* describe 领域对象 转换成实体对象
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 每日统计代理流量领域对象
|
||||
* @return {@link LazyProxyPerDayFlowDO} 每日统计代理流量实体对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
LazyProxyPerDayFlowDO fromLazyProxyPerDayFlow(LazyProxyPerDayFlow lazyProxyPerDayFlow);
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.LazyTableIndex;
|
||||
import org.wu.framework.core.stereotype.LayerField;
|
||||
import org.wu.framework.core.stereotype.LayerField.LayerFieldType;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.LazyTable;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.LazyTableField;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.LazyTableFieldId;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@LazyTable(tableName = "lazy_proxy_flow",comment = "代理流量")
|
||||
@Schema(title = "lazy_proxy_flow",description = "代理流量")
|
||||
public class LazyProxyFlowDO {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
@LazyTableFieldUnique(name="client_id",comment="客户端ID",notNull=true,columnType="varchar(50)")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="createTime",example = "")
|
||||
@LazyTableField(name="create_time",comment="",defaultValue="CURRENT_TIMESTAMP",upsertStrategy = LazyFieldStrategy.NEVER,columnType="datetime",extra="")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
@LazyTableFieldId(name = "id", comment = "主键")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
@LazyTableField(name="in_flow",comment="当前访客当前进口流量",columnType="int")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
@LazyTableFieldUnique(name="ip",comment="目标ip",columnType="varchar(25)")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
@LazyTableField(name="is_deleted",comment="是否删除",defaultValue="'0'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="tinyint")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
@LazyTableField(name="out_flow",comment="当前访客出口流量",columnType="int")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
@LazyTableFieldUnique(name="port",comment="目标端口",columnType="int")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
@LazyTableFieldUnique(name="protocol_type",comment="协议类型",columnType="varchar(25)")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
@LazyTableFieldUnique(name="proxy_type",comment="代理类型",columnType="varchar(25)")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
@LazyTableFieldUnique(name="server_id",comment="服务端ID",notNull=true,columnType="varchar(25)")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Schema(description ="",name ="updateTime",example = "")
|
||||
@LazyTableField(name="update_time",comment="",defaultValue="CURRENT_TIMESTAMP",upsertStrategy = LazyFieldStrategy.NEVER,columnType="datetime",extra=" on update CURRENT_TIMESTAMP")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProtocolType;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelProxyType;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.LazyTableIndex;
|
||||
import org.wu.framework.core.stereotype.LayerField;
|
||||
import org.wu.framework.core.stereotype.LayerField.LayerFieldType;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.LazyTable;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.LazyTableField;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.lang.String;
|
||||
import java.time.LocalDateTime;
|
||||
import org.wu.framework.lazy.orm.core.stereotype.LazyTableFieldId;
|
||||
import java.lang.Long;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Boolean;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity
|
||||
**/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@LazyTable(tableName = "lazy_proxy_per_day_flow",comment = "每日统计代理流量")
|
||||
@Schema(title = "lazy_proxy_per_day_flow",description = "每日统计代理流量")
|
||||
public class LazyProxyPerDayFlowDO {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
*/
|
||||
@Schema(description ="客户端ID",name ="clientId",example = "")
|
||||
@LazyTableField(name="client_id",comment="客户端ID",columnType="varchar(50)")
|
||||
private String clientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description ="创建时间",name ="createTime",example = "")
|
||||
@LazyTableField(name="create_time",comment="创建时间",defaultValue="CURRENT_TIMESTAMP",upsertStrategy = LazyFieldStrategy.NEVER,columnType="datetime",extra="")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* 日期
|
||||
*/
|
||||
@Schema(description ="日期",name ="day",example = "")
|
||||
@LazyTableField(name="day",comment="日期",columnType="varchar(255)")
|
||||
private String day;
|
||||
|
||||
/**
|
||||
*
|
||||
* 主键
|
||||
*/
|
||||
@Schema(description ="主键",name ="id",example = "")
|
||||
@LazyTableFieldId(name = "id", comment = "主键")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客当前进口流量
|
||||
*/
|
||||
@Schema(description ="当前访客当前进口流量",name ="inFlow",example = "")
|
||||
@LazyTableField(name="in_flow",comment="当前访客当前进口流量",columnType="int")
|
||||
private Integer inFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标ip
|
||||
*/
|
||||
@Schema(description ="目标ip",name ="ip",example = "")
|
||||
@LazyTableField(name="ip",comment="目标ip",columnType="varchar(255)")
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
*
|
||||
* 是否删除
|
||||
*/
|
||||
@Schema(description ="是否删除",name ="isDeleted",example = "")
|
||||
@LazyTableField(name="is_deleted",comment="是否删除",defaultValue="'0'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="tinyint")
|
||||
private Boolean isDeleted;
|
||||
|
||||
/**
|
||||
*
|
||||
* 当前访客出口流量
|
||||
*/
|
||||
@Schema(description ="当前访客出口流量",name ="outFlow",example = "")
|
||||
@LazyTableField(name="out_flow",comment="当前访客出口流量",columnType="int")
|
||||
private Integer outFlow;
|
||||
|
||||
/**
|
||||
*
|
||||
* 目标端口
|
||||
*/
|
||||
@Schema(description ="目标端口",name ="port",example = "")
|
||||
@LazyTableField(name="port",comment="目标端口",columnType="int")
|
||||
private Integer port;
|
||||
|
||||
/**
|
||||
*
|
||||
* 协议类型
|
||||
*/
|
||||
@Schema(description ="协议类型",name ="protocolType",example = "")
|
||||
@LazyTableField(name="protocol_type",comment="协议类型",columnType="varchar(255)")
|
||||
private ChannelProtocolType protocolType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 代理类型
|
||||
*/
|
||||
@Schema(description ="代理类型",name ="proxyType",example = "")
|
||||
@LazyTableField(name="proxy_type",comment="代理类型",columnType="varchar(255)")
|
||||
private ChannelProxyType proxyType;
|
||||
|
||||
/**
|
||||
*
|
||||
* 服务端ID
|
||||
*/
|
||||
@Schema(description ="服务端ID",name ="serverId",example = "")
|
||||
@LazyTableField(name="server_id",comment="服务端ID",notNull=true,columnType="varchar(255)")
|
||||
private String serverId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 修改时间
|
||||
*/
|
||||
@Schema(description ="修改时间",name ="updateTime",example = "")
|
||||
@LazyTableField(name="update_time",comment="修改时间",defaultValue="CURRENT_TIMESTAMP",upsertStrategy = LazyFieldStrategy.NEVER,columnType="datetime",extra=" on update CURRENT_TIMESTAMP")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.jpa.lazy;
|
||||
|
||||
import org.wu.framework.lazy.orm.database.jpa.repository.LazyJpaRepository;
|
||||
import org.wu.framework.lazy.orm.database.jpa.repository.annotation.*;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyFlowDO;
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureLazyJpa
|
||||
**/
|
||||
@LazyRepository
|
||||
public interface LazyProxyFlowLazyJpaRepository extends LazyJpaRepository<LazyProxyFlowDO,Long> {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.jpa.lazy;
|
||||
|
||||
import org.wu.framework.lazy.orm.database.jpa.repository.LazyJpaRepository;
|
||||
import org.wu.framework.lazy.orm.database.jpa.repository.annotation.*;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyPerDayFlowDO;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureLazyJpa
|
||||
**/
|
||||
@LazyRepository
|
||||
public interface LazyProxyPerDayFlowLazyJpaRepository extends LazyJpaRepository<LazyProxyPerDayFlowDO,Long> {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper;
|
||||
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper
|
||||
**/
|
||||
|
||||
public interface LazyProxyFlowMapper {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper;
|
||||
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper
|
||||
**/
|
||||
|
||||
public interface LazyProxyPerDayFlowMapper {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.persistence;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlowRepository;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyProxyFlowConverter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyFlowDO;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.wu.framework.core.utils.ObjectUtils;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
|
||||
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.response.ResultFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* describe 代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence
|
||||
**/
|
||||
@Repository
|
||||
public class LazyProxyFlowRepositoryImpl implements LazyProxyFlowRepository {
|
||||
|
||||
@Resource
|
||||
LazyLambdaStream lazyLambdaStream;
|
||||
|
||||
/**
|
||||
* describe 新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 新增代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyFlow> story(LazyProxyFlow lazyProxyFlow) {
|
||||
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
|
||||
lazyLambdaStream.upsert(lazyProxyFlowDO);
|
||||
return ResultFactory.successOf();
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 批量新增代理流量
|
||||
*
|
||||
* @param lazyProxyFlowList 批量新增代理流量
|
||||
* @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlow> lazyProxyFlowList) {
|
||||
List<LazyProxyFlowDO> lazyProxyFlowDOList = lazyProxyFlowList.stream().map(LazyProxyFlowConverter.INSTANCE::fromLazyProxyFlow).collect(Collectors.toList());
|
||||
lazyLambdaStream.upsert(lazyProxyFlowDOList);
|
||||
return ResultFactory.successOf();
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询单个代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 查询单个代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyFlow> findOne(LazyProxyFlow lazyProxyFlow) {
|
||||
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
|
||||
LazyProxyFlow lazyProxyFlowOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO), LazyProxyFlow.class);
|
||||
return ResultFactory.successOf(lazyProxyFlowOne);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询多个代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 查询多个代理流量
|
||||
* @return {@link Result<List<LazyProxyFlow>>} 代理流量领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<List<LazyProxyFlow>> findList(LazyProxyFlow lazyProxyFlow) {
|
||||
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
|
||||
List<LazyProxyFlow> lazyProxyFlowList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO), LazyProxyFlow.class);
|
||||
return ResultFactory.successOf(lazyProxyFlowList);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 分页查询多个代理流量
|
||||
*
|
||||
* @param size 当前页数
|
||||
* @param current 当前页
|
||||
* @param lazyProxyFlow 分页查询多个代理流量
|
||||
* @return {@link Result<LazyPage<LazyProxyFlow>>} 分页代理流量领域对象
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyPage<LazyProxyFlow>> findPage(int size, int current, LazyProxyFlow lazyProxyFlow) {
|
||||
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
|
||||
LazyPage<LazyProxyFlow> lazyPage = new LazyPage<>(current, size);
|
||||
LazyPage<LazyProxyFlow> lazyProxyFlowLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO), lazyPage, LazyProxyFlow.class);
|
||||
return ResultFactory.successOf(lazyProxyFlowLazyPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 删除代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 删除代理流量
|
||||
* @return {@link Result<LazyProxyFlow>} 代理流量
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyFlow> remove(LazyProxyFlow lazyProxyFlow) {
|
||||
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
|
||||
lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO));
|
||||
return ResultFactory.successOf();
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 是否存在代理流量
|
||||
*
|
||||
* @param lazyProxyFlow 代理流量领域对象
|
||||
* @return {@link Result<Boolean>} 是否存在 true 存在,false 不存在
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<Boolean> exists(LazyProxyFlow lazyProxyFlow) {
|
||||
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
|
||||
Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO));
|
||||
return ResultFactory.successOf(exists);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据客户端查询流量
|
||||
*
|
||||
* @param size 分页大小
|
||||
* @param current 分页
|
||||
* @param lazyProxyFlow 查询条件
|
||||
* @return {@link Result<LazyPage< LazyProxyFlow >>} 分页访客端流量DTO对象
|
||||
*/
|
||||
@Override
|
||||
public Result<LazyPage<LazyProxyFlow>> findPageGroupByClientId(int size, int current, LazyProxyFlow lazyProxyFlow) {
|
||||
LazyProxyFlowDO lazyProxyFlowDO = LazyProxyFlowConverter.INSTANCE.fromLazyProxyFlow(lazyProxyFlow);
|
||||
LazyPage<LazyProxyFlow> lazyPage = new LazyPage<>(current, size);
|
||||
LazyPage<LazyProxyFlow> visitorFlowLazyPage = lazyLambdaStream
|
||||
.selectPage(
|
||||
LazyWrappers.lambdaWrapperBean(lazyProxyFlowDO)
|
||||
.groupBy(LazyProxyFlowDO::getClientId),
|
||||
lazyPage,
|
||||
LazyProxyFlow.class);
|
||||
return ResultFactory.successOf(visitorFlowLazyPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据客户端ID查询出 客户端所有的进出口流量
|
||||
*
|
||||
* @param clientIdList 客户端ID
|
||||
* @param serverId 服务端ID
|
||||
* @return 客户端所有的进出口流量
|
||||
*/
|
||||
@Override
|
||||
public List<LazyProxyFlow> findListByClientIds(List<String> clientIdList, String serverId) {
|
||||
if (ObjectUtils.isEmpty(clientIdList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return lazyLambdaStream.selectList(
|
||||
LazyWrappers.<LazyProxyFlowDO>lambdaWrapper()
|
||||
.in(LazyProxyFlowDO::getClientId, clientIdList)
|
||||
.eq(LazyProxyFlowDO::getServerId, serverId),
|
||||
LazyProxyFlow.class);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.persistence;
|
||||
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyPerDayFlowDO;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyProxyPerDayFlowConverter;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper.LazyProxyPerDayFlowMapper;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlowRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import java.util.stream.Collectors;
|
||||
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
|
||||
import org.wu.framework.web.response.Result;
|
||||
import org.wu.framework.web.response.ResultFactory;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.per.day.flow.LazyProxyPerDayFlow;
|
||||
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
|
||||
import java.util.List;
|
||||
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
|
||||
/**
|
||||
* describe 每日统计代理流量
|
||||
*
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
* @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence
|
||||
**/
|
||||
@Repository
|
||||
public class LazyProxyPerDayFlowRepositoryImpl implements LazyProxyPerDayFlowRepository {
|
||||
|
||||
@Resource
|
||||
LazyLambdaStream lazyLambdaStream;
|
||||
|
||||
/**
|
||||
* describe 新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 新增每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量新增后领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyPerDayFlow> story(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
|
||||
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
|
||||
lazyLambdaStream.upsert(lazyProxyPerDayFlowDO);
|
||||
return ResultFactory.successOf();
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 批量新增每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlowList 批量新增每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量新增后领域对象集合
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<List<LazyProxyPerDayFlow>> batchStory(List<LazyProxyPerDayFlow> lazyProxyPerDayFlowList) {
|
||||
List<LazyProxyPerDayFlowDO> lazyProxyPerDayFlowDOList = lazyProxyPerDayFlowList.stream().map(LazyProxyPerDayFlowConverter.INSTANCE::fromLazyProxyPerDayFlow).collect(Collectors.toList());
|
||||
lazyLambdaStream.upsert(lazyProxyPerDayFlowDOList);
|
||||
return ResultFactory.successOf();
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询单个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 查询单个每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyPerDayFlow> findOne(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
|
||||
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
|
||||
LazyProxyPerDayFlow lazyProxyPerDayFlowOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO), LazyProxyPerDayFlow.class);
|
||||
return ResultFactory.successOf(lazyProxyPerDayFlowOne);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 查询多个每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 查询多个每日统计代理流量
|
||||
* @return {@link Result<List<LazyProxyPerDayFlow>>} 每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<List<LazyProxyPerDayFlow>> findList(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
|
||||
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
|
||||
List<LazyProxyPerDayFlow> lazyProxyPerDayFlowList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO), LazyProxyPerDayFlow.class);
|
||||
return ResultFactory.successOf(lazyProxyPerDayFlowList);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 分页查询多个每日统计代理流量
|
||||
*
|
||||
* @param size 当前页数
|
||||
* @param current 当前页
|
||||
* @param lazyProxyPerDayFlow 分页查询多个每日统计代理流量
|
||||
* @return {@link Result<LazyPage<LazyProxyPerDayFlow>>} 分页每日统计代理流量领域对象
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyPage<LazyProxyPerDayFlow>> findPage(int size,int current,LazyProxyPerDayFlow lazyProxyPerDayFlow) {
|
||||
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
|
||||
LazyPage<LazyProxyPerDayFlow> lazyPage = new LazyPage<>(current,size);
|
||||
LazyPage<LazyProxyPerDayFlow> lazyProxyPerDayFlowLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO),lazyPage, LazyProxyPerDayFlow.class);
|
||||
return ResultFactory.successOf(lazyProxyPerDayFlowLazyPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 删除每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 删除每日统计代理流量
|
||||
* @return {@link Result<LazyProxyPerDayFlow>} 每日统计代理流量
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<LazyProxyPerDayFlow> remove(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
|
||||
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
|
||||
// lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO));
|
||||
return ResultFactory.successOf();
|
||||
}
|
||||
|
||||
/**
|
||||
* describe 是否存在每日统计代理流量
|
||||
*
|
||||
* @param lazyProxyPerDayFlow 每日统计代理流量领域对象
|
||||
* @return {@link Result<Boolean>} 是否存在 true 存在,false 不存在
|
||||
|
||||
* @author Jia wei Wu
|
||||
* @date 2025/06/06 11:39 晚上
|
||||
**/
|
||||
|
||||
@Override
|
||||
public Result<Boolean> exists(LazyProxyPerDayFlow lazyProxyPerDayFlow) {
|
||||
LazyProxyPerDayFlowDO lazyProxyPerDayFlowDO = LazyProxyPerDayFlowConverter.INSTANCE.fromLazyProxyPerDayFlow(lazyProxyPerDayFlow);
|
||||
Boolean exists=lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyProxyPerDayFlowDO));
|
||||
return ResultFactory.successOf(exists);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper.LazyProxyFlowMapper">
|
||||
<resultMap id="BaseResultMap" type="org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyFlowDO">
|
||||
<result column="client_id" property="clientId" />
|
||||
<result column="create_time" property="createTime" />
|
||||
<id column="id" property="id" />
|
||||
<result column="in_flow" property="inFlow" />
|
||||
<result column="ip" property="ip" />
|
||||
<result column="is_deleted" property="isDeleted" />
|
||||
<result column="out_flow" property="outFlow" />
|
||||
<result column="port" property="port" />
|
||||
<result column="protocol_type" property="protocolType" />
|
||||
<result column="proxy_type" property="proxyType" />
|
||||
<result column="server_id" property="serverId" />
|
||||
<result column="update_time" property="updateTime" />
|
||||
</resultMap>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper.LazyProxyPerDayFlowMapper">
|
||||
<resultMap id="BaseResultMap" type="org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyProxyPerDayFlowDO">
|
||||
<result column="client_id" property="clientId" />
|
||||
<result column="create_time" property="createTime" />
|
||||
<result column="day" property="day" />
|
||||
<id column="id" property="id" />
|
||||
<result column="in_flow" property="inFlow" />
|
||||
<result column="ip" property="ip" />
|
||||
<result column="is_deleted" property="isDeleted" />
|
||||
<result column="out_flow" property="outFlow" />
|
||||
<result column="port" property="port" />
|
||||
<result column="protocol_type" property="protocolType" />
|
||||
<result column="proxy_type" property="proxyType" />
|
||||
<result column="server_id" property="serverId" />
|
||||
<result column="update_time" property="updateTime" />
|
||||
</resultMap>
|
||||
|
||||
</mapper>
|
||||
@@ -4,10 +4,10 @@ spring:
|
||||
client:
|
||||
# inet-host: 124.222.48.62
|
||||
# inet-port: 30676
|
||||
inet-host: 124.222.152.160
|
||||
inet-port: 30560
|
||||
# inet-host: 127.0.0.1
|
||||
# inet-port: 7001
|
||||
# inet-host: 124.222.152.160
|
||||
# inet-port: 30560
|
||||
inet-host: 127.0.0.1
|
||||
inet-port: 7001
|
||||
inet-path: wu-lazy-cloud-heartbeat-server
|
||||
client-id: socks-local-proxy # 客户端ID
|
||||
app-key: a4bf4415-25aa-4007-914b-31ec77d1292f
|
||||
|
||||
@@ -32,29 +32,30 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.graalvm.buildtools</groupId>
|
||||
<artifactId>native-maven-plugin</artifactId>
|
||||
<version>0.10.3</version>
|
||||
<configuration>
|
||||
<!-- imageName用于设置生成的二进制文件名称 -->
|
||||
<imageName>${project.artifactId}</imageName>
|
||||
<!-- mainClass用于指定main方法类路径 -->
|
||||
<mainClass>org.framework.lazy.cloud.network.heartbeat.server.LazyCloudHeartbeatServerStart</mainClass>
|
||||
<buildArgs>
|
||||
--no-fallback
|
||||
</buildArgs>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-native</id>
|
||||
<goals>
|
||||
<goal>compile-no-fork</goal>
|
||||
</goals>
|
||||
<phase>package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.graalvm.buildtools</groupId>
|
||||
<artifactId>native-maven-plugin</artifactId>
|
||||
<version>0.10.3</version>
|
||||
<configuration>
|
||||
<!-- imageName用于设置生成的二进制文件名称 -->
|
||||
<imageName>${project.artifactId}</imageName>
|
||||
<!-- mainClass用于指定main方法类路径 -->
|
||||
<mainClass>org.framework.lazy.cloud.network.heartbeat.server.LazyCloudHeartbeatServerStart
|
||||
</mainClass>
|
||||
<buildArgs>
|
||||
--no-fallback
|
||||
</buildArgs>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-native</id>
|
||||
<goals>
|
||||
<goal>compile-no-fork</goal>
|
||||
</goals>
|
||||
<phase>package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
|
||||
Reference in New Issue
Block a user