This patch removes the need for the RPC Server from aprsd.
APRSD Now saves it's stats to a pickled file on disk in the
aprsd.conf configured save_location. The web admin UI
will depickle that file to fetch the stats. The aprsd server
will periodically pickle and save the stats to disk.
The Logmonitor will not do a url post to the web admin ui
to send it the latest log entries.
Updated the healthcheck app to use the pickled stats file
and the fetch-stats command to make a url request to the running
admin ui to fetch the stats of the remote aprsd server.
This does some cleanup with the stats collector and
usage of the stats. The patch adds a new optional
param to the collector's collect() method to tell
the object to provide serializable stats. This is
used for the webchat app that sends stats to the
browser.
This patch implements a new stats collector paradigm
which uses the typing Protocol. Any object that wants to
supply stats to the collector has to implement the
aprsd.stats.collector.StatsProducer protocol, which at the
current time is implementing a stats() method on the object.
Then register the stats singleton producer with the collector by
calling collector.Collector().register_producer()
This only works if the stats producer object is a singleton.
refactored all logging of packets.
Packet class now doesn't do logging.
the format of the packet log now lives on a single line with
colors.
Created a new packet property called human_info, which
creates a string for the payload of each packet type
in a human readable format.
TODO: need to create a config option to allow showing the
older style of multiline logs for packets.
This patch eliminates the need for a custom
static method on each Packetclass to convert an aprslib
raw decoded dictionary -> correct Packet class.
This now uses the built in dataclasses_json from_dict()
mixin with an override for both the WeatherPacket and
the ThirdPartyPacket.
This patch also adds the TelemetryPacket and adds some
missing members to a few of the classes from test runs
decoding all packets from APRS-IS -> Packet classes.
Also adds some verification for packets in test_packets
this patch removes the need for dacite2 package for creating
packet objects from the aprslib decoded packet dictionary.
moved the factory method from the base Packet object
to the core module.
The packet msgNo field is a string, but is typically is an integer
counter to keep track of a specific packet id. The counter was
returning an int, but the packet.msgNo is a string. So, when trying to
delete a packet from the packet tracker, the key for accessing the
packet is the msgNo, which has to be a string. Passing an int, will
cause the packet tracker to not find the packet, and hence silently
fail.
This patch forces the msgNo counter to be a string.
This patch rewrites the packet_list internally to be a dictionary
instead of a list for very fast lookups. This was needed to test for
duplicate packets already in the list.
This patch drops packets that have the same data and are < 60 seconds
in age from the last time we got the packet. On RF based clients
we can get dupes!!
Sometimes over KISS clients (RF), we can get duplicate packets
due to having many digipeters in range of the TNC that aprsd is
connected to. We will now filter out any dupe packets that aprsd
is still in the process of doing it's 3 acks.
The kiss clients now detect if the incomming packet is a third party
packet and then sends up the subpacket instead of the encapsulated
packet up to the consumer.
The KISS client sends the path as part of the headers, so we had
to strip out the path from the payload of each message so the path
wouldn't get listed twice.
This patch updates the aprsd listen command to add the packet-plugins
argument which allows enabling a single plugin to work against the
packets recieved from the aprsis network.
This patch adds the ObjectPacket. This is used by the REPEAT plugins
to send out an object in message packet to let radios tune directly
to the station.
This patch is the initial conversion of the custom config
and config file yaml format to oslo_config's configuration mechanism.
The resulting config format is now an ini type file.
The default location is ~/.config/aprsd/aprsd.conf
This is a backwards incompatible change. You will have to rebuild
the config file and edit it.
Also any aprsd plugins can now define config options in code and
add an setup.cfg entry_point definition
oslo_config.opts =
foo.conf = foo.conf:list_opts
This patch decouples sending a message from the internals of
the Packet classes. This allows the rest of the code to use
Packet objects as type hints in methods to enforce Packets
in the plugins.
The send method was moved to a single place in the threads.tx.send()