Исправлено сохранение данных

This commit is contained in:
sshkurov
2022-01-31 02:09:27 +03:00
parent 560e0d444f
commit 3d06b25d7a
8 changed files with 20 additions and 20 deletions

View File

@@ -26,7 +26,7 @@ public class OldStreamsCleanupTask {
@Scheduled(fixedDelayString = "PT${cleanup-interval}M", initialDelayString = "PT1M")
public void cleanup() {
ZonedDateTime before = ZonedDateTime.now().minus(oldStreamsThreshold, ChronoUnit.MINUTES);
log.info("Cleaning up old streams (before {})", before);
log.info("Cleaning up old non-favorite streams (before {})", before);
long deleted = service.cleanupOldStreams(before);
log.info("Deleted {} rows", deleted);
}

View File

@@ -28,7 +28,7 @@ public class FoundPattern {
@GeneratedValue(generator = "found_pattern_generator")
private Long id;
@ManyToOne
@ManyToOne(optional = false)
@JoinColumn(name = "packet_id", nullable = false)
@Setter
private Packet packet;

View File

@@ -1,6 +1,5 @@
package ru.serega6531.packmate.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;
import org.hibernate.Hibernate;
import org.hibernate.annotations.GenericGenerator;
@@ -37,11 +36,11 @@ public class Packet {
@Transient
private int ttl;
@Column(name = "stream_id")
@JsonIgnore
private Long streamId;
@ManyToOne(optional = false)
@JoinColumn(name = "stream_id", nullable = false)
private Stream stream;
@OneToMany(mappedBy = "packet", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@OneToMany(mappedBy = "packet", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<FoundPattern> matches;
private long timestamp;

View File

@@ -6,10 +6,7 @@ import org.hibernate.annotations.GenericGenerator;
import ru.serega6531.packmate.model.enums.Protocol;
import javax.persistence.*;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.*;
@Getter
@Setter
@@ -36,8 +33,7 @@ public class Stream {
private Protocol protocol;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "stream_id")
@OneToMany(mappedBy = "stream", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("id")
@ToString.Exclude
private List<Packet> packets;

View File

@@ -5,6 +5,7 @@ import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.pcap4j.core.BpfProgram;
import org.pcap4j.core.PacketListener;
import org.pcap4j.core.PcapHandle;
@@ -46,8 +47,8 @@ public abstract class AbstractPcapWorker implements PcapWorker, PacketListener {
private final ListMultimap<UnfinishedStream, ru.serega6531.packmate.model.Packet> unfinishedUdpStreams = ArrayListMultimap.create();
// в следующих мапах в значениях находится srcIp соответствующего пакета
private final SetMultimap<UnfinishedStream, ImmutablePair<InetAddress, Integer>> fins = HashMultimap.create();
private final SetMultimap<UnfinishedStream, ImmutablePair<InetAddress, Integer>> acks = HashMultimap.create();
private final SetMultimap<UnfinishedStream, Pair<InetAddress, Integer>> fins = HashMultimap.create();
private final SetMultimap<UnfinishedStream, Pair<InetAddress, Integer>> acks = HashMultimap.create();
protected AbstractPcapWorker(ServicesService servicesService,
StreamService streamService,
@@ -182,8 +183,8 @@ public abstract class AbstractPcapWorker implements PcapWorker, PacketListener {
* Udp не имеет фазы закрытия, поэтому закрывается только по таймауту
*/
private void checkTcpTermination(boolean ack, boolean fin, boolean rst,
ImmutablePair<InetAddress, Integer> sourceIpAndPort,
ImmutablePair<InetAddress, Integer> destIpAndPort,
Pair<InetAddress, Integer> sourceIpAndPort,
Pair<InetAddress, Integer> destIpAndPort,
UnfinishedStream stream) {
if (fin) {

View File

@@ -118,6 +118,10 @@ public class StreamService {
stream.setFoundPatterns(foundPatterns);
stream.setPackets(optimizedPackets);
for (Packet packet : optimizedPackets) {
packet.setStream(stream);
}
Stream savedStream = save(stream);
subscriptionService.broadcast(new SubscriptionMessage(SubscriptionMessageType.NEW_STREAM, streamToDto(savedStream)));