1
0
mirror of https://github.com/craigerl/aprsd.git synced 2024-11-25 09:28:38 -05:00

Compare commits

...

4 Commits

Author SHA1 Message Date
66e4850353 Fixed issue with APRSDThreadList stats()
the stats method was setting the key to the classname
and not the thread name, giving an inacurate list
of actual running threads.
2024-04-12 15:08:39 -04:00
40c028c844 Added new default_ack_send_count config option
There may be applications where the admin might not want a hard
coded 3 acks sent for every RX'd packet.  This patch adds the
ability to change the number of acks sent per RX'd packet.
The default is still 3.
2024-04-12 14:36:27 -04:00
4c2a40b7a7 Remove packet from tracker after max attempts 2024-04-12 11:12:57 -04:00
f682890ef0 Limit packets to 50 in PacketList 2024-04-12 09:01:57 -04:00
4 changed files with 13 additions and 6 deletions

View File

@ -105,6 +105,11 @@ aprsd_opts = [
"'multiline' will use multiple lines for each packet and is the traditional format." "'multiline' will use multiple lines for each packet and is the traditional format."
"both will log both compact and multiline.", "both will log both compact and multiline.",
), ),
cfg.IntOpt(
"default_ack_send_count",
default=3,
help="The number of times to send an ack packet in response to recieving a packet.",
),
] ]
watch_list_opts = [ watch_list_opts = [

View File

@ -22,7 +22,7 @@ class PacketList(objectstore.ObjectStoreMixin):
def __new__(cls, *args, **kwargs): def __new__(cls, *args, **kwargs):
if cls._instance is None: if cls._instance is None:
cls._instance = super().__new__(cls) cls._instance = super().__new__(cls)
cls._maxlen = 100 cls._maxlen = 50
cls.data = { cls.data = {
"types": {}, "types": {},
"packets": OrderedDict(), "packets": OrderedDict(),

View File

@ -77,8 +77,9 @@ class APRSDThreadList:
age = th.loop_age() age = th.loop_age()
if serializable: if serializable:
age = str(age) age = str(age)
stats[th.__class__.__name__] = { stats[th.name] = {
"name": th.name, "name": th.name,
"class": th.__class__.__name__,
"alive": th.is_alive(), "alive": th.is_alive(),
"age": th.loop_age(), "age": th.loop_age(),
"loop_count": th.loop_count, "loop_count": th.loop_count,

View File

@ -127,7 +127,6 @@ class SendPacketThread(aprsd_threads.APRSDThread):
"Message Send Complete. Max attempts reached" "Message Send Complete. Max attempts reached"
f" {packet.retry_count}", f" {packet.retry_count}",
) )
if not packet.allow_delay:
pkt_tracker.remove(packet.msgNo) pkt_tracker.remove(packet.msgNo)
return False return False
@ -158,22 +157,24 @@ class SendPacketThread(aprsd_threads.APRSDThread):
class SendAckThread(aprsd_threads.APRSDThread): class SendAckThread(aprsd_threads.APRSDThread):
loop_count: int = 1 loop_count: int = 1
max_retries = 3
def __init__(self, packet): def __init__(self, packet):
self.packet = packet self.packet = packet
super().__init__(f"SendAck-{self.packet.msgNo}") super().__init__(f"SendAck-{self.packet.msgNo}")
self.max_retries = CONF.default_ack_send_count
def loop(self): def loop(self):
"""Separate thread to send acks with retries.""" """Separate thread to send acks with retries."""
send_now = False send_now = False
if self.packet.send_count == self.packet.retry_count: if self.packet.send_count == self.max_retries:
# we reached the send limit, don't send again # we reached the send limit, don't send again
# TODO(hemna) - Need to put this in a delayed queue? # TODO(hemna) - Need to put this in a delayed queue?
LOG.debug( LOG.debug(
f"{self.packet.__class__.__name__}" f"{self.packet.__class__.__name__}"
f"({self.packet.msgNo}) " f"({self.packet.msgNo}) "
"Send Complete. Max attempts reached" "Send Complete. Max attempts reached"
f" {self.packet.retry_count}", f" {self.max_retries}",
) )
return False return False