From 6bbfa49b7a6ec395673e7604de15235f0fdb9760 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Tue, 14 May 2019 01:44:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20tcp=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83=D1=82?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/serega6531/packmate/PcapWorker.java | 12 ++---- .../packmate/TimeoutStreamsSaver.java | 42 +++++++++++++++++++ .../serega6531/packmate/UdpStreamsSaver.java | 27 ------------ src/main/resources/application.yml | 3 +- 4 files changed, 48 insertions(+), 36 deletions(-) create mode 100644 src/main/java/ru/serega6531/packmate/TimeoutStreamsSaver.java delete mode 100644 src/main/java/ru/serega6531/packmate/UdpStreamsSaver.java diff --git a/src/main/java/ru/serega6531/packmate/PcapWorker.java b/src/main/java/ru/serega6531/packmate/PcapWorker.java index 112eac8..8d9fb62 100644 --- a/src/main/java/ru/serega6531/packmate/PcapWorker.java +++ b/src/main/java/ru/serega6531/packmate/PcapWorker.java @@ -24,7 +24,6 @@ import java.net.Inet4Address; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @Component @@ -39,7 +38,6 @@ public class PcapWorker { private final ExecutorService executorService; private final String localIp; - private final int udpStreamTimeout; private long packetIdCounter = 0; // оно однопоточное, так что пусть будет без atomic @@ -53,13 +51,11 @@ public class PcapWorker { public PcapWorker(ServicesService servicesService, StreamService streamService, @Value("${interface-name}") String interfaceName, - @Value("${local-ip}") String localIp, - @Value("${udp-stream-timeout}") int udpStreamTimeout) throws PcapNativeException { + @Value("${local-ip}") String localIp) throws PcapNativeException { this.servicesService = servicesService; this.streamService = streamService; this.localIp = localIp; - this.udpStreamTimeout = udpStreamTimeout; BasicThreadFactory factory = new BasicThreadFactory.Builder() .namingPattern("pcap-worker").build(); @@ -205,7 +201,7 @@ public class PcapWorker { } } - public int closeUdpStreams() { + public int closeTimeoutStreams(Protocol protocol, long timeoutMillis) { int streamsClosed = 0; final Iterator>> iterator = unfinishedStreams.entrySet().iterator(); @@ -213,9 +209,9 @@ public class PcapWorker { final Map.Entry> entry = iterator.next(); final UnfinishedStream stream = entry.getKey(); - if (stream.getProtocol() == Protocol.UDP) { + if (stream.getProtocol() == protocol) { final List packets = entry.getValue(); - if (System.currentTimeMillis() - packets.get(packets.size() - 1).getTimestamp() > TimeUnit.SECONDS.toMillis(udpStreamTimeout)) { + if (System.currentTimeMillis() - packets.get(packets.size() - 1).getTimestamp() > timeoutMillis) { iterator.remove(); streamService.saveNewStream(stream, packets); streamsClosed++; diff --git a/src/main/java/ru/serega6531/packmate/TimeoutStreamsSaver.java b/src/main/java/ru/serega6531/packmate/TimeoutStreamsSaver.java new file mode 100644 index 0000000..0a63d87 --- /dev/null +++ b/src/main/java/ru/serega6531/packmate/TimeoutStreamsSaver.java @@ -0,0 +1,42 @@ +package ru.serega6531.packmate; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import ru.serega6531.packmate.model.Protocol; + +import java.util.concurrent.TimeUnit; + +@Component +@Slf4j +public class TimeoutStreamsSaver { + + private final PcapWorker pcapWorker; + private final long udpStreamTimeoutMillis; + private final long tcpStreamTimeoutMillis; + + @Autowired + public TimeoutStreamsSaver(PcapWorker pcapWorker, + @Value("${udp-stream-timeout}") int udpStreamTimeout, + @Value("${tcp-stream-timeout}") int tcpStreamTimeout) { + this.pcapWorker = pcapWorker; + this.udpStreamTimeoutMillis = TimeUnit.SECONDS.toMillis(udpStreamTimeout); + this.tcpStreamTimeoutMillis = TimeUnit.SECONDS.toMillis(tcpStreamTimeout); + } + + @Scheduled(fixedRateString = "PT${timeout-stream-check-interval}S", initialDelayString = "PT${timeout-stream-check-interval}S") + public void saveStreams() { + int streamsClosed = pcapWorker.closeTimeoutStreams(Protocol.UDP, udpStreamTimeoutMillis); + if(streamsClosed > 0) { + log.info("Закрыто {} udp стримов", streamsClosed); + } + + streamsClosed = pcapWorker.closeTimeoutStreams(Protocol.TCP, tcpStreamTimeoutMillis); + if(streamsClosed > 0) { + log.info("Закрыто {} tcp стримов", streamsClosed); + } + } + +} diff --git a/src/main/java/ru/serega6531/packmate/UdpStreamsSaver.java b/src/main/java/ru/serega6531/packmate/UdpStreamsSaver.java deleted file mode 100644 index 4e4c057..0000000 --- a/src/main/java/ru/serega6531/packmate/UdpStreamsSaver.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.serega6531.packmate; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class UdpStreamsSaver { - - private final PcapWorker pcapWorker; - - @Autowired - public UdpStreamsSaver(PcapWorker pcapWorker) { - this.pcapWorker = pcapWorker; - } - - @Scheduled(fixedRateString = "PT${udp-stream-check-interval}S", initialDelayString = "PT${udp-stream-check-interval}S") - public void saveStreams() { - final int streamsClosed = pcapWorker.closeUdpStreams(); - if(streamsClosed > 0) { - log.info("Закрыто {} udp стримов", streamsClosed); - } - } - -} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cba2233..f94edfc 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -18,5 +18,6 @@ local-ip: "192.168.0.125" account-login: BinaryBears account-password: 123456 udp-stream-timeout: 20 # секунд -udp-stream-check-interval: 10 +tcp-stream-timeout: 120 # секунд +timeout-stream-check-interval: 10 # секунд ignore-empty-packets: true \ No newline at end of file