From 34017bedfe7cc460b45f816ee693bf3fd419f154 Mon Sep 17 00:00:00 2001 From: Walter Boring Date: Wed, 7 Jan 2026 14:57:28 -0500 Subject: [PATCH] Ensure stats are serialized when requested The seen_list, tracker and aprsdthreadlist wasn't serializing it's data when requested during stats() time.. --- aprsd/packets/seen_list.py | 15 ++++++++++++++- aprsd/packets/tracker.py | 2 ++ aprsd/threads/aprsd.py | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/aprsd/packets/seen_list.py b/aprsd/packets/seen_list.py index e311bc4..775b62d 100644 --- a/aprsd/packets/seen_list.py +++ b/aprsd/packets/seen_list.py @@ -27,7 +27,20 @@ class SeenList(objectstore.ObjectStoreMixin): def stats(self, serializable=False): """Return the stats for the PacketTrack class.""" with self.lock: - return self.data + if serializable: + # Convert datetime objects to strings for JSON serialization + serializable_data = {} + for callsign, data in self.data.items(): + serializable_data[callsign] = data.copy() + if 'last' in serializable_data[callsign] and isinstance( + serializable_data[callsign]['last'], datetime.datetime + ): + serializable_data[callsign]['last'] = serializable_data[ + callsign + ]['last'].isoformat() + return serializable_data + else: + return self.data def rx(self, packet: type[core.Packet]): """When we get a packet from the network, update the seen list.""" diff --git a/aprsd/packets/tracker.py b/aprsd/packets/tracker.py index bb19161..fbd2605 100644 --- a/aprsd/packets/tracker.py +++ b/aprsd/packets/tracker.py @@ -66,6 +66,8 @@ class PacketTrack(objectstore.ObjectStoreMixin): pkts = {} for key in self.data: last_send_time = self.data[key].last_send_time + if serializable and isinstance(last_send_time, datetime.datetime): + last_send_time = last_send_time.isoformat() pkts[key] = { 'last_send_time': last_send_time, 'send_count': self.data[key].send_count, diff --git a/aprsd/threads/aprsd.py b/aprsd/threads/aprsd.py index 48a3621..8f356d4 100644 --- a/aprsd/threads/aprsd.py +++ b/aprsd/threads/aprsd.py @@ -107,7 +107,7 @@ class APRSDThreadList: 'name': th.name, 'class': th.__class__.__name__, 'alive': th.is_alive(), - 'age': th.loop_age(), + 'age': age, 'loop_count': th.loop_count, } return stats