1
0
mirror of https://github.com/craigerl/aprsd.git synced 2024-11-21 15:51:52 -05:00

Compare commits

...

2 Commits

Author SHA1 Message Date
5b2a59fae3 ismall update 2024-04-14 14:08:46 -04:00
8392d6b8ef Added new config optons for PacketList
This allows the admin to set the number of packets to store
in the PacketList object for tracking.  For apps like IRC,
we need to store lots more packets to detect dupes.
2024-04-14 12:48:09 -04:00
4 changed files with 26 additions and 8 deletions

View File

@ -110,6 +110,16 @@ aprsd_opts = [
default=3,
help="The number of times to send an ack packet in response to recieving a packet.",
),
cfg.IntOpt(
"packet_list_maxlen",
default=100,
help="The maximum number of packets to store in the packet list.",
),
cfg.IntOpt(
"packet_list_stats_maxlen",
default=20,
help="The maximum number of packets to send in the stats dict for admin ui.",
),
]
watch_list_opts = [

View File

@ -22,7 +22,7 @@ class PacketList(objectstore.ObjectStoreMixin):
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._maxlen = 100
cls._maxlen = CONF.packet_list_maxlen
cls.data = {
"types": {},
"packets": OrderedDict(),
@ -88,11 +88,22 @@ class PacketList(objectstore.ObjectStoreMixin):
@wrapt.synchronized(lock)
def stats(self, serializable=False) -> dict:
# limit the number of packets to return to 50
LOG.info(f"PacketList stats called len={len(self.data['packets'])}")
tmp = OrderedDict(reversed(list(self.data["packets"].items())))
pkts = []
count = 1
for packet in tmp:
pkts.append(tmp[packet])
count += 1
if count > CONF.packet_list_stats_maxlen:
break
stats = {
"total_tracked": self._total_rx + self._total_rx,
"rx": self._total_rx,
"tx": self._total_tx,
"types": self.data["types"],
"packets": self.data["packets"],
"packets": pkts,
}
return stats

View File

@ -115,14 +115,11 @@ class APRSDDupeRXThread(APRSDRXThread):
found = False
if not found:
# If we are in the process of already ack'ing
# a packet, we should drop the packet
# because it's a dupe within the time that
# we send the 3 acks for the packet.
# We haven't seen this packet before, so we process it.
pkt_list.rx(packet)
self.packet_queue.put(packet)
elif packet.timestamp - found.timestamp < CONF.packet_dupe_timeout:
# If the packet came in within 60 seconds of the
# If the packet came in within N seconds of the
# Last time seeing the packet, then we drop it as a dupe.
LOG.warning(f"Packet {packet.from_call}:{packet.msgNo} already tracked, dropping.")
else:

View File

@ -1,6 +1,6 @@
FROM python:3.11-slim as build
ARG VERSION=3.1.0
ARG VERSION=3.4.0
ENV TZ=${TZ:-US/Eastern}
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8