From 758007ea3ff809944f9ed4685c74e7eaff0f813b Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 3 Oct 2024 10:34:35 -0700 Subject: [PATCH 01/40] Removed remnants of QueryPlugin QueryPlugin was removed a while back after the stats rework. This patch removes the config options for the Query plugin --- aprsd/conf/common.py | 1 - aprsd/conf/plugin_common.py | 9 --------- aprsd/plugin.py | 1 - 3 files changed, 11 deletions(-) diff --git a/aprsd/conf/common.py b/aprsd/conf/common.py index 89725b4..07d69cc 100644 --- a/aprsd/conf/common.py +++ b/aprsd/conf/common.py @@ -205,7 +205,6 @@ enabled_plugins_opts = [ "aprsd.plugins.fortune.FortunePlugin", "aprsd.plugins.location.LocationPlugin", "aprsd.plugins.ping.PingPlugin", - "aprsd.plugins.query.QueryPlugin", "aprsd.plugins.time.TimePlugin", "aprsd.plugins.weather.OWMWeatherPlugin", "aprsd.plugins.version.VersionPlugin", diff --git a/aprsd/conf/plugin_common.py b/aprsd/conf/plugin_common.py index 778cf17..b1d96e3 100644 --- a/aprsd/conf/plugin_common.py +++ b/aprsd/conf/plugin_common.py @@ -31,13 +31,6 @@ aprsfi_opts = [ ), ] -query_plugin_opts = [ - cfg.StrOpt( - "callsign", - help="The Ham callsign to allow access to the query plugin from RF.", - ), -] - owm_wx_opts = [ cfg.StrOpt( "apiKey", @@ -172,7 +165,6 @@ def register_opts(config): config.register_group(aprsfi_group) config.register_opts(aprsfi_opts, group=aprsfi_group) config.register_group(query_group) - config.register_opts(query_plugin_opts, group=query_group) config.register_group(owm_wx_group) config.register_opts(owm_wx_opts, group=owm_wx_group) config.register_group(avwx_group) @@ -184,7 +176,6 @@ def register_opts(config): def list_opts(): return { aprsfi_group.name: aprsfi_opts, - query_group.name: query_plugin_opts, owm_wx_group.name: owm_wx_opts, avwx_group.name: avwx_opts, location_group.name: location_opts, diff --git a/aprsd/plugin.py b/aprsd/plugin.py index 6c5f973..2819e81 100644 --- a/aprsd/plugin.py +++ b/aprsd/plugin.py @@ -25,7 +25,6 @@ CORE_MESSAGE_PLUGINS = [ "aprsd.plugins.fortune.FortunePlugin", "aprsd.plugins.location.LocationPlugin", "aprsd.plugins.ping.PingPlugin", - "aprsd.plugins.query.QueryPlugin", "aprsd.plugins.time.TimePlugin", "aprsd.plugins.weather.USWeatherPlugin", "aprsd.plugins.version.VersionPlugin", From 5314856101fbf9f306b112121706e7ac9513a0e4 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 17 Oct 2024 17:01:36 -0400 Subject: [PATCH 02/40] Removed dumping of the stats on exit This patch removes the logging of the raw stats dict when the commands exit. --- aprsd/cmds/listen.py | 3 ++- aprsd/cmds/webchat.py | 2 +- aprsd/main.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/aprsd/cmds/listen.py b/aprsd/cmds/listen.py index 0c03c82..646d3c9 100644 --- a/aprsd/cmds/listen.py +++ b/aprsd/cmds/listen.py @@ -42,7 +42,8 @@ def signal_handler(sig, frame): ), ) time.sleep(5) - LOG.info(collector.Collector().collect()) + # Last save to disk + collector.Collector().collect() class APRSDListenThread(rx.APRSDRXThread): diff --git a/aprsd/cmds/webchat.py b/aprsd/cmds/webchat.py index de8fd4e..0fe8687 100644 --- a/aprsd/cmds/webchat.py +++ b/aprsd/cmds/webchat.py @@ -64,7 +64,7 @@ def signal_handler(sig, frame): time.sleep(1.5) # packets.WatchList().save() # packets.SeenList().save() - LOG.info(stats.stats_collector.collect()) + stats.stats_collector.collect() LOG.info("Telling flask to bail.") signal.signal(signal.SIGTERM, sys.exit(0)) diff --git a/aprsd/main.py b/aprsd/main.py index 3b7ed96..e052ab9 100644 --- a/aprsd/main.py +++ b/aprsd/main.py @@ -83,7 +83,7 @@ def signal_handler(sig, frame): packets.WatchList().save() packets.SeenList().save() packets.PacketList().save() - LOG.info(collector.Collector().collect()) + collector.Collector().collect() # signal.signal(signal.SIGTERM, sys.exit(0)) # sys.exit(0) From 5e9f92dfa68a9a8841c4a10a1e8a68b3c3d9401d Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 17 Oct 2024 17:04:33 -0400 Subject: [PATCH 03/40] Added color logging of thread names at keepalive This patch adds logging of the thread name in color during keepalive loop output. --- aprsd/threads/keep_alive.py | 9 +++++- aprsd/utils/__init__.py | 55 +++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/aprsd/threads/keep_alive.py b/aprsd/threads/keep_alive.py index 9671c1a..b212ac4 100644 --- a/aprsd/threads/keep_alive.py +++ b/aprsd/threads/keep_alive.py @@ -3,6 +3,7 @@ import logging import time import tracemalloc +from loguru import logger from oslo_config import cfg from aprsd import packets, utils @@ -14,6 +15,7 @@ from aprsd.threads import APRSDThread, APRSDThreadList CONF = cfg.CONF LOG = logging.getLogger("APRSD") +LOGU = logger class KeepAliveThread(APRSDThread): @@ -87,7 +89,12 @@ class KeepAliveThread(APRSDThread): key = thread["name"] if not alive: LOG.error(f"Thread {thread}") - LOG.info(f"{key: <15} Alive? {str(alive): <5} {str(age): <20}") + + thread_hex = f"fg {utils.hex_from_name(key)}" + t_name = f"<{thread_hex}>{key:<15}" + thread_msg = f"{t_name} Alive? {str(alive): <5} {str(age): <20}" + LOGU.opt(colors=True).info(thread_msg) + # LOG.info(f"{key: <15} Alive? {str(alive): <5} {str(age): <20}") # check the APRS connection cl = client_factory.create() diff --git a/aprsd/utils/__init__.py b/aprsd/utils/__init__.py index eb24fac..b924ec3 100644 --- a/aprsd/utils/__init__.py +++ b/aprsd/utils/__init__.py @@ -2,6 +2,7 @@ import errno import functools +import math import os import re import sys @@ -82,6 +83,16 @@ def rgb_from_name(name): return red, green, blue +def hextriplet(colortuple): + """Convert a color tuple to a hex triplet.""" + return "#" + "".join(f"{i:02X}" for i in colortuple) + + +def hex_from_name(name): + """Create a hex color from a string.""" + return hextriplet(rgb_from_name(name)) + + def human_size(bytes, units=None): """Returns a human readable string representation of bytes""" if not units: @@ -161,3 +172,47 @@ def load_entry_points(group): except Exception as e: print(f"Extension {ep.name} of group {group} failed to load with {e}", file=sys.stderr) print(traceback.format_exc(), file=sys.stderr) + + +def calculate_initial_compass_bearing(start, end): + if (type(start) != tuple) or (type(end) != tuple): + raise TypeError("Only tuples are supported as arguments") + + lat1 = math.radians(float(start[0])) + lat2 = math.radians(float(end[0])) + + diffLong = math.radians(float(end[1]) - float(start[1])) + + x = math.sin(diffLong) * math.cos(lat2) + y = math.cos(lat1) * math.sin(lat2) - ( + math.sin(lat1) + * math.cos(lat2) * math.cos(diffLong) + ) + + initial_bearing = math.atan2(x, y) + + # Now we have the initial bearing but math.atan2 return values + # from -180° to + 180° which is not what we want for a compass bearing + # The solution is to normalize the initial bearing as shown below + initial_bearing = math.degrees(initial_bearing) + compass_bearing = (initial_bearing + 360) % 360 + + return compass_bearing + + +def degrees_to_cardinal(bearing, full_string=False): + if full_string: + DIRECTIONS = [ + "North", "North-Northeast", "Northeast", "East-Northeast", "East", "East-Southeast", + "Southeast", "South-Southeast", "South", "South-Southwest", "Southwest", "West-Southwest", + "West", "West-Northwest", "Northwest", "North-Northwest", "North", + ] + else: + DIRECTIONS = [ + "N", "NNE", "NE", "ENE", "E", "ESE", + "SE", "SSE", "S", "SSW", "SW", "WSW", + "W", "WNW", "NW", "NNW", "N", + ] + + cardinal = DIRECTIONS[round(bearing / 22.5)] + return cardinal From 3e9bf2422acafe33e4bc3a3eb8d812cd81722ae2 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 17 Oct 2024 17:06:28 -0400 Subject: [PATCH 04/40] Added packet log distance and new arrows this patch adds unicode arrows during logging of packet arrows (tx/rx) and adds distance for GPSPackets --- aprsd/packets/log.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/aprsd/packets/log.py b/aprsd/packets/log.py index 88b63a0..5bddecd 100644 --- a/aprsd/packets/log.py +++ b/aprsd/packets/log.py @@ -1,10 +1,12 @@ import logging from typing import Optional +from geopy.distance import geodesic from loguru import logger from oslo_config import cfg -from aprsd.packets.core import AckPacket, RejectPacket +from aprsd import utils +from aprsd.packets.core import AckPacket, GPSPacket, RejectPacket LOG = logging.getLogger() @@ -16,6 +18,8 @@ TO_COLOR = "fg #D033FF" TX_COLOR = "red" RX_COLOR = "green" PACKET_COLOR = "cyan" +DISTANCE_COLOR = "fg #FF5733" +DEGREES_COLOR = "fg #FFA900" def log_multiline(packet, tx: Optional[bool] = False, header: Optional[bool] = True) -> None: @@ -97,19 +101,21 @@ def log(packet, tx: Optional[bool] = False, header: Optional[bool] = True) -> No if header: if tx: via_color = "red" - arrow = f"<{via_color}>->" + # arrow = f"<{via_color}>->" + arrow = f"<{via_color}>\u2192" logit.append( - f"TX {arrow} " + f"TX\u2191 " f"{name}" f":{packet.msgNo}" f" ({packet.send_count + 1} of {pkt_max_send_count})", ) else: - via_color = "fg #828282" - arrow = f"<{via_color}>->" - left_arrow = f"<{via_color}><-" + via_color = "fg #1AA730" + #arrow = f"<{via_color}>->" + arrow = f"<{via_color}>\u2192" + f"<{via_color}><-" logit.append( - f"RX {left_arrow} " + f"RX\u2193 " f"{name}" f":{packet.msgNo}", ) @@ -139,5 +145,19 @@ def log(packet, tx: Optional[bool] = False, header: Optional[bool] = True) -> No msg = msg.replace("<", "\\<") logit.append(f"{msg}") + # is there distance information? + if isinstance(packet, GPSPacket) and CONF.latitude and CONF.longitude: + my_coords = (CONF.latitude, CONF.longitude) + packet_coords = (packet.latitude, packet.longitude) + try: + bearing = utils.calculate_initial_compass_bearing(my_coords, packet_coords) + except Exception as e: + LOG.error(f"Failed to calculate bearing: {e}") + bearing = 0 + logit.append( + f" : <{DEGREES_COLOR}>{utils.degrees_to_cardinal(bearing, full_string=True)}" + f"<{DISTANCE_COLOR}>@{geodesic(my_coords, packet_coords).miles:.2f}miles", + ) + LOGU.opt(colors=True).info(" ".join(logit)) log_multiline(packet, tx, header) From 9951b12e2d0097975d7f482dbe818021f772fce1 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 17 Oct 2024 17:09:11 -0400 Subject: [PATCH 05/40] Log closing client connection. This patch updates the aprsis connection client to add logging when the close() happens --- aprsd/client/drivers/aprsis.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/aprsd/client/drivers/aprsis.py b/aprsd/client/drivers/aprsis.py index 06b2d6b..e4d9346 100644 --- a/aprsd/client/drivers/aprsis.py +++ b/aprsd/client/drivers/aprsis.py @@ -33,7 +33,11 @@ class Aprsdis(aprslib.IS): def stop(self): self.thread_stop = True - LOG.info("Shutdown Aprsdis client.") + LOG.warning("Shutdown Aprsdis client.") + + def close(self): + LOG.warning("Closing Aprsdis client.") + super().close() @wrapt.synchronized(lock) def send(self, packet: core.Packet): From a65262d2ff68b5744e402d305656b00bb9950c90 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 17 Oct 2024 17:10:03 -0400 Subject: [PATCH 06/40] Sort changelog commits by date --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4aa3c65..641f03d 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ run: venv ## Create a virtual environment for running aprsd commands changelog: dev npm i -g auto-changelog - auto-changelog -l false -o ChangeLog.md + auto-changelog -l false --sort-commits date -o ChangeLog.md docs: changelog m2r --overwrite ChangeLog.md From 8cdbf18befd709a88100934cce953572b3a5f473 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 17 Oct 2024 17:10:59 -0400 Subject: [PATCH 07/40] Add final stages in Dockerfile This patch adds another final stage in the Dockerfile --- docker/Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 855afbd..33747fe 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.11-slim as build +FROM python:3.11-slim AS build ARG VERSION=3.4.0 # pass this in as 'dev' if you want to install from github repo vs pypi @@ -40,7 +40,7 @@ RUN set -ex \ ### Final stage -FROM build as final +FROM build AS install WORKDIR /app RUN pip3 install -U pip @@ -64,6 +64,8 @@ RUN aprsd --version ADD bin/setup.sh /app ADD bin/admin.sh /app + +FROM install AS final # For the web admin interface EXPOSE 8001 From 765e02f5b3237796936cb0378abd560ced906283 Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 18 Oct 2024 12:07:02 -0400 Subject: [PATCH 08/40] Collector cleanup --- ChangeLog.md | 1337 +++++++++++++++++----------------- aprsd/cmds/send_message.py | 5 +- aprsd/cmds/server.py | 35 +- aprsd/cmds/webchat.py | 7 - aprsd/messaging.py | 4 - aprsd/packets/__init__.py | 8 + aprsd/packets/collector.py | 54 +- aprsd/packets/packet_list.py | 8 +- aprsd/packets/seen_list.py | 7 +- aprsd/packets/tracker.py | 8 +- aprsd/packets/watch_list.py | 5 +- aprsd/stats/collector.py | 13 +- 12 files changed, 742 insertions(+), 749 deletions(-) delete mode 100644 aprsd/messaging.py diff --git a/ChangeLog.md b/ChangeLog.md index 96dd540..bb04296 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -15,29 +15,30 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Refactor Dockerfile [`#167`](https://github.com/craigerl/aprsd/pull/167) - Bump requests from 2.31.0 to 2.32.0 [`#166`](https://github.com/craigerl/aprsd/pull/166) - Bump jinja2 from 3.1.3 to 3.1.4 [`#163`](https://github.com/craigerl/aprsd/pull/163) -- Update base docs [`92cb92f`](https://github.com/craigerl/aprsd/commit/92cb92f89cfb0fc5ea71b4e6344da6b0e3b8f7fe) -- Use auto-changelog to generate changelog [`673b34c`](https://github.com/craigerl/aprsd/commit/673b34c78ba38ce3ad22e2ba5ceb399af1f6c0f4) -- Eliminate need for PBR [`f159741`](https://github.com/craigerl/aprsd/commit/f15974131c4b55f1c4c1085f4d78d6e179da7157) -- Updated requirements [`9d3f45a`](https://github.com/craigerl/aprsd/commit/9d3f45ac3079a277cb7bd66544a753bc14915a02) -- --- [`18fb2a9`](https://github.com/craigerl/aprsd/commit/18fb2a9e2b650c694651b3eef939ecd4ed24b300) -- Rebuild ChangeLog [`af3d741`](https://github.com/craigerl/aprsd/commit/af3d74183315d3a616e14279672b884c0c1ec632) - Put an upper bound on the QueueHandler queue [`93a9cce`](https://github.com/craigerl/aprsd/commit/93a9cce0c0d0d1d1195e591cbd7ab9583a33c0c9) -- Updated README [`8f1733e`](https://github.com/craigerl/aprsd/commit/8f1733e4939ef91dbef30e3271f2e803359f0214) -- retagged v3.4.1 in prep for release [`a6f84e4`](https://github.com/craigerl/aprsd/commit/a6f84e42bc4f7ab02db784f8e5ca6e1560608363) -- Updated Makefile to build Changelog [`3741555`](https://github.com/craigerl/aprsd/commit/37415557b5a38151a5de142c264a921f8d81ae5a) -- updated requirements [`fa2d2d9`](https://github.com/craigerl/aprsd/commit/fa2d2d965d403c028fd81a15665fe1c42c950692) -- Build > python 3.10 [`e5662b9`](https://github.com/craigerl/aprsd/commit/e5662b95f8e498af3cfad60b64ae61d9e49726eb) -- Fixed pep8 with packet_list [`b172c6d`](https://github.com/craigerl/aprsd/commit/b172c6dbdeb460d480a0091a14002251ac6b0324) -- added m2r package to dev requirements [`49e8a62`](https://github.com/craigerl/aprsd/commit/49e8a622a75fcac50f6e542ecdc611f29833d80b) -- Hack Dockerfile for admin fixes? [`f07ef71`](https://github.com/craigerl/aprsd/commit/f07ef71ce0849714b4d2a26b369720d6bf8ba851) -- Update ChangeLog [`9b843ee`](https://github.com/craigerl/aprsd/commit/9b843eead9774ac5c456dc7834d921684d05fb6f) -- No limit on change log commits [`e3ab6e7`](https://github.com/craigerl/aprsd/commit/e3ab6e7f59fbab44a5c7266f63d3c1c662f98c6f) -- Fixed reference to ThirdPartyPacket [`ffa28fa`](https://github.com/craigerl/aprsd/commit/ffa28fa28adc60375ec0ca03f730fc321f09bfc6) -- removed [`f7a9f7a`](https://github.com/craigerl/aprsd/commit/f7a9f7aaab5185c6aba8b3ff5ccd9b8ad549b225) +- Eliminate need for PBR [`f159741`](https://github.com/craigerl/aprsd/commit/f15974131c4b55f1c4c1085f4d78d6e179da7157) - Use newer python -m build to build aprsd wheel [`2abf8bc`](https://github.com/craigerl/aprsd/commit/2abf8bc750542b07bbbbc96efa4613aeffc5db8a) -- Removed invalid pyproject classifier [`a5dc322`](https://github.com/craigerl/aprsd/commit/a5dc322066f7f9e39cf911faee845861b8d34c47) +- updated requirements [`fa2d2d9`](https://github.com/craigerl/aprsd/commit/fa2d2d965d403c028fd81a15665fe1c42c950692) +- --- [`18fb2a9`](https://github.com/craigerl/aprsd/commit/18fb2a9e2b650c694651b3eef939ecd4ed24b300) +- removed [`f7a9f7a`](https://github.com/craigerl/aprsd/commit/f7a9f7aaab5185c6aba8b3ff5ccd9b8ad549b225) +- Updated README [`8f1733e`](https://github.com/craigerl/aprsd/commit/8f1733e4939ef91dbef30e3271f2e803359f0214) +- Hack Dockerfile for admin fixes? [`f07ef71`](https://github.com/craigerl/aprsd/commit/f07ef71ce0849714b4d2a26b369720d6bf8ba851) - update to pyproject [`4b26e2b`](https://github.com/craigerl/aprsd/commit/4b26e2b7f7e41d3a3d3850118a3c25a58af68be1) +- Fixed reference to ThirdPartyPacket [`ffa28fa`](https://github.com/craigerl/aprsd/commit/ffa28fa28adc60375ec0ca03f730fc321f09bfc6) +- Use auto-changelog to generate changelog [`673b34c`](https://github.com/craigerl/aprsd/commit/673b34c78ba38ce3ad22e2ba5ceb399af1f6c0f4) - Renamed Changelog [`5ebbb52`](https://github.com/craigerl/aprsd/commit/5ebbb52a2c2a00ca9ae34a252699559f85b3e8c6) +- Updated Makefile to build Changelog [`3741555`](https://github.com/craigerl/aprsd/commit/37415557b5a38151a5de142c264a921f8d81ae5a) +- Update base docs [`92cb92f`](https://github.com/craigerl/aprsd/commit/92cb92f89cfb0fc5ea71b4e6344da6b0e3b8f7fe) +- added m2r package to dev requirements [`49e8a62`](https://github.com/craigerl/aprsd/commit/49e8a622a75fcac50f6e542ecdc611f29833d80b) +- Updated requirements [`9d3f45a`](https://github.com/craigerl/aprsd/commit/9d3f45ac3079a277cb7bd66544a753bc14915a02) +- Fixed pep8 with packet_list [`b172c6d`](https://github.com/craigerl/aprsd/commit/b172c6dbdeb460d480a0091a14002251ac6b0324) +- Rebuild ChangeLog [`af3d741`](https://github.com/craigerl/aprsd/commit/af3d74183315d3a616e14279672b884c0c1ec632) +- No limit on change log commits [`e3ab6e7`](https://github.com/craigerl/aprsd/commit/e3ab6e7f59fbab44a5c7266f63d3c1c662f98c6f) +- retagged v3.4.1 in prep for release [`a6f84e4`](https://github.com/craigerl/aprsd/commit/a6f84e42bc4f7ab02db784f8e5ca6e1560608363) +- Build > python 3.10 [`e5662b9`](https://github.com/craigerl/aprsd/commit/e5662b95f8e498af3cfad60b64ae61d9e49726eb) +- Update ChangeLog [`9b843ee`](https://github.com/craigerl/aprsd/commit/9b843eead9774ac5c456dc7834d921684d05fb6f) +- Removed invalid pyproject classifier [`a5dc322`](https://github.com/craigerl/aprsd/commit/a5dc322066f7f9e39cf911faee845861b8d34c47) +- Update Changelog [`a74a66d`](https://github.com/craigerl/aprsd/commit/a74a66d9c359d66566c3351699511dab75f8b61f) #### [v3.4.0](https://github.com/craigerl/aprsd/compare/v3.3.4...v3.4.0) @@ -47,108 +48,108 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Update client.py to add consumer in the API. [`#158`](https://github.com/craigerl/aprsd/pull/158) - Packet updates [`#154`](https://github.com/craigerl/aprsd/pull/154) - Bump black from 24.2.0 to 24.3.0 [`#155`](https://github.com/craigerl/aprsd/pull/155) -- Updated prism to 1.29 [`db2fbce`](https://github.com/craigerl/aprsd/commit/db2fbce079bfdd3a9db240f85dfac0cd7a344fc8) -- Removed RPC Server and client. [`333feee`](https://github.com/craigerl/aprsd/commit/333feee80501198df2eeffa2f40bcf10df7ccb0f) -- Refactored packets [`1477e61`](https://github.com/craigerl/aprsd/commit/1477e61b0fbcea4f7eda8faba7901517a89e1b0f) -- Removed json-viewer [`bc3bdc4`](https://github.com/craigerl/aprsd/commit/bc3bdc48d2b647a5d18ecc26c769b2bec0b406cf) -- More packet cleanup and tests [`f53df24`](https://github.com/craigerl/aprsd/commit/f53df2498890c252fdc06e1973e060f1e7d1957a) -- Make all the Objectstore children use the same lock [`c206f52`](https://github.com/craigerl/aprsd/commit/c206f52a763a665c4b22aaaa4bf0234d0d998da7) -- updated dev-requirements [`eada5e9`](https://github.com/craigerl/aprsd/commit/eada5e9ce25ea388913af699b3042b13156b91f3) -- Completely redo logging of packets!! [`1e6c483`](https://github.com/craigerl/aprsd/commit/1e6c483002be894c8862dd218b7ab7a52b65d2ef) -- Fixed pep8 errors and missing files [`a270c75`](https://github.com/craigerl/aprsd/commit/a270c75263aaf16bd066eded2454d71f28945a4c) -- Allow stats collector to serialize upon creation [`71d72ad`](https://github.com/craigerl/aprsd/commit/71d72adf065f1fb96d4e198612a98ae4322a3289) -- Eliminated need for from_aprslib_dict [`e386e91`](https://github.com/craigerl/aprsd/commit/e386e91f6e58e63a405eb2365809501c52a05abd) -- Added new config option log_packet_format [`c581dc5`](https://github.com/craigerl/aprsd/commit/c581dc5020b140955e005cea41eb094f85c1d250) -- Added new PacketCollector [`a656d93`](https://github.com/craigerl/aprsd/commit/a656d9326333c79482d0797f676a6e865d49541c) -- Admin UI working again [`0ca9072`](https://github.com/craigerl/aprsd/commit/0ca9072c97978fb298fc94ef974726852dfb9eb5) -- Updated Changelog for 3.4.0 [`cb2a344`](https://github.com/craigerl/aprsd/commit/cb2a3441b4dac0f4a6e6c58805f5deb0e3fcb7c6) -- Removed the requirement on click-completion [`992485e`](https://github.com/craigerl/aprsd/commit/992485e9c7d86fca71fb9bee4dfb1434b04c403d) -- Added threads chart to admin ui graphs [`f2d39e5`](https://github.com/craigerl/aprsd/commit/f2d39e5fd25489e3be46e9a31f373e533d70f6f1) -- Moved Threads list for mypy [`d80277c`](https://github.com/craigerl/aprsd/commit/d80277c9d8f882297ee35ffa0d1174150c290b1c) -- Update Dockerfiles [`f02db20`](https://github.com/craigerl/aprsd/commit/f02db20c3eecacbed79935d28eba3dbd0b6816a2) -- Added threads table in the admin web ui [`c6079f8`](https://github.com/craigerl/aprsd/commit/c6079f897d73a0c6c27940f5d16f9ff2f5927e58) -- Added PacketTrack to packet collector [`717db60`](https://github.com/craigerl/aprsd/commit/717db6083eb0fbd82c8cbff0d6cbd0cff9893136) -- Got unit tests working again [`f92b2ee`](https://github.com/craigerl/aprsd/commit/f92b2ee3646fe2f2c2ec5decfb98ff391faf092f) -- Changed Stats Collector registration [`dc4879a`](https://github.com/craigerl/aprsd/commit/dc4879a367dd43720d21a2b8cbe65a0568ae0a6e) -- Added new config optons for PacketList [`8392d6b`](https://github.com/craigerl/aprsd/commit/8392d6b8efec4aeb3c87edf381c672440ee2cf07) -- Added new webchat config option for logging [`9e26df2`](https://github.com/craigerl/aprsd/commit/9e26df26d6da1298cc3dfaead7579cb19854448c) -- Fixed PacketList maxlen [`5ff62c9`](https://github.com/craigerl/aprsd/commit/5ff62c9bdfc67a0ffac72aa8ff90cf774800b6eb) -- Some packet cleanup [`da7b712`](https://github.com/craigerl/aprsd/commit/da7b7124d7982e8d24a8e7b22bd8276f679dffe4) -- Fixed issue with PacketList being empty [`7541f13`](https://github.com/craigerl/aprsd/commit/7541f131745203e3d590027bc206107210e0d99e) -- Added try except blocks in collectors [`88d2624`](https://github.com/craigerl/aprsd/commit/88d26241f5f3685e011b710bcc40bb2e609a32bb) -- Remove rpyc as a requirement [`7114269`](https://github.com/craigerl/aprsd/commit/7114269ceecc088db00a7a703c69b74a2404c295) -- Added fox for entry_points with old python [`09b9708`](https://github.com/craigerl/aprsd/commit/09b97086bc6e6b789c69bb9446cf370a38f437fa) -- Fixed some tox errors related to mypy [`00e185b`](https://github.com/craigerl/aprsd/commit/00e185b4e7ca5abed9f56282924e183b1201ea33) -- Added missing packet types in listen command [`f450238`](https://github.com/craigerl/aprsd/commit/f450238348e6869f5ec04d247d6825f719582a5f) -- Added config for enable_seen_list [`c43652d`](https://github.com/craigerl/aprsd/commit/c43652dbea3c55243b1457ce3abba235d50fcea1) -- Added default_packet_send_count config [`813bc7e`](https://github.com/craigerl/aprsd/commit/813bc7ea29f3a73133f467c86faf884c2c4169d4) -- Fixed issues with watch list at startup [`e2e5853`](https://github.com/craigerl/aprsd/commit/e2e58530b26bb603875d311dea73428c434f1e24) -- Added PacketList.set_maxlen() [`4542c0a`](https://github.com/craigerl/aprsd/commit/4542c0a643618940ea15468619cec7737c50d309) -- Delete more stats from webchat [`fcc02f2`](https://github.com/craigerl/aprsd/commit/fcc02f29af1f649f45c16a0dbd08a51cddf94486) -- update requirements [`8f588e6`](https://github.com/craigerl/aprsd/commit/8f588e653dc59511ce42c683fa967c8691e0d523) -- Fix for micE packet decoding with mbits [`386d2be`](https://github.com/craigerl/aprsd/commit/386d2bea6260e6b0ea63aec0b26151e2a9602984) -- Added type setting on pluging.py for mypy [`9c77ca2`](https://github.com/craigerl/aprsd/commit/9c77ca26be8af072aa80236338450a1de26b6e09) -- Webchat Send Beacon uses Path selected in UI [`4c7e27c`](https://github.com/craigerl/aprsd/commit/4c7e27c88bbac8e8b471685ac07cc85e802816b2) -- Added support for RX replyacks [`8d86764`](https://github.com/craigerl/aprsd/commit/8d86764c234cbd5f9d39d3100d5acd1b9442c49a) -- removed Packet.last_send_attempt and just use send_count [`758ea43`](https://github.com/craigerl/aprsd/commit/758ea432ed75e2e211f38b3bd74eae90708af68f) -- syncronize the add for StatsStore [`026dc6e`](https://github.com/craigerl/aprsd/commit/026dc6e3761019308dd609a8d0e610c13425bfca) -- Call packet collecter after prepare during tx. [`bef3205`](https://github.com/craigerl/aprsd/commit/bef32059f4e5443cec80dbcf4d63fe7b3c89afe8) -- Added new default_ack_send_count config option [`40c028c`](https://github.com/craigerl/aprsd/commit/40c028c84411680df80a4d8782342e02aa865ff5) -- Fix time plugin [`94f36e0`](https://github.com/craigerl/aprsd/commit/94f36e0aadcd6c85f3dce0f9b58f4dc35fb3b76c) -- Fix some issues with listen command [`8728926`](https://github.com/craigerl/aprsd/commit/8728926bf4163dc7919d7e42772fe7da93f4a89b) -- added packet counter random int [`873fc06`](https://github.com/craigerl/aprsd/commit/873fc066080cb588658e56574100dd5200e1edbc) -- Fix some pep8 issues [`b461231`](https://github.com/craigerl/aprsd/commit/b461231c008127ede1e4fcbc24067bfd283bef4c) -- Fixed call to setup_logging in uwsgi [`8797dfd`](https://github.com/craigerl/aprsd/commit/8797dfd072c596c933e4399aa369c5175327165c) -- Added config enable_packet_logging [`63f3de4`](https://github.com/craigerl/aprsd/commit/63f3de47b7f69956527ca07bb3972a2c9fc103b3) -- Admin interface catch empty stats [`2c5bc6c`](https://github.com/craigerl/aprsd/commit/2c5bc6c1f70fdf7bfd166b42f0d6554f4fcfcf28) -- Fix for filtering curse words [`f400c60`](https://github.com/craigerl/aprsd/commit/f400c6004e74b71a482429fc56d7595796fb5748) -- Update requirements [`1a7694e`](https://github.com/craigerl/aprsd/commit/1a7694e7e2b16e58716fd4ad43fc9ffe07793337) -- Lock on stats for PacketList [`f59b65d`](https://github.com/craigerl/aprsd/commit/f59b65d13c77f98209972c839292e4300df7e889) -- Lock around client reset [`50e491b`](https://github.com/craigerl/aprsd/commit/50e491bab43ca4c6fa11165c3348f97cc482c17e) -- Put packet.json back in [`0321cb6`](https://github.com/craigerl/aprsd/commit/0321cb6cf10e7194eddd8c44c3ddce254de6b504) -- Fixed docker setup.sh comparison [`a5680a7`](https://github.com/craigerl/aprsd/commit/a5680a7cbb121d59f776b986d58e82adbfa33dab) -- Fix access to PacketList._maxlen [`1c9f25a`](https://github.com/craigerl/aprsd/commit/1c9f25a3b3043352909504e62fe70f13ea439107) -- Fix for sample-config warning [`428edac`](https://github.com/craigerl/aprsd/commit/428edaced96165bf559debcb3e944d66f1f54e8b) -- Fixed access to log_monitor [`01cd0a0`](https://github.com/craigerl/aprsd/commit/01cd0a03270cd6d85187190da80aa2053ee7ea6f) -- Fixed unit tests failing with WatchList [`c4b17ee`](https://github.com/craigerl/aprsd/commit/c4b17eee9d9f75d3ed31e025c68ba7b4290f20ca) -- Fix APRSDStats start_time [`29d97d9`](https://github.com/craigerl/aprsd/commit/29d97d9f0cdf33ffe454ff4722b531afc5dc6145) -- Another fix for ACK packets [`f34120c`](https://github.com/craigerl/aprsd/commit/f34120c2df11b9facc2c5b8378f08fe000f1c7e3) -- Fix issue not tracking RX Ack packets for stats [`3bef131`](https://github.com/craigerl/aprsd/commit/3bef1314f87d11910d94a2be0b28ebc7f4939615) -- Added human_info property to MessagePackets [`8f6f800`](https://github.com/craigerl/aprsd/commit/8f6f8007f4a9634b6163a66be135650876fccf0b) -- LOG failed requests post to admin ui [`da882b4`](https://github.com/craigerl/aprsd/commit/da882b4f9b337b11bd48b74bf21b4a25693a8ddc) -- Fixed some logging in webchat [`127d3b3`](https://github.com/craigerl/aprsd/commit/127d3b3f267b9f547a1c593ecbdbaf510d633fd5) -- replaced access to conf from uwsgi [`82b3761`](https://github.com/craigerl/aprsd/commit/82b3761628fc7f012f0ec851cc41ba564a7ca1c8) - Fixed access to conf.log in logging_setup [`c1acdc2`](https://github.com/craigerl/aprsd/commit/c1acdc2510c7b3999a9ea4c2bc878bc931c03d4e) -- Fixed a problem with the webchat tab notification [`5fa4eaf`](https://github.com/craigerl/aprsd/commit/5fa4eaf909b4ef5343d8b1a2284a725cbb6798d2) -- changed admin web_ip to StrOpt [`6845d26`](https://github.com/craigerl/aprsd/commit/6845d266f29b50f36f32002cfa8b73634c30a5b4) -- Show comment in multiline packet output [`f4356e4`](https://github.com/craigerl/aprsd/commit/f4356e4a2075c2d2d5342024848ef739840f5309) -- small refactor of stats usage in version plugin [`90f212e`](https://github.com/craigerl/aprsd/commit/90f212e6dc15835d162d28d2deb579149202d525) -- another fix for tx send [`3e87163`](https://github.com/craigerl/aprsd/commit/3e8716365ecd2553e6ad3d1d057947a032fdb0bc) -- Fixed issue with APRSDThreadList stats() [`66e4850`](https://github.com/craigerl/aprsd/commit/66e48503537cbe17c9e24794963fc90d4235e4b3) -- Remove packet from tracker after max attempts [`4c2a40b`](https://github.com/craigerl/aprsd/commit/4c2a40b7a7acc1a3f75a8086dd82964285890012) -- Fixed scrolling problem with new webchat sent msg [`2e9cf3c`](https://github.com/craigerl/aprsd/commit/2e9cf3ce8813c7ba7eec82f58561275fbaaddc39) -- Change setup.h [`fc9ab4a`](https://github.com/craigerl/aprsd/commit/fc9ab4aa74d077b9875ba51d5244d09b5e6fc464) -- Fixed PacketTrack with UnknownPacket [`2b2bf6c`](https://github.com/craigerl/aprsd/commit/2b2bf6c92dc8d8c3cb921768088ecb94753adf87) -- Remove error logs from watch list [`27359d6`](https://github.com/craigerl/aprsd/commit/27359d61aade368cea49dcf255dd7a60968bfd9e) -- Fixed Keepalive access to email stats [`cb0cfee`](https://github.com/craigerl/aprsd/commit/cb0cfeea0bedba8512b9da0629d0e4394c08e193) -- force uwsgi to 2.0.24 [`c2f8af0`](https://github.com/craigerl/aprsd/commit/c2f8af06bc4687aa6a24e0d67e4f5f852b720bcd) -- ismall update [`5b2a59f`](https://github.com/craigerl/aprsd/commit/5b2a59fae39eae4f3990be2d3d1a773da6d0e72c) -- set packetlist max back to 100 [`3bd7add`](https://github.com/craigerl/aprsd/commit/3bd7adda447440867e85c1a6d0357e736948d934) -- ensure thread count is updated [`91ba6d1`](https://github.com/craigerl/aprsd/commit/91ba6d10ceef699c811e0e1caa408b62394ed6f8) -- Limit packets to 50 in PacketList [`f682890`](https://github.com/craigerl/aprsd/commit/f682890ef02fc5f4754c303b32fa04f1f656d3c9) -- add GATE route to webchat along with WIDE1, etc [`886ad9b`](https://github.com/craigerl/aprsd/commit/886ad9be0976dbb6af135b8eaf62a8206fef216d) -- Get rid of some useless warning logs [`b388989`](https://github.com/craigerl/aprsd/commit/b3889896b9cc229dadd2baabeb1d3fdb0df8e470) -- Ensure latest pip is in docker image [`a839dbd`](https://github.com/craigerl/aprsd/commit/a839dbd3c54fcd836d091ab0b8056de5f6025ebd) -- Don't call stats so often in webchat [`9858955`](https://github.com/craigerl/aprsd/commit/9858955d34b88003285c4c588eacb32ca3a4ce67) -- Start to add types [`12dab28`](https://github.com/craigerl/aprsd/commit/12dab284cb6aef896a8f885f5574ed5a8ac9a0b4) +- Fixed call to setup_logging in uwsgi [`8797dfd`](https://github.com/craigerl/aprsd/commit/8797dfd072c596c933e4399aa369c5175327165c) +- replaced access to conf from uwsgi [`82b3761`](https://github.com/craigerl/aprsd/commit/82b3761628fc7f012f0ec851cc41ba564a7ca1c8) - Update tox for mypy runs [`d0f53c5`](https://github.com/craigerl/aprsd/commit/d0f53c563f4186510bede7b81456c3cd6059069c) -- added packet_count in packet_list stats [`7c93534`](https://github.com/craigerl/aprsd/commit/7c935345e50678265be4345984a8749cf12259b1) -- Update webchat, include GATE route along with WIDE, ARISS, etc [`aa6e732`](https://github.com/craigerl/aprsd/commit/aa6e7329358247b504c49c0767cd4226638dc8b6) -- Ensure StatsStore has empty data [`80705cb`](https://github.com/craigerl/aprsd/commit/80705cb341c532bfeb9010ea0e9d93aaa66485c0) -- Remove the logging of the conf password if not set [`a8d56a9`](https://github.com/craigerl/aprsd/commit/a8d56a99670097653c78c642761f8adcc941a7c1) -- Change debug log color [`c062359`](https://github.com/craigerl/aprsd/commit/c0623596cd2253e4f9bc6e0d20dd524bde2bc948) -- removed print [`6f1d6b4`](https://github.com/craigerl/aprsd/commit/6f1d6b412209aea6bffad37083e4921dff9594f5) +- Start to add types [`12dab28`](https://github.com/craigerl/aprsd/commit/12dab284cb6aef896a8f885f5574ed5a8ac9a0b4) - No need to synchronize on stats [`29b4b04`](https://github.com/craigerl/aprsd/commit/29b4b04eee071b0e65298759ad685275280d1256) +- Moved Threads list for mypy [`d80277c`](https://github.com/craigerl/aprsd/commit/d80277c9d8f882297ee35ffa0d1174150c290b1c) +- Added type setting on pluging.py for mypy [`9c77ca2`](https://github.com/craigerl/aprsd/commit/9c77ca26be8af072aa80236338450a1de26b6e09) +- small refactor of stats usage in version plugin [`90f212e`](https://github.com/craigerl/aprsd/commit/90f212e6dc15835d162d28d2deb579149202d525) +- removed print [`6f1d6b4`](https://github.com/craigerl/aprsd/commit/6f1d6b412209aea6bffad37083e4921dff9594f5) +- Refactored packets [`1477e61`](https://github.com/craigerl/aprsd/commit/1477e61b0fbcea4f7eda8faba7901517a89e1b0f) +- Fixed some tox errors related to mypy [`00e185b`](https://github.com/craigerl/aprsd/commit/00e185b4e7ca5abed9f56282924e183b1201ea33) +- updated dev-requirements [`eada5e9`](https://github.com/craigerl/aprsd/commit/eada5e9ce25ea388913af699b3042b13156b91f3) +- Fix for micE packet decoding with mbits [`386d2be`](https://github.com/craigerl/aprsd/commit/386d2bea6260e6b0ea63aec0b26151e2a9602984) +- Eliminated need for from_aprslib_dict [`e386e91`](https://github.com/craigerl/aprsd/commit/e386e91f6e58e63a405eb2365809501c52a05abd) +- Don't call stats so often in webchat [`9858955`](https://github.com/craigerl/aprsd/commit/9858955d34b88003285c4c588eacb32ca3a4ce67) +- Added missing packet types in listen command [`f450238`](https://github.com/craigerl/aprsd/commit/f450238348e6869f5ec04d247d6825f719582a5f) +- Fixed some logging in webchat [`127d3b3`](https://github.com/craigerl/aprsd/commit/127d3b3f267b9f547a1c593ecbdbaf510d633fd5) +- Completely redo logging of packets!! [`1e6c483`](https://github.com/craigerl/aprsd/commit/1e6c483002be894c8862dd218b7ab7a52b65d2ef) +- Fix some pep8 issues [`b461231`](https://github.com/craigerl/aprsd/commit/b461231c008127ede1e4fcbc24067bfd283bef4c) +- Added new webchat config option for logging [`9e26df2`](https://github.com/craigerl/aprsd/commit/9e26df26d6da1298cc3dfaead7579cb19854448c) +- Some packet cleanup [`da7b712`](https://github.com/craigerl/aprsd/commit/da7b7124d7982e8d24a8e7b22bd8276f679dffe4) +- Added new config option log_packet_format [`c581dc5`](https://github.com/craigerl/aprsd/commit/c581dc5020b140955e005cea41eb094f85c1d250) +- Show comment in multiline packet output [`f4356e4`](https://github.com/craigerl/aprsd/commit/f4356e4a2075c2d2d5342024848ef739840f5309) +- More packet cleanup and tests [`f53df24`](https://github.com/craigerl/aprsd/commit/f53df2498890c252fdc06e1973e060f1e7d1957a) +- added packet counter random int [`873fc06`](https://github.com/craigerl/aprsd/commit/873fc066080cb588658e56574100dd5200e1edbc) +- Fix for filtering curse words [`f400c60`](https://github.com/craigerl/aprsd/commit/f400c6004e74b71a482429fc56d7595796fb5748) +- Change debug log color [`c062359`](https://github.com/craigerl/aprsd/commit/c0623596cd2253e4f9bc6e0d20dd524bde2bc948) +- Put packet.json back in [`0321cb6`](https://github.com/craigerl/aprsd/commit/0321cb6cf10e7194eddd8c44c3ddce254de6b504) +- update requirements [`8f588e6`](https://github.com/craigerl/aprsd/commit/8f588e653dc59511ce42c683fa967c8691e0d523) +- Fix for sample-config warning [`428edac`](https://github.com/craigerl/aprsd/commit/428edaced96165bf559debcb3e944d66f1f54e8b) +- Fixed pep8 errors and missing files [`a270c75`](https://github.com/craigerl/aprsd/commit/a270c75263aaf16bd066eded2454d71f28945a4c) +- Got unit tests working again [`f92b2ee`](https://github.com/craigerl/aprsd/commit/f92b2ee3646fe2f2c2ec5decfb98ff391faf092f) +- Fixed access to log_monitor [`01cd0a0`](https://github.com/craigerl/aprsd/commit/01cd0a03270cd6d85187190da80aa2053ee7ea6f) +- Fixed issues with watch list at startup [`e2e5853`](https://github.com/craigerl/aprsd/commit/e2e58530b26bb603875d311dea73428c434f1e24) +- Allow stats collector to serialize upon creation [`71d72ad`](https://github.com/craigerl/aprsd/commit/71d72adf065f1fb96d4e198612a98ae4322a3289) +- Lock around client reset [`50e491b`](https://github.com/craigerl/aprsd/commit/50e491bab43ca4c6fa11165c3348f97cc482c17e) +- Remove the logging of the conf password if not set [`a8d56a9`](https://github.com/craigerl/aprsd/commit/a8d56a99670097653c78c642761f8adcc941a7c1) +- Removed RPC Server and client. [`333feee`](https://github.com/craigerl/aprsd/commit/333feee80501198df2eeffa2f40bcf10df7ccb0f) +- Admin UI working again [`0ca9072`](https://github.com/craigerl/aprsd/commit/0ca9072c97978fb298fc94ef974726852dfb9eb5) +- Delete more stats from webchat [`fcc02f2`](https://github.com/craigerl/aprsd/commit/fcc02f29af1f649f45c16a0dbd08a51cddf94486) +- Remove rpyc as a requirement [`7114269`](https://github.com/craigerl/aprsd/commit/7114269ceecc088db00a7a703c69b74a2404c295) +- Removed json-viewer [`bc3bdc4`](https://github.com/craigerl/aprsd/commit/bc3bdc48d2b647a5d18ecc26c769b2bec0b406cf) +- Updated prism to 1.29 [`db2fbce`](https://github.com/craigerl/aprsd/commit/db2fbce079bfdd3a9db240f85dfac0cd7a344fc8) +- changed admin web_ip to StrOpt [`6845d26`](https://github.com/craigerl/aprsd/commit/6845d266f29b50f36f32002cfa8b73634c30a5b4) +- LOG failed requests post to admin ui [`da882b4`](https://github.com/craigerl/aprsd/commit/da882b4f9b337b11bd48b74bf21b4a25693a8ddc) +- Ensure latest pip is in docker image [`a839dbd`](https://github.com/craigerl/aprsd/commit/a839dbd3c54fcd836d091ab0b8056de5f6025ebd) +- Ensure StatsStore has empty data [`80705cb`](https://github.com/craigerl/aprsd/commit/80705cb341c532bfeb9010ea0e9d93aaa66485c0) +- Admin interface catch empty stats [`2c5bc6c`](https://github.com/craigerl/aprsd/commit/2c5bc6c1f70fdf7bfd166b42f0d6554f4fcfcf28) +- Fix some issues with listen command [`8728926`](https://github.com/craigerl/aprsd/commit/8728926bf4163dc7919d7e42772fe7da93f4a89b) +- Fixed scrolling problem with new webchat sent msg [`2e9cf3c`](https://github.com/craigerl/aprsd/commit/2e9cf3ce8813c7ba7eec82f58561275fbaaddc39) +- Added human_info property to MessagePackets [`8f6f800`](https://github.com/craigerl/aprsd/commit/8f6f8007f4a9634b6163a66be135650876fccf0b) +- Get rid of some useless warning logs [`b388989`](https://github.com/craigerl/aprsd/commit/b3889896b9cc229dadd2baabeb1d3fdb0df8e470) +- Update webchat, include GATE route along with WIDE, ARISS, etc [`aa6e732`](https://github.com/craigerl/aprsd/commit/aa6e7329358247b504c49c0767cd4226638dc8b6) +- add GATE route to webchat along with WIDE1, etc [`886ad9b`](https://github.com/craigerl/aprsd/commit/886ad9be0976dbb6af135b8eaf62a8206fef216d) +- Fix time plugin [`94f36e0`](https://github.com/craigerl/aprsd/commit/94f36e0aadcd6c85f3dce0f9b58f4dc35fb3b76c) +- Fix issue not tracking RX Ack packets for stats [`3bef131`](https://github.com/craigerl/aprsd/commit/3bef1314f87d11910d94a2be0b28ebc7f4939615) +- Another fix for ACK packets [`f34120c`](https://github.com/craigerl/aprsd/commit/f34120c2df11b9facc2c5b8378f08fe000f1c7e3) +- Fixed a problem with the webchat tab notification [`5fa4eaf`](https://github.com/craigerl/aprsd/commit/5fa4eaf909b4ef5343d8b1a2284a725cbb6798d2) +- Fixed PacketList maxlen [`5ff62c9`](https://github.com/craigerl/aprsd/commit/5ff62c9bdfc67a0ffac72aa8ff90cf774800b6eb) +- Lock on stats for PacketList [`f59b65d`](https://github.com/craigerl/aprsd/commit/f59b65d13c77f98209972c839292e4300df7e889) +- syncronize the add for StatsStore [`026dc6e`](https://github.com/craigerl/aprsd/commit/026dc6e3761019308dd609a8d0e610c13425bfca) +- Limit packets to 50 in PacketList [`f682890`](https://github.com/craigerl/aprsd/commit/f682890ef02fc5f4754c303b32fa04f1f656d3c9) +- Remove packet from tracker after max attempts [`4c2a40b`](https://github.com/craigerl/aprsd/commit/4c2a40b7a7acc1a3f75a8086dd82964285890012) +- Added new default_ack_send_count config option [`40c028c`](https://github.com/craigerl/aprsd/commit/40c028c84411680df80a4d8782342e02aa865ff5) +- Fixed issue with APRSDThreadList stats() [`66e4850`](https://github.com/craigerl/aprsd/commit/66e48503537cbe17c9e24794963fc90d4235e4b3) +- Added threads table in the admin web ui [`c6079f8`](https://github.com/craigerl/aprsd/commit/c6079f897d73a0c6c27940f5d16f9ff2f5927e58) +- ensure thread count is updated [`91ba6d1`](https://github.com/craigerl/aprsd/commit/91ba6d10ceef699c811e0e1caa408b62394ed6f8) +- set packetlist max back to 100 [`3bd7add`](https://github.com/craigerl/aprsd/commit/3bd7adda447440867e85c1a6d0357e736948d934) +- Added threads chart to admin ui graphs [`f2d39e5`](https://github.com/craigerl/aprsd/commit/f2d39e5fd25489e3be46e9a31f373e533d70f6f1) +- Update requirements [`1a7694e`](https://github.com/craigerl/aprsd/commit/1a7694e7e2b16e58716fd4ad43fc9ffe07793337) +- Added new config optons for PacketList [`8392d6b`](https://github.com/craigerl/aprsd/commit/8392d6b8efec4aeb3c87edf381c672440ee2cf07) +- ismall update [`5b2a59f`](https://github.com/craigerl/aprsd/commit/5b2a59fae39eae4f3990be2d3d1a773da6d0e72c) +- force uwsgi to 2.0.24 [`c2f8af0`](https://github.com/craigerl/aprsd/commit/c2f8af06bc4687aa6a24e0d67e4f5f852b720bcd) +- added packet_count in packet_list stats [`7c93534`](https://github.com/craigerl/aprsd/commit/7c935345e50678265be4345984a8749cf12259b1) +- Fix access to PacketList._maxlen [`1c9f25a`](https://github.com/craigerl/aprsd/commit/1c9f25a3b3043352909504e62fe70f13ea439107) +- removed Packet.last_send_attempt and just use send_count [`758ea43`](https://github.com/craigerl/aprsd/commit/758ea432ed75e2e211f38b3bd74eae90708af68f) +- another fix for tx send [`3e87163`](https://github.com/craigerl/aprsd/commit/3e8716365ecd2553e6ad3d1d057947a032fdb0bc) +- Added PacketList.set_maxlen() [`4542c0a`](https://github.com/craigerl/aprsd/commit/4542c0a643618940ea15468619cec7737c50d309) +- Changed Stats Collector registration [`dc4879a`](https://github.com/craigerl/aprsd/commit/dc4879a367dd43720d21a2b8cbe65a0568ae0a6e) +- Added support for RX replyacks [`8d86764`](https://github.com/craigerl/aprsd/commit/8d86764c234cbd5f9d39d3100d5acd1b9442c49a) +- Fixed Keepalive access to email stats [`cb0cfee`](https://github.com/craigerl/aprsd/commit/cb0cfeea0bedba8512b9da0629d0e4394c08e193) +- Added new PacketCollector [`a656d93`](https://github.com/craigerl/aprsd/commit/a656d9326333c79482d0797f676a6e865d49541c) +- Fixed issue with PacketList being empty [`7541f13`](https://github.com/craigerl/aprsd/commit/7541f131745203e3d590027bc206107210e0d99e) +- Remove error logs from watch list [`27359d6`](https://github.com/craigerl/aprsd/commit/27359d61aade368cea49dcf255dd7a60968bfd9e) +- Added try except blocks in collectors [`88d2624`](https://github.com/craigerl/aprsd/commit/88d26241f5f3685e011b710bcc40bb2e609a32bb) +- Webchat Send Beacon uses Path selected in UI [`4c7e27c`](https://github.com/craigerl/aprsd/commit/4c7e27c88bbac8e8b471685ac07cc85e802816b2) +- Added PacketTrack to packet collector [`717db60`](https://github.com/craigerl/aprsd/commit/717db6083eb0fbd82c8cbff0d6cbd0cff9893136) +- Call packet collecter after prepare during tx. [`bef3205`](https://github.com/craigerl/aprsd/commit/bef32059f4e5443cec80dbcf4d63fe7b3c89afe8) +- Added default_packet_send_count config [`813bc7e`](https://github.com/craigerl/aprsd/commit/813bc7ea29f3a73133f467c86faf884c2c4169d4) +- Fix APRSDStats start_time [`29d97d9`](https://github.com/craigerl/aprsd/commit/29d97d9f0cdf33ffe454ff4722b531afc5dc6145) +- Added config for enable_seen_list [`c43652d`](https://github.com/craigerl/aprsd/commit/c43652dbea3c55243b1457ce3abba235d50fcea1) +- Added fox for entry_points with old python [`09b9708`](https://github.com/craigerl/aprsd/commit/09b97086bc6e6b789c69bb9446cf370a38f437fa) +- Update Dockerfiles [`f02db20`](https://github.com/craigerl/aprsd/commit/f02db20c3eecacbed79935d28eba3dbd0b6816a2) +- Removed the requirement on click-completion [`992485e`](https://github.com/craigerl/aprsd/commit/992485e9c7d86fca71fb9bee4dfb1434b04c403d) +- Fixed PacketTrack with UnknownPacket [`2b2bf6c`](https://github.com/craigerl/aprsd/commit/2b2bf6c92dc8d8c3cb921768088ecb94753adf87) +- Make all the Objectstore children use the same lock [`c206f52`](https://github.com/craigerl/aprsd/commit/c206f52a763a665c4b22aaaa4bf0234d0d998da7) +- Added config enable_packet_logging [`63f3de4`](https://github.com/craigerl/aprsd/commit/63f3de47b7f69956527ca07bb3972a2c9fc103b3) +- Fixed unit tests failing with WatchList [`c4b17ee`](https://github.com/craigerl/aprsd/commit/c4b17eee9d9f75d3ed31e025c68ba7b4290f20ca) +- Fixed docker setup.sh comparison [`a5680a7`](https://github.com/craigerl/aprsd/commit/a5680a7cbb121d59f776b986d58e82adbfa33dab) +- Change setup.h [`fc9ab4a`](https://github.com/craigerl/aprsd/commit/fc9ab4aa74d077b9875ba51d5244d09b5e6fc464) +- Updated Changelog for 3.4.0 [`cb2a344`](https://github.com/craigerl/aprsd/commit/cb2a3441b4dac0f4a6e6c58805f5deb0e3fcb7c6) #### [v3.3.4](https://github.com/craigerl/aprsd/compare/v3.3.3...v3.3.4) @@ -167,17 +168,17 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). > 13 March 2024 -- Changelog for 3.3.2 [`71cd7e0`](https://github.com/craigerl/aprsd/commit/71cd7e0ab5fcb73c4b9302a7d0378719981244a1) - Removed print in utils [`f810c02`](https://github.com/craigerl/aprsd/commit/f810c02d5d75b8fad03ba5065b0950d3133de86b) - Remove warning during sample-config [`d485f48`](https://github.com/craigerl/aprsd/commit/d485f484ecb4e6d026e9d5a36adbf1b8c77b6044) +- Changelog for 3.3.2 [`71cd7e0`](https://github.com/craigerl/aprsd/commit/71cd7e0ab5fcb73c4b9302a7d0378719981244a1) #### [v3.3.1](https://github.com/craigerl/aprsd/compare/v3.3.0...v3.3.1) > 12 March 2024 - Fixed problem with list-plugins [`cb9456b`](https://github.com/craigerl/aprsd/commit/cb9456b29d68ec4b64377c457214d55803242b70) -- Updates for 3.3.1 [`50e24ab`](https://github.com/craigerl/aprsd/commit/50e24abb81dd36c604c5109c5ec95f4d5fa8c52e) - Fixed failure with fetch-stats [`10d023d`](https://github.com/craigerl/aprsd/commit/10d023dd7bbc6da252fa02ef452fc4142d313bed) +- Updates for 3.3.1 [`50e24ab`](https://github.com/craigerl/aprsd/commit/50e24abb81dd36c604c5109c5ec95f4d5fa8c52e) #### [v3.3.0](https://github.com/craigerl/aprsd/compare/v3.2.3...v3.3.0) @@ -185,45 +186,45 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Replace slow rich logging with loguru [`#147`](https://github.com/craigerl/aprsd/pull/147) - Added location for callsign tabs in webchat [`#146`](https://github.com/craigerl/aprsd/pull/146) -- Added Location info on webchat interface [`d6f0f05`](https://github.com/craigerl/aprsd/commit/d6f0f053156dcbc86f1f44f860c755efdcbe8a9e) -- Added list-extensions and updated README.rst [`ff051bc`](https://github.com/craigerl/aprsd/commit/ff051bc2859223a2979c1e050b8aae7fc947b6de) -- Update requirements.txt [`a4230d3`](https://github.com/craigerl/aprsd/commit/a4230d324a409479ff14de420bfd44050190244f) -- Added the new APRS Registry thread [`1e4f0ca`](https://github.com/craigerl/aprsd/commit/1e4f0ca65af38f728de6c917d09b19450aceaa2b) -- Added BeaconPacket [`11f1e95`](https://github.com/craigerl/aprsd/commit/11f1e9533e89ca236006d3a5d0b9e1b3ce0f4088) -- Create codeql.yml [`a00c4ea`](https://github.com/craigerl/aprsd/commit/a00c4ea84095cdb25f8306ce66a47f5497bcfa3b) -- updated requirements files [`275bf67`](https://github.com/craigerl/aprsd/commit/275bf67b9e0b474674d5efb69551ee0d2a308ec0) -- Added support for loading extensions [`b143072`](https://github.com/craigerl/aprsd/commit/b14307270c1438b6f5cdf8de5bb179729a62f993) -- use log.setup_logging [`aec88d4`](https://github.com/craigerl/aprsd/commit/aec88d4a7e107cdfbc6d38e6bc744a74b6ef3b9b) -- Fixed pep8 [`d1a09fc`](https://github.com/craigerl/aprsd/commit/d1a09fc6b5234835b49da7a19bbc65d4655481dd) -- Added installing extensions to Docker run [`4118541`](https://github.com/craigerl/aprsd/commit/41185416cbf1ee9add54ebcae6674824384e6104) -- Updated dev test-plugin command [`03c58f8`](https://github.com/craigerl/aprsd/commit/03c58f83cd0f6a98cfd77861871edfd65c4e28fa) -- removed some unneeded code [`9683459`](https://github.com/craigerl/aprsd/commit/968345944aedc9af11b1d9286b8c0d4a3354867e) -- Updated requirements [`d092a43`](https://github.com/craigerl/aprsd/commit/d092a43ec9ad9284d3f8b0060719b9e6c86f1976) -- Disable debug logs for aprslib [`24bbea1`](https://github.com/craigerl/aprsd/commit/24bbea1d499644d9d4bd7aab62f05b5802b2867e) -- Added some missing classes to threads [`e89f8a8`](https://github.com/craigerl/aprsd/commit/e89f8a805bc47f8d951fcbfb350a3b40d8befbd3) - Update for v3.2.3 [`8bceb82`](https://github.com/craigerl/aprsd/commit/8bceb827ecb20c87224a74868d2843e67c977e6e) -- Changelog for 3.3.0 [`c37e1d5`](https://github.com/craigerl/aprsd/commit/c37e1d58bbf124fa99b33d12029e611bcb82c4da) -- fix pep8 failures [`e9c48c1`](https://github.com/craigerl/aprsd/commit/e9c48c1914395277aa7207c7ae1a8b2917a3351f) -- fixed references to conf [`7a5b55f`](https://github.com/craigerl/aprsd/commit/7a5b55fa77642927f5c853ee8975d03b83324f54) -- Add log info for Beacon and Registry threads [`a4630c1`](https://github.com/craigerl/aprsd/commit/a4630c15bede44cbf2272fae162521ac4d1b4b81) -- Added iterator to objectstore [`df2798e`](https://github.com/craigerl/aprsd/commit/df2798eafb3ff0201bb8c33f8d80f1cbcc32944e) -- Cleanup some logs [`68f23d8`](https://github.com/craigerl/aprsd/commit/68f23d8ca78cf20b8f0efc7e26d75b9a319efb33) -- sample-config fix [`0ca5cee`](https://github.com/craigerl/aprsd/commit/0ca5ceee7e50387a65d538a32b2da614e1ca7cb9) +- Update requirements.txt [`a4230d3`](https://github.com/craigerl/aprsd/commit/a4230d324a409479ff14de420bfd44050190244f) +- Updated dev test-plugin command [`03c58f8`](https://github.com/craigerl/aprsd/commit/03c58f83cd0f6a98cfd77861871edfd65c4e28fa) +- Added Location info on webchat interface [`d6f0f05`](https://github.com/craigerl/aprsd/commit/d6f0f053156dcbc86f1f44f860c755efdcbe8a9e) - update github action branchs to v8 [`a88de2f`](https://github.com/craigerl/aprsd/commit/a88de2f09cc758a63e0eb7541721dfc8a374459e) -- Changed processpkt message [`66004f6`](https://github.com/craigerl/aprsd/commit/66004f639fcfe429fde4a6903ebeb8a5afc55847) -- Change defaults for beacon and registry [`5fd91a2`](https://github.com/craigerl/aprsd/commit/5fd91a2172c7d4e1b1b3c65b8704f02500e0de87) -- Added sending software string to registry [`8264c94`](https://github.com/craigerl/aprsd/commit/8264c94bd63e283313161ab51297b7a501a21cb9) -- Fixed registry url post [`2e9c9d4`](https://github.com/craigerl/aprsd/commit/2e9c9d40e1716e15356cbb73f2f5b3e9f455a176) -- Make registry thread sleep [`5d3f42f`](https://github.com/craigerl/aprsd/commit/5d3f42f411d801f0bdb22ae8a172528b19a8d89e) -- Put threads first after date/time [`2cb9c2a`](https://github.com/craigerl/aprsd/commit/2cb9c2a31cf88904381f5e2aa456be77941d9ecb) -- fixed frequency_seconds to IntOpt [`6a7d7ad`](https://github.com/craigerl/aprsd/commit/6a7d7ad79b197ce0ae77195187d4ae0936eddd20) -- changed the default packet timeout to 5 minutes [`a1e21e7`](https://github.com/craigerl/aprsd/commit/a1e21e795d2745ce0cec6327f9b036091e9bf546) -- Fixed default service registry url [`cb291de`](https://github.com/craigerl/aprsd/commit/cb291de047f80f77b63e07419ff4bb9ebaec8bce) -- py311 fails in github [`f0ad6d7`](https://github.com/craigerl/aprsd/commit/f0ad6d7577cb462ffc2c21ce53c9fb04978c1624) -- Don't send uptime to registry [`38fe408`](https://github.com/craigerl/aprsd/commit/38fe408c82ab493d8b9ebb3c281bd060afa749ae) +- Create codeql.yml [`a00c4ea`](https://github.com/craigerl/aprsd/commit/a00c4ea84095cdb25f8306ce66a47f5497bcfa3b) - updated gitignore [`1a5c5f0`](https://github.com/craigerl/aprsd/commit/1a5c5f0dcef60a192c44b0e8774f1598d2ed48b2) -- Fixed RegistryThread not sending requests [`0b0afd3`](https://github.com/craigerl/aprsd/commit/0b0afd39ede5d437d41255563684144f62f0f323) +- Added support for loading extensions [`b143072`](https://github.com/craigerl/aprsd/commit/b14307270c1438b6f5cdf8de5bb179729a62f993) +- Added some missing classes to threads [`e89f8a8`](https://github.com/craigerl/aprsd/commit/e89f8a805bc47f8d951fcbfb350a3b40d8befbd3) +- Added iterator to objectstore [`df2798e`](https://github.com/craigerl/aprsd/commit/df2798eafb3ff0201bb8c33f8d80f1cbcc32944e) +- removed some unneeded code [`9683459`](https://github.com/craigerl/aprsd/commit/968345944aedc9af11b1d9286b8c0d4a3354867e) +- updated requirements files [`275bf67`](https://github.com/craigerl/aprsd/commit/275bf67b9e0b474674d5efb69551ee0d2a308ec0) +- Added BeaconPacket [`11f1e95`](https://github.com/craigerl/aprsd/commit/11f1e9533e89ca236006d3a5d0b9e1b3ce0f4088) +- Cleanup some logs [`68f23d8`](https://github.com/craigerl/aprsd/commit/68f23d8ca78cf20b8f0efc7e26d75b9a319efb33) +- Added installing extensions to Docker run [`4118541`](https://github.com/craigerl/aprsd/commit/41185416cbf1ee9add54ebcae6674824384e6104) +- Added the new APRS Registry thread [`1e4f0ca`](https://github.com/craigerl/aprsd/commit/1e4f0ca65af38f728de6c917d09b19450aceaa2b) - add py310 gh actions [`1ad2e13`](https://github.com/craigerl/aprsd/commit/1ad2e135dc8f27a52d5e9b0d713bd72e753649c0) +- Added sending software string to registry [`8264c94`](https://github.com/craigerl/aprsd/commit/8264c94bd63e283313161ab51297b7a501a21cb9) +- Don't send uptime to registry [`38fe408`](https://github.com/craigerl/aprsd/commit/38fe408c82ab493d8b9ebb3c281bd060afa749ae) +- py311 fails in github [`f0ad6d7`](https://github.com/craigerl/aprsd/commit/f0ad6d7577cb462ffc2c21ce53c9fb04978c1624) +- fix pep8 failures [`e9c48c1`](https://github.com/craigerl/aprsd/commit/e9c48c1914395277aa7207c7ae1a8b2917a3351f) +- Fixed default service registry url [`cb291de`](https://github.com/craigerl/aprsd/commit/cb291de047f80f77b63e07419ff4bb9ebaec8bce) +- changed the default packet timeout to 5 minutes [`a1e21e7`](https://github.com/craigerl/aprsd/commit/a1e21e795d2745ce0cec6327f9b036091e9bf546) +- fixed references to conf [`7a5b55f`](https://github.com/craigerl/aprsd/commit/7a5b55fa77642927f5c853ee8975d03b83324f54) +- fixed frequency_seconds to IntOpt [`6a7d7ad`](https://github.com/craigerl/aprsd/commit/6a7d7ad79b197ce0ae77195187d4ae0936eddd20) +- Add log info for Beacon and Registry threads [`a4630c1`](https://github.com/craigerl/aprsd/commit/a4630c15bede44cbf2272fae162521ac4d1b4b81) +- Change defaults for beacon and registry [`5fd91a2`](https://github.com/craigerl/aprsd/commit/5fd91a2172c7d4e1b1b3c65b8704f02500e0de87) +- Added list-extensions and updated README.rst [`ff051bc`](https://github.com/craigerl/aprsd/commit/ff051bc2859223a2979c1e050b8aae7fc947b6de) +- Fixed pep8 [`d1a09fc`](https://github.com/craigerl/aprsd/commit/d1a09fc6b5234835b49da7a19bbc65d4655481dd) +- Updated requirements [`d092a43`](https://github.com/craigerl/aprsd/commit/d092a43ec9ad9284d3f8b0060719b9e6c86f1976) +- Put threads first after date/time [`2cb9c2a`](https://github.com/craigerl/aprsd/commit/2cb9c2a31cf88904381f5e2aa456be77941d9ecb) +- Make registry thread sleep [`5d3f42f`](https://github.com/craigerl/aprsd/commit/5d3f42f411d801f0bdb22ae8a172528b19a8d89e) +- Disable debug logs for aprslib [`24bbea1`](https://github.com/craigerl/aprsd/commit/24bbea1d499644d9d4bd7aab62f05b5802b2867e) +- use log.setup_logging [`aec88d4`](https://github.com/craigerl/aprsd/commit/aec88d4a7e107cdfbc6d38e6bc744a74b6ef3b9b) +- Fixed RegistryThread not sending requests [`0b0afd3`](https://github.com/craigerl/aprsd/commit/0b0afd39ede5d437d41255563684144f62f0f323) +- Changed processpkt message [`66004f6`](https://github.com/craigerl/aprsd/commit/66004f639fcfe429fde4a6903ebeb8a5afc55847) +- Fixed registry url post [`2e9c9d4`](https://github.com/craigerl/aprsd/commit/2e9c9d40e1716e15356cbb73f2f5b3e9f455a176) +- sample-config fix [`0ca5cee`](https://github.com/craigerl/aprsd/commit/0ca5ceee7e50387a65d538a32b2da614e1ca7cb9) +- Changelog for 3.3.0 [`c37e1d5`](https://github.com/craigerl/aprsd/commit/c37e1d58bbf124fa99b33d12029e611bcb82c4da) #### [v3.2.3](https://github.com/craigerl/aprsd/compare/v3.2.2...v3.2.3) @@ -231,14 +232,14 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - aprsd: main.py: Fix premature return in sample_config [`#144`](https://github.com/craigerl/aprsd/pull/144) - Rework Location Plugin [`#140`](https://github.com/craigerl/aprsd/pull/140) -- Update weather.py because you can't sort icons by penis [`9350cf6`](https://github.com/craigerl/aprsd/commit/9350cf653434b6d29d4ff4874de98a4579abeceb) -- Force fortune path during setup test [`12a3113`](https://github.com/craigerl/aprsd/commit/12a311319227347e648dcc3ecff4f095e62fb4d4) -- Update weather.py both weather plugins have new Ww regex [`651cf01`](https://github.com/craigerl/aprsd/commit/651cf014b7874b95549ecd9d81cd59ada42862ce) -- Update weather.py [`b6df9de`](https://github.com/craigerl/aprsd/commit/b6df9de8aa3a1e2bb4a2951d3f7949c715ed2c3a) - Fixed a bug with OWMWeatherPlugin [`0433768`](https://github.com/craigerl/aprsd/commit/043376878460f2324f66205aa0bccf285c6517cb) -- added /usr/games to path [`026a64c`](https://github.com/craigerl/aprsd/commit/026a64c003c776b0ea3ca668ed142234fc28b0b2) -- Added fortune to Dockerfile-dev [`682e138`](https://github.com/craigerl/aprsd/commit/682e138ec23dd0be1cd443d6ecfc25422a97ea8f) +- Update weather.py [`b6df9de`](https://github.com/craigerl/aprsd/commit/b6df9de8aa3a1e2bb4a2951d3f7949c715ed2c3a) +- Update weather.py both weather plugins have new Ww regex [`651cf01`](https://github.com/craigerl/aprsd/commit/651cf014b7874b95549ecd9d81cd59ada42862ce) +- Update weather.py because you can't sort icons by penis [`9350cf6`](https://github.com/craigerl/aprsd/commit/9350cf653434b6d29d4ff4874de98a4579abeceb) - Added missing fortune app [`f02824b`](https://github.com/craigerl/aprsd/commit/f02824b7960c0a9e8ca872d12cd69453211d2830) +- Added fortune to Dockerfile-dev [`682e138`](https://github.com/craigerl/aprsd/commit/682e138ec23dd0be1cd443d6ecfc25422a97ea8f) +- added /usr/games to path [`026a64c`](https://github.com/craigerl/aprsd/commit/026a64c003c776b0ea3ca668ed142234fc28b0b2) +- Force fortune path during setup test [`12a3113`](https://github.com/craigerl/aprsd/commit/12a311319227347e648dcc3ecff4f095e62fb4d4) #### [v3.2.2](https://github.com/craigerl/aprsd/compare/v3.2.1...v3.2.2) @@ -250,16 +251,16 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Bump werkzeug from 2.3.7 to 3.0.1 [`#136`](https://github.com/craigerl/aprsd/pull/136) - Update INSTALL with new conf files [`#135`](https://github.com/craigerl/aprsd/pull/135) - Bump urllib3 from 2.0.6 to 2.0.7 [`#134`](https://github.com/craigerl/aprsd/pull/134) -- Updated requirements [`4b1214d`](https://github.com/craigerl/aprsd/commit/4b1214de74785af70b9bd4e530edfb52eb7d5fc6) -- Reworked the admin graphs [`763c9ab`](https://github.com/craigerl/aprsd/commit/763c9ab897343c3ff882e0769e9c582ce0b71e56) - Test new packet serialization [`fe1ebf2`](https://github.com/craigerl/aprsd/commit/fe1ebf2ec159ead44412e3bbd2d13754b327aced) -- pep8 fixes [`6b397cb`](https://github.com/craigerl/aprsd/commit/6b397cbdf18c4257fc20d99fc15a9b0f258cde39) -- Update for v3.2.2 release [`c0e2ef1`](https://github.com/craigerl/aprsd/commit/c0e2ef119939db41b07e2ad053e55bfbdaf07329) -- Fix for types [`809a41f`](https://github.com/craigerl/aprsd/commit/809a41f1238a9d00252e069207ddf43555e0fbe3) +- Reworked the admin graphs [`763c9ab`](https://github.com/craigerl/aprsd/commit/763c9ab897343c3ff882e0769e9c582ce0b71e56) +- Updated requirements [`4b1214d`](https://github.com/craigerl/aprsd/commit/4b1214de74785af70b9bd4e530edfb52eb7d5fc6) +- removed invalid reference to config.py [`fae7032`](https://github.com/craigerl/aprsd/commit/fae7032346bf14129f27cd23a5397b524bf450aa) - Fixed datetime access in core.py [`b9dd21b`](https://github.com/craigerl/aprsd/commit/b9dd21bc14eddd1a126d6eac1fa1fa4f5cd53609) - remove python 3.12 from github builds [`638128a`](https://github.com/craigerl/aprsd/commit/638128adf8862b9cade055fd9539a553f4f12fbb) +- pep8 fixes [`6b397cb`](https://github.com/craigerl/aprsd/commit/6b397cbdf18c4257fc20d99fc15a9b0f258cde39) - Fix wsgi for prod [`b0bfdaa`](https://github.com/craigerl/aprsd/commit/b0bfdaa1fb15158b4cff95fbf7619ae0c8c3309e) -- removed invalid reference to config.py [`fae7032`](https://github.com/craigerl/aprsd/commit/fae7032346bf14129f27cd23a5397b524bf450aa) +- Fix for types [`809a41f`](https://github.com/craigerl/aprsd/commit/809a41f1238a9d00252e069207ddf43555e0fbe3) +- Update for v3.2.2 release [`c0e2ef1`](https://github.com/craigerl/aprsd/commit/c0e2ef119939db41b07e2ad053e55bfbdaf07329) #### [v3.2.1](https://github.com/craigerl/aprsd/compare/v3.2.0...v3.2.1) @@ -267,24 +268,24 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Bump urllib3 from 2.0.4 to 2.0.6 [`#133`](https://github.com/craigerl/aprsd/pull/133) - Fix for dupe packets. [`#132`](https://github.com/craigerl/aprsd/pull/132) +- Log a warning on dupe [`0d7e50d`](https://github.com/craigerl/aprsd/commit/0d7e50d2ba0ba55ae82a0c8df98bb0e7c283cdd8) - rewrote packet_list and drop dupe packets [`4f87d5d`](https://github.com/craigerl/aprsd/commit/4f87d5da12a5588d943b0e3644d57a93e26ccafe) -- Add ability to change path on every TX packet [`ddd4d25`](https://github.com/craigerl/aprsd/commit/ddd4d25e9dbb98603fbda1854d224baae2f2a3aa) -- Make Packet objects hashable [`544600a`](https://github.com/craigerl/aprsd/commit/544600a96b6a23fc5999c1be117511998a2228b2) -- Don't process AckPackets as dupes [`59cec13`](https://github.com/craigerl/aprsd/commit/59cec1317da8fea28e2c6496f95ce8ea5bf1c73b) -- Changelog for 3.2.1 [`acf2b62`](https://github.com/craigerl/aprsd/commit/acf2b62bce741364311edca104934be91f678b2e) +- pep8 fixes [`99a0f87`](https://github.com/craigerl/aprsd/commit/99a0f877f4b97dcc91cbf9552f72fe9e29ac9ba1) +- Fixed import of Mutablemapping [`f79b88e`](https://github.com/craigerl/aprsd/commit/f79b88ec1b44ea66572ee83ef040cb0f81d82549) - Fixed issue with packet tracker and msgNO Counter [`9bdfd16`](https://github.com/craigerl/aprsd/commit/9bdfd166fd213983ddd55e57b726bb8fc7eba8b7) +- Fixed another msgNo int issue [`751bbc2`](https://github.com/craigerl/aprsd/commit/751bbc25149f8623f54e9e853c22191533fda45c) +- Don't process AckPackets as dupes [`59cec13`](https://github.com/craigerl/aprsd/commit/59cec1317da8fea28e2c6496f95ce8ea5bf1c73b) +- Make Packet objects hashable [`544600a`](https://github.com/craigerl/aprsd/commit/544600a96b6a23fc5999c1be117511998a2228b2) +- Add ability to change path on every TX packet [`ddd4d25`](https://github.com/craigerl/aprsd/commit/ddd4d25e9dbb98603fbda1854d224baae2f2a3aa) - Added packet_dupe_timeout conf [`f41488b`](https://github.com/craigerl/aprsd/commit/f41488b48a37a8c8bd1695304ea286bd58291faf) - Fix path for KISS clients [`746eeb8`](https://github.com/craigerl/aprsd/commit/746eeb81b0b68d09c668267b74e0c09b134757ff) -- Update the webchat paths [`5ae45ce`](https://github.com/craigerl/aprsd/commit/5ae45ce42fe50b41ca1216a028cb85c99f52240a) -- Fixed another msgNo int issue [`751bbc2`](https://github.com/craigerl/aprsd/commit/751bbc25149f8623f54e9e853c22191533fda45c) -- pep8 fixes [`99a0f87`](https://github.com/craigerl/aprsd/commit/99a0f877f4b97dcc91cbf9552f72fe9e29ac9ba1) -- Changed the path option to a ListOpt [`0155923`](https://github.com/craigerl/aprsd/commit/01559233412399f25b4ce7496f6c19036ce16609) -- Fixed import of Mutablemapping [`f79b88e`](https://github.com/craigerl/aprsd/commit/f79b88ec1b44ea66572ee83ef040cb0f81d82549) -- Update index.html disable form autocomplete [`8e9a021`](https://github.com/craigerl/aprsd/commit/8e9a0213e9aaf43fda2e6279f6343229fc758e86) -- Update the packet_dupe_timeout warning [`bf905a0`](https://github.com/craigerl/aprsd/commit/bf905a0e9faedab4b160764a26e7e310e16ba7e7) -- Fixed default path for tcp_kiss client. [`156d9d9`](https://github.com/craigerl/aprsd/commit/156d9d9592d590e9168a70ff7d01d704cd10192e) -- Log a warning on dupe [`0d7e50d`](https://github.com/craigerl/aprsd/commit/0d7e50d2ba0ba55ae82a0c8df98bb0e7c283cdd8) - Set a default password for admin [`8116960`](https://github.com/craigerl/aprsd/commit/81169600bd264f1708eddd387f14c20b3fb57429) +- Fixed default path for tcp_kiss client. [`156d9d9`](https://github.com/craigerl/aprsd/commit/156d9d9592d590e9168a70ff7d01d704cd10192e) +- Changed the path option to a ListOpt [`0155923`](https://github.com/craigerl/aprsd/commit/01559233412399f25b4ce7496f6c19036ce16609) +- Update the webchat paths [`5ae45ce`](https://github.com/craigerl/aprsd/commit/5ae45ce42fe50b41ca1216a028cb85c99f52240a) +- Update the packet_dupe_timeout warning [`bf905a0`](https://github.com/craigerl/aprsd/commit/bf905a0e9faedab4b160764a26e7e310e16ba7e7) +- Update index.html disable form autocomplete [`8e9a021`](https://github.com/craigerl/aprsd/commit/8e9a0213e9aaf43fda2e6279f6343229fc758e86) +- Changelog for 3.2.1 [`acf2b62`](https://github.com/craigerl/aprsd/commit/acf2b62bce741364311edca104934be91f678b2e) #### [v3.2.0](https://github.com/craigerl/aprsd/compare/v3.1.3...v3.2.0) @@ -292,65 +293,65 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Bump gevent from 23.9.0.post1 to 23.9.1 [`#131`](https://github.com/craigerl/aprsd/pull/131) - Webchat saved bootstrapjs [`#130`](https://github.com/craigerl/aprsd/pull/130) -- Convert webchat internet urls to local static urls [`1d6a667`](https://github.com/craigerl/aprsd/commit/1d6a667987f3d239512ab2458209c99e5a776e9b) -- WebChat: Send GPS Beacon working [`81a19dd`](https://github.com/craigerl/aprsd/commit/81a19dd10164f7d3b5702e1cb58898893120ac67) -- Deleted webchat mobile pages [`70ddc44`](https://github.com/craigerl/aprsd/commit/70ddc44b5c30e0381d5806a8a0c20979bcc0c464) -- Removed admin_web.py [`a9e8050`](https://github.com/craigerl/aprsd/commit/a9e8050ae69e9cabb2ec37ef872f0dd23b13b0ac) -- Reworked webchat with new UI [`14e984c`](https://github.com/craigerl/aprsd/commit/14e984c9b4143309b595c9e55ad8e9126095f9c4) -- Restore previous conversations in webchat [`7292744`](https://github.com/craigerl/aprsd/commit/7292744a78c179d17caadd4d659caba38cccc4f8) -- WebChat: fixed content area scrolling [`7130ca2`](https://github.com/craigerl/aprsd/commit/7130ca2fd9425c438a787b5521e512bc5d572f18) -- Webchat: Added tab notifications and raw packet [`9635893`](https://github.com/craigerl/aprsd/commit/9635893934e1a6f29bafde003bcde911a0a63fb9) -- Webchat: tweaks to UI for expanding chat [`b393060`](https://github.com/craigerl/aprsd/commit/b393060edb0afd592d4cb88be143df6e20d1ee66) -- Added close X on webchat tabs [`8527602`](https://github.com/craigerl/aprsd/commit/852760220f10b6bf29ae6f9bacb1ff1908412027) -- Update index.html to use chat.css [`ba6b410`](https://github.com/craigerl/aprsd/commit/ba6b410795808e737c7dd035812c674ce8f9755f) -- Updated the webchat UI to look like iMessage [`29f21a9`](https://github.com/craigerl/aprsd/commit/29f21a946951b0d42aab6f339da684933c6e95ed) -- Updated documentation build [`10bf049`](https://github.com/craigerl/aprsd/commit/10bf04929e9916b48147171a0f810dad91f8c9a7) -- Added new webchat config section [`f922b3f`](https://github.com/craigerl/aprsd/commit/f922b3f97b741aa80da642fe4a6def966c3677a7) -- WebChat: Prevent sending message without callsign [`f151ae4`](https://github.com/craigerl/aprsd/commit/f151ae434820c24c4d09beb1876eeff12296339b) -- WebChat: flash a dupe message [`12dfdef`](https://github.com/craigerl/aprsd/commit/12dfdefb624b410f205086f3954a6809d0fa0956) -- Make use of webchat gps config options [`2e9a204`](https://github.com/craigerl/aprsd/commit/2e9a204c7466446a895f3ba62e0aab69ea1be21f) -- Webchat suppress to display of dupe messages [`a8dd9ce`](https://github.com/craigerl/aprsd/commit/a8dd9ce0129d24a16c033546ffbff7d9b59f0885) -- Update Changelog for 3.2.0 [`7408894`](https://github.com/craigerl/aprsd/commit/740889426ab0dd9604b1d1492ce7bff4948eeed3) -- Added dupe checkig code to webchat mobile [`2416f0e`](https://github.com/craigerl/aprsd/commit/2416f0ea1a52da1d58a2562ecbe8172aa3779e3c) -- Webchat: Fix chat css on older browsers [`6b083d4`](https://github.com/craigerl/aprsd/commit/6b083d4c4d7dec874c3d67cca176b9de97bd867a) -- webchat: got active tab onclick working [`1400e3e`](https://github.com/craigerl/aprsd/commit/1400e3e71144d4dc8a48874301b90960485a3768) -- Webchat: Fix pep8 errors [`3f5dbe0`](https://github.com/craigerl/aprsd/commit/3f5dbe0a12349de221ce65c4687b83ab2ac14128) -- Webchat: Fixed bug deleteing first tab [`f770c5f`](https://github.com/craigerl/aprsd/commit/f770c5ffd569a2d8cb722b382872494a35bedc1c) -- Start keepalive thread first [`859f904`](https://github.com/craigerl/aprsd/commit/859f904602081a22d8b6f1228502053decb921c2) -- WebChat: cleanup some console.logs [`82d2591`](https://github.com/craigerl/aprsd/commit/82d25915fc28244232ee250dd45e41d4ef2e3cf5) -- Removed some RPC server log noise [`82f77b7`](https://github.com/craigerl/aprsd/commit/82f77b7a6ad8d322488034b3944970744377dd3c) -- webchat: set to_call to value of tab when selected [`8a90d54`](https://github.com/craigerl/aprsd/commit/8a90d5480ae379a3af225a4f73d452c8d5ae402e) -- minor cleanup prior to release [`c9dc4f6`](https://github.com/craigerl/aprsd/commit/c9dc4f67d43a95c4abf39c0bf3e90dabe7778662) -- Fixed admin page packet date [`570fdb9`](https://github.com/craigerl/aprsd/commit/570fdb98a748d26126a1e4c9abdf0aff35927e81) -- Center the webchat input form [`b4e02c7`](https://github.com/craigerl/aprsd/commit/b4e02c760ee1eac155406b0939ad058fdf0e2449) -- Ensure Keepalive doesn't reset client at startup [`ef206b1`](https://github.com/craigerl/aprsd/commit/ef206b12837738779bfda5beb1ccfb0edbf38649) -- updated github workflows [`4b56e99`](https://github.com/craigerl/aprsd/commit/4b56e99689e4aeb518bc78bec8212bfd3d8a845e) -- Webchat: Fix issue accessing msg.id [`d63c685`](https://github.com/craigerl/aprsd/commit/d63c6854aff0d5962d7e9a6aca277606955bdf49) -- Ensure parse_delta_str doesn't puke [`140fa4a`](https://github.com/craigerl/aprsd/commit/140fa4ace49385da2d8b2c675c91441a1c8d34a0) -- RPC Server logs the client IP on failed auth [`9582812`](https://github.com/craigerl/aprsd/commit/958281204175d7315ac3a62b0b6eb0656864e0ca) -- Webchat: fix input maxlength [`788a72c`](https://github.com/craigerl/aprsd/commit/788a72c643e3d4f82defc63c068fa1d5f938aa50) -- WebChat: new tab should get focus [`ff35898`](https://github.com/craigerl/aprsd/commit/ff358987a9206772792358ee2c14345fd63fc426) -- Remove VIM from Dockerfile [`619b1b7`](https://github.com/craigerl/aprsd/commit/619b1b708e0059745e7f55d2ec4f08cc2b57f3fe) -- recreate client during reset() [`008b2ab`](https://github.com/craigerl/aprsd/commit/008b2ab09efb98251fe55d721c75be64b1fdd8cc) - fixed webchat logging.logformat typeoh [`8dd3b05`](https://github.com/craigerl/aprsd/commit/8dd3b05bb16f792ff588494811ac6a669cb629ef) -- fixed an issue in the mobile webchat [`34311f0`](https://github.com/craigerl/aprsd/commit/34311f0fbd1a501dc9eb27ec6e6f5532a4fe43cc) +- Added new webchat config section [`f922b3f`](https://github.com/craigerl/aprsd/commit/f922b3f97b741aa80da642fe4a6def966c3677a7) +- Make use of webchat gps config options [`2e9a204`](https://github.com/craigerl/aprsd/commit/2e9a204c7466446a895f3ba62e0aab69ea1be21f) +- Convert webchat internet urls to local static urls [`1d6a667`](https://github.com/craigerl/aprsd/commit/1d6a667987f3d239512ab2458209c99e5a776e9b) +- Webchat suppress to display of dupe messages [`a8dd9ce`](https://github.com/craigerl/aprsd/commit/a8dd9ce0129d24a16c033546ffbff7d9b59f0885) - click on the div after added. [`377842c`](https://github.com/craigerl/aprsd/commit/377842c2ec9a063602aa9f4a780ac7979950bc2b) +- Added dupe checkig code to webchat mobile [`2416f0e`](https://github.com/craigerl/aprsd/commit/2416f0ea1a52da1d58a2562ecbe8172aa3779e3c) +- fixed an issue in the mobile webchat [`34311f0`](https://github.com/craigerl/aprsd/commit/34311f0fbd1a501dc9eb27ec6e6f5532a4fe43cc) +- Start keepalive thread first [`859f904`](https://github.com/craigerl/aprsd/commit/859f904602081a22d8b6f1228502053decb921c2) +- RPC Server logs the client IP on failed auth [`9582812`](https://github.com/craigerl/aprsd/commit/958281204175d7315ac3a62b0b6eb0656864e0ca) +- Fixed admin page packet date [`570fdb9`](https://github.com/craigerl/aprsd/commit/570fdb98a748d26126a1e4c9abdf0aff35927e81) +- Removed some RPC server log noise [`82f77b7`](https://github.com/craigerl/aprsd/commit/82f77b7a6ad8d322488034b3944970744377dd3c) +- Removed admin_web.py [`a9e8050`](https://github.com/craigerl/aprsd/commit/a9e8050ae69e9cabb2ec37ef872f0dd23b13b0ac) +- Updated documentation build [`10bf049`](https://github.com/craigerl/aprsd/commit/10bf04929e9916b48147171a0f810dad91f8c9a7) +- updated github workflows [`4b56e99`](https://github.com/craigerl/aprsd/commit/4b56e99689e4aeb518bc78bec8212bfd3d8a845e) +- recreate client during reset() [`008b2ab`](https://github.com/craigerl/aprsd/commit/008b2ab09efb98251fe55d721c75be64b1fdd8cc) +- Remove VIM from Dockerfile [`619b1b7`](https://github.com/craigerl/aprsd/commit/619b1b708e0059745e7f55d2ec4f08cc2b57f3fe) +- Restore previous conversations in webchat [`7292744`](https://github.com/craigerl/aprsd/commit/7292744a78c179d17caadd4d659caba38cccc4f8) +- Updated the webchat UI to look like iMessage [`29f21a9`](https://github.com/craigerl/aprsd/commit/29f21a946951b0d42aab6f339da684933c6e95ed) +- Reworked webchat with new UI [`14e984c`](https://github.com/craigerl/aprsd/commit/14e984c9b4143309b595c9e55ad8e9126095f9c4) +- Added close X on webchat tabs [`8527602`](https://github.com/craigerl/aprsd/commit/852760220f10b6bf29ae6f9bacb1ff1908412027) +- Deleted webchat mobile pages [`70ddc44`](https://github.com/craigerl/aprsd/commit/70ddc44b5c30e0381d5806a8a0c20979bcc0c464) +- Update index.html to use chat.css [`ba6b410`](https://github.com/craigerl/aprsd/commit/ba6b410795808e737c7dd035812c674ce8f9755f) +- Center the webchat input form [`b4e02c7`](https://github.com/craigerl/aprsd/commit/b4e02c760ee1eac155406b0939ad058fdf0e2449) +- webchat: set to_call to value of tab when selected [`8a90d54`](https://github.com/craigerl/aprsd/commit/8a90d5480ae379a3af225a4f73d452c8d5ae402e) +- webchat: got active tab onclick working [`1400e3e`](https://github.com/craigerl/aprsd/commit/1400e3e71144d4dc8a48874301b90960485a3768) +- WebChat: Send GPS Beacon working [`81a19dd`](https://github.com/craigerl/aprsd/commit/81a19dd10164f7d3b5702e1cb58898893120ac67) +- Ensure parse_delta_str doesn't puke [`140fa4a`](https://github.com/craigerl/aprsd/commit/140fa4ace49385da2d8b2c675c91441a1c8d34a0) +- Ensure Keepalive doesn't reset client at startup [`ef206b1`](https://github.com/craigerl/aprsd/commit/ef206b12837738779bfda5beb1ccfb0edbf38649) +- Webchat: Fixed bug deleteing first tab [`f770c5f`](https://github.com/craigerl/aprsd/commit/f770c5ffd569a2d8cb722b382872494a35bedc1c) +- Webchat: tweaks to UI for expanding chat [`b393060`](https://github.com/craigerl/aprsd/commit/b393060edb0afd592d4cb88be143df6e20d1ee66) +- WebChat: fixed content area scrolling [`7130ca2`](https://github.com/craigerl/aprsd/commit/7130ca2fd9425c438a787b5521e512bc5d572f18) +- WebChat: Prevent sending message without callsign [`f151ae4`](https://github.com/craigerl/aprsd/commit/f151ae434820c24c4d09beb1876eeff12296339b) +- Webchat: Added tab notifications and raw packet [`9635893`](https://github.com/craigerl/aprsd/commit/9635893934e1a6f29bafde003bcde911a0a63fb9) +- Webchat: Fix pep8 errors [`3f5dbe0`](https://github.com/craigerl/aprsd/commit/3f5dbe0a12349de221ce65c4687b83ab2ac14128) +- WebChat: new tab should get focus [`ff35898`](https://github.com/craigerl/aprsd/commit/ff358987a9206772792358ee2c14345fd63fc426) +- Webchat: Fix chat css on older browsers [`6b083d4`](https://github.com/craigerl/aprsd/commit/6b083d4c4d7dec874c3d67cca176b9de97bd867a) +- Webchat: Fix issue accessing msg.id [`d63c685`](https://github.com/craigerl/aprsd/commit/d63c6854aff0d5962d7e9a6aca277606955bdf49) +- WebChat: flash a dupe message [`12dfdef`](https://github.com/craigerl/aprsd/commit/12dfdefb624b410f205086f3954a6809d0fa0956) +- WebChat: cleanup some console.logs [`82d2591`](https://github.com/craigerl/aprsd/commit/82d25915fc28244232ee250dd45e41d4ef2e3cf5) +- Webchat: fix input maxlength [`788a72c`](https://github.com/craigerl/aprsd/commit/788a72c643e3d4f82defc63c068fa1d5f938aa50) +- minor cleanup prior to release [`c9dc4f6`](https://github.com/craigerl/aprsd/commit/c9dc4f67d43a95c4abf39c0bf3e90dabe7778662) +- Update Changelog for 3.2.0 [`7408894`](https://github.com/craigerl/aprsd/commit/740889426ab0dd9604b1d1492ce7bff4948eeed3) #### [v3.1.3](https://github.com/craigerl/aprsd/compare/v3.1.2...v3.1.3) > 15 August 2023 -- prep for 3.1.3 [`e06305f`](https://github.com/craigerl/aprsd/commit/e06305fceb551c7917c545ae76c984293d045c2f) - Forcefully allow development webchat flask [`33c7871`](https://github.com/craigerl/aprsd/commit/33c7871dbe86a07405e5186515adaea412498f24) +- prep for 3.1.3 [`e06305f`](https://github.com/craigerl/aprsd/commit/e06305fceb551c7917c545ae76c984293d045c2f) #### [v3.1.2](https://github.com/craigerl/aprsd/compare/v3.1.1...v3.1.2) > 15 August 2023 - Removed adhoc ssl support in webchat [`182887c`](https://github.com/craigerl/aprsd/commit/182887c20a36d34122e5eefef77e28fcc814c7a5) +- Disable the Send GPS Beacon button [`65a5a90`](https://github.com/craigerl/aprsd/commit/65a5a90458fd38dfdb9a9629598d9ee97b8d631e) - Added support for ThirdParty packet types [`ae9e4d3`](https://github.com/craigerl/aprsd/commit/ae9e4d31ad8333451d6e81dd6440085052c192a0) - Updated Changelog for 3.1.2 [`b2f95b0`](https://github.com/craigerl/aprsd/commit/b2f95b0f4e1fd627da327354568d773f1172060f) -- Disable the Send GPS Beacon button [`65a5a90`](https://github.com/craigerl/aprsd/commit/65a5a90458fd38dfdb9a9629598d9ee97b8d631e) #### [v3.1.1](https://github.com/craigerl/aprsd/compare/v3.1.0...v3.1.1) @@ -359,11 +360,11 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Fix sending packets over KISS interface [`#128`](https://github.com/craigerl/aprsd/pull/128) - Update the Dockerfile [`#125`](https://github.com/craigerl/aprsd/pull/125) - Max out the client reconnect backoff to 5 [`26f354b`](https://github.com/craigerl/aprsd/commit/26f354b3a9113a41c6d9a7d5d71dac0ffba11809) -- re-enable USWeatherPlugin to use mapClick [`986df39`](https://github.com/craigerl/aprsd/commit/986df391b2eb5af78f26b95fa1c989760dfa2a56) -- Updated Changelog for v3.1.1 [`f228144`](https://github.com/craigerl/aprsd/commit/f228144f4bfb3fc739d48d6628804efaa04a0f6a) -- Use config web_ip for running admin ui from module [`011cfc5`](https://github.com/craigerl/aprsd/commit/011cfc55e100ffda5153c7ed14b287f6757842c2) -- Fixed pep8 failures [`db9e1d2`](https://github.com/craigerl/aprsd/commit/db9e1d23d1421ca0842208f862fe50849d7fcfd8) - remove loop log [`e0c3c5c`](https://github.com/craigerl/aprsd/commit/e0c3c5cbbff6ec3ede4d4d8756c42481634a1d61) +- Use config web_ip for running admin ui from module [`011cfc5`](https://github.com/craigerl/aprsd/commit/011cfc55e100ffda5153c7ed14b287f6757842c2) +- re-enable USWeatherPlugin to use mapClick [`986df39`](https://github.com/craigerl/aprsd/commit/986df391b2eb5af78f26b95fa1c989760dfa2a56) +- Fixed pep8 failures [`db9e1d2`](https://github.com/craigerl/aprsd/commit/db9e1d23d1421ca0842208f862fe50849d7fcfd8) +- Updated Changelog for v3.1.1 [`f228144`](https://github.com/craigerl/aprsd/commit/f228144f4bfb3fc739d48d6628804efaa04a0f6a) #### [v3.1.0](https://github.com/craigerl/aprsd/compare/v3.0.3...v3.1.0) @@ -374,83 +375,83 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Update requirements for upgraded cryptography [`#122`](https://github.com/craigerl/aprsd/pull/122) - Fixed rain numbers from aprslib [`#119`](https://github.com/craigerl/aprsd/pull/119) - Example plugin wrong function [`#116`](https://github.com/craigerl/aprsd/pull/116) -- Removed flask-classful from webchat [`6a6e854`](https://github.com/craigerl/aprsd/commit/6a6e854caf18fc01b6f38badbffe38272c73508c) -- Update location plugin and reworked requirements [`26c1e7a`](https://github.com/craigerl/aprsd/commit/26c1e7afbb1875bfcaf3016a2d85b34bcda48048) -- Added the fetch-stats command [`b2e621d`](https://github.com/craigerl/aprsd/commit/b2e621da4b058a1fc727ff6741a27c03a0b220e4) -- Replace ratelimiter with rush [`fe0d71d`](https://github.com/craigerl/aprsd/commit/fe0d71de4d75979968a67e6ff1122a11a303c3bc) -- Replace Dockerfile-dev with python3 slim [`ccd564a`](https://github.com/craigerl/aprsd/commit/ccd564a52e6de2ef800934492d5e420e90d4e365) -- Moved logging to log for wsgi.py [`35d4158`](https://github.com/craigerl/aprsd/commit/35d41582ee0cfc9dce505526e8a5648d93a1be12) -- Changelog updates for v3.1.0 [`dfd3688`](https://github.com/craigerl/aprsd/commit/dfd3688d8ff1110ac011e8adf866f67ba2ad0d86) -- Populate stats object with threads info [`191e1ff`](https://github.com/craigerl/aprsd/commit/191e1ff552ac3c9d769de2417d5c9a0d5f85362c) -- Added manual master build [`311ceba`](https://github.com/craigerl/aprsd/commit/311cebaf2770ee293c7166ee56030146cba4a274) -- Fixed unit tests for Location plugin [`80b85e6`](https://github.com/craigerl/aprsd/commit/80b85e648f0d40325964517ecc9db7cd999009de) -- Fix in for aprslib issue #80 [`63bf82a`](https://github.com/craigerl/aprsd/commit/63bf82aab5cce54f7b96d95c77043067185b1c4b) -- Change how fetch-stats gets it's defaults [`5383b69`](https://github.com/craigerl/aprsd/commit/5383b698ea8d92b76ee22a8ba239d6de945e0375) -- update manual build github [`fa6e738`](https://github.com/craigerl/aprsd/commit/fa6e738a2069721eb0100ad71cbb41bfd012bc43) -- Fixed rpc client initialization [`7f2aba7`](https://github.com/craigerl/aprsd/commit/7f2aba702abc079d6b36b7fbb0e5b4d8e8d03f7f) -- Add .readthedocs.yaml [`43d6b62`](https://github.com/craigerl/aprsd/commit/43d6b627604a50dd7c566316c0c9491b777151d9) -- Added timing after each thread loop [`d3a93b7`](https://github.com/craigerl/aprsd/commit/d3a93b735deb222d9a2c27015a413973c810f4d0) -- force tox to 4.3.5 [`da20ff0`](https://github.com/craigerl/aprsd/commit/da20ff038b40160695773e6b5fedfbf51d9da8bf) -- Update master-build.yml [`f4d6035`](https://github.com/craigerl/aprsd/commit/f4d60357ee15e7b16fb24738fdb882d46f068795) -- Add github manual trigger for master build [`09a0c4c`](https://github.com/craigerl/aprsd/commit/09a0c4cb026101dab53d1a9544135d29f15040cd) -- Add info logging for rpc server calls [`6ae55fc`](https://github.com/craigerl/aprsd/commit/6ae55fc9a14bb4e760fedce6b21705ee248fb2cc) -- Try and fix Dockerfile-dev [`bba7b68`](https://github.com/craigerl/aprsd/commit/bba7b68112c0b6372f21a1d2a9a7df52fa028a05) -- added counts to the fetch-stats table [`0a14b07`](https://github.com/craigerl/aprsd/commit/0a14b07fae0e2eb2c867c624d510ca60602fab5d) -- Update Dockerfile-dev to fix plugin permissions [`d8318f2`](https://github.com/craigerl/aprsd/commit/d8318f2ae23f5299bad2cdfb07a549bc74d83d3f) -- Limit the float values to 3 decimal places [`0bd11d0`](https://github.com/craigerl/aprsd/commit/0bd11d05c666d5304e3173e2e010a23fd6d9e6e0) -- Ensure fetch-stats ip is a string [`cbef93b`](https://github.com/craigerl/aprsd/commit/cbef93b3278b2d638c96558271ae62d72ede886a) -- USe new tox and update githubworkflows [`9931c8a`](https://github.com/craigerl/aprsd/commit/9931c8a6c5f84ca46521e8d8f66d58a4c88a9890) -- Added rpc server for listen [`8b73372`](https://github.com/craigerl/aprsd/commit/8b73372b6e63b0e6f58dffa7668a73990a599dc4) -- Fixed .readthedocs.yaml format [`cad22e1`](https://github.com/craigerl/aprsd/commit/cad22e174432bcfb28d2c8cbaaab995f38a95461) - Update Dockerfile to help build cryptography [`00f1c3a`](https://github.com/craigerl/aprsd/commit/00f1c3a2baf6c0afc5a697ee5a895110a6c38cac) -- Update Dockerfile-dev to include uwsgi [`1ab9c3f`](https://github.com/craigerl/aprsd/commit/1ab9c3fee4ea228a8e9194340d8fb31fc6cd7b65) -- Fixed pep8 [`4664ead`](https://github.com/craigerl/aprsd/commit/4664ead9e7b833f610b5c04acebbc9cced4447d5) -- Changed weather plugin regex pattern [`565ffe3`](https://github.com/craigerl/aprsd/commit/565ffe3f7287a257a84c693f74e2dff6f35f84af) +- Ensure conf is imported for threads/tx [`4e99e30`](https://github.com/craigerl/aprsd/commit/4e99e30f165d4e6dc12e1fa2aefbba790b96211f) +- Add .readthedocs.yaml [`43d6b62`](https://github.com/craigerl/aprsd/commit/43d6b627604a50dd7c566316c0c9491b777151d9) +- Fixed .readthedocs.yaml format [`cad22e1`](https://github.com/craigerl/aprsd/commit/cad22e174432bcfb28d2c8cbaaab995f38a95461) +- Update location plugin and reworked requirements [`26c1e7a`](https://github.com/craigerl/aprsd/commit/26c1e7afbb1875bfcaf3016a2d85b34bcda48048) +- Added rpc server for listen [`8b73372`](https://github.com/craigerl/aprsd/commit/8b73372b6e63b0e6f58dffa7668a73990a599dc4) +- Fixed pep8 violation [`5bc589f`](https://github.com/craigerl/aprsd/commit/5bc589f21fd3dc33a4f0aa361cbd06d1c4288219) - Update github workflows [`15bf371`](https://github.com/craigerl/aprsd/commit/15bf3710d25328cfd5ff3fb27710746636ea6899) -- Fixed sio namespace registration [`099b87e`](https://github.com/craigerl/aprsd/commit/099b87e25048e2be2bf453130d9ba99299079190) -- Fixed pep8 errors [`005675c`](https://github.com/craigerl/aprsd/commit/005675cb467863f54db1cf5ffc94f5693326b72d) +- force tox to 4.3.5 [`da20ff0`](https://github.com/craigerl/aprsd/commit/da20ff038b40160695773e6b5fedfbf51d9da8bf) - Updated requirements [`319969c`](https://github.com/craigerl/aprsd/commit/319969cc08f9e49deabe27f38f941409a4c5e2ed) -- Update docker bin/admin.sh [`fa452cc`](https://github.com/craigerl/aprsd/commit/fa452cc773b4aacd4ecb56900e1f954887dea999) -- Added more libs for Dockerfile-dev [`ad00463`](https://github.com/craigerl/aprsd/commit/ad004633de75176bf70c6a4df19763f57350fbbb) -- Use CONF.admin.web_port for single launch web admin [`c7d629f`](https://github.com/craigerl/aprsd/commit/c7d629f88a754ef1210a1ab87a96fe8f71036f38) -- change port to 8000 [`e51a501`](https://github.com/craigerl/aprsd/commit/e51a50154459a5f50b3faa7784f68555bb442952) -- updated wsgi config default /config/aprsd.conf [`588e140`](https://github.com/craigerl/aprsd/commit/588e140a7f1de089d9813c22c116d7cc6b6169f0) -- removed linux/arm/v8 [`5723e3a`](https://github.com/craigerl/aprsd/commit/5723e3a77b78325e5e381b703bed61f2fef147f4) -- Update master build to include linux/arm/v8 [`dee73c1`](https://github.com/craigerl/aprsd/commit/dee73c1060be62f01e87413bfd9edef04a3ec675) +- USe new tox and update githubworkflows [`9931c8a`](https://github.com/craigerl/aprsd/commit/9931c8a6c5f84ca46521e8d8f66d58a4c88a9890) +- Fixed unit tests for Location plugin [`80b85e6`](https://github.com/craigerl/aprsd/commit/80b85e648f0d40325964517ecc9db7cd999009de) +- Add github manual trigger for master build [`09a0c4c`](https://github.com/craigerl/aprsd/commit/09a0c4cb026101dab53d1a9544135d29f15040cd) +- Update master-build.yml [`f4d6035`](https://github.com/craigerl/aprsd/commit/f4d60357ee15e7b16fb24738fdb882d46f068795) +- Added manual master build [`311ceba`](https://github.com/craigerl/aprsd/commit/311cebaf2770ee293c7166ee56030146cba4a274) - add arm64 for manual github build [`b172c69`](https://github.com/craigerl/aprsd/commit/b172c692a1ff9bfce1cdd49695fc17544a058216) - Added some utilities to Dockerfile-dev [`9b94414`](https://github.com/craigerl/aprsd/commit/9b944142bd6a21285d112929791fc87a26c9cdf9) -- Fixed pep8 violation [`5bc589f`](https://github.com/craigerl/aprsd/commit/5bc589f21fd3dc33a4f0aa361cbd06d1c4288219) -- Ensure conf is imported for threads/tx [`4e99e30`](https://github.com/craigerl/aprsd/commit/4e99e30f165d4e6dc12e1fa2aefbba790b96211f) +- Replace ratelimiter with rush [`fe0d71d`](https://github.com/craigerl/aprsd/commit/fe0d71de4d75979968a67e6ff1122a11a303c3bc) +- Added the fetch-stats command [`b2e621d`](https://github.com/craigerl/aprsd/commit/b2e621da4b058a1fc727ff6741a27c03a0b220e4) +- added counts to the fetch-stats table [`0a14b07`](https://github.com/craigerl/aprsd/commit/0a14b07fae0e2eb2c867c624d510ca60602fab5d) +- Populate stats object with threads info [`191e1ff`](https://github.com/craigerl/aprsd/commit/191e1ff552ac3c9d769de2417d5c9a0d5f85362c) +- Fixed pep8 errors [`005675c`](https://github.com/craigerl/aprsd/commit/005675cb467863f54db1cf5ffc94f5693326b72d) +- Try and fix Dockerfile-dev [`bba7b68`](https://github.com/craigerl/aprsd/commit/bba7b68112c0b6372f21a1d2a9a7df52fa028a05) +- Fix in for aprslib issue #80 [`63bf82a`](https://github.com/craigerl/aprsd/commit/63bf82aab5cce54f7b96d95c77043067185b1c4b) +- Fixed rpc client initialization [`7f2aba7`](https://github.com/craigerl/aprsd/commit/7f2aba702abc079d6b36b7fbb0e5b4d8e8d03f7f) +- Limit the float values to 3 decimal places [`0bd11d0`](https://github.com/craigerl/aprsd/commit/0bd11d05c666d5304e3173e2e010a23fd6d9e6e0) +- Changed weather plugin regex pattern [`565ffe3`](https://github.com/craigerl/aprsd/commit/565ffe3f7287a257a84c693f74e2dff6f35f84af) +- Moved logging to log for wsgi.py [`35d4158`](https://github.com/craigerl/aprsd/commit/35d41582ee0cfc9dce505526e8a5648d93a1be12) +- Replace Dockerfile-dev with python3 slim [`ccd564a`](https://github.com/craigerl/aprsd/commit/ccd564a52e6de2ef800934492d5e420e90d4e365) +- Added more libs for Dockerfile-dev [`ad00463`](https://github.com/craigerl/aprsd/commit/ad004633de75176bf70c6a4df19763f57350fbbb) +- update manual build github [`fa6e738`](https://github.com/craigerl/aprsd/commit/fa6e738a2069721eb0100ad71cbb41bfd012bc43) +- Update Dockerfile-dev to fix plugin permissions [`d8318f2`](https://github.com/craigerl/aprsd/commit/d8318f2ae23f5299bad2cdfb07a549bc74d83d3f) +- Update master build to include linux/arm/v8 [`dee73c1`](https://github.com/craigerl/aprsd/commit/dee73c1060be62f01e87413bfd9edef04a3ec675) +- Removed flask-classful from webchat [`6a6e854`](https://github.com/craigerl/aprsd/commit/6a6e854caf18fc01b6f38badbffe38272c73508c) +- Update docker bin/admin.sh [`fa452cc`](https://github.com/craigerl/aprsd/commit/fa452cc773b4aacd4ecb56900e1f954887dea999) +- removed linux/arm/v8 [`5723e3a`](https://github.com/craigerl/aprsd/commit/5723e3a77b78325e5e381b703bed61f2fef147f4) +- Added timing after each thread loop [`d3a93b7`](https://github.com/craigerl/aprsd/commit/d3a93b735deb222d9a2c27015a413973c810f4d0) +- updated wsgi config default /config/aprsd.conf [`588e140`](https://github.com/craigerl/aprsd/commit/588e140a7f1de089d9813c22c116d7cc6b6169f0) +- Add info logging for rpc server calls [`6ae55fc`](https://github.com/craigerl/aprsd/commit/6ae55fc9a14bb4e760fedce6b21705ee248fb2cc) +- Ensure fetch-stats ip is a string [`cbef93b`](https://github.com/craigerl/aprsd/commit/cbef93b3278b2d638c96558271ae62d72ede886a) +- Change how fetch-stats gets it's defaults [`5383b69`](https://github.com/craigerl/aprsd/commit/5383b698ea8d92b76ee22a8ba239d6de945e0375) +- change port to 8000 [`e51a501`](https://github.com/craigerl/aprsd/commit/e51a50154459a5f50b3faa7784f68555bb442952) +- Fixed pep8 [`4664ead`](https://github.com/craigerl/aprsd/commit/4664ead9e7b833f610b5c04acebbc9cced4447d5) +- Update Dockerfile-dev to include uwsgi [`1ab9c3f`](https://github.com/craigerl/aprsd/commit/1ab9c3fee4ea228a8e9194340d8fb31fc6cd7b65) +- Fixed sio namespace registration [`099b87e`](https://github.com/craigerl/aprsd/commit/099b87e25048e2be2bf453130d9ba99299079190) +- Use CONF.admin.web_port for single launch web admin [`c7d629f`](https://github.com/craigerl/aprsd/commit/c7d629f88a754ef1210a1ab87a96fe8f71036f38) +- Changelog updates for v3.1.0 [`dfd3688`](https://github.com/craigerl/aprsd/commit/dfd3688d8ff1110ac011e8adf866f67ba2ad0d86) #### [v3.0.3](https://github.com/craigerl/aprsd/compare/v3.0.2...v3.0.3) > 25 April 2023 - Add ratelimiting for acks and other packets [`#111`](https://github.com/craigerl/aprsd/pull/111) +- Update Dockerfile [`8a456ca`](https://github.com/craigerl/aprsd/commit/8a456cac4887933e11c37b323a73e4e34fb0a7ce) - Update Listen command [`483afce`](https://github.com/craigerl/aprsd/commit/483afce5adb39b973f4f6e5c57431007c3318889) - Added listen.sh for docker [`c353877`](https://github.com/craigerl/aprsd/commit/c353877321af14fd8bb4804a45cd8422471dd47f) - Change listen command plugins [`0ec41f7`](https://github.com/craigerl/aprsd/commit/0ec41f76053a0c1278d4fde14de4f853ea542669) -- Fixed loading of plugins for server [`e21e2a7`](https://github.com/craigerl/aprsd/commit/e21e2a7c50455c9d43c51858f0dfe81b2d2d6296) -- Update Changelog to 3.0.3 [`0527ddf`](https://github.com/craigerl/aprsd/commit/0527ddfdbad58fe172f9bc24563c5c49506e22a6) -- Update Dockerfile [`8a456ca`](https://github.com/craigerl/aprsd/commit/8a456cac4887933e11c37b323a73e4e34fb0a7ce) -- Don't load help plugin for listen command [`17d9c06`](https://github.com/craigerl/aprsd/commit/17d9c06b07232276156c015daa5692ed9413223e) -- cleanup some debug messages [`5694cab`](https://github.com/craigerl/aprsd/commit/5694cabd93ff03e31fb0edddc1b28b2c62d9c368) - Added listen args. [`66ebb28`](https://github.com/craigerl/aprsd/commit/66ebb286d8fa13a64971cdc2e9dded01637dd9c9) +- Don't load help plugin for listen command [`17d9c06`](https://github.com/craigerl/aprsd/commit/17d9c06b07232276156c015daa5692ed9413223e) +- Fixed loading of plugins for server [`e21e2a7`](https://github.com/craigerl/aprsd/commit/e21e2a7c50455c9d43c51858f0dfe81b2d2d6296) +- cleanup some debug messages [`5694cab`](https://github.com/craigerl/aprsd/commit/5694cabd93ff03e31fb0edddc1b28b2c62d9c368) +- Update Changelog to 3.0.3 [`0527ddf`](https://github.com/craigerl/aprsd/commit/0527ddfdbad58fe172f9bc24563c5c49506e22a6) #### [v3.0.2](https://github.com/craigerl/aprsd/compare/v3.0.1...v3.0.2) > 16 January 2023 -- Update Changelog for 3.0.2 [`357a193`](https://github.com/craigerl/aprsd/commit/357a193a75a4e2a5efd0768ca79f71998539d2d1) - Import RejectPacket [`4aa4a4b`](https://github.com/craigerl/aprsd/commit/4aa4a4b5d3e4326c0f479e62bd5a04d0c2e0d338) +- Update Changelog for 3.0.2 [`357a193`](https://github.com/craigerl/aprsd/commit/357a193a75a4e2a5efd0768ca79f71998539d2d1) #### [v3.0.1](https://github.com/craigerl/aprsd/compare/v3.0.0...v3.0.1) > 14 January 2023 - Add support for Reject messages. [`#109`](https://github.com/craigerl/aprsd/pull/109) -- Add support to Reject messages. [`c68b270`](https://github.com/craigerl/aprsd/commit/c68b270ee280a7f58163784511d5fbea810c977c) - Update Docker builds for 3.0.0 [`3872590`](https://github.com/craigerl/aprsd/commit/38725907f31a56a9619035f17d6ae1b0f9955a17) +- Add support to Reject messages. [`c68b270`](https://github.com/craigerl/aprsd/commit/c68b270ee280a7f58163784511d5fbea810c977c) ### [v3.0.0](https://github.com/craigerl/aprsd/compare/v2.6.1...v3.0.0) @@ -458,63 +459,63 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Convert config to oslo_config [`#107`](https://github.com/craigerl/aprsd/pull/107) - Dataclasses [`#106`](https://github.com/craigerl/aprsd/pull/106) -- Reworked all packet processing [`94fb481`](https://github.com/craigerl/aprsd/commit/94fb481014dea7960c0a029b3deb8828fea22ad8) -- Update documentation and README [`c929689`](https://github.com/craigerl/aprsd/commit/c929689647159804209f1bd3711a563ba395cb18) -- Removed references to old custom config [`7ccfc25`](https://github.com/craigerl/aprsd/commit/7ccfc253cf4d881b4888c3b4040dc9e119fb74dc) -- Decouple admin web interface from server command [`ff39239`](https://github.com/craigerl/aprsd/commit/ff392395ed9e4eb8fcc46e8ec475ff82f033c45b) -- Added missing conf [`f4a6dfc`](https://github.com/craigerl/aprsd/commit/f4a6dfc8a0ccff5d6cdf3abf511eaae537e60eaa) -- Added new docs files for 3.0.0 [`29b8764`](https://github.com/craigerl/aprsd/commit/29b8764124894f25849750890074a7e5a571000a) -- Cleaned out all references to messaging [`bfc0a5a`](https://github.com/craigerl/aprsd/commit/bfc0a5a1e9bd56c808edac679a50426efc5d322e) - Started using dataclasses to describe packets [`082db73`](https://github.com/craigerl/aprsd/commit/082db7325de50c508a96db225ad196e47fbaf806) -- Updated Healthcheck to use rpc to call aprsd [`c5acdba`](https://github.com/craigerl/aprsd/commit/c5acdba6dee13bba189af106925cb33c8adf078e) -- reworked collecting and reporting stats [`e37f99a`](https://github.com/craigerl/aprsd/commit/e37f99a6ddbb32e5d1a59f30c7179bb81451fc6a) -- Removed Packet.send() [`4a65f52`](https://github.com/craigerl/aprsd/commit/4a65f52939b38eff8c664742c58b62e69ca24a51) - Updated plugins and plugin interfaces for Packet [`67a441d`](https://github.com/craigerl/aprsd/commit/67a441d443f4460b0db0c67f404b6d5db85024af) -- More messaging -> packets cleanup [`6030cb3`](https://github.com/craigerl/aprsd/commit/6030cb394ba72e70c1e3cf161f3ddef39ddf183e) -- Make tracking objectstores work w/o initializing [`1187f1e`](https://github.com/craigerl/aprsd/commit/1187f1ed738890b63201c136e607a88781a8b36e) -- Cleaned up PluginManager [`220fb58`](https://github.com/craigerl/aprsd/commit/220fb58f9779946c33429613ff397c7082fe84eb) -- Added ObjectPacket [`ed284a4`](https://github.com/craigerl/aprsd/commit/ed284a42cc0b29357c1f2f3182db029874394216) -- Cleaned up packet transmit class attributes [`c201c93`](https://github.com/craigerl/aprsd/commit/c201c93b5d01f73eb2a308d309103e114e5f6ff1) -- Removed watchlist plugins [`f464ff0`](https://github.com/craigerl/aprsd/commit/f464ff0785b2b6a2869effa4d1c5cca706199de4) -- Ensure server command main thread doesn't exit [`c5aba17`](https://github.com/craigerl/aprsd/commit/c5aba17ad1eee81bfbdae33ccfd375c0b92a2411) -- Fix some unit tests and loading of CONF w/o file [`e9a954a`](https://github.com/craigerl/aprsd/commit/e9a954a8fd79059995f8e44832bea040c9a5320a) -- Updated webchat and listen for queue based RX [`ad0d89d`](https://github.com/craigerl/aprsd/commit/ad0d89db401847a44b2d2af82d9901b40ecd9b5a) -- Change RX packet processing to enqueu [`123b3ff`](https://github.com/craigerl/aprsd/commit/123b3ffa81c5eb6366378cd4e28d936086af7686) -- Added WeatherPacket encoding [`899a6e5`](https://github.com/craigerl/aprsd/commit/899a6e5363690a1463c6102b30033e6ff1888c3c) -- Cleaned up KISS interfaces use of old config [`0758a58`](https://github.com/craigerl/aprsd/commit/0758a581013fe0c3f0b69bb3d8d3087969e20673) -- Update regex processing and regex for plugins [`3d0bb8a`](https://github.com/craigerl/aprsd/commit/3d0bb8ae8e92c7a23352f06aa951c6b18a0c2da0) -- Added contructing a GPSPacket for sending [`59e5af8`](https://github.com/craigerl/aprsd/commit/59e5af8ee59bfeac4c72662c42bcf0663162e3ef) -- Add packet filtering for aprsd listen [`d01392f`](https://github.com/craigerl/aprsd/commit/d01392f6a588b38134875acfa085f5664febacf6) -- Change ordering of starting up of server command [`83d2e70`](https://github.com/craigerl/aprsd/commit/83d2e708ebb68ce743a1b3db9e9bea42f3bcda32) -- Added rain formatting unit tests to WeatherPacket [`ce3b29f`](https://github.com/craigerl/aprsd/commit/ce3b29f99023964b4922806d476ddc2678edeee8) -- Removed unused threading code [`9fc5356`](https://github.com/craigerl/aprsd/commit/9fc5356456a60cd96c085a842cbeed0eb315e949) -- Fix PluginManager.get_plugins [`2ca3636`](https://github.com/craigerl/aprsd/commit/2ca36362ec5ce9f6083487eb903f2132ac91fcb2) +- Reworked all packet processing [`94fb481`](https://github.com/craigerl/aprsd/commit/94fb481014dea7960c0a029b3deb8828fea22ad8) - cleanup webchat [`1b49f12`](https://github.com/craigerl/aprsd/commit/1b49f128a96197bd11d47feba203d1029e022a50) -- Update Changelog for 3.0.0 [`4a10511`](https://github.com/craigerl/aprsd/commit/4a10511d8bb58b9b7785f4469db6543e731f1418) -- reworked usage of importlib.metadata [`a5520b2`](https://github.com/craigerl/aprsd/commit/a5520b2cd3b977079f1971f2ce6f383340304884) -- Dockerfile now produces aprsd.conf [`02e4f78`](https://github.com/craigerl/aprsd/commit/02e4f78d0e3be5098333263cfafb2cc3debdff81) -- Fix Rain reporting in WeatherPacket send. [`bbcd7c8`](https://github.com/craigerl/aprsd/commit/bbcd7c8a5bc3e457bbce2138029b236a7607c61e) -- Fix some WeatherPacket formatting [`f19043e`](https://github.com/craigerl/aprsd/commit/f19043ecd994ffd2d1c6958f08a47d5328c64258) +- Added contructing a GPSPacket for sending [`59e5af8`](https://github.com/craigerl/aprsd/commit/59e5af8ee59bfeac4c72662c42bcf0663162e3ef) +- Cleaned out all references to messaging [`bfc0a5a`](https://github.com/craigerl/aprsd/commit/bfc0a5a1e9bd56c808edac679a50426efc5d322e) +- More messaging -> packets cleanup [`6030cb3`](https://github.com/craigerl/aprsd/commit/6030cb394ba72e70c1e3cf161f3ddef39ddf183e) - Fix packets timestamp to int [`f1de7bc`](https://github.com/craigerl/aprsd/commit/f1de7bc6815be2ee129a27ff4a898abbc48a5b51) -- Fixed save directory default [`233d49b`](https://github.com/craigerl/aprsd/commit/233d49bb4c3cf96f4979aa8e878635376cffad5b) -- Fixed pep8 failure [`6391c7e`](https://github.com/craigerl/aprsd/commit/6391c7eed691f912de49de0aa3e0a0fdb5a2edc2) -- Removed url option from healthcheck in dev [`fe2f7b5`](https://github.com/craigerl/aprsd/commit/fe2f7b5b71d3aba24f9530e3371450b800f8cc81) -- Updated docker/bin/run.sh to use new conf [`79e7ed1`](https://github.com/craigerl/aprsd/commit/79e7ed1e915e62ed2392fed27d79da8619f3eef0) -- Update routing for weatherpacket [`088cbb8`](https://github.com/craigerl/aprsd/commit/088cbb81eddd3bf947e2e2bd970b0f3ac094bd41) +- Cleaned up packet transmit class attributes [`c201c93`](https://github.com/craigerl/aprsd/commit/c201c93b5d01f73eb2a308d309103e114e5f6ff1) +- Make tracking objectstores work w/o initializing [`1187f1e`](https://github.com/craigerl/aprsd/commit/1187f1ed738890b63201c136e607a88781a8b36e) +- Change RX packet processing to enqueu [`123b3ff`](https://github.com/craigerl/aprsd/commit/123b3ffa81c5eb6366378cd4e28d936086af7686) +- Removed unused threading code [`9fc5356`](https://github.com/craigerl/aprsd/commit/9fc5356456a60cd96c085a842cbeed0eb315e949) +- reworked collecting and reporting stats [`e37f99a`](https://github.com/craigerl/aprsd/commit/e37f99a6ddbb32e5d1a59f30c7179bb81451fc6a) +- Updated webchat and listen for queue based RX [`ad0d89d`](https://github.com/craigerl/aprsd/commit/ad0d89db401847a44b2d2af82d9901b40ecd9b5a) +- Added WeatherPacket encoding [`899a6e5`](https://github.com/craigerl/aprsd/commit/899a6e5363690a1463c6102b30033e6ff1888c3c) +- Add packet filtering for aprsd listen [`d01392f`](https://github.com/craigerl/aprsd/commit/d01392f6a588b38134875acfa085f5664febacf6) - Fix pep8 violation [`a1188d2`](https://github.com/craigerl/aprsd/commit/a1188d29d41df7a609fe29d23010cf8fb50fa5cc) +- Fix some WeatherPacket formatting [`f19043e`](https://github.com/craigerl/aprsd/commit/f19043ecd994ffd2d1c6958f08a47d5328c64258) +- Update routing for weatherpacket [`088cbb8`](https://github.com/craigerl/aprsd/commit/088cbb81eddd3bf947e2e2bd970b0f3ac094bd41) - Cleaned up PluginManager [`7dfa4e6`](https://github.com/craigerl/aprsd/commit/7dfa4e6dbf1924b5ce1061e6be2d1a00ffd095d8) +- Cleaned up PluginManager [`220fb58`](https://github.com/craigerl/aprsd/commit/220fb58f9779946c33429613ff397c7082fe84eb) +- Fix PluginManager.get_plugins [`2ca3636`](https://github.com/craigerl/aprsd/commit/2ca36362ec5ce9f6083487eb903f2132ac91fcb2) +- Removed watchlist plugins [`f464ff0`](https://github.com/craigerl/aprsd/commit/f464ff0785b2b6a2869effa4d1c5cca706199de4) +- Removed Packet.send() [`4a65f52`](https://github.com/craigerl/aprsd/commit/4a65f52939b38eff8c664742c58b62e69ca24a51) +- Fix Rain reporting in WeatherPacket send. [`bbcd7c8`](https://github.com/craigerl/aprsd/commit/bbcd7c8a5bc3e457bbce2138029b236a7607c61e) +- Added rain formatting unit tests to WeatherPacket [`ce3b29f`](https://github.com/craigerl/aprsd/commit/ce3b29f99023964b4922806d476ddc2678edeee8) +- Removed references to old custom config [`7ccfc25`](https://github.com/craigerl/aprsd/commit/7ccfc253cf4d881b4888c3b4040dc9e119fb74dc) +- Added missing conf [`f4a6dfc`](https://github.com/craigerl/aprsd/commit/f4a6dfc8a0ccff5d6cdf3abf511eaae537e60eaa) +- Fix some unit tests and loading of CONF w/o file [`e9a954a`](https://github.com/craigerl/aprsd/commit/e9a954a8fd79059995f8e44832bea040c9a5320a) +- Dockerfile now produces aprsd.conf [`02e4f78`](https://github.com/craigerl/aprsd/commit/02e4f78d0e3be5098333263cfafb2cc3debdff81) +- Decouple admin web interface from server command [`ff39239`](https://github.com/craigerl/aprsd/commit/ff392395ed9e4eb8fcc46e8ec475ff82f033c45b) +- Update documentation and README [`c929689`](https://github.com/craigerl/aprsd/commit/c929689647159804209f1bd3711a563ba395cb18) +- Change ordering of starting up of server command [`83d2e70`](https://github.com/craigerl/aprsd/commit/83d2e708ebb68ce743a1b3db9e9bea42f3bcda32) +- Update regex processing and regex for plugins [`3d0bb8a`](https://github.com/craigerl/aprsd/commit/3d0bb8ae8e92c7a23352f06aa951c6b18a0c2da0) +- Added ObjectPacket [`ed284a4`](https://github.com/craigerl/aprsd/commit/ed284a42cc0b29357c1f2f3182db029874394216) +- Updated docker/bin/run.sh to use new conf [`79e7ed1`](https://github.com/craigerl/aprsd/commit/79e7ed1e915e62ed2392fed27d79da8619f3eef0) +- Updated Healthcheck to use rpc to call aprsd [`c5acdba`](https://github.com/craigerl/aprsd/commit/c5acdba6dee13bba189af106925cb33c8adf078e) +- Removed url option from healthcheck in dev [`fe2f7b5`](https://github.com/craigerl/aprsd/commit/fe2f7b5b71d3aba24f9530e3371450b800f8cc81) +- Added new docs files for 3.0.0 [`29b8764`](https://github.com/craigerl/aprsd/commit/29b8764124894f25849750890074a7e5a571000a) +- reworked usage of importlib.metadata [`a5520b2`](https://github.com/craigerl/aprsd/commit/a5520b2cd3b977079f1971f2ce6f383340304884) +- Cleaned up KISS interfaces use of old config [`0758a58`](https://github.com/craigerl/aprsd/commit/0758a581013fe0c3f0b69bb3d8d3087969e20673) +- Fixed pep8 failure [`6391c7e`](https://github.com/craigerl/aprsd/commit/6391c7eed691f912de49de0aa3e0a0fdb5a2edc2) +- Fixed save directory default [`233d49b`](https://github.com/craigerl/aprsd/commit/233d49bb4c3cf96f4979aa8e878635376cffad5b) +- Ensure server command main thread doesn't exit [`c5aba17`](https://github.com/craigerl/aprsd/commit/c5aba17ad1eee81bfbdae33ccfd375c0b92a2411) +- Update Changelog for 3.0.0 [`4a10511`](https://github.com/craigerl/aprsd/commit/4a10511d8bb58b9b7785f4469db6543e731f1418) #### [v2.6.1](https://github.com/craigerl/aprsd/compare/v2.6.0...v2.6.1) > 16 December 2022 - Collections fix [`#105`](https://github.com/craigerl/aprsd/pull/105) +- Update workflow [`40f23dc`](https://github.com/craigerl/aprsd/commit/40f23dcb482f39ba2fe233578bbb36f5d2da17b7) +- Fix for Collections change in 3.10 [`9d19502`](https://github.com/craigerl/aprsd/commit/9d19502dd80133d74b516a09addfd38bc088c241) +- remove armv7 build RUST sucks [`321c5a2`](https://github.com/craigerl/aprsd/commit/321c5a2c25cc88a93dc60c3ef351413473c76517) - Add unit tests for webchat [`19e5cfa`](https://github.com/craigerl/aprsd/commit/19e5cfa9cc7605ee39be6869efb40261c33e4efb) - Try and fix broken 32bit qemu builds on 64bit system [`87cbcaa`](https://github.com/craigerl/aprsd/commit/87cbcaa47fc52be03d7f6763e5d2142dc7d350a1) - Fixed position report for webchat beacon [`9571b0b`](https://github.com/craigerl/aprsd/commit/9571b0bb38f444f5b52d3b36b9efd2e8e7a331d5) -- Fix for Collections change in 3.10 [`9d19502`](https://github.com/craigerl/aprsd/commit/9d19502dd80133d74b516a09addfd38bc088c241) -- remove armv7 build RUST sucks [`321c5a2`](https://github.com/craigerl/aprsd/commit/321c5a2c25cc88a93dc60c3ef351413473c76517) -- Update workflow [`40f23dc`](https://github.com/craigerl/aprsd/commit/40f23dcb482f39ba2fe233578bbb36f5d2da17b7) #### [v2.6.0](https://github.com/craigerl/aprsd/compare/v2.5.9...v2.6.0) @@ -533,83 +534,83 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Fix typo on exception [`#94`](https://github.com/craigerl/aprsd/pull/94) - Fix plugins not installing via docker-compose [`#97`](https://github.com/craigerl/aprsd/pull/97) - Merge pull request #96 from ranguli/fix-pypi-scraping [`#92`](https://github.com/craigerl/aprsd/issues/92) -- Added webchat command [`585d55f`](https://github.com/craigerl/aprsd/commit/585d55f10dca57b8e1dcdadfe26415b1cfa40d7e) -- Updated requirements [`075078b`](https://github.com/craigerl/aprsd/commit/075078b52029cb0544e2d154e6064b783167b615) -- Refactored threads a bit [`51b80cd`](https://github.com/craigerl/aprsd/commit/51b80cd4eaa4441f4fb6c9344b7c4e99558811ff) -- Refactored threads.py [`347a6d6`](https://github.com/craigerl/aprsd/commit/347a6d69f7825a408553a4ee08002917c5a6ab73) -- Got webchat working with KISS tcp [`7d970cb`](https://github.com/craigerl/aprsd/commit/7d970cbe7029610aa2522c1c78bf60bf10b35417) -- Add GPS beacon to mobile page [`ee96108`](https://github.com/craigerl/aprsd/commit/ee96108324ce729abb3683e94a69c9682ecc503f) -- Use new aprsd.callsign as the main callsign [`ad79ed1`](https://github.com/craigerl/aprsd/commit/ad79ed1261702ae0f278e91d7369de02b20a0af3) -- Fixed up config option checking for KISS [`1c052a6`](https://github.com/craigerl/aprsd/commit/1c052a63c0ba896d43c06f1a06d73b73d2d2370e) -- Prep for 2.6.0 release [`5891c71`](https://github.com/craigerl/aprsd/commit/5891c71483229f3554d7c5b126412e464956e1b3) -- Refactor utils to directory [`bed060f`](https://github.com/craigerl/aprsd/commit/bed060f1c5c4e2265c90ac9dbb8db4e81a530e0a) -- Removed TimeOpenCageDataPlugin [`528bdb9`](https://github.com/craigerl/aprsd/commit/528bdb99e73edb94c984c7db7ca00849128e1dc0) +- for 2.5.9 [`03a20eb`](https://github.com/craigerl/aprsd/commit/03a20ebb5caf95763fee270c157f6e802c5e68b4) - Fix logging issue with log messages [`e739441`](https://github.com/craigerl/aprsd/commit/e739441268569748c42e059c02343e92dd00db64) +- Fixed up config option checking for KISS [`1c052a6`](https://github.com/craigerl/aprsd/commit/1c052a63c0ba896d43c06f1a06d73b73d2d2370e) +- Refactor utils to directory [`bed060f`](https://github.com/craigerl/aprsd/commit/bed060f1c5c4e2265c90ac9dbb8db4e81a530e0a) +- Refactored threads.py [`347a6d6`](https://github.com/craigerl/aprsd/commit/347a6d69f7825a408553a4ee08002917c5a6ab73) +- Fixed pep8 errors [`29b84b4`](https://github.com/craigerl/aprsd/commit/29b84b453be5bf1ab4ba0f40bae33bc5057e42c7) +- Moved trace.py to utils [`a628439`](https://github.com/craigerl/aprsd/commit/a62843920a6742cf22c966e6d2a05155f20aeb17) +- Moved log.py to logging [`1ccb2f7`](https://github.com/craigerl/aprsd/commit/1ccb2f76953d113df482902895d7014aee778195) +- Added webchat command [`585d55f`](https://github.com/craigerl/aprsd/commit/585d55f10dca57b8e1dcdadfe26415b1cfa40d7e) +- Fixed access to threads refactor [`5f28788`](https://github.com/craigerl/aprsd/commit/5f2878818006397c79f6438d7dc3fbeb26b2e31e) +- Use new aprsd.callsign as the main callsign [`ad79ed1`](https://github.com/craigerl/aprsd/commit/ad79ed1261702ae0f278e91d7369de02b20a0af3) +- Try sending raw APRSFrames to aioax25 [`2ce50d8`](https://github.com/craigerl/aprsd/commit/2ce50d886149d055357e44a0cbc2fddad81d7824) +- Allow web interface when running in Docker [`b1db08a`](https://github.com/craigerl/aprsd/commit/b1db08a08c3a3b812fcb32829a62218c2d3ae132) +- Merge pull request #95 from ranguli/patch-1 [`74e4e2c`](https://github.com/craigerl/aprsd/commit/74e4e2c4f5242218b17400ee37d12506c31faec1) +- Fix PyPI scraping [`9ffd320`](https://github.com/craigerl/aprsd/commit/9ffd320353a03ab469940f9dec87ad11a1efe9a0) +- Fix typo in docker-compose.yml [`389304c`](https://github.com/craigerl/aprsd/commit/389304c3f2bee31d8c743d6ba8759204b0b80d13) +- Update dev-requirements pip-tools [`7db2242`](https://github.com/craigerl/aprsd/commit/7db2242060d8146ff4d1372fbf72df7741522ad5) +- Added container build action [`b50f343`](https://github.com/craigerl/aprsd/commit/b50f343440febca1d040b2463b68011aa8404526) +- create master-build.yml [`1383352`](https://github.com/craigerl/aprsd/commit/1383352e7566b35b8a14fbe98b8ea1f8d118e382) +- Remove docker build from test [`f9d3bc4`](https://github.com/craigerl/aprsd/commit/f9d3bc433f754b788e2fc5a988f74944239812de) +- Only tag master build as master [`9671dac`](https://github.com/craigerl/aprsd/commit/9671dacb1cf4d3cdd8ed03d530ad07164b1e2449) +- remove linux/arm/v6 from docker platform build [`358aa59`](https://github.com/craigerl/aprsd/commit/358aa5904235adf36dd6ad994ba5b82fa9794537) +- Added rustc and cargo to Dockerfile [`3580425`](https://github.com/craigerl/aprsd/commit/3580425ca3ec9fa9bf6856e39aa58f3512a0dee0) +- remove arm build for now [`ab65836`](https://github.com/craigerl/aprsd/commit/ab6583666f8a3eb7853927f8a196c88a773d5a5b) +- Add remving existing requirements [`e5f60b5`](https://github.com/craigerl/aprsd/commit/e5f60b5ce1800bf1bdb39d7b6eea769a8ff646a4) - Update packets to use wrapt [`967959e`](https://github.com/craigerl/aprsd/commit/967959e7b3d2d890da9476ca76a0ef1e8a3b163d) - Update aprsd thread base class to use queue [`9b0c626`](https://github.com/craigerl/aprsd/commit/9b0c626b59406102cdab85b7a9de20cf53563953) -- create master-build.yml [`1383352`](https://github.com/craigerl/aprsd/commit/1383352e7566b35b8a14fbe98b8ea1f8d118e382) -- added workflow for building specific version [`d40927d`](https://github.com/craigerl/aprsd/commit/d40927d1c3f0890f79cb76d8b0c537e0ecf887e6) -- Update Dockerfile and build.sh [`c1db238`](https://github.com/craigerl/aprsd/commit/c1db238719eba7e0834316e5618e220f4458685b) -- Moved trace.py to utils [`a628439`](https://github.com/craigerl/aprsd/commit/a62843920a6742cf22c966e6d2a05155f20aeb17) -- Try sending raw APRSFrames to aioax25 [`2ce50d8`](https://github.com/craigerl/aprsd/commit/2ce50d886149d055357e44a0cbc2fddad81d7824) -- Moved log.py to logging [`1ccb2f7`](https://github.com/craigerl/aprsd/commit/1ccb2f76953d113df482902895d7014aee778195) -- Fixed build.sh [`d1a0a98`](https://github.com/craigerl/aprsd/commit/d1a0a988f2cb2cbb015e4c00fa80bfa1db3d8a5f) -- Update requirements [`68472b0`](https://github.com/craigerl/aprsd/commit/68472b0d8402ddcf48164fcf8e2f11963aff8dd6) -- Build on the source not released aprsd [`d9b3973`](https://github.com/craigerl/aprsd/commit/d9b39734e6a236485ab08f9c70f215fdd9dbb876) -- Fixed pep8 errors [`29b84b4`](https://github.com/craigerl/aprsd/commit/29b84b453be5bf1ab4ba0f40bae33bc5057e42c7) -- Remove docker build from test [`f9d3bc4`](https://github.com/craigerl/aprsd/commit/f9d3bc433f754b788e2fc5a988f74944239812de) -- Added container build action [`b50f343`](https://github.com/craigerl/aprsd/commit/b50f343440febca1d040b2463b68011aa8404526) -- Update to latest Makefile.venv [`e4f93a2`](https://github.com/craigerl/aprsd/commit/e4f93a2ab4dbc416a93a51ba14650531f17ee02c) -- specify Dockerfile-dev [`4111d16`](https://github.com/craigerl/aprsd/commit/4111d16aafe456cba998183db0e745edef4f7777) -- Dump config with aprsd dev test-plugin [`fc1ca52`](https://github.com/craigerl/aprsd/commit/fc1ca525934c13a72c1e0315898776a57a675814) -- Update dev-requirements pip-tools [`7db2242`](https://github.com/craigerl/aprsd/commit/7db2242060d8146ff4d1372fbf72df7741522ad5) -- Add remving existing requirements [`e5f60b5`](https://github.com/craigerl/aprsd/commit/e5f60b5ce1800bf1bdb39d7b6eea769a8ff646a4) -- Fixed failing unit tests [`5acddbd`](https://github.com/craigerl/aprsd/commit/5acddbd466dca342e7eca03d58485cb1a50471e8) -- for 2.5.9 [`03a20eb`](https://github.com/craigerl/aprsd/commit/03a20ebb5caf95763fee270c157f6e802c5e68b4) -- Update Makefile for dev vs. run environments [`576301c`](https://github.com/craigerl/aprsd/commit/576301ca209f59ed621a20c9dbc8b4e55d7a76a3) -- Added pyopenssl for https for webchat [`6d34d9c`](https://github.com/craigerl/aprsd/commit/6d34d9c514857798f7b3dbc47e2a3e14b95493a0) -- Mark packets as acked in MsgTracker [`480094b`](https://github.com/craigerl/aprsd/commit/480094b0d47edeeac23323211147088e1f637d70) -- Allow passing in version to the Dockerfile [`d5e56b5`](https://github.com/craigerl/aprsd/commit/d5e56b553eac3f327057cedd5b03c69156e23a1c) -- Fix PyPI scraping [`9ffd320`](https://github.com/craigerl/aprsd/commit/9ffd320353a03ab469940f9dec87ad11a1efe9a0) -- remove dev setting for template [`726c8f4`](https://github.com/craigerl/aprsd/commit/726c8f4f2f26c8fc5c2b868d1e482e0e662e6ed3) -- Fixed access to threads refactor [`5f28788`](https://github.com/craigerl/aprsd/commit/5f2878818006397c79f6438d7dc3fbeb26b2e31e) -- Update Dockerfile to 22.04 [`4fe99c3`](https://github.com/craigerl/aprsd/commit/4fe99c35b5ced1e79c679b28292d60c25271685c) -- Ignore callsign case while processing packets [`44696fb`](https://github.com/craigerl/aprsd/commit/44696fbc56e57c1a0346074e3416e126ac1897ab) -- remove linux/arm/v7 for official builds for now [`5add0f9`](https://github.com/craigerl/aprsd/commit/5add0f958d466172aa7a57b44e18bf27c8c0e3db) -- Add support for building linux/arm/v7 [`117f81f`](https://github.com/craigerl/aprsd/commit/117f81f55fe1a3e4e347d1c0dfbdb97e0f553f52) -- Remove python 3.7 from docker build github [`b41e4a9`](https://github.com/craigerl/aprsd/commit/b41e4a9ef3759ac819dc9740cfb276515d090fa7) -- change github workflow [`17e7846`](https://github.com/craigerl/aprsd/commit/17e784629e18b8b7ac4275b49f5a50194e71460b) - Added click auto_envvar_prefix [`d717a22`](https://github.com/craigerl/aprsd/commit/d717a22717ac1b0422b253dea052fe405aed8292) -- remove arm build for now [`ab65836`](https://github.com/craigerl/aprsd/commit/ab6583666f8a3eb7853927f8a196c88a773d5a5b) -- Added rustc and cargo to Dockerfile [`3580425`](https://github.com/craigerl/aprsd/commit/3580425ca3ec9fa9bf6856e39aa58f3512a0dee0) -- remove linux/arm/v6 from docker platform build [`358aa59`](https://github.com/craigerl/aprsd/commit/358aa5904235adf36dd6ad994ba5b82fa9794537) -- Fix typo in docker-compose.yml [`389304c`](https://github.com/craigerl/aprsd/commit/389304c3f2bee31d8c743d6ba8759204b0b80d13) -- Allow web interface when running in Docker [`b1db08a`](https://github.com/craigerl/aprsd/commit/b1db08a08c3a3b812fcb32829a62218c2d3ae132) -- Update workflow again [`a6015ad`](https://github.com/craigerl/aprsd/commit/a6015adecced632ae56703c95fb51546c9da2902) -- Removed Makefile comment. [`935f820`](https://github.com/craigerl/aprsd/commit/935f820271dff5ee6b851f85becd5fb51d0780f9) +- Got webchat working with KISS tcp [`7d970cb`](https://github.com/craigerl/aprsd/commit/7d970cbe7029610aa2522c1c78bf60bf10b35417) +- Updated requirements [`075078b`](https://github.com/craigerl/aprsd/commit/075078b52029cb0544e2d154e6064b783167b615) +- Dump config with aprsd dev test-plugin [`fc1ca52`](https://github.com/craigerl/aprsd/commit/fc1ca525934c13a72c1e0315898776a57a675814) +- Removed TimeOpenCageDataPlugin [`528bdb9`](https://github.com/craigerl/aprsd/commit/528bdb99e73edb94c984c7db7ca00849128e1dc0) +- change github workflow [`17e7846`](https://github.com/craigerl/aprsd/commit/17e784629e18b8b7ac4275b49f5a50194e71460b) +- Fixed failing unit tests [`5acddbd`](https://github.com/craigerl/aprsd/commit/5acddbd466dca342e7eca03d58485cb1a50471e8) +- Remove python 3.7 from docker build github [`b41e4a9`](https://github.com/craigerl/aprsd/commit/b41e4a9ef3759ac819dc9740cfb276515d090fa7) +- Add support for building linux/arm/v7 [`117f81f`](https://github.com/craigerl/aprsd/commit/117f81f55fe1a3e4e347d1c0dfbdb97e0f553f52) +- Build on the source not released aprsd [`d9b3973`](https://github.com/craigerl/aprsd/commit/d9b39734e6a236485ab08f9c70f215fdd9dbb876) +- Fixed build.sh [`d1a0a98`](https://github.com/craigerl/aprsd/commit/d1a0a988f2cb2cbb015e4c00fa80bfa1db3d8a5f) +- specify Dockerfile-dev [`4111d16`](https://github.com/craigerl/aprsd/commit/4111d16aafe456cba998183db0e745edef4f7777) +- Allow passing in version to the Dockerfile [`d5e56b5`](https://github.com/craigerl/aprsd/commit/d5e56b553eac3f327057cedd5b03c69156e23a1c) +- added workflow for building specific version [`d40927d`](https://github.com/craigerl/aprsd/commit/d40927d1c3f0890f79cb76d8b0c537e0ecf887e6) +- remove linux/arm/v7 for official builds for now [`5add0f9`](https://github.com/craigerl/aprsd/commit/5add0f958d466172aa7a57b44e18bf27c8c0e3db) +- Ignore callsign case while processing packets [`44696fb`](https://github.com/craigerl/aprsd/commit/44696fbc56e57c1a0346074e3416e126ac1897ab) - Allow werkzeug for admin interface. [`5067f74`](https://github.com/craigerl/aprsd/commit/5067f745ca01be677d012985bd3888f98095e041) - Allow werkzeug for admin interface. [`98fe9da`](https://github.com/craigerl/aprsd/commit/98fe9daac5cc5c13f29aef401c935925cf8d2198) -- Only tag master build as master [`9671dac`](https://github.com/craigerl/aprsd/commit/9671dacb1cf4d3cdd8ed03d530ad07164b1e2449) -- Merge pull request #95 from ranguli/patch-1 [`74e4e2c`](https://github.com/craigerl/aprsd/commit/74e4e2c4f5242218b17400ee37d12506c31faec1) +- Add GPS beacon to mobile page [`ee96108`](https://github.com/craigerl/aprsd/commit/ee96108324ce729abb3683e94a69c9682ecc503f) +- remove dev setting for template [`726c8f4`](https://github.com/craigerl/aprsd/commit/726c8f4f2f26c8fc5c2b868d1e482e0e662e6ed3) +- Mark packets as acked in MsgTracker [`480094b`](https://github.com/craigerl/aprsd/commit/480094b0d47edeeac23323211147088e1f637d70) +- Refactored threads a bit [`51b80cd`](https://github.com/craigerl/aprsd/commit/51b80cd4eaa4441f4fb6c9344b7c4e99558811ff) +- Update to latest Makefile.venv [`e4f93a2`](https://github.com/craigerl/aprsd/commit/e4f93a2ab4dbc416a93a51ba14650531f17ee02c) +- Added pyopenssl for https for webchat [`6d34d9c`](https://github.com/craigerl/aprsd/commit/6d34d9c514857798f7b3dbc47e2a3e14b95493a0) +- Update Makefile for dev vs. run environments [`576301c`](https://github.com/craigerl/aprsd/commit/576301ca209f59ed621a20c9dbc8b4e55d7a76a3) +- Removed Makefile comment. [`935f820`](https://github.com/craigerl/aprsd/commit/935f820271dff5ee6b851f85becd5fb51d0780f9) +- Update requirements [`68472b0`](https://github.com/craigerl/aprsd/commit/68472b0d8402ddcf48164fcf8e2f11963aff8dd6) +- Prep for 2.6.0 release [`5891c71`](https://github.com/craigerl/aprsd/commit/5891c71483229f3554d7c5b126412e464956e1b3) +- Update Dockerfile and build.sh [`c1db238`](https://github.com/craigerl/aprsd/commit/c1db238719eba7e0834316e5618e220f4458685b) +- Update Dockerfile to 22.04 [`4fe99c3`](https://github.com/craigerl/aprsd/commit/4fe99c35b5ced1e79c679b28292d60c25271685c) +- Update workflow again [`a6015ad`](https://github.com/craigerl/aprsd/commit/a6015adecced632ae56703c95fb51546c9da2902) #### [v2.5.9](https://github.com/craigerl/aprsd/compare/v2.5.8...v2.5.9) > 26 January 2022 -- FIX: logging exceptions [`6257c9e`](https://github.com/craigerl/aprsd/commit/6257c9ea908158bc68e37fd8984b0a3119deff0d) -- Updated build and run for rich lib [`b00c8db`](https://github.com/craigerl/aprsd/commit/b00c8db3d6ddebe7f485a8888a52b87e43d8415a) - update build for 2.5.8 [`79270f9`](https://github.com/craigerl/aprsd/commit/79270f95becc8ecf3912661a5bd3832ab5cd9341) +- Updated build and run for rich lib [`b00c8db`](https://github.com/craigerl/aprsd/commit/b00c8db3d6ddebe7f485a8888a52b87e43d8415a) +- FIX: logging exceptions [`6257c9e`](https://github.com/craigerl/aprsd/commit/6257c9ea908158bc68e37fd8984b0a3119deff0d) #### [v2.5.8](https://github.com/craigerl/aprsd/compare/v2.5.7...v2.5.8) > 7 January 2022 -- Updated list-plugins [`764730c`](https://github.com/craigerl/aprsd/commit/764730c123e020235615b4be8ab1d26b43fc96be) - Send Message command defaults to config [`a7bbde4`](https://github.com/craigerl/aprsd/commit/a7bbde4a439258691feb0429e371828d5b024a64) - Added unit tests for dev test-plugin [`2f6e7e1`](https://github.com/craigerl/aprsd/commit/2f6e7e17e835d7b659cf3186c17d5975dd503019) -- For 2.5.8 [`29a60b7`](https://github.com/craigerl/aprsd/commit/29a60b7ed04a29de00d32e66ca42f4b204238389) -- Removed debug code [`e8100d8`](https://github.com/craigerl/aprsd/commit/e8100d8777bc38423e9d20800d2b8cfce345dc14) - Renamed virtualenv dir to .aprsd-venv [`610e40a`](https://github.com/craigerl/aprsd/commit/610e40aecdd75212249b75f0a23b09f4caa25e79) +- Updated list-plugins [`764730c`](https://github.com/craigerl/aprsd/commit/764730c123e020235615b4be8ab1d26b43fc96be) +- Removed debug code [`e8100d8`](https://github.com/craigerl/aprsd/commit/e8100d8777bc38423e9d20800d2b8cfce345dc14) +- For 2.5.8 [`29a60b7`](https://github.com/craigerl/aprsd/commit/29a60b7ed04a29de00d32e66ca42f4b204238389) #### [v2.5.7](https://github.com/craigerl/aprsd/compare/v2.5.6...v2.5.7) @@ -630,27 +631,27 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Unittests [`#75`](https://github.com/craigerl/aprsd/pull/75) - Rich logging [`#74`](https://github.com/craigerl/aprsd/pull/74) - Added LOG_LEVEL env variable for the docker [`#73`](https://github.com/craigerl/aprsd/pull/73) -- Added NotifyPlugin unit tests and more [`0ad791b`](https://github.com/craigerl/aprsd/commit/0ad791bdd917495d8acd43f1895bbd16535af5c6) - Added python rich library based logging. [`1d5f76d`](https://github.com/craigerl/aprsd/commit/1d5f76defc3da693ba8b73b7ae655dc6e060ecb0) -- Added unit tests for USWeatherPlugin, USMetarPlugin [`8ea00e9`](https://github.com/craigerl/aprsd/commit/8ea00e98886db552a83a469441ee4ec8ef644aa4) -- Added test_location to test LocationPlugin [`5d6ac5c`](https://github.com/craigerl/aprsd/commit/5d6ac5cf31836da967377bbc15e3aca6c0322a96) -- Fixed some pep8 errors [`b5b286e`](https://github.com/craigerl/aprsd/commit/b5b286e75c502edc7eee29e3b10450d41dea8d86) -- Small cleanup on packet logging [`96cc07d`](https://github.com/craigerl/aprsd/commit/96cc07d15f25f9b1b116d5723a9fea7153175f19) -- Changelog [`b7791eb`](https://github.com/craigerl/aprsd/commit/b7791eb4fa78878a426d0348ddbfbb36c650671c) -- Updated pytest output [`e0e7514`](https://github.com/craigerl/aprsd/commit/e0e75149a9fb126f255c373bcba87c22b85ea22c) -- Tightened up the packet logging [`440c8d5`](https://github.com/craigerl/aprsd/commit/440c8d54adbebfdfef77d0a1e0dd757a755f3e51) -- Fixed the NotifyPlugin [`055835c`](https://github.com/craigerl/aprsd/commit/055835cb3cb116797e10f925a843818d8a9633e6) -- Added py39 to tox for tests [`a5184fb`](https://github.com/craigerl/aprsd/commit/a5184fb98cb286d6fd34df749591944af6e8faf6) - Add tracing for dev command [`1233137`](https://github.com/craigerl/aprsd/commit/1233137caf1c08114a2a87f11004b3e046198ac0) +- Fixed some pep8 errors [`b5b286e`](https://github.com/craigerl/aprsd/commit/b5b286e75c502edc7eee29e3b10450d41dea8d86) +- Fixed the NotifyPlugin [`055835c`](https://github.com/craigerl/aprsd/commit/055835cb3cb116797e10f925a843818d8a9633e6) - Reduced the APRSIS connection reset to 2 minutes [`d3dd087`](https://github.com/craigerl/aprsd/commit/d3dd08714bb172d8804170e421283d6794a253c7) +- Small cleanup on packet logging [`96cc07d`](https://github.com/craigerl/aprsd/commit/96cc07d15f25f9b1b116d5723a9fea7153175f19) +- Added NotifyPlugin unit tests and more [`0ad791b`](https://github.com/craigerl/aprsd/commit/0ad791bdd917495d8acd43f1895bbd16535af5c6) +- Added py39 to tox for tests [`a5184fb`](https://github.com/craigerl/aprsd/commit/a5184fb98cb286d6fd34df749591944af6e8faf6) +- Updated pytest output [`e0e7514`](https://github.com/craigerl/aprsd/commit/e0e75149a9fb126f255c373bcba87c22b85ea22c) +- Added test_location to test LocationPlugin [`5d6ac5c`](https://github.com/craigerl/aprsd/commit/5d6ac5cf31836da967377bbc15e3aca6c0322a96) +- Added unit tests for USWeatherPlugin, USMetarPlugin [`8ea00e9`](https://github.com/craigerl/aprsd/commit/8ea00e98886db552a83a469441ee4ec8ef644aa4) +- Tightened up the packet logging [`440c8d5`](https://github.com/craigerl/aprsd/commit/440c8d54adbebfdfef77d0a1e0dd757a755f3e51) +- Changelog [`b7791eb`](https://github.com/craigerl/aprsd/commit/b7791eb4fa78878a426d0348ddbfbb36c650671c) #### [v2.5.5](https://github.com/craigerl/aprsd/compare/v2.5.4...v2.5.5) > 28 November 2021 -- Update requirements to use aprslib 0.7.0 [`e27887d`](https://github.com/craigerl/aprsd/commit/e27887db1a58e9c914e6ab24bd2d1806772600aa) -- fixed the failure during loading for objectstore [`5e50792`](https://github.com/craigerl/aprsd/commit/5e50792e805c0f8f6f034c7dc010f6918e9b64a7) - updated docker build [`deec249`](https://github.com/craigerl/aprsd/commit/deec249c45d8e1684212577fe85a9e9fc44f0567) +- fixed the failure during loading for objectstore [`5e50792`](https://github.com/craigerl/aprsd/commit/5e50792e805c0f8f6f034c7dc010f6918e9b64a7) +- Update requirements to use aprslib 0.7.0 [`e27887d`](https://github.com/craigerl/aprsd/commit/e27887db1a58e9c914e6ab24bd2d1806772600aa) #### [v2.5.4](https://github.com/craigerl/aprsd/compare/v2.5.3...v2.5.4) @@ -669,12 +670,12 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). > 12 November 2021 -- Added new list-plugins command [`446484e`](https://github.com/craigerl/aprsd/commit/446484e631bc70e83017dc9cec5799869a54e2d3) -- Removed requirement for aprs.fi key [`7787dc1`](https://github.com/craigerl/aprsd/commit/7787dc1be4f1115c9b7e6ef6804e1e41eea777d2) -- Healthcheck command doesn't need the aprsd.yml config [`8842fb1`](https://github.com/craigerl/aprsd/commit/8842fb1b441ed4d2ef441a71a5adc585465d765e) -- Fix test failures [`152132b`](https://github.com/craigerl/aprsd/commit/152132b0ed9772d702ad6712ad2f6e7f8caad165) - Updated Changelog [`10e34d8`](https://github.com/craigerl/aprsd/commit/10e34d8634b305e3cf0a73ece77127fc69d084c8) +- Removed requirement for aprs.fi key [`7787dc1`](https://github.com/craigerl/aprsd/commit/7787dc1be4f1115c9b7e6ef6804e1e41eea777d2) +- Fix test failures [`152132b`](https://github.com/craigerl/aprsd/commit/152132b0ed9772d702ad6712ad2f6e7f8caad165) +- Healthcheck command doesn't need the aprsd.yml config [`8842fb1`](https://github.com/craigerl/aprsd/commit/8842fb1b441ed4d2ef441a71a5adc585465d765e) - Don't require check-version command to have a config [`a8a6b1a`](https://github.com/craigerl/aprsd/commit/a8a6b1aa076d16ba22f9b4754d6f62ed0000ebbc) +- Added new list-plugins command [`446484e`](https://github.com/craigerl/aprsd/commit/446484e631bc70e83017dc9cec5799869a54e2d3) #### [v2.5.1](https://github.com/craigerl/aprsd/compare/v2.5.0...v2.5.1) @@ -688,75 +689,75 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). > 9 November 2021 - Refactor cli [`#71`](https://github.com/craigerl/aprsd/pull/71) -- Refactor the cli [`7d0006b`](https://github.com/craigerl/aprsd/commit/7d0006b0a6c4b05c14214609fcfe718ae7f0c146) -- Added healthcheck to the cmds [`82def59`](https://github.com/craigerl/aprsd/commit/82def598f09abe02ad1fe63738040d886e568bf3) -- Reworked all the common arguments [`89727e2`](https://github.com/craigerl/aprsd/commit/89727e2b8e602662f22b6581ac06b6220e4e4631) -- Updated Dockerfile's and build script for docker [`059cc86`](https://github.com/craigerl/aprsd/commit/059cc86a1144e57ff8278341f02ceb860991f664) -- Cleaned up some verbose output & colorized output [`cdcb98e`](https://github.com/craigerl/aprsd/commit/cdcb98e438df407394f95eb11a849cc5a2b066b7) -- Ensure common params are honored [`9187b97`](https://github.com/craigerl/aprsd/commit/9187b9781a537ccdc9a3e200a050693c5e6b9587) -- Removed the need for FROMCALL in dev test-plugin [`3463c6e`](https://github.com/craigerl/aprsd/commit/3463c6eb96e44b7424c392c983c2942dd23d1f41) - Fixed a problem with send-message command [`49f3ea8`](https://github.com/craigerl/aprsd/commit/49f3ea83392b98e5d1e362c37282819fb6f8dce7) -- Fixed test-plugin [`617973f`](https://github.com/craigerl/aprsd/commit/617973f56145a96eadce808f2002088106a013d4) -- Updated for v2.5.0 [`5d17809`](https://github.com/craigerl/aprsd/commit/5d17809895512a033db141384050a00f6dc700a0) - Updated Changelog for 4.2.3 [`30df452`](https://github.com/craigerl/aprsd/commit/30df452e007b023e28dbeb1b7b19d702251bd045) +- Refactor the cli [`7d0006b`](https://github.com/craigerl/aprsd/commit/7d0006b0a6c4b05c14214609fcfe718ae7f0c146) - Pep8 failures [`2ead6a9`](https://github.com/craigerl/aprsd/commit/2ead6a97da74cd9030f4a730ca2a40ba1d51ef05) +- Removed the need for FROMCALL in dev test-plugin [`3463c6e`](https://github.com/craigerl/aprsd/commit/3463c6eb96e44b7424c392c983c2942dd23d1f41) +- Added healthcheck to the cmds [`82def59`](https://github.com/craigerl/aprsd/commit/82def598f09abe02ad1fe63738040d886e568bf3) - pep8 [`8287c09`](https://github.com/craigerl/aprsd/commit/8287c09ce5ce871db09d0e70b6b6f5d0e186fd00) +- Ensure common params are honored [`9187b97`](https://github.com/craigerl/aprsd/commit/9187b9781a537ccdc9a3e200a050693c5e6b9587) +- Fixed test-plugin [`617973f`](https://github.com/craigerl/aprsd/commit/617973f56145a96eadce808f2002088106a013d4) +- Reworked all the common arguments [`89727e2`](https://github.com/craigerl/aprsd/commit/89727e2b8e602662f22b6581ac06b6220e4e4631) +- Cleaned up some verbose output & colorized output [`cdcb98e`](https://github.com/craigerl/aprsd/commit/cdcb98e438df407394f95eb11a849cc5a2b066b7) +- Updated Dockerfile's and build script for docker [`059cc86`](https://github.com/craigerl/aprsd/commit/059cc86a1144e57ff8278341f02ceb860991f664) +- Updated for v2.5.0 [`5d17809`](https://github.com/craigerl/aprsd/commit/5d17809895512a033db141384050a00f6dc700a0) #### [v2.4.2](https://github.com/craigerl/aprsd/compare/v2.4.1...v2.4.2) > 2 November 2021 -- Be more careful picking data to/from disk [`cefb581`](https://github.com/craigerl/aprsd/commit/cefb581bb802ae1d779bd3b895dd0dc8202b219c) - Updated Changelog [`d2e8fe6`](https://github.com/craigerl/aprsd/commit/d2e8fe660f1ba293a11132424963ff775f0e2e81) +- Be more careful picking data to/from disk [`cefb581`](https://github.com/craigerl/aprsd/commit/cefb581bb802ae1d779bd3b895dd0dc8202b219c) - Updated Changelog [`0d5b716`](https://github.com/craigerl/aprsd/commit/0d5b7166b3b787558b724d457054654965e8ae33) #### [v2.4.1](https://github.com/craigerl/aprsd/compare/v2.4.0...v2.4.1) > 25 October 2021 -- Ensure plugins are last to be loaded. [`95fecd2`](https://github.com/craigerl/aprsd/commit/95fecd2394f77d8a64e94b44933cf6b80a9e43b6) - Fixed email connecting to smtp server [`c8c23e6`](https://github.com/craigerl/aprsd/commit/c8c23e61850302c960dcf1d4993787070ec0fe32) +- Ensure plugins are last to be loaded. [`95fecd2`](https://github.com/craigerl/aprsd/commit/95fecd2394f77d8a64e94b44933cf6b80a9e43b6) #### [v2.4.0](https://github.com/craigerl/aprsd/compare/v2.3.1...v2.4.0) > 22 October 2021 - Refactoring/Cleanup [`#70`](https://github.com/craigerl/aprsd/pull/70) -- Refactored client classes [`270be94`](https://github.com/craigerl/aprsd/commit/270be947b59d47ba577091be119f6c8de522f3fd) +- 2.3.1 Changelog [`65ea332`](https://github.com/craigerl/aprsd/commit/65ea33290ad54093ee5c05b727878e299461eafc) - Refactor utils usage [`23e3876`](https://github.com/craigerl/aprsd/commit/23e3876e7b5d4a4b68101dd824afb2ec8ade5281) -- Added new Config object. [`491644e`](https://github.com/craigerl/aprsd/commit/491644ece68f251c939fe43483bd39647b4cfa10) -- Added objectstore Mixin [`4233827`](https://github.com/craigerl/aprsd/commit/4233827dea27277737812003ebeee9c3a98d473d) -- Added new HelpPlugin [`3b7924b`](https://github.com/craigerl/aprsd/commit/3b7924b13d157bf263a2c8061bfb9508e3a80069) +- Refactored client classes [`270be94`](https://github.com/craigerl/aprsd/commit/270be947b59d47ba577091be119f6c8de522f3fd) - Fixed email plugin's use of globals [`a6ed7b8`](https://github.com/craigerl/aprsd/commit/a6ed7b894b07d30a26394c3325af68ecca0afcd9) -- Converted MsgTrack to ObjectStoreMixin [`e009791`](https://github.com/craigerl/aprsd/commit/e009791b754d3ddde52609f836e67330d2f55e20) -- Added new SeenList [`278bb6e`](https://github.com/craigerl/aprsd/commit/278bb6e8825efec0f507ffa9482b1e78357f4099) +- Added new Config object. [`491644e`](https://github.com/craigerl/aprsd/commit/491644ece68f251c939fe43483bd39647b4cfa10) - Fixed notify plugins [`e3c5c7b`](https://github.com/craigerl/aprsd/commit/e3c5c7b4081eb2c6403195f756483f1f8a093cec) -- Enable configuring where to save the objectstore data [`0d51634`](https://github.com/craigerl/aprsd/commit/0d51634ec28b5344ccaf279bf16246b339a483ec) +- Updated dev to use plugin manager [`c097c31`](https://github.com/craigerl/aprsd/commit/c097c31258ecf8d2c23193b8045d0b12b227b2a1) +- Increase email delay to +10 [`fdc8c0c`](https://github.com/craigerl/aprsd/commit/fdc8c0cd66f6c4662e60b3a7259b792848deb747) +- Added some server startup info logs [`30671cb`](https://github.com/craigerl/aprsd/commit/30671cbdbc6b6f95af0574fe7fdba8d8d6c3474f) +- Fixed issue with flask config [`f8d87d0`](https://github.com/craigerl/aprsd/commit/f8d87d05bbf5e8f3861c42199907b210c1d9e91b) +- Fixed send-message after config/client rework [`725bb2f`](https://github.com/craigerl/aprsd/commit/725bb2fe35d6adf0cd56e2a866bee0233c46534a) - removed usage of config.check_config_option [`5b17228`](https://github.com/craigerl/aprsd/commit/5b17228811d303c62fe82d85a4ddf14e15d87934) -- Updated Changelog for 2.4.0 release [`a3a3a5a`](https://github.com/craigerl/aprsd/commit/a3a3a5aa236508f1682fbcead45cc1d20abaf0b9) - Updated build.sh [`db9cbf5`](https://github.com/craigerl/aprsd/commit/db9cbf51dfff9cee20bd545b06c69375e6e76589) - Updated aprsd-dev to use config for logfile format [`2bf85db`](https://github.com/craigerl/aprsd/commit/2bf85db21ba23bef40ff2b866a42604ad4f3aecd) -- Added -num option to aprsd-dev test-plugin [`9b22122`](https://github.com/craigerl/aprsd/commit/9b2212245f8c3f53ad4845fe69dffcf708eac7bb) -- Added SIGTERM to signal_handler [`8ee8b14`](https://github.com/craigerl/aprsd/commit/8ee8b149f1ca9d5dc82126212071cabf3ebf5e19) -- PEP8 cleanup [`135e21c`](https://github.com/craigerl/aprsd/commit/135e21cd8d1795b594660955e7ac22c7d4989513) -- Fixed send-message after config/client rework [`725bb2f`](https://github.com/craigerl/aprsd/commit/725bb2fe35d6adf0cd56e2a866bee0233c46534a) -- Updated dev to use plugin manager [`c097c31`](https://github.com/craigerl/aprsd/commit/c097c31258ecf8d2c23193b8045d0b12b227b2a1) -- 2.3.1 Changelog [`65ea332`](https://github.com/craigerl/aprsd/commit/65ea33290ad54093ee5c05b727878e299461eafc) -- Make sure SeenList update has a from in packet [`89701c8`](https://github.com/craigerl/aprsd/commit/89701c8a7084cd3b4f535f7741c7e76aca042f28) -- Ensure PacketList is initialized [`66c5d85`](https://github.com/craigerl/aprsd/commit/66c5d85b89c6edb5f18d283cd09342f7331f0710) -- Only call stop_threads if it exists [`9150f3b`](https://github.com/craigerl/aprsd/commit/9150f3b6ff36e0a836d003f58f5c4915ce3eab8e) -- Fixed unit tests [`b0d25a7`](https://github.com/craigerl/aprsd/commit/b0d25a76f7f004936374675b7304b0e069a5e1b9) -- Fixed issue with flask config [`f8d87d0`](https://github.com/craigerl/aprsd/commit/f8d87d05bbf5e8f3861c42199907b210c1d9e91b) -- Added some server startup info logs [`30671cb`](https://github.com/craigerl/aprsd/commit/30671cbdbc6b6f95af0574fe7fdba8d8d6c3474f) -- Increase email delay to +10 [`fdc8c0c`](https://github.com/craigerl/aprsd/commit/fdc8c0cd66f6c4662e60b3a7259b792848deb747) +- Added new HelpPlugin [`3b7924b`](https://github.com/craigerl/aprsd/commit/3b7924b13d157bf263a2c8061bfb9508e3a80069) - Added plugin version to stats reporting [`004795d`](https://github.com/craigerl/aprsd/commit/004795dbf10aa9f747e86159a7b5394a98f87480) +- Added new SeenList [`278bb6e`](https://github.com/craigerl/aprsd/commit/278bb6e8825efec0f507ffa9482b1e78357f4099) +- Only call stop_threads if it exists [`9150f3b`](https://github.com/craigerl/aprsd/commit/9150f3b6ff36e0a836d003f58f5c4915ce3eab8e) +- Added -num option to aprsd-dev test-plugin [`9b22122`](https://github.com/craigerl/aprsd/commit/9b2212245f8c3f53ad4845fe69dffcf708eac7bb) +- Added objectstore Mixin [`4233827`](https://github.com/craigerl/aprsd/commit/4233827dea27277737812003ebeee9c3a98d473d) +- PEP8 cleanup [`135e21c`](https://github.com/craigerl/aprsd/commit/135e21cd8d1795b594660955e7ac22c7d4989513) +- Enable configuring where to save the objectstore data [`0d51634`](https://github.com/craigerl/aprsd/commit/0d51634ec28b5344ccaf279bf16246b339a483ec) +- Added SIGTERM to signal_handler [`8ee8b14`](https://github.com/craigerl/aprsd/commit/8ee8b149f1ca9d5dc82126212071cabf3ebf5e19) +- Ensure PacketList is initialized [`66c5d85`](https://github.com/craigerl/aprsd/commit/66c5d85b89c6edb5f18d283cd09342f7331f0710) +- Make sure SeenList update has a from in packet [`89701c8`](https://github.com/craigerl/aprsd/commit/89701c8a7084cd3b4f535f7741c7e76aca042f28) +- Fixed unit tests [`b0d25a7`](https://github.com/craigerl/aprsd/commit/b0d25a76f7f004936374675b7304b0e069a5e1b9) +- Converted MsgTrack to ObjectStoreMixin [`e009791`](https://github.com/craigerl/aprsd/commit/e009791b754d3ddde52609f836e67330d2f55e20) +- Updated Changelog for 2.4.0 release [`a3a3a5a`](https://github.com/craigerl/aprsd/commit/a3a3a5aa236508f1682fbcead45cc1d20abaf0b9) #### [v2.3.1](https://github.com/craigerl/aprsd/compare/v2.3.0...v2.3.1) > 13 September 2021 -- Fixed issue of aprs-is missing keepalive [`560e152`](https://github.com/craigerl/aprsd/commit/560e1527425153088d7d10cbdcfa5ec5479898d5) - Fixed packet processing issue with aprsd send-message [`69b215d`](https://github.com/craigerl/aprsd/commit/69b215d4d8784f00d81591f4063381fd6c35d965) +- Fixed issue of aprs-is missing keepalive [`560e152`](https://github.com/craigerl/aprsd/commit/560e1527425153088d7d10cbdcfa5ec5479898d5) #### [v2.3.0](https://github.com/craigerl/aprsd/compare/v2.2.1...v2.3.0) @@ -764,59 +765,59 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Send Message via admin Web interface [`#59`](https://github.com/craigerl/aprsd/pull/59) - Added the ability to use direwolf KISS socket [`#50`](https://github.com/craigerl/aprsd/pull/50) -- Added Logfile tab in Admin ui [`d6b3df9`](https://github.com/craigerl/aprsd/commit/d6b3df93f12fb7ce145e5756e776258222549fae) -- Upgraded the send-message POC to use websockets [`c941379`](https://github.com/craigerl/aprsd/commit/c941379a5c3983568253a09a68613dcb42d68340) +- Update Dockerfile to use 2.2.1 [`a7d79a6`](https://github.com/craigerl/aprsd/commit/a7d79a6e1b35164d9218ecc8e3abdf7a1503617c) - New Admin ui send message page working. [`23cbf32`](https://github.com/craigerl/aprsd/commit/23cbf32814368fa504a1c7ce5fc1012fb899cfa0) -- Got TX/RX working with aioax25+direwolf over TCP [`f4dee4b`](https://github.com/craigerl/aprsd/commit/f4dee4b202c3b29e265f340ae50f2f850f3fb1c8) -- Added enabled flag for every plugin object [`3faf41b`](https://github.com/craigerl/aprsd/commit/3faf41b203219fb3df237184e02daf2b9191a0ec) +- Upgraded the send-message POC to use websockets [`c941379`](https://github.com/craigerl/aprsd/commit/c941379a5c3983568253a09a68613dcb42d68340) - Cleaned up some pep8 failures [`84ce60b`](https://github.com/craigerl/aprsd/commit/84ce60bc50a6d3123d9a944e0098660e31d32bf9) -- Enable plugins to return message object [`1b9a993`](https://github.com/craigerl/aprsd/commit/1b9a9935fc96a2ce6192c9408517110e0fcfd5fb) -- Updated Admin UI to show KISS connections [`ca438c9`](https://github.com/craigerl/aprsd/commit/ca438c9c60dd7152d9b3e5648177cce84988bd8b) -- Added self creating Makefile help target [`d643ca3`](https://github.com/craigerl/aprsd/commit/d643ca38921f078a11cfeb534ebdf8e83e5ed350) -- Added send-message to the main admin UI [`c58031d`](https://github.com/craigerl/aprsd/commit/c58031d77275b5529f5eeb64aa04e466ffb7b85d) -- Prep 2.3.0 [`4164e89`](https://github.com/craigerl/aprsd/commit/4164e890165130c49a2e996f7040b142432684a9) -- Updated requirements [`c537b54`](https://github.com/craigerl/aprsd/commit/c537b54df64c9a47dd60764969d54afda9d766c8) -- Updated Makefile clean target [`4f088e0`](https://github.com/craigerl/aprsd/commit/4f088e0a4a36d313dd87a5819ed1e238f83a6667) - Rebased from master [`54c9a6b`](https://github.com/craigerl/aprsd/commit/54c9a6b55a8a102d44109ae454b4c76240ae0780) +- Got TX/RX working with aioax25+direwolf over TCP [`f4dee4b`](https://github.com/craigerl/aprsd/commit/f4dee4b202c3b29e265f340ae50f2f850f3fb1c8) +- Updated Admin UI to show KISS connections [`ca438c9`](https://github.com/craigerl/aprsd/commit/ca438c9c60dd7152d9b3e5648177cce84988bd8b) +- Updated requirements [`c537b54`](https://github.com/craigerl/aprsd/commit/c537b54df64c9a47dd60764969d54afda9d766c8) +- Added send-message to the main admin UI [`c58031d`](https://github.com/craigerl/aprsd/commit/c58031d77275b5529f5eeb64aa04e466ffb7b85d) +- Removed values from forms [`1635feb`](https://github.com/craigerl/aprsd/commit/1635feb8205d42e36cc15674ab75c68000d18528) - Fixed email validation [`0f6df5f`](https://github.com/craigerl/aprsd/commit/0f6df5fc05819787a5c57108a39495775d4e6959) +- Fixed issue at startup with notify plugin [`1ea6c05`](https://github.com/craigerl/aprsd/commit/1ea6c05decb736967f6fc9e431c3a72aa2f71871) +- Remove some noisy trace in email plugin [`558710d`](https://github.com/craigerl/aprsd/commit/558710d348fac8f3cb3f90e6326c0e163a7b0dda) +- Fixed a problem with the AVWX plugin not working [`8ada789`](https://github.com/craigerl/aprsd/commit/8ada789d4dd37b12277d74403effde48eaf36454) - Allow passing in aprsis_client [`62ce84b`](https://github.com/craigerl/aprsd/commit/62ce84b3157968bd3b54a80870f6508d0f15d643) - Update dev.py [`dfaf3aa`](https://github.com/craigerl/aprsd/commit/dfaf3aa3d1c36c992bee22405ce4625b7e1b11ad) -- Fixed issue at startup with notify plugin [`1ea6c05`](https://github.com/craigerl/aprsd/commit/1ea6c05decb736967f6fc9e431c3a72aa2f71871) -- Removed values from forms [`1635feb`](https://github.com/craigerl/aprsd/commit/1635feb8205d42e36cc15674ab75c68000d18528) -- Update Dockerfile to use 2.2.1 [`a7d79a6`](https://github.com/craigerl/aprsd/commit/a7d79a6e1b35164d9218ecc8e3abdf7a1503617c) -- Ensure plugin threads are valid [`7e6dffb`](https://github.com/craigerl/aprsd/commit/7e6dffb34bfca01f1691b3ee8421a03a655c5e2c) -- Fixed a problem with the AVWX plugin not working [`8ada789`](https://github.com/craigerl/aprsd/commit/8ada789d4dd37b12277d74403effde48eaf36454) +- Added self creating Makefile help target [`d643ca3`](https://github.com/craigerl/aprsd/commit/d643ca38921f078a11cfeb534ebdf8e83e5ed350) +- Updated Makefile clean target [`4f088e0`](https://github.com/craigerl/aprsd/commit/4f088e0a4a36d313dd87a5819ed1e238f83a6667) +- Added Logfile tab in Admin ui [`d6b3df9`](https://github.com/craigerl/aprsd/commit/d6b3df93f12fb7ce145e5756e776258222549fae) - Removed fixed size on logging queue [`9eff99d`](https://github.com/craigerl/aprsd/commit/9eff99dde712c2648342323a68d0ee6a1ef295e4) - Updated Dockerfile to use v2.3.0 [`605911c`](https://github.com/craigerl/aprsd/commit/605911cb841099f5b00af773833e542911dbec23) -- Remove some noisy trace in email plugin [`558710d`](https://github.com/craigerl/aprsd/commit/558710d348fac8f3cb3f90e6326c0e163a7b0dda) +- Ensure plugin threads are valid [`7e6dffb`](https://github.com/craigerl/aprsd/commit/7e6dffb34bfca01f1691b3ee8421a03a655c5e2c) +- Added enabled flag for every plugin object [`3faf41b`](https://github.com/craigerl/aprsd/commit/3faf41b203219fb3df237184e02daf2b9191a0ec) +- Enable plugins to return message object [`1b9a993`](https://github.com/craigerl/aprsd/commit/1b9a9935fc96a2ce6192c9408517110e0fcfd5fb) +- Prep 2.3.0 [`4164e89`](https://github.com/craigerl/aprsd/commit/4164e890165130c49a2e996f7040b142432684a9) #### [v2.2.1](https://github.com/craigerl/aprsd/compare/v2.2.0...v2.2.1) > 25 August 2021 -- Update Changelog for 2.2.1 [`44c4dd6`](https://github.com/craigerl/aprsd/commit/44c4dd69c636abea7d0fd6dba5156a55d7f56586) - Silence some log noise [`ec92b07`](https://github.com/craigerl/aprsd/commit/ec92b07e31c622181f5699692bc8143bc6ef7a99) +- Update Changelog for 2.2.1 [`44c4dd6`](https://github.com/craigerl/aprsd/commit/44c4dd69c636abea7d0fd6dba5156a55d7f56586) #### [v2.2.0](https://github.com/craigerl/aprsd/compare/v2.1.0...v2.2.0) > 25 August 2021 - Refactor Message processing and MORE [`#69`](https://github.com/craigerl/aprsd/pull/69) -- Removed TXThread [`61967b5`](https://github.com/craigerl/aprsd/commit/61967b5fe8a088106124c5b0ce35a471be14c795) -- Use Gray instead of Black for code formatting. [`e175f77`](https://github.com/craigerl/aprsd/commit/e175f773474b33750a90ad66b55c3bd90b3fd71f) -- Added threads functions to APRSDPluginBase [`86777d8`](https://github.com/craigerl/aprsd/commit/86777d838cdb69b5fdedadf785d81479be94ba4d) -- Updated select timeouts [`0f384b0`](https://github.com/craigerl/aprsd/commit/0f384b0e856403611dfb00dd6bce63bbcfb665a9) -- Cleanup of the README.rst [`e8ffaa9`](https://github.com/craigerl/aprsd/commit/e8ffaa92b6c37c06d8059ef97b033c4f79ad938d) -- Rebase from master and run gray [`8b5f21e`](https://github.com/craigerl/aprsd/commit/8b5f21eece6618385fbed6c130e17099414d8b73) -- Added tracking plugin processing [`8e627c9`](https://github.com/craigerl/aprsd/commit/8e627c98b3cbd058417273864bdae8bd2148346d) -- Updated tox.ini [`d6643a8`](https://github.com/craigerl/aprsd/commit/d6643a8e965ad5ee2a48ec57e0e2b9667ad2e497) -- Updated Changelog for v2.2.0 [`8190353`](https://github.com/craigerl/aprsd/commit/81903534edeb804afd547ce564af0b35418fca40) - Fixed aprsd-dev [`d71b0df`](https://github.com/craigerl/aprsd/commit/d71b0df31469e7ac12d4edcf8a1c8d6c6c74648c) +- Cleanup of the README.rst [`e8ffaa9`](https://github.com/craigerl/aprsd/commit/e8ffaa92b6c37c06d8059ef97b033c4f79ad938d) +- Updated slack channel link [`2b69446`](https://github.com/craigerl/aprsd/commit/2b694462f02eee1448aabc827b5a8e35a7919f25) +- Fixed LOG.debug issue in weather plugin [`f1f8aed`](https://github.com/craigerl/aprsd/commit/f1f8aed8c477f6298fc1a7c471a3cee06844d306) +- Updated tox.ini [`d6643a8`](https://github.com/craigerl/aprsd/commit/d6643a8e965ad5ee2a48ec57e0e2b9667ad2e497) +- Added threads functions to APRSDPluginBase [`86777d8`](https://github.com/craigerl/aprsd/commit/86777d838cdb69b5fdedadf785d81479be94ba4d) +- Added tracking plugin processing [`8e627c9`](https://github.com/craigerl/aprsd/commit/8e627c98b3cbd058417273864bdae8bd2148346d) +- Use Gray instead of Black for code formatting. [`e175f77`](https://github.com/craigerl/aprsd/commit/e175f773474b33750a90ad66b55c3bd90b3fd71f) +- Rebase from master and run gray [`8b5f21e`](https://github.com/craigerl/aprsd/commit/8b5f21eece6618385fbed6c130e17099414d8b73) +- Updated select timeouts [`0f384b0`](https://github.com/craigerl/aprsd/commit/0f384b0e856403611dfb00dd6bce63bbcfb665a9) +- Added days to uptime string formatting [`2e9b42d`](https://github.com/craigerl/aprsd/commit/2e9b42d7af4a96c3abdcab5853ba380ef0adc474) +- Removed TXThread [`61967b5`](https://github.com/craigerl/aprsd/commit/61967b5fe8a088106124c5b0ce35a471be14c795) - Removed Black code style reference [`daf1e21`](https://github.com/craigerl/aprsd/commit/daf1e21b45a59964614c1575d25b322034d567af) - Updated overview image [`d5d0064`](https://github.com/craigerl/aprsd/commit/d5d00643fac9f97bf5054f6f473ab0113b6175a3) -- Added days to uptime string formatting [`2e9b42d`](https://github.com/craigerl/aprsd/commit/2e9b42d7af4a96c3abdcab5853ba380ef0adc474) -- Fixed LOG.debug issue in weather plugin [`f1f8aed`](https://github.com/craigerl/aprsd/commit/f1f8aed8c477f6298fc1a7c471a3cee06844d306) -- Updated slack channel link [`2b69446`](https://github.com/craigerl/aprsd/commit/2b694462f02eee1448aabc827b5a8e35a7919f25) +- Updated Changelog for v2.2.0 [`8190353`](https://github.com/craigerl/aprsd/commit/81903534edeb804afd547ce564af0b35418fca40) #### [v2.1.0](https://github.com/craigerl/aprsd/compare/v2.0.0...v2.1.0) @@ -840,21 +841,21 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Bump urllib3 from 1.26.4 to 1.26.5 [`#61`](https://github.com/craigerl/aprsd/pull/61) - Added aprsd version checking [`#60`](https://github.com/craigerl/aprsd/pull/60) - Bump urllib3 from 1.26.3 to 1.26.4 [`#56`](https://github.com/craigerl/aprsd/pull/56) -- Add new watchlist feature [`1a1fcba`](https://github.com/craigerl/aprsd/commit/1a1fcba1c4152d2d6a869d306d6450bda087c1ee) - Prep for v1.6.1 release [`55862a2`](https://github.com/craigerl/aprsd/commit/55862a279014aeda7225055e14eb6d140415a6fe) -- reworked the admin ui to use semenatic ui more [`3c45d8b`](https://github.com/craigerl/aprsd/commit/3c45d8bd0f1d90800df7b1d4367ce12d9bf98b92) -- Updated docs for 2.0.0 [`b4713b2`](https://github.com/craigerl/aprsd/commit/b4713b269488bc35740d305da7c466588deef98b) -- Added message counts for each plugin. [`3ae5717`](https://github.com/craigerl/aprsd/commit/3ae571745299e7fda86b588b8140f8e58b9ff435) -- Updated INSTALL.txt [`9de0df3`](https://github.com/craigerl/aprsd/commit/9de0df31eb75f9ce2de7ebb0c7f96ffc0613de55) -- Fixed the Ack thread not resending acks [`562ae52`](https://github.com/craigerl/aprsd/commit/562ae52c1effcca092ba5cc9451b29cd01c1947d) -- Fixed small bug with packets get_packet_type [`3d38402`](https://github.com/craigerl/aprsd/commit/3d38402be241171e92ba8e3b1bf50ee2df5a301e) -- Move version string output to top of log [`7dc4fb3`](https://github.com/craigerl/aprsd/commit/7dc4fb3e7765b42422ced04a93342234d83085fa) -- Added messages count to admin messages list. [`5afc7fb`](https://github.com/craigerl/aprsd/commit/5afc7fb6643b932c95b0de554110773f3b7377c1) -- Update README.rst [`970b32f`](https://github.com/craigerl/aprsd/commit/970b32f23824c670aae920238b9ef0814f9cd73f) -- Updated overview images [`90a44bb`](https://github.com/craigerl/aprsd/commit/90a44bb5ed6179ec2afad5d354a260d6f6bc3c3e) -- Update my callsign [`b8dc6a3`](https://github.com/craigerl/aprsd/commit/b8dc6a329b1cbd9ca0211d16b4cdb32a2ed6b37c) - Update README.rst [`2a5ef58`](https://github.com/craigerl/aprsd/commit/2a5ef5829568fa58a5d92b0859c1c649f9073532) +- Update README.rst [`970b32f`](https://github.com/craigerl/aprsd/commit/970b32f23824c670aae920238b9ef0814f9cd73f) +- Update my callsign [`b8dc6a3`](https://github.com/craigerl/aprsd/commit/b8dc6a329b1cbd9ca0211d16b4cdb32a2ed6b37c) +- Updated INSTALL.txt [`9de0df3`](https://github.com/craigerl/aprsd/commit/9de0df31eb75f9ce2de7ebb0c7f96ffc0613de55) +- Added message counts for each plugin. [`3ae5717`](https://github.com/craigerl/aprsd/commit/3ae571745299e7fda86b588b8140f8e58b9ff435) - Removed a noisy debug log [`1c66555`](https://github.com/craigerl/aprsd/commit/1c665554507a74999f279d30297266d233b35aca) +- Added messages count to admin messages list. [`5afc7fb`](https://github.com/craigerl/aprsd/commit/5afc7fb6643b932c95b0de554110773f3b7377c1) +- reworked the admin ui to use semenatic ui more [`3c45d8b`](https://github.com/craigerl/aprsd/commit/3c45d8bd0f1d90800df7b1d4367ce12d9bf98b92) +- Add new watchlist feature [`1a1fcba`](https://github.com/craigerl/aprsd/commit/1a1fcba1c4152d2d6a869d306d6450bda087c1ee) +- Fixed the Ack thread not resending acks [`562ae52`](https://github.com/craigerl/aprsd/commit/562ae52c1effcca092ba5cc9451b29cd01c1947d) +- Move version string output to top of log [`7dc4fb3`](https://github.com/craigerl/aprsd/commit/7dc4fb3e7765b42422ced04a93342234d83085fa) +- Updated overview images [`90a44bb`](https://github.com/craigerl/aprsd/commit/90a44bb5ed6179ec2afad5d354a260d6f6bc3c3e) +- Fixed small bug with packets get_packet_type [`3d38402`](https://github.com/craigerl/aprsd/commit/3d38402be241171e92ba8e3b1bf50ee2df5a301e) +- Updated docs for 2.0.0 [`b4713b2`](https://github.com/craigerl/aprsd/commit/b4713b269488bc35740d305da7c466588deef98b) #### [v1.6.1](https://github.com/craigerl/aprsd/compare/v1.6.0...v1.6.1) @@ -865,31 +866,31 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Bump pygments from 2.7.3 to 2.7.4 [`#55`](https://github.com/craigerl/aprsd/pull/55) - Bump jinja2 from 2.11.2 to 2.11.3 [`#52`](https://github.com/craigerl/aprsd/pull/52) - Bump urllib3 from 1.26.2 to 1.26.3 [`#51`](https://github.com/craigerl/aprsd/pull/51) -- Updated web stats index to show messages and ram usage [`c7d10f5`](https://github.com/craigerl/aprsd/commit/c7d10f53a36f84304190dea2c7154f827b2cf479) - Updated README docs [`b6ba90d`](https://github.com/craigerl/aprsd/commit/b6ba90de539bf6ff6dd5e384aece0c6e3384c0fd) -- Reworked the stats dict output and healthcheck [`bf8d2c6`](https://github.com/craigerl/aprsd/commit/bf8d2c6088d9c09783b8d68de4c88fe77fbbc9f5) -- Added callsign to the web index page [`123266c`](https://github.com/craigerl/aprsd/commit/123266c9adbd025f8ad7549709866486183426b8) -- Reworked Makefile to use Makefile.venv [`a4a06c9`](https://github.com/craigerl/aprsd/commit/a4a06c9763d30bfd6616b5035100a7b6eb51bedf) -- Added Dockerfile-dev and updated build.sh [`239e784`](https://github.com/craigerl/aprsd/commit/239e784d51f975ec0c62638aa9cabfaf01f4dd46) -- Added email messages graphs [`d6806c4`](https://github.com/craigerl/aprsd/commit/d6806c429ce1de162e4fbc9dab311bdb63765795) -- Added log config for flask and lnav config file [`34d2c31`](https://github.com/craigerl/aprsd/commit/34d2c31d90269ddcd5341a669eb6051a91801dbb) -- Added plugin live reload and StockPlugin [`e6cafeb`](https://github.com/craigerl/aprsd/commit/e6cafeb3d27f656ffd0da765db9cb5be3c95c035) -- Updated Dockerfile for multiplatform builds [`f0034fc`](https://github.com/craigerl/aprsd/commit/f0034fc517fbb8d35c6067b424333f46e14d1480) -- Updated stats output for KeepAlive thread [`7b019d2`](https://github.com/craigerl/aprsd/commit/7b019d24f0af52a599c026af1c1b21a64e6228bb) -- Added acks with messages graphs [`f10372b`](https://github.com/craigerl/aprsd/commit/f10372b320ce5ce8403cee849b769ece6f9d4617) -- Added showing APRS-IS server to stats [`d1a2a14`](https://github.com/craigerl/aprsd/commit/d1a2a143709fb5be9e9bd7d8179895b1300feb1d) -- Provide an initial datapoint on rendering index [`fb979ed`](https://github.com/craigerl/aprsd/commit/fb979eda9427355c0fc8d1d981643c9adc799e40) -- Added log format and dateformat to config file [`0a038da`](https://github.com/craigerl/aprsd/commit/0a038dae4457b9b7c98cdfb438740baab752f05c) -- Updated Dockerfile and build.sh [`9f66774`](https://github.com/craigerl/aprsd/commit/9f66774541404b86ffd3bbea3c68cc3dcf4751a3) -- Fixed version unit tests [`23c219f`](https://github.com/craigerl/aprsd/commit/23c219f0d2ef4ac0c65d22ac9810b5a30d99b251) -- Update Dockerfile-dev to work with startup [`3f21934`](https://github.com/craigerl/aprsd/commit/3f21934c0f271b8de916df4d7abe551c4266f2cd) -- Force all the graphs to 0 minimum [`3ac42ed`](https://github.com/craigerl/aprsd/commit/3ac42edd823723ed06e86de0486de15a111b6275) -- Require python 3.7 and > [`933917b`](https://github.com/craigerl/aprsd/commit/933917bf9d0ca94969567668832977ecbbfadfbd) -- ignore Makefile.venv [`4aac17d`](https://github.com/craigerl/aprsd/commit/4aac17dc9869564a777f292c486d228893cb7b8a) -- Updated Dockerfile for multiplatform builds [`c177748`](https://github.com/craigerl/aprsd/commit/c1777483405b8c208ae0795e636c1b58390c37df) - Dockerfile: Make creation of /config quiet failure [`2d5bb85`](https://github.com/craigerl/aprsd/commit/2d5bb85071138813ec261d478a5a5168e2b5cfc8) -- Removed debug log for KeepAlive thread [`fc1ee19`](https://github.com/craigerl/aprsd/commit/fc1ee195163ede96e1c457bdf8fa7844925c116f) +- Updated Dockerfile for multiplatform builds [`c177748`](https://github.com/craigerl/aprsd/commit/c1777483405b8c208ae0795e636c1b58390c37df) +- Updated Dockerfile for multiplatform builds [`f0034fc`](https://github.com/craigerl/aprsd/commit/f0034fc517fbb8d35c6067b424333f46e14d1480) +- Updated Dockerfile and build.sh [`9f66774`](https://github.com/craigerl/aprsd/commit/9f66774541404b86ffd3bbea3c68cc3dcf4751a3) +- Added plugin live reload and StockPlugin [`e6cafeb`](https://github.com/craigerl/aprsd/commit/e6cafeb3d27f656ffd0da765db9cb5be3c95c035) +- Require python 3.7 and > [`933917b`](https://github.com/craigerl/aprsd/commit/933917bf9d0ca94969567668832977ecbbfadfbd) +- Added Dockerfile-dev and updated build.sh [`239e784`](https://github.com/craigerl/aprsd/commit/239e784d51f975ec0c62638aa9cabfaf01f4dd46) +- Added log format and dateformat to config file [`0a038da`](https://github.com/craigerl/aprsd/commit/0a038dae4457b9b7c98cdfb438740baab752f05c) +- Updated web stats index to show messages and ram usage [`c7d10f5`](https://github.com/craigerl/aprsd/commit/c7d10f53a36f84304190dea2c7154f827b2cf479) +- Added acks with messages graphs [`f10372b`](https://github.com/craigerl/aprsd/commit/f10372b320ce5ce8403cee849b769ece6f9d4617) - Make the index page behind auth [`6297ebe`](https://github.com/craigerl/aprsd/commit/6297ebeb670d1ce986795f55ab15750da8ae0f44) +- Provide an initial datapoint on rendering index [`fb979ed`](https://github.com/craigerl/aprsd/commit/fb979eda9427355c0fc8d1d981643c9adc799e40) +- Added showing APRS-IS server to stats [`d1a2a14`](https://github.com/craigerl/aprsd/commit/d1a2a143709fb5be9e9bd7d8179895b1300feb1d) +- Added log config for flask and lnav config file [`34d2c31`](https://github.com/craigerl/aprsd/commit/34d2c31d90269ddcd5341a669eb6051a91801dbb) +- Added callsign to the web index page [`123266c`](https://github.com/craigerl/aprsd/commit/123266c9adbd025f8ad7549709866486183426b8) +- Reworked the stats dict output and healthcheck [`bf8d2c6`](https://github.com/craigerl/aprsd/commit/bf8d2c6088d9c09783b8d68de4c88fe77fbbc9f5) +- Added email messages graphs [`d6806c4`](https://github.com/craigerl/aprsd/commit/d6806c429ce1de162e4fbc9dab311bdb63765795) +- Force all the graphs to 0 minimum [`3ac42ed`](https://github.com/craigerl/aprsd/commit/3ac42edd823723ed06e86de0486de15a111b6275) +- Update Dockerfile-dev to work with startup [`3f21934`](https://github.com/craigerl/aprsd/commit/3f21934c0f271b8de916df4d7abe551c4266f2cd) +- Updated stats output for KeepAlive thread [`7b019d2`](https://github.com/craigerl/aprsd/commit/7b019d24f0af52a599c026af1c1b21a64e6228bb) +- Fixed version unit tests [`23c219f`](https://github.com/craigerl/aprsd/commit/23c219f0d2ef4ac0c65d22ac9810b5a30d99b251) +- Reworked Makefile to use Makefile.venv [`a4a06c9`](https://github.com/craigerl/aprsd/commit/a4a06c9763d30bfd6616b5035100a7b6eb51bedf) +- ignore Makefile.venv [`4aac17d`](https://github.com/craigerl/aprsd/commit/4aac17dc9869564a777f292c486d228893cb7b8a) +- Removed debug log for KeepAlive thread [`fc1ee19`](https://github.com/craigerl/aprsd/commit/fc1ee195163ede96e1c457bdf8fa7844925c116f) #### [v1.6.0](https://github.com/craigerl/aprsd/compare/v1.5.1...v1.6.0) @@ -906,43 +907,43 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Added new time plugins [`#40`](https://github.com/craigerl/aprsd/pull/40) - Fixed TimePlugin timezone issue [`#38`](https://github.com/craigerl/aprsd/pull/38) - Added aprsd-dev plugin test cli and WxPlugin [`#35`](https://github.com/craigerl/aprsd/pull/35) -- Added flask messages web UI and basic auth [`aa29069`](https://github.com/craigerl/aprsd/commit/aa290692abf927ca2398344506a401614d19acde) -- Added Flask web thread and stats collection [`5c94934`](https://github.com/craigerl/aprsd/commit/5c949343ec868f341c6ad3ebcff7a350afe0d620) -- Added tracing facility [`af48c43`](https://github.com/craigerl/aprsd/commit/af48c43eb2461d644e7d13bcd92c6b1477d65c1c) +- Updated readme to include readthedocs link [`b9f6fcf`](https://github.com/craigerl/aprsd/commit/b9f6fcfa0c9703e5a27d26042703aa7574dedbf2) +- change query char from ? to ! [`7de2820`](https://github.com/craigerl/aprsd/commit/7de2820caa01df24a71e014c80aecb289d4cc39a) +- fix git with install.txt [`5fb363c`](https://github.com/craigerl/aprsd/commit/5fb363c9e72f77d7181789f4f9e594b6bda722a4) +- remove fortune white space [`ca05676`](https://github.com/craigerl/aprsd/commit/ca05676c98cd8c7b98a190fe1e53564ef5fc7b09) +- First hack at flask [`9630279`](https://github.com/craigerl/aprsd/commit/9630279d14c9e8921bfbbdd260ec7b14f8f3ccd5) - Fixed extracting lat/lon [`fefb626`](https://github.com/craigerl/aprsd/commit/fefb626c9744952a91fcb3b02640d9dbd228df6b) - Updated documentation and config output [`a35cb04`](https://github.com/craigerl/aprsd/commit/a35cb04ca725eacda5473dd38c0760934ca5957c) -- Wrap all imap calls with try except blocks [`a5cc274`](https://github.com/craigerl/aprsd/commit/a5cc274ff54b0bee51c3a901f7c9efc287b9a471) -- EmailThread was exiting because of IMAP timeout, added exceptions for this [`47135c6`](https://github.com/craigerl/aprsd/commit/47135c60862852d71be0f9873f474f48fac6f7dd) -- First hack at flask [`9630279`](https://github.com/craigerl/aprsd/commit/9630279d14c9e8921bfbbdd260ec7b14f8f3ccd5) -- Moved docker related stuffs to docker dir [`24edcad`](https://github.com/craigerl/aprsd/commit/24edcad60a5218dcafaf38115524dc471ad4b874) -- 1.6.0 release prep [`a266c98`](https://github.com/craigerl/aprsd/commit/a266c987fd898518c4a783666d6531ed109381d5) -- Enable debug logging for smtp and imap [`030b025`](https://github.com/craigerl/aprsd/commit/030b02551fc1c23882a4ef625a92718e62b67af2) -- Cleaned up the KeepAlive output [`51894bb`](https://github.com/craigerl/aprsd/commit/51894bbab88bada9622c4cf31f1d928943ed8ac5) -- change query char from ? to ! [`7de2820`](https://github.com/craigerl/aprsd/commit/7de2820caa01df24a71e014c80aecb289d4cc39a) -- Added memory tracing in keeplive [`db2b537`](https://github.com/craigerl/aprsd/commit/db2b537317b35795380f1d0d8390b6314e162a21) -- Wrap another server call with try except [`131919b`](https://github.com/craigerl/aprsd/commit/131919bdfbf122e33d482bddc0978a16ac68572f) -- more debug around email thread [`cfb1724`](https://github.com/craigerl/aprsd/commit/cfb172481d6ea4a8e4b97258fc7c4adbd0a69919) -- Fixed tox pep8 failure for trace [`0b44fc0`](https://github.com/craigerl/aprsd/commit/0b44fc08eb66d58e7e9ee4cf62107526ad7b4d04) -- Removed some noisy debug log. [`9ba44a0`](https://github.com/craigerl/aprsd/commit/9ba44a076ca243922bb7149169d56cf6c294334b) +- Added Flask web thread and stats collection [`5c94934`](https://github.com/craigerl/aprsd/commit/5c949343ec868f341c6ad3ebcff7a350afe0d620) - Add flask and flask_classful reqs [`cae8746`](https://github.com/craigerl/aprsd/commit/cae87466903de55623c16f2f72138bd6f773ec89) -- debug around EmailThread hanging or vanishing [`3ca0eef`](https://github.com/craigerl/aprsd/commit/3ca0eeff56946b4cff5937d6980743f254c88fa3) -- remove fortune white space [`ca05676`](https://github.com/craigerl/aprsd/commit/ca05676c98cd8c7b98a190fe1e53564ef5fc7b09) -- Fixed resend email after config rework [`c1e6792`](https://github.com/craigerl/aprsd/commit/c1e67927218a9d55466f4a7f43dd0e44f7656fcc) -- Fixed an issue with LocationPlugin [`0d18e54`](https://github.com/craigerl/aprsd/commit/0d18e54969d79842666a79a9f7f5b7ae895fa02e) -- Updated path of run.sh for docker build [`7df6462`](https://github.com/craigerl/aprsd/commit/7df6462d91300fc034779995891aefbc388bd836) -- Fixed email login issue. [`94bad95`](https://github.com/craigerl/aprsd/commit/94bad95e26c5b7420d48b4f0eadf832f09c3b45c) -- fix git with install.txt [`5fb363c`](https://github.com/craigerl/aprsd/commit/5fb363c9e72f77d7181789f4f9e594b6bda722a4) -- Updated readme to include readthedocs link [`b9f6fcf`](https://github.com/craigerl/aprsd/commit/b9f6fcfa0c9703e5a27d26042703aa7574dedbf2) -- duplicate email messages from RF would generate usage response [`57d768e`](https://github.com/craigerl/aprsd/commit/57d768e0107e9e22efca1809b7c527d85462d08d) - updated .gitignore [`8bfdefd`](https://github.com/craigerl/aprsd/commit/8bfdefd5ad7138948c80122557d2e39b43f79c22) +- Cleaned up the KeepAlive output [`51894bb`](https://github.com/craigerl/aprsd/commit/51894bbab88bada9622c4cf31f1d928943ed8ac5) +- Fixed an issue with LocationPlugin [`0d18e54`](https://github.com/craigerl/aprsd/commit/0d18e54969d79842666a79a9f7f5b7ae895fa02e) +- Added flask messages web UI and basic auth [`aa29069`](https://github.com/craigerl/aprsd/commit/aa290692abf927ca2398344506a401614d19acde) +- Fixed resend email after config rework [`c1e6792`](https://github.com/craigerl/aprsd/commit/c1e67927218a9d55466f4a7f43dd0e44f7656fcc) +- debug around EmailThread hanging or vanishing [`3ca0eef`](https://github.com/craigerl/aprsd/commit/3ca0eeff56946b4cff5937d6980743f254c88fa3) +- more debug around email thread [`cfb1724`](https://github.com/craigerl/aprsd/commit/cfb172481d6ea4a8e4b97258fc7c4adbd0a69919) +- Enable debug logging for smtp and imap [`030b025`](https://github.com/craigerl/aprsd/commit/030b02551fc1c23882a4ef625a92718e62b67af2) +- duplicate email messages from RF would generate usage response [`57d768e`](https://github.com/craigerl/aprsd/commit/57d768e0107e9e22efca1809b7c527d85462d08d) +- Fixed email login issue. [`94bad95`](https://github.com/craigerl/aprsd/commit/94bad95e26c5b7420d48b4f0eadf832f09c3b45c) +- Added tracing facility [`af48c43`](https://github.com/craigerl/aprsd/commit/af48c43eb2461d644e7d13bcd92c6b1477d65c1c) +- Fixed tox pep8 failure for trace [`0b44fc0`](https://github.com/craigerl/aprsd/commit/0b44fc08eb66d58e7e9ee4cf62107526ad7b4d04) +- Added memory tracing in keeplive [`db2b537`](https://github.com/craigerl/aprsd/commit/db2b537317b35795380f1d0d8390b6314e162a21) +- EmailThread was exiting because of IMAP timeout, added exceptions for this [`47135c6`](https://github.com/craigerl/aprsd/commit/47135c60862852d71be0f9873f474f48fac6f7dd) +- Wrap all imap calls with try except blocks [`a5cc274`](https://github.com/craigerl/aprsd/commit/a5cc274ff54b0bee51c3a901f7c9efc287b9a471) +- Wrap another server call with try except [`131919b`](https://github.com/craigerl/aprsd/commit/131919bdfbf122e33d482bddc0978a16ac68572f) +- Removed some noisy debug log. [`9ba44a0`](https://github.com/craigerl/aprsd/commit/9ba44a076ca243922bb7149169d56cf6c294334b) +- Moved docker related stuffs to docker dir [`24edcad`](https://github.com/craigerl/aprsd/commit/24edcad60a5218dcafaf38115524dc471ad4b874) +- Updated path of run.sh for docker build [`7df6462`](https://github.com/craigerl/aprsd/commit/7df6462d91300fc034779995891aefbc388bd836) +- 1.6.0 release prep [`a266c98`](https://github.com/craigerl/aprsd/commit/a266c987fd898518c4a783666d6531ed109381d5) #### [v1.5.1](https://github.com/craigerl/aprsd/compare/v1.5.0...v1.5.1) > 15 January 2021 - Update INSTALL.txt [`47ccce5`](https://github.com/craigerl/aprsd/commit/47ccce53ea60d71b678b1f67b6a514d4a83c8a78) -- Updated Changelog for v1.5.1 [`658e6b6`](https://github.com/craigerl/aprsd/commit/658e6b62027b300909e9e9e7cf131f4f93d66ca1) - Updated README to fix pypi page [`98e3c24`](https://github.com/craigerl/aprsd/commit/98e3c246adaaf450a9b06b0589011cd940d5bb4c) +- Updated Changelog for v1.5.1 [`658e6b6`](https://github.com/craigerl/aprsd/commit/658e6b62027b300909e9e9e7cf131f4f93d66ca1) #### [v1.5.0](https://github.com/craigerl/aprsd/compare/v1.1.0...v1.5.0) @@ -953,69 +954,69 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Added Makefile for easy dev setup [`#34`](https://github.com/craigerl/aprsd/pull/34) - backout my patch that broke tox, trying to push to craiger-test branch [`#32`](https://github.com/craigerl/aprsd/pull/32) - Threads [`#26`](https://github.com/craigerl/aprsd/pull/26) -- Added Sphinx based documentation [`ee2aeb5`](https://github.com/craigerl/aprsd/commit/ee2aeb5157344ea02852c61e6acb25c3e7272f28) -- refactor Plugin objects to plugins directory [`d5a34b4`](https://github.com/craigerl/aprsd/commit/d5a34b4d11dd8350b6b27d1a70b349544f929160) -- Creation of MsgTrack object and other stuff [`2e90c0b`](https://github.com/craigerl/aprsd/commit/2e90c0bdbb2ee37923b61eb6cc5cdd695d99f53d) -- reworked threading [`f65707c`](https://github.com/craigerl/aprsd/commit/f65707cb8cc10c84a3cc0faafdc871de93d20ee9) - Reworked messaging lib [`9768003`](https://github.com/craigerl/aprsd/commit/9768003c2a384389a0b6427a7e761efc5675a2ea) -- Lots of fixes [`231c15b`](https://github.com/craigerl/aprsd/commit/231c15b1af4bb384644efcfded90d0bc6c0e8ec2) -- Updated Makefile [`c51a945`](https://github.com/craigerl/aprsd/commit/c51a9452d94fc9a4879eb698eaf648a81bbd0d5f) -- Updated MsgTrack restart_delayed [`1ce2a56`](https://github.com/craigerl/aprsd/commit/1ce2a56140566b1f1fccc7eff3f0b84b45c01578) -- Updated README to include development env [`25d948b`](https://github.com/craigerl/aprsd/commit/25d948b0ee95f9bd30d9688345ba54d41587e180) +- reworked threading [`f65707c`](https://github.com/craigerl/aprsd/commit/f65707cb8cc10c84a3cc0faafdc871de93d20ee9) - Added some plugin unit tests [`171703a`](https://github.com/craigerl/aprsd/commit/171703ac1a603661debda12278133ca14cc10c6f) +- Added FortunePlugin unit test [`9d3ede6`](https://github.com/craigerl/aprsd/commit/9d3ede6e71313dd5800c091c67b11b9682057ae4) +- Creation of MsgTrack object and other stuff [`2e90c0b`](https://github.com/craigerl/aprsd/commit/2e90c0bdbb2ee37923b61eb6cc5cdd695d99f53d) - Added support to save/load MsgTrack on exit/start [`2659a0b`](https://github.com/craigerl/aprsd/commit/2659a0b3b945bcbf82605a3ac0384919ee73676b) +- Added QueryPlugin [`28f3daf`](https://github.com/craigerl/aprsd/commit/28f3daf6d07e82ccb77ebd985726790ebc4cd854) +- Added QueryPlugin resend all delayed msgs or Flush [`af0d449`](https://github.com/craigerl/aprsd/commit/af0d4491c39bec3a8837c90b14db80b4e4c8c45b) +- Update Changelog for v1.5.0 [`8bd8b95`](https://github.com/craigerl/aprsd/commit/8bd8b95b3550d65414ef7c75398ba35af246919f) - Added pre-commit hooks [`75f610d`](https://github.com/craigerl/aprsd/commit/75f610d9710e155beb3b32f679514d2d8c482064) -- Added --raw format for sending messages [`54072a2`](https://github.com/craigerl/aprsd/commit/54072a2103d9833dd3aadc3b9e200842b2cea7f5) -- Updated Changelog for v1.5.0 release [`33a0e6c`](https://github.com/craigerl/aprsd/commit/33a0e6c18d7adbe979bcb49708f9730dd3f5ccec) +- Updated README to include development env [`25d948b`](https://github.com/craigerl/aprsd/commit/25d948b0ee95f9bd30d9688345ba54d41587e180) +- Added more pre-commit hook tests [`4c0150d`](https://github.com/craigerl/aprsd/commit/4c0150dd975fc6c2303e9eae937abafc6a5f33bc) +- don't tell radio emails were sent, ack is enuf [`99c5867`](https://github.com/craigerl/aprsd/commit/99c58671626f65d2b1b6a39c6094404e8ee1188e) +- Fixed failures caused by last commit [`e83ee31`](https://github.com/craigerl/aprsd/commit/e83ee31310d2984321c67f1de3b74adb17dd09d9) +- Cleaned out old ack_dict [`dbc891f`](https://github.com/craigerl/aprsd/commit/dbc891f7385f03d4b8871007fd3bd9492128b580) +- Lots of fixes [`231c15b`](https://github.com/craigerl/aprsd/commit/231c15b1af4bb384644efcfded90d0bc6c0e8ec2) +- removed double-quote-string-fixer [`a7c2043`](https://github.com/craigerl/aprsd/commit/a7c20430fe0611af7c757900adccd98c26cb4c94) +- Fixed email shortcut lookup [`9f4cc27`](https://github.com/craigerl/aprsd/commit/9f4cc27a11966b9fe6d9ce3503a7100c44258569) +- Updated Makefile [`c51a945`](https://github.com/craigerl/aprsd/commit/c51a9452d94fc9a4879eb698eaf648a81bbd0d5f) +- refactor Plugin objects to plugins directory [`a385d17`](https://github.com/craigerl/aprsd/commit/a385d171bd43291f8ed3346169a358f59b002d52) +- refactor Plugin objects to plugins directory [`d5a34b4`](https://github.com/craigerl/aprsd/commit/d5a34b4d11dd8350b6b27d1a70b349544f929160) +- Added Sphinx based documentation [`ee2aeb5`](https://github.com/craigerl/aprsd/commit/ee2aeb5157344ea02852c61e6acb25c3e7272f28) +- swap Query command characters a bit [`a334623`](https://github.com/craigerl/aprsd/commit/a33462327a25ff807a6df2d50222b1cc79475729) +- undo git disaster [`45dd3f0`](https://github.com/craigerl/aprsd/commit/45dd3f0205e851bd50bfbcf74864f31960496816) +- Fix broken test [`1763e94`](https://github.com/craigerl/aprsd/commit/1763e94f937258c96bd321e1ee817b67b71ac39b) +- switch command characters for query plugin [`e7f2ebf`](https://github.com/craigerl/aprsd/commit/e7f2ebf17ed47e7acd0b4b2511a325603f437580) +- Updated build for docs tox -edocs [`bd35a61`](https://github.com/craigerl/aprsd/commit/bd35a610ffe4a3cdccd123d10a0a39e61ad261ed) +- Added some more badges to readme files [`7423df6`](https://github.com/craigerl/aprsd/commit/7423df6b25d358f3c170f51b32762ccb98f7684a) +- Disable MX record validation [`e6dee3a`](https://github.com/craigerl/aprsd/commit/e6dee3a5b052cca12b98dc63dc102cb84520ad3a) +- Added APRSD system diagram to docs [`cc0d0fd`](https://github.com/craigerl/aprsd/commit/cc0d0fd523a4029ef66d50351114ef8c0f2bf9ed) +- change query character syntax, don't reply that we're resending stuff [`0aa7fe7`](https://github.com/craigerl/aprsd/commit/0aa7fe7a14790326a9c6cbf4c50b3c87d548b233) +- Updated MsgTrack restart_delayed [`1ce2a56`](https://github.com/craigerl/aprsd/commit/1ce2a56140566b1f1fccc7eff3f0b84b45c01578) +- Added unit test for QueryPlugin [`68e6f5b`](https://github.com/craigerl/aprsd/commit/68e6f5b98619e4bd5480accc5c8961bcd729264a) +- update query plugin to resend last N messages. syntax: ?rN [`d9141dc`](https://github.com/craigerl/aprsd/commit/d9141dc2d086f06c228751732fa58edcd1754f22) +- expect different reply from query plugin [`e1a292d`](https://github.com/craigerl/aprsd/commit/e1a292d8e0b03dbab6e705280decd79d87c6cb07) - Extend APRS.IS object to change login string [`ac4c3d6`](https://github.com/craigerl/aprsd/commit/ac4c3d6562b9a6802ae069c21023d4016c146c7d) - Extend APRS.IS object to change login string [`5de1b3e`](https://github.com/craigerl/aprsd/commit/5de1b3e305b4afacf417e7cff7a06e067ae16f80) -- Changed default log level to INFO [`0aa905e`](https://github.com/craigerl/aprsd/commit/0aa905ebba802e2f8cecc2b9c98caa72edc15a41) -- Added QueryPlugin resend all delayed msgs or Flush [`af0d449`](https://github.com/craigerl/aprsd/commit/af0d4491c39bec3a8837c90b14db80b4e4c8c45b) -- Added more pre-commit hook tests [`4c0150d`](https://github.com/craigerl/aprsd/commit/4c0150dd975fc6c2303e9eae937abafc6a5f33bc) -- Added the ability to add comments to the config file [`cdde9c2`](https://github.com/craigerl/aprsd/commit/cdde9c290b2aaae12c819ced5a103aa252bfbc05) -- Added unit test for QueryPlugin [`68e6f5b`](https://github.com/craigerl/aprsd/commit/68e6f5b98619e4bd5480accc5c8961bcd729264a) -- Fixed email shortcut lookup [`9f4cc27`](https://github.com/craigerl/aprsd/commit/9f4cc27a11966b9fe6d9ce3503a7100c44258569) -- Added FortunePlugin unit test [`9d3ede6`](https://github.com/craigerl/aprsd/commit/9d3ede6e71313dd5800c091c67b11b9682057ae4) -- Fixed fortune plugin failures [`7ab2613`](https://github.com/craigerl/aprsd/commit/7ab26135c2410422ca17f87efa278049146515da) -- make sample config easier to interpret [`e11a84b`](https://github.com/craigerl/aprsd/commit/e11a84bf053485ee0ce7367d5b9715114cd4d8ae) -- Added send-message login checking and --no-ack [`90c4c6c`](https://github.com/craigerl/aprsd/commit/90c4c6c59dbfc773087111c1a6a73e04c9883d23) -- Added APRSD system diagram to docs [`cc0d0fd`](https://github.com/craigerl/aprsd/commit/cc0d0fd523a4029ef66d50351114ef8c0f2bf9ed) -- fix query command syntax ?, ?3, ?d(elete), ?a(ll) [`0b5c9da`](https://github.com/craigerl/aprsd/commit/0b5c9dacf030dd39e8ee130ecde6a780205d74cd) -- update query plugin to resend last N messages. syntax: ?rN [`d9141dc`](https://github.com/craigerl/aprsd/commit/d9141dc2d086f06c228751732fa58edcd1754f22) -- Added QueryPlugin [`28f3daf`](https://github.com/craigerl/aprsd/commit/28f3daf6d07e82ccb77ebd985726790ebc4cd854) -- Added new config for aprs.fi API Key [`bdeaf63`](https://github.com/craigerl/aprsd/commit/bdeaf6348a5fa48c4aa65f9c8c4f9bf65d7d7689) -- Enabled some emailthread messages and added timestamp [`d81bfd6`](https://github.com/craigerl/aprsd/commit/d81bfd6fd5b238157eee13809ba7fafae61b7d4d) -- Added a fix for failed logins to APRS-IS [`3dd23fa`](https://github.com/craigerl/aprsd/commit/3dd23fa2ad1d248c815df4b60915a79bd01a2203) -- Update Changelog for v1.5.0 [`8bd8b95`](https://github.com/craigerl/aprsd/commit/8bd8b95b3550d65414ef7c75398ba35af246919f) -- Updated build for docs tox -edocs [`bd35a61`](https://github.com/craigerl/aprsd/commit/bd35a610ffe4a3cdccd123d10a0a39e61ad261ed) -- Fixed --quiet option [`f022a3e`](https://github.com/craigerl/aprsd/commit/f022a3e42158ff0d84fc354191ce2088351c7fe6) -- swap Query command characters a bit [`a334623`](https://github.com/craigerl/aprsd/commit/a33462327a25ff807a6df2d50222b1cc79475729) -- Fixed failures caused by last commit [`e83ee31`](https://github.com/craigerl/aprsd/commit/e83ee31310d2984321c67f1de3b74adb17dd09d9) -- don't tell radio emails were sent, ack is enuf [`99c5867`](https://github.com/craigerl/aprsd/commit/99c58671626f65d2b1b6a39c6094404e8ee1188e) -- Fixed unit test for fortune plugin [`9470802`](https://github.com/craigerl/aprsd/commit/94708024da3e5db16dd67ad3582b111f705b1d89) -- Added some more badges to readme files [`7423df6`](https://github.com/craigerl/aprsd/commit/7423df6b25d358f3c170f51b32762ccb98f7684a) -- Cleaned out old ack_dict [`dbc891f`](https://github.com/craigerl/aprsd/commit/dbc891f7385f03d4b8871007fd3bd9492128b580) -- Removed flask code [`72fa550`](https://github.com/craigerl/aprsd/commit/72fa550250dcaef2c4badfe9aa755464aafcd659) -- fix plugin tests to expect new strings [`e7dc537`](https://github.com/craigerl/aprsd/commit/e7dc5379009ee0982138881eb82a5de268ef2e02) -- Updated docker run.sh script [`264b753`](https://github.com/craigerl/aprsd/commit/264b7536b431ea17aa86e01342eea80318e1f542) -- change query character syntax, don't reply that we're resending stuff [`0aa7fe7`](https://github.com/craigerl/aprsd/commit/0aa7fe7a14790326a9c6cbf4c50b3c87d548b233) -- Disable MX record validation [`e6dee3a`](https://github.com/craigerl/aprsd/commit/e6dee3a5b052cca12b98dc63dc102cb84520ad3a) -- fix usage statement [`f538fb2`](https://github.com/craigerl/aprsd/commit/f538fb26aed62871c31bc47024b3041e2a15bb4a) -- get rid of some debug noise from tracker and email delay [`7e3b95f`](https://github.com/craigerl/aprsd/commit/7e3b95fd01628c3e7bb50536193f86cd6c4f1b23) -- switch command characters for query plugin [`e7f2ebf`](https://github.com/craigerl/aprsd/commit/e7f2ebf17ed47e7acd0b4b2511a325603f437580) -- Fix tox tests. [`0e9cfdd`](https://github.com/craigerl/aprsd/commit/0e9cfdd847aeb87a29e30e2b443cab9d8911442f) -- Fixed main server client initialization [`7486770`](https://github.com/craigerl/aprsd/commit/7486770bdc2e9670bb803ee064d08708ddcc55b7) -- test plugin expect responses update to match query output [`3be373d`](https://github.com/craigerl/aprsd/commit/3be373d7fc7f47d3b97f51fd6b95c410bbdf91e1) -- Fixed the queryPlugin unit test [`74be4f8`](https://github.com/craigerl/aprsd/commit/74be4f853ed4b4e9705445a22ae281614a5d485c) -- Fixed latitude reporting in locationPlugin [`4ca5c29`](https://github.com/craigerl/aprsd/commit/4ca5c29d49c8a15884f08c6aa21880f45238f97e) -- Fixed comments [`42b2e22`](https://github.com/craigerl/aprsd/commit/42b2e227e17a2065963e1c44d966d04a3b29fe3b) -- fixed sample-config double print [`18acd64`](https://github.com/craigerl/aprsd/commit/18acd64334e0218bdffbc4d10da0b1559f65cf0b) - getting out of git hell with client.py problems [`76bbdfc`](https://github.com/craigerl/aprsd/commit/76bbdfc728d01965a684be885add49853c643d21) -- expect different reply from query plugin [`e1a292d`](https://github.com/craigerl/aprsd/commit/e1a292d8e0b03dbab6e705280decd79d87c6cb07) -- refactor Plugin objects to plugins directory [`a385d17`](https://github.com/craigerl/aprsd/commit/a385d171bd43291f8ed3346169a358f59b002d52) -- Fix broken test [`1763e94`](https://github.com/craigerl/aprsd/commit/1763e94f937258c96bd321e1ee817b67b71ac39b) -- undo git disaster [`45dd3f0`](https://github.com/craigerl/aprsd/commit/45dd3f0205e851bd50bfbcf74864f31960496816) -- removed double-quote-string-fixer [`a7c2043`](https://github.com/craigerl/aprsd/commit/a7c20430fe0611af7c757900adccd98c26cb4c94) +- Fixed fortune plugin failures [`7ab2613`](https://github.com/craigerl/aprsd/commit/7ab26135c2410422ca17f87efa278049146515da) +- Fixed unit test for fortune plugin [`9470802`](https://github.com/craigerl/aprsd/commit/94708024da3e5db16dd67ad3582b111f705b1d89) +- Added a fix for failed logins to APRS-IS [`3dd23fa`](https://github.com/craigerl/aprsd/commit/3dd23fa2ad1d248c815df4b60915a79bd01a2203) +- Added new config for aprs.fi API Key [`bdeaf63`](https://github.com/craigerl/aprsd/commit/bdeaf6348a5fa48c4aa65f9c8c4f9bf65d7d7689) +- Added send-message login checking and --no-ack [`90c4c6c`](https://github.com/craigerl/aprsd/commit/90c4c6c59dbfc773087111c1a6a73e04c9883d23) +- Fixed --quiet option [`f022a3e`](https://github.com/craigerl/aprsd/commit/f022a3e42158ff0d84fc354191ce2088351c7fe6) +- Added --raw format for sending messages [`54072a2`](https://github.com/craigerl/aprsd/commit/54072a2103d9833dd3aadc3b9e200842b2cea7f5) +- Updated docker run.sh script [`264b753`](https://github.com/craigerl/aprsd/commit/264b7536b431ea17aa86e01342eea80318e1f542) +- Added the ability to add comments to the config file [`cdde9c2`](https://github.com/craigerl/aprsd/commit/cdde9c290b2aaae12c819ced5a103aa252bfbc05) +- Fixed comments [`42b2e22`](https://github.com/craigerl/aprsd/commit/42b2e227e17a2065963e1c44d966d04a3b29fe3b) +- make sample config easier to interpret [`e11a84b`](https://github.com/craigerl/aprsd/commit/e11a84bf053485ee0ce7367d5b9715114cd4d8ae) +- fixed sample-config double print [`18acd64`](https://github.com/craigerl/aprsd/commit/18acd64334e0218bdffbc4d10da0b1559f65cf0b) +- get rid of some debug noise from tracker and email delay [`7e3b95f`](https://github.com/craigerl/aprsd/commit/7e3b95fd01628c3e7bb50536193f86cd6c4f1b23) +- Fixed latitude reporting in locationPlugin [`4ca5c29`](https://github.com/craigerl/aprsd/commit/4ca5c29d49c8a15884f08c6aa21880f45238f97e) +- fix query command syntax ?, ?3, ?d(elete), ?a(ll) [`0b5c9da`](https://github.com/craigerl/aprsd/commit/0b5c9dacf030dd39e8ee130ecde6a780205d74cd) +- fix plugin tests to expect new strings [`e7dc537`](https://github.com/craigerl/aprsd/commit/e7dc5379009ee0982138881eb82a5de268ef2e02) +- Changed default log level to INFO [`0aa905e`](https://github.com/craigerl/aprsd/commit/0aa905ebba802e2f8cecc2b9c98caa72edc15a41) +- Removed flask code [`72fa550`](https://github.com/craigerl/aprsd/commit/72fa550250dcaef2c4badfe9aa755464aafcd659) +- Fixed the queryPlugin unit test [`74be4f8`](https://github.com/craigerl/aprsd/commit/74be4f853ed4b4e9705445a22ae281614a5d485c) +- test plugin expect responses update to match query output [`3be373d`](https://github.com/craigerl/aprsd/commit/3be373d7fc7f47d3b97f51fd6b95c410bbdf91e1) +- Fixed main server client initialization [`7486770`](https://github.com/craigerl/aprsd/commit/7486770bdc2e9670bb803ee064d08708ddcc55b7) +- Enabled some emailthread messages and added timestamp [`d81bfd6`](https://github.com/craigerl/aprsd/commit/d81bfd6fd5b238157eee13809ba7fafae61b7d4d) +- fix usage statement [`f538fb2`](https://github.com/craigerl/aprsd/commit/f538fb26aed62871c31bc47024b3041e2a15bb4a) +- Fix tox tests. [`0e9cfdd`](https://github.com/craigerl/aprsd/commit/0e9cfdd847aeb87a29e30e2b443cab9d8911442f) +- Updated Changelog for v1.5.0 release [`33a0e6c`](https://github.com/craigerl/aprsd/commit/33a0e6c18d7adbe979bcb49708f9730dd3f5ccec) #### [v1.1.0](https://github.com/craigerl/aprsd/compare/v1.0.1...v1.1.0) @@ -1025,16 +1026,16 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Major refactor [`#23`](https://github.com/craigerl/aprsd/pull/23) - Updated the Dockerfile to use alpine [`#24`](https://github.com/craigerl/aprsd/pull/24) - Big patch [`fa51f8f`](https://github.com/craigerl/aprsd/commit/fa51f8fdf20bd5578353009cb49cf4fdf7ed71fb) -- Added Changelog [`6d2160c`](https://github.com/craigerl/aprsd/commit/6d2160c7b740d8508c9fc5daebf58659c2d4595f) -- Refactored the main process_packet method [`1d898ea`](https://github.com/craigerl/aprsd/commit/1d898ea20fb739e50d190f35b2e8bac909d4f127) -- Updated README.rst [`6a61765`](https://github.com/craigerl/aprsd/commit/6a61765eba9cd2f3ad0c4f104f011e82e0f86029) -- Fixed issue when RX ack [`d3ee1b7`](https://github.com/craigerl/aprsd/commit/d3ee1b78bc62dd57be6b505eb1269a70cdbb7242) - Fixed send-message with email command and others [`3261710`](https://github.com/craigerl/aprsd/commit/3261710bf8d5b3dc8d038016825af39fa1cdbf98) -- Update README with version 1.1.0 related info [`8161719`](https://github.com/craigerl/aprsd/commit/8161719697d04b02b00a2bd6b6ef32606602489c) +- Updated README.rst [`6a61765`](https://github.com/craigerl/aprsd/commit/6a61765eba9cd2f3ad0c4f104f011e82e0f86029) +- Updated the aprsd-slack-plugin required version [`0992ab8`](https://github.com/craigerl/aprsd/commit/0992ab817696a2aa97604e0c4571350e4bd368a3) +- Fixed issue when RX ack [`d3ee1b7`](https://github.com/craigerl/aprsd/commit/d3ee1b78bc62dd57be6b505eb1269a70cdbb7242) +- Added Changelog [`6d2160c`](https://github.com/craigerl/aprsd/commit/6d2160c7b740d8508c9fc5daebf58659c2d4595f) +- Updated docker-compose [`c39fdde`](https://github.com/craigerl/aprsd/commit/c39fddef67f25bb73e128a47576e33cdf9db9d04) - Ensure fortune is installed [`18b269a`](https://github.com/craigerl/aprsd/commit/18b269a39d91feeea7329ac1df61df21a29c49f4) - Added fix for an unknown packet type [`b260954`](https://github.com/craigerl/aprsd/commit/b2609548f23430d850a365796fc519e6798b7576) -- Updated docker-compose [`c39fdde`](https://github.com/craigerl/aprsd/commit/c39fddef67f25bb73e128a47576e33cdf9db9d04) -- Updated the aprsd-slack-plugin required version [`0992ab8`](https://github.com/craigerl/aprsd/commit/0992ab817696a2aa97604e0c4571350e4bd368a3) +- Update README with version 1.1.0 related info [`8161719`](https://github.com/craigerl/aprsd/commit/8161719697d04b02b00a2bd6b6ef32606602489c) +- Refactored the main process_packet method [`1d898ea`](https://github.com/craigerl/aprsd/commit/1d898ea20fb739e50d190f35b2e8bac909d4f127) #### [v1.0.1](https://github.com/craigerl/aprsd/compare/v1.0.0...v1.0.1) @@ -1045,9 +1046,9 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Updates for building containers [`#19`](https://github.com/craigerl/aprsd/pull/19) - Don't use the dirname for the plugin path search [`#18`](https://github.com/craigerl/aprsd/pull/18) - Reworked Plugin loading [`#17`](https://github.com/craigerl/aprsd/pull/17) -- Updated README with a TOC [`21253ff`](https://github.com/craigerl/aprsd/commit/21253ff6e798356aff97479ca0d80326bcf0e9b3) -- Updated README with development information [`3ffa416`](https://github.com/craigerl/aprsd/commit/3ffa4165f01153f67102c835508bf6dd5a9a30bc) - Fixed an issue with weather plugin [`eba093b`](https://github.com/craigerl/aprsd/commit/eba093b62a7d100fe0f88850c9e9b3b6f50d3a2e) +- Updated README with development information [`3ffa416`](https://github.com/craigerl/aprsd/commit/3ffa4165f01153f67102c835508bf6dd5a9a30bc) +- Updated README with a TOC [`21253ff`](https://github.com/craigerl/aprsd/commit/21253ff6e798356aff97479ca0d80326bcf0e9b3) - Updated loggin timestamp to include [] [`8a62738`](https://github.com/craigerl/aprsd/commit/8a6273867cc9bd341f4c4ed628048c932320cf8e) #### v1.0.0 @@ -1070,102 +1071,102 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - Added password, callsign and host [`#3`](https://github.com/craigerl/aprsd/pull/3) - Cleaned up trailing whitespace [`#2`](https://github.com/craigerl/aprsd/pull/2) - Added standard python main() [`#1`](https://github.com/craigerl/aprsd/pull/1) +- Initial commit [`8cea620`](https://github.com/craigerl/aprsd/commit/8cea620fcc738e1f6e00cf79ed204ea58ea3ae0c) +- Add files via upload [`51579d7`](https://github.com/craigerl/aprsd/commit/51579d7c2350a85f755e3ee039bc76278da62a59) +- Update README.md [`38d2e51`](https://github.com/craigerl/aprsd/commit/38d2e516de18876b911213f373d76fddff3d6115) +- Update README.md [`6db4e6f`](https://github.com/craigerl/aprsd/commit/6db4e6fd5e7d35b21bf3dde1c18a50cbacc99232) +- Update README.md [`7947d54`](https://github.com/craigerl/aprsd/commit/7947d54fd7b75d41c29915084d8d93b38d601bfc) +- Update README.md [`66f8f82`](https://github.com/craigerl/aprsd/commit/66f8f8269a9e466618ea48ce30f0a9adafb0fd36) +- Update README.md [`538e2fe`](https://github.com/craigerl/aprsd/commit/538e2fef29ba547b980d63865573cc0491db858b) +- Update README.md [`e2d9478`](https://github.com/craigerl/aprsd/commit/e2d9478e272a047f0dd1d2e6ffa5f9c3f9f3d269) +- Update README.md [`a3f1d34`](https://github.com/craigerl/aprsd/commit/a3f1d34bc05c8443d419fee2db5a75312528e394) +- Update README.md [`d31d3bd`](https://github.com/craigerl/aprsd/commit/d31d3bdf0d192c63dc22c0256d6ee14d738e6007) +- Update README.md [`7e409c7`](https://github.com/craigerl/aprsd/commit/7e409c79fbe18e1e3efa62ee15543728f4b2d92a) +- Update README.md [`ce66908`](https://github.com/craigerl/aprsd/commit/ce6690842ad5c2a182ecdd57359aa1bccd4d9dc4) +- Update README.md [`d9b9fd9`](https://github.com/craigerl/aprsd/commit/d9b9fd9a47f6d487e63847dbcd9c3c0787be2f5d) +- Update README.md [`134a555`](https://github.com/craigerl/aprsd/commit/134a5558d4332e92241c4013fcef7e9f173cd609) +- Update aprsd.py [`2330523`](https://github.com/craigerl/aprsd/commit/2330523853855e0b722e0ee51164af932ffae196) +- Update README.md [`821a34b`](https://github.com/craigerl/aprsd/commit/821a34b12d97b4521cfbc1de9c39f6248f0ea512) +- Add files via upload [`471af76`](https://github.com/craigerl/aprsd/commit/471af76595407ded6a25c6ac4f24ea91e0fa872c) +- Update aprsd.py [`230cf45`](https://github.com/craigerl/aprsd/commit/230cf453591e55c632aa2b672b6a9fd40ed9ef74) +- Update README.md [`04269b3`](https://github.com/craigerl/aprsd/commit/04269b39ba4b295943efa80e5fad2d6343756f5f) +- Update README.md [`aa184a3`](https://github.com/craigerl/aprsd/commit/aa184a34ac94f17810f5059d144bdf0d427df752) - de-localize [`fcef019`](https://github.com/craigerl/aprsd/commit/fcef0195b03a1d6397a5dbaf25454ba2b4c87ccb) -- Rewrote the README.md to README.rst [`e1edbe6`](https://github.com/craigerl/aprsd/commit/e1edbe6c6287791f6ced2d243c073dbd65c648ea) -- Created fake_aprs.py [`bd47a2b`](https://github.com/craigerl/aprsd/commit/bd47a2bdea43566bf63cb497d3b57996c2751d04) +- Update README.md [`34d4da8`](https://github.com/craigerl/aprsd/commit/34d4da8f0d32da286cda1faf0a8af74f981523aa) +- Update README.md [`e3a1841`](https://github.com/craigerl/aprsd/commit/e3a18417f1fb9b78056c4d2b1327b0011e53c5ab) +- Update README.md [`e74fd4f`](https://github.com/craigerl/aprsd/commit/e74fd4fd6dc748cb1cc68158df75ffecd1e7e720) +- Update README.md [`7cfde54`](https://github.com/craigerl/aprsd/commit/7cfde5425050ba049ba34342f824d8710ad638e1) +- de-localize [`149580e`](https://github.com/craigerl/aprsd/commit/149580e8c434bf7b7beaef88723e73995cb7b8b2) +- mapme [`48036f9`](https://github.com/craigerl/aprsd/commit/48036f9ffdabce9be1b9faa4e4db37c6a0c57486) - added weather and location [`7b74138`](https://github.com/craigerl/aprsd/commit/7b74138cbaf016e770b3879d36740c2a57fcc585) -- fix bugs after beautification and yaml config additions. Convert to sockets. case insensitive commands [`abc6379`](https://github.com/craigerl/aprsd/commit/abc63791f135b75cd71ce0fcce002fee386a258e) +- added weather and location 2 [`2fbc0e3`](https://github.com/craigerl/aprsd/commit/2fbc0e305c21ab45ff6c0443794447d1686422e5) +- added weather and location 3 [`f1d25c0`](https://github.com/craigerl/aprsd/commit/f1d25c06aafc08f87c1618b71260dd12545e8e70) +- sanitize readme [`de6ca53`](https://github.com/craigerl/aprsd/commit/de6ca53fc8887248d936eb45f2a4a126bdac6876) +- sanitize readme a bit more [`b6356ce`](https://github.com/craigerl/aprsd/commit/b6356ce90142dc4c24ff564182baa9e61bedf1d5) +- sanitize readme a bit more [`19e747d`](https://github.com/craigerl/aprsd/commit/19e747d3dce0f5c291795ebfc950928dcfea2090) +- drop virtenv on first line [`f3e386c`](https://github.com/craigerl/aprsd/commit/f3e386c485fd45cc4c6e371a5222134eb87de516) +- tweaks to readme [`8a1c5e0`](https://github.com/craigerl/aprsd/commit/8a1c5e0db2ea070187ef902b547ecbcfbe151f82) +- make tn a global [`d9caac6`](https://github.com/craigerl/aprsd/commit/d9caac64d7b3e0e7c63d64a3562a4789d6c49f0d) +- add tweaked fuzzyclock [`7dc1c5d`](https://github.com/craigerl/aprsd/commit/7dc1c5d8fdab0543f0e655ea79887d87cedb713f) +- comments [`174da13`](https://github.com/craigerl/aprsd/commit/174da13ddacd421468fadd1213db55b5ece4830c) +- Added argparse for cli options [`8b61116`](https://github.com/craigerl/aprsd/commit/8b61116fceef117a5d2faa86bde5e8244878f88d) - First stab at migrating this to a pytpi repo [`ecd797d`](https://github.com/craigerl/aprsd/commit/ecd797d91e56a3444e79a9e67d552c602fffa772) - First stab at migrating this to a pytpi repo [`a2b5908`](https://github.com/craigerl/aprsd/commit/a2b5908b1670251bb4a4250db8bbf8d75da646fd) +- readme update [`4a8181c`](https://github.com/craigerl/aprsd/commit/4a8181ce303b173116704bf8c0a0eccf76aa6690) +- readme [`d3e5d35`](https://github.com/craigerl/aprsd/commit/d3e5d35d1c0c952a495b030a9658cf28b781857e) +- readme again [`5ac718d`](https://github.com/craigerl/aprsd/commit/5ac718dfab7eafb3e00982ec4e0cfeadcd506782) +- readme again again [`20c43b4`](https://github.com/craigerl/aprsd/commit/20c43b4e85b712f9e7d78a492084eb1a3db4f169) +- readme again again [`d98af66`](https://github.com/craigerl/aprsd/commit/d98af66dba29be731d18eaa572919862dbdc8be2) +- sanitize readme [`8390419`](https://github.com/craigerl/aprsd/commit/8390419292188e9abae4d7c86dacbb47b3ecb747) +- update readme [`c36b14b`](https://github.com/craigerl/aprsd/commit/c36b14b4de56783562f2ea698e42a988df53efcb) +- update readme [`b3435c0`](https://github.com/craigerl/aprsd/commit/b3435c0053116e5986f0189a82e8d376a2d45c87) +- added exit if missing config file [`e3964c5`](https://github.com/craigerl/aprsd/commit/e3964c5426245e71a9689196b9e0402fdab376d5) +- added test to ensure shortcuts in config.yml [`8d1d293`](https://github.com/craigerl/aprsd/commit/8d1d2933e886abb9b2ce72d364413b86917f7e63) +- updated README for install and usage instructions [`4eff52f`](https://github.com/craigerl/aprsd/commit/4eff52f24589852404f7a6cd1581fd58c110ae43) +- Added a try block around imap login [`89d038e`](https://github.com/craigerl/aprsd/commit/89d038e93d32ff63526335aed72859099641edcd) +- select inbox if gmail server [`7abc470`](https://github.com/craigerl/aprsd/commit/7abc47098b873ec10fe8c1720eb326bd958807f7) +- Created fake_aprs.py [`bd47a2b`](https://github.com/craigerl/aprsd/commit/bd47a2bdea43566bf63cb497d3b57996c2751d04) +- Update README.md [`1f31ba0`](https://github.com/craigerl/aprsd/commit/1f31ba0fc754f5f543e977facffcfd093796cbb5) +- fix INBOX [`78add91`](https://github.com/craigerl/aprsd/commit/78add91f3ccd8d2398a79890bf6f0f2520b38641) +- fix bugs after beautification and yaml config additions. Convert to sockets. case insensitive commands [`abc6379`](https://github.com/craigerl/aprsd/commit/abc63791f135b75cd71ce0fcce002fee386a258e) +- INSTALL.txt for the average person [`f175f7e`](https://github.com/craigerl/aprsd/commit/f175f7e6e31f41fd0dd9eb6fbb40bd2aea8b4cfb) +- fix check_email_thread to do proper threading, take delay as arg [`b552f96`](https://github.com/craigerl/aprsd/commit/b552f9611f0f0c02d65804aeb03128383e16917c) - fix check_email_thread to do proper threading, take delay as arg [`e171e16`](https://github.com/craigerl/aprsd/commit/e171e16854862e3cbc743b9c5d526f0895d54b19) -- add tweaked fuzzyclock [`7dc1c5d`](https://github.com/craigerl/aprsd/commit/7dc1c5d8fdab0543f0e655ea79887d87cedb713f) -- added weather and location 2 [`2fbc0e3`](https://github.com/craigerl/aprsd/commit/2fbc0e305c21ab45ff6c0443794447d1686422e5) -- Initial conversion to click [`50fb090`](https://github.com/craigerl/aprsd/commit/50fb0905578171485c6cc69c3f60bc9f4eb3dd91) -- Add files via upload [`51579d7`](https://github.com/craigerl/aprsd/commit/51579d7c2350a85f755e3ee039bc76278da62a59) -- clean up code around closed_socket and reconnect [`371a7a0`](https://github.com/craigerl/aprsd/commit/371a7a08acbef67cfcc9163888ade88a5e4ae88b) -- Add files via upload [`471af76`](https://github.com/craigerl/aprsd/commit/471af76595407ded6a25c6ac4f24ea91e0fa872c) -- Update README.md [`ce66908`](https://github.com/craigerl/aprsd/commit/ce6690842ad5c2a182ecdd57359aa1bccd4d9dc4) -- Added argparse for cli options [`8b61116`](https://github.com/craigerl/aprsd/commit/8b61116fceef117a5d2faa86bde5e8244878f88d) -- can detect closed socket and reconnect now [`b8f37fa`](https://github.com/craigerl/aprsd/commit/b8f37fac6ed24be4dcf5741f3b85b0f4b0f8b2f8) -- switch from urlib to requests for weather, tested in py3 and py2. still need to update locate, and all other http calls [`00432cf`](https://github.com/craigerl/aprsd/commit/00432cf5bbdfb59bc89d721874d692b79a90d6be) -- socket reconnect on timeout testing [`712d66c`](https://github.com/craigerl/aprsd/commit/712d66c389c068cb84738bae0e26a7904c5e1c73) -- fix parse_email unicode probs by using body.decode(errors='ignore') [`44228c6`](https://github.com/craigerl/aprsd/commit/44228c63b3accd72acb92185ac22bc7a2240af5d) -- added decaying email check timer which resets with activity [`cf73add`](https://github.com/craigerl/aprsd/commit/cf73add2db7ac6e85ee65e3d3e038dd709ce19f2) - socket reconnect on timeout testing [`5e96706`](https://github.com/craigerl/aprsd/commit/5e96706f7adf74c955fa4006228ea76a68b42f1e) +- socket reconnect on timeout testing [`712d66c`](https://github.com/craigerl/aprsd/commit/712d66c389c068cb84738bae0e26a7904c5e1c73) +- Reconnect on socket timeout [`b553987`](https://github.com/craigerl/aprsd/commit/b553987350723887c094a87638c49c3f93e26d03) - Reconnect on socket timeout [`ecd0e8f`](https://github.com/craigerl/aprsd/commit/ecd0e8f95eeadf9582075e15e1120f9999ca068a) - Reconnect on socket timeout [`766acbb`](https://github.com/craigerl/aprsd/commit/766acbb777a59150da5e77d2d5c7725621dfc01e) -- Update README.md [`6db4e6f`](https://github.com/craigerl/aprsd/commit/6db4e6fd5e7d35b21bf3dde1c18a50cbacc99232) -- completely off urllib now, tested locate/weather in py2 and py3 [`86bf428`](https://github.com/craigerl/aprsd/commit/86bf42802c36a1415481cb5fe974844f850a1d08) -- more debugging messages trying to find rare tight loop in main [`3d7e3a4`](https://github.com/craigerl/aprsd/commit/3d7e3a4e542bab8edfb48f1804136873077e34f1) -- Update README.md [`821a34b`](https://github.com/craigerl/aprsd/commit/821a34b12d97b4521cfbc1de9c39f6248f0ea512) -- Update README.md [`34d4da8`](https://github.com/craigerl/aprsd/commit/34d4da8f0d32da286cda1faf0a8af74f981523aa) -- Update README.md [`04269b3`](https://github.com/craigerl/aprsd/commit/04269b39ba4b295943efa80e5fad2d6343756f5f) -- Update README.md [`38d2e51`](https://github.com/craigerl/aprsd/commit/38d2e516de18876b911213f373d76fddff3d6115) -- Update aprsd.py [`230cf45`](https://github.com/craigerl/aprsd/commit/230cf453591e55c632aa2b672b6a9fd40ed9ef74) -- Update aprsd.py [`2330523`](https://github.com/craigerl/aprsd/commit/2330523853855e0b722e0ee51164af932ffae196) -- imap tags are unicode in py3. .decode tags [`4b09fad`](https://github.com/craigerl/aprsd/commit/4b09fad8767c8bdb7ddcab2dc4b04a0863d6cdfe) -- INSTALL.txt for the average person [`f175f7e`](https://github.com/craigerl/aprsd/commit/f175f7e6e31f41fd0dd9eb6fbb40bd2aea8b4cfb) -- readme update [`4a8181c`](https://github.com/craigerl/aprsd/commit/4a8181ce303b173116704bf8c0a0eccf76aa6690) -- Update README.md [`e3a1841`](https://github.com/craigerl/aprsd/commit/e3a18417f1fb9b78056c4d2b1327b0011e53c5ab) -- cleaned up weather code after switch to requests ... from urllib. works on py2 and py3 [`ad0f96d`](https://github.com/craigerl/aprsd/commit/ad0f96d1aafef080dfaa6f9d5587c965f9115bd2) -- Update README.md [`e2d9478`](https://github.com/craigerl/aprsd/commit/e2d9478e272a047f0dd1d2e6ffa5f9c3f9f3d269) -- Update INSTALL.txt [`22f7123`](https://github.com/craigerl/aprsd/commit/22f7123e17724331e669c7b5ecf52edefdfb1693) -- make tn a global [`d9caac6`](https://github.com/craigerl/aprsd/commit/d9caac64d7b3e0e7c63d64a3562a4789d6c49f0d) -- reset default email check delay to 60, fix a few comments [`d3bb44f`](https://github.com/craigerl/aprsd/commit/d3bb44feeca74f37df3a95ab51f308823e2214a7) -- Added a try block around imap login [`89d038e`](https://github.com/craigerl/aprsd/commit/89d038e93d32ff63526335aed72859099641edcd) -- fix check_email_thread to do proper threading, take delay as arg [`b552f96`](https://github.com/craigerl/aprsd/commit/b552f9611f0f0c02d65804aeb03128383e16917c) -- main loop went into tight loop, added debug print before every continue [`b597228`](https://github.com/craigerl/aprsd/commit/b5972287196130ea873ee00a8713cf56e5d543b3) -- socket timeout 5 minutes [`e6995c3`](https://github.com/craigerl/aprsd/commit/e6995c360582ab5bb21c98ce4c90de43578efa48) -- sanitize readme [`8390419`](https://github.com/craigerl/aprsd/commit/8390419292188e9abae4d7c86dacbb47b3ecb747) -- readme again again [`20c43b4`](https://github.com/craigerl/aprsd/commit/20c43b4e85b712f9e7d78a492084eb1a3db4f169) -- sanitize readme a bit more [`b6356ce`](https://github.com/craigerl/aprsd/commit/b6356ce90142dc4c24ff564182baa9e61bedf1d5) -- yet another unicode problem, in resend_email fixed [`bb1a2ee`](https://github.com/craigerl/aprsd/commit/bb1a2ee61a7bf7b95821c46d8094a0814512ac7a) -- some failed attempts at getting the first txt or html from a multipart message, currently sends the last [`90fcb99`](https://github.com/craigerl/aprsd/commit/90fcb9973bcc29eb4f1838bd11f6ae2e7cdced32) -- fix INBOX [`78add91`](https://github.com/craigerl/aprsd/commit/78add91f3ccd8d2398a79890bf6f0f2520b38641) -- updated README for install and usage instructions [`4eff52f`](https://github.com/craigerl/aprsd/commit/4eff52f24589852404f7a6cd1581fd58c110ae43) -- Detect closed socket, reconnect, with a bit more grace [`4b67df2`](https://github.com/craigerl/aprsd/commit/4b67df2907e1ad6e0258aa154facb969217c0936) -- added test to ensure shortcuts in config.yml [`8d1d293`](https://github.com/craigerl/aprsd/commit/8d1d2933e886abb9b2ce72d364413b86917f7e63) -- readme again again [`d98af66`](https://github.com/craigerl/aprsd/commit/d98af66dba29be731d18eaa572919862dbdc8be2) -- get rid of some debug statements [`43509ea`](https://github.com/craigerl/aprsd/commit/43509ea9e68bed3923e4d31d1b6854bab48a5d6f) -- fix parse_email unicode probs by using body.decode(errors='ignore').. again [`3c16149`](https://github.com/craigerl/aprsd/commit/3c16149e716b9677417731a2651d5a3cb0862b49) -- Update INSTALL.txt [`d1ab8bc`](https://github.com/craigerl/aprsd/commit/d1ab8bc27d3977f5b8ca1f9280d8857602414900) -- Update INSTALL.txt [`89069af`](https://github.com/craigerl/aprsd/commit/89069af58a03427f45f255109ecbee9ff0b3a351) -- Update README.md [`1f31ba0`](https://github.com/craigerl/aprsd/commit/1f31ba0fc754f5f543e977facffcfd093796cbb5) -- update readme [`c36b14b`](https://github.com/craigerl/aprsd/commit/c36b14b4de56783562f2ea698e42a988df53efcb) -- readme again [`5ac718d`](https://github.com/craigerl/aprsd/commit/5ac718dfab7eafb3e00982ec4e0cfeadcd506782) -- Update README.md [`7cfde54`](https://github.com/craigerl/aprsd/commit/7cfde5425050ba049ba34342f824d8710ad638e1) -- Update README.md [`e74fd4f`](https://github.com/craigerl/aprsd/commit/e74fd4fd6dc748cb1cc68158df75ffecd1e7e720) -- Update README.md [`d9b9fd9`](https://github.com/craigerl/aprsd/commit/d9b9fd9a47f6d487e63847dbcd9c3c0787be2f5d) -- Update README.md [`7e409c7`](https://github.com/craigerl/aprsd/commit/7e409c79fbe18e1e3efa62ee15543728f4b2d92a) -- Update README.md [`a3f1d34`](https://github.com/craigerl/aprsd/commit/a3f1d34bc05c8443d419fee2db5a75312528e394) -- Update README.md [`538e2fe`](https://github.com/craigerl/aprsd/commit/538e2fef29ba547b980d63865573cc0491db858b) -- Update README.md [`7947d54`](https://github.com/craigerl/aprsd/commit/7947d54fd7b75d41c29915084d8d93b38d601bfc) -- main loop went into tight loop, more debug prints [`a4faa76`](https://github.com/craigerl/aprsd/commit/a4faa7614c646b8698908c54f21f97e5b3122c1f) -- select inbox if gmail server [`7abc470`](https://github.com/craigerl/aprsd/commit/7abc47098b873ec10fe8c1720eb326bd958807f7) -- fixed fortune. yet another unicode issue, tested in py3 and py2 [`2bebd83`](https://github.com/craigerl/aprsd/commit/2bebd8344985d49eda197d87674ddb4107824abd) -- add urllib import back until i replace all calls with requests [`b38f561`](https://github.com/craigerl/aprsd/commit/b38f561b843b831f190f695bdcf643042727cfc7) -- Update INSTALL.txt [`9cd6542`](https://github.com/craigerl/aprsd/commit/9cd65424f85b01eefcee5abb95b683a4ad7a555b) -- Update INSTALL.txt [`ef132d8`](https://github.com/craigerl/aprsd/commit/ef132d8037087c647d35e1f39d7cd44a5b924c54) -- found another .decode that didn't include errors='ignore' [`f69f9a2`](https://github.com/craigerl/aprsd/commit/f69f9a2027f393cfce19336e3bfbb7e17337d387) -- Update INSTALL.txt [`54a2c01`](https://github.com/craigerl/aprsd/commit/54a2c016c9f08c35b1860b70473204970b7dfe68) -- George Carlin profanity filter [`3ae7a05`](https://github.com/craigerl/aprsd/commit/3ae7a056b62f751498d653b39d8b68a9aa9d86e3) - socket timeout of 300 instead of 60 [`32e146d`](https://github.com/craigerl/aprsd/commit/32e146d105dc47ab591f200b4d0df89209d45b77) -- update readme [`b3435c0`](https://github.com/craigerl/aprsd/commit/b3435c0053116e5986f0189a82e8d376a2d45c87) -- readme [`d3e5d35`](https://github.com/craigerl/aprsd/commit/d3e5d35d1c0c952a495b030a9658cf28b781857e) -- comments [`174da13`](https://github.com/craigerl/aprsd/commit/174da13ddacd421468fadd1213db55b5ece4830c) -- tweaks to readme [`8a1c5e0`](https://github.com/craigerl/aprsd/commit/8a1c5e0db2ea070187ef902b547ecbcfbe151f82) -- drop virtenv on first line [`f3e386c`](https://github.com/craigerl/aprsd/commit/f3e386c485fd45cc4c6e371a5222134eb87de516) -- sanitize readme a bit more [`19e747d`](https://github.com/craigerl/aprsd/commit/19e747d3dce0f5c291795ebfc950928dcfea2090) -- sanitize readme [`de6ca53`](https://github.com/craigerl/aprsd/commit/de6ca53fc8887248d936eb45f2a4a126bdac6876) -- added weather and location 3 [`f1d25c0`](https://github.com/craigerl/aprsd/commit/f1d25c06aafc08f87c1618b71260dd12545e8e70) -- mapme [`48036f9`](https://github.com/craigerl/aprsd/commit/48036f9ffdabce9be1b9faa4e4db37c6a0c57486) -- de-localize [`149580e`](https://github.com/craigerl/aprsd/commit/149580e8c434bf7b7beaef88723e73995cb7b8b2) -- Update README.md [`aa184a3`](https://github.com/craigerl/aprsd/commit/aa184a34ac94f17810f5059d144bdf0d427df752) -- Update README.md [`134a555`](https://github.com/craigerl/aprsd/commit/134a5558d4332e92241c4013fcef7e9f173cd609) -- Update README.md [`d31d3bd`](https://github.com/craigerl/aprsd/commit/d31d3bdf0d192c63dc22c0256d6ee14d738e6007) -- Update README.md [`66f8f82`](https://github.com/craigerl/aprsd/commit/66f8f8269a9e466618ea48ce30f0a9adafb0fd36) -- Initial commit [`8cea620`](https://github.com/craigerl/aprsd/commit/8cea620fcc738e1f6e00cf79ed204ea58ea3ae0c) -- lose some logging statements [`c5517a7`](https://github.com/craigerl/aprsd/commit/c5517a7cb5ec005bbf843838614aeeda84530068) -- Reconnect on socket timeout [`b553987`](https://github.com/craigerl/aprsd/commit/b553987350723887c094a87638c49c3f93e26d03) +- added decaying email check timer which resets with activity [`cf73add`](https://github.com/craigerl/aprsd/commit/cf73add2db7ac6e85ee65e3d3e038dd709ce19f2) +- George Carlin profanity filter [`3ae7a05`](https://github.com/craigerl/aprsd/commit/3ae7a056b62f751498d653b39d8b68a9aa9d86e3) +- Update INSTALL.txt [`89069af`](https://github.com/craigerl/aprsd/commit/89069af58a03427f45f255109ecbee9ff0b3a351) +- Update INSTALL.txt [`ef132d8`](https://github.com/craigerl/aprsd/commit/ef132d8037087c647d35e1f39d7cd44a5b924c54) +- Update INSTALL.txt [`d1ab8bc`](https://github.com/craigerl/aprsd/commit/d1ab8bc27d3977f5b8ca1f9280d8857602414900) +- main loop went into tight loop, added debug print before every continue [`b597228`](https://github.com/craigerl/aprsd/commit/b5972287196130ea873ee00a8713cf56e5d543b3) +- main loop went into tight loop, more debug prints [`a4faa76`](https://github.com/craigerl/aprsd/commit/a4faa7614c646b8698908c54f21f97e5b3122c1f) +- Update INSTALL.txt [`54a2c01`](https://github.com/craigerl/aprsd/commit/54a2c016c9f08c35b1860b70473204970b7dfe68) +- more debugging messages trying to find rare tight loop in main [`3d7e3a4`](https://github.com/craigerl/aprsd/commit/3d7e3a4e542bab8edfb48f1804136873077e34f1) +- Update INSTALL.txt [`22f7123`](https://github.com/craigerl/aprsd/commit/22f7123e17724331e669c7b5ecf52edefdfb1693) +- can detect closed socket and reconnect now [`b8f37fa`](https://github.com/craigerl/aprsd/commit/b8f37fac6ed24be4dcf5741f3b85b0f4b0f8b2f8) +- Detect closed socket, reconnect, with a bit more grace [`4b67df2`](https://github.com/craigerl/aprsd/commit/4b67df2907e1ad6e0258aa154facb969217c0936) +- socket timeout 5 minutes [`e6995c3`](https://github.com/craigerl/aprsd/commit/e6995c360582ab5bb21c98ce4c90de43578efa48) - clean up code around closed_socket and reconnect [`735cb3a`](https://github.com/craigerl/aprsd/commit/735cb3a557650ac207cc70910f082b5f31ae2ecd) -- added exit if missing config file [`e3964c5`](https://github.com/craigerl/aprsd/commit/e3964c5426245e71a9689196b9e0402fdab376d5) +- clean up code around closed_socket and reconnect [`371a7a0`](https://github.com/craigerl/aprsd/commit/371a7a08acbef67cfcc9163888ade88a5e4ae88b) +- fix parse_email unicode probs by using body.decode(errors='ignore') [`44228c6`](https://github.com/craigerl/aprsd/commit/44228c63b3accd72acb92185ac22bc7a2240af5d) +- fix parse_email unicode probs by using body.decode(errors='ignore').. again [`3c16149`](https://github.com/craigerl/aprsd/commit/3c16149e716b9677417731a2651d5a3cb0862b49) +- some failed attempts at getting the first txt or html from a multipart message, currently sends the last [`90fcb99`](https://github.com/craigerl/aprsd/commit/90fcb9973bcc29eb4f1838bd11f6ae2e7cdced32) +- found another .decode that didn't include errors='ignore' [`f69f9a2`](https://github.com/craigerl/aprsd/commit/f69f9a2027f393cfce19336e3bfbb7e17337d387) +- Initial conversion to click [`50fb090`](https://github.com/craigerl/aprsd/commit/50fb0905578171485c6cc69c3f60bc9f4eb3dd91) +- Update INSTALL.txt [`9cd6542`](https://github.com/craigerl/aprsd/commit/9cd65424f85b01eefcee5abb95b683a4ad7a555b) +- imap tags are unicode in py3. .decode tags [`4b09fad`](https://github.com/craigerl/aprsd/commit/4b09fad8767c8bdb7ddcab2dc4b04a0863d6cdfe) +- switch from urlib to requests for weather, tested in py3 and py2. still need to update locate, and all other http calls [`00432cf`](https://github.com/craigerl/aprsd/commit/00432cf5bbdfb59bc89d721874d692b79a90d6be) +- cleaned up weather code after switch to requests ... from urllib. works on py2 and py3 [`ad0f96d`](https://github.com/craigerl/aprsd/commit/ad0f96d1aafef080dfaa6f9d5587c965f9115bd2) +- add urllib import back until i replace all calls with requests [`b38f561`](https://github.com/craigerl/aprsd/commit/b38f561b843b831f190f695bdcf643042727cfc7) +- completely off urllib now, tested locate/weather in py2 and py3 [`86bf428`](https://github.com/craigerl/aprsd/commit/86bf42802c36a1415481cb5fe974844f850a1d08) +- lose some logging statements [`c5517a7`](https://github.com/craigerl/aprsd/commit/c5517a7cb5ec005bbf843838614aeeda84530068) +- fixed fortune. yet another unicode issue, tested in py3 and py2 [`2bebd83`](https://github.com/craigerl/aprsd/commit/2bebd8344985d49eda197d87674ddb4107824abd) +- reset default email check delay to 60, fix a few comments [`d3bb44f`](https://github.com/craigerl/aprsd/commit/d3bb44feeca74f37df3a95ab51f308823e2214a7) +- yet another unicode problem, in resend_email fixed [`bb1a2ee`](https://github.com/craigerl/aprsd/commit/bb1a2ee61a7bf7b95821c46d8094a0814512ac7a) +- get rid of some debug statements [`43509ea`](https://github.com/craigerl/aprsd/commit/43509ea9e68bed3923e4d31d1b6854bab48a5d6f) +- Rewrote the README.md to README.rst [`e1edbe6`](https://github.com/craigerl/aprsd/commit/e1edbe6c6287791f6ced2d243c073dbd65c648ea) diff --git a/aprsd/cmds/send_message.py b/aprsd/cmds/send_message.py index 458b2ec..5de3cff 100644 --- a/aprsd/cmds/send_message.py +++ b/aprsd/cmds/send_message.py @@ -12,6 +12,7 @@ from aprsd import cli_helper, packets from aprsd import conf # noqa : F401 from aprsd.client import client_factory from aprsd.main import cli +import aprsd.packets # noqa : F401 from aprsd.packets import collector from aprsd.threads import tx @@ -94,10 +95,6 @@ def send_message( else: LOG.info(f"L'{aprs_login}' To'{tocallsign}' C'{command}'") - packets.PacketList() - packets.WatchList() - packets.SeenList() - got_ack = False got_response = False diff --git a/aprsd/cmds/server.py b/aprsd/cmds/server.py index f734be7..6f66ddb 100644 --- a/aprsd/cmds/server.py +++ b/aprsd/cmds/server.py @@ -8,7 +8,7 @@ from oslo_config import cfg import aprsd from aprsd import cli_helper from aprsd import main as aprsd_main -from aprsd import packets, plugin, threads, utils +from aprsd import plugin, threads, utils from aprsd.client import client_factory from aprsd.main import cli from aprsd.packets import collector as packet_collector @@ -87,29 +87,24 @@ def server(ctx, flush): LOG.error("APRS client is not properly configured in config file.") sys.exit(-1) - # Now load the msgTrack from disk if any - packets.PacketList() - if flush: - LOG.debug("Deleting saved MsgTrack.") - packets.PacketTrack().flush() - packets.WatchList().flush() - packets.SeenList().flush() - packets.PacketList().flush() - else: - # Try and load saved MsgTrack list - LOG.debug("Loading saved MsgTrack object.") - packets.PacketTrack().load() - packets.WatchList().load() - packets.SeenList().load() - packets.PacketList().load() - - keepalive = keep_alive.KeepAliveThread() - keepalive.start() - if not CONF.enable_seen_list: # just deregister the class from the packet collector packet_collector.PacketCollector().unregister(seen_list.SeenList) + # Now load the msgTrack from disk if any + if flush: + LOG.debug("Flushing All packet tracking objects.") + packet_collector.PacketCollector().flush() + else: + # Try and load saved MsgTrack list + LOG.debug("Loading saved packet tracking data.") + packet_collector.PacketCollector().load() + + # Now start all the main processing threads. + + keepalive = keep_alive.KeepAliveThread() + keepalive.start() + stats_store_thread = stats_thread.APRSDStatsStoreThread() stats_store_thread.start() diff --git a/aprsd/cmds/webchat.py b/aprsd/cmds/webchat.py index 0fe8687..e090787 100644 --- a/aprsd/cmds/webchat.py +++ b/aprsd/cmds/webchat.py @@ -62,8 +62,6 @@ def signal_handler(sig, frame): threads.APRSDThreadList().stop_all() if "subprocess" not in str(frame): time.sleep(1.5) - # packets.WatchList().save() - # packets.SeenList().save() stats.stats_collector.collect() LOG.info("Telling flask to bail.") signal.signal(signal.SIGTERM, sys.exit(0)) @@ -647,11 +645,6 @@ def webchat(ctx, flush, port): LOG.error("APRS client is not properly configured in config file.") sys.exit(-1) - packets.PacketList() - packets.PacketTrack() - packets.WatchList() - packets.SeenList() - keepalive = keep_alive.KeepAliveThread() LOG.info("Start KeepAliveThread") keepalive.start() diff --git a/aprsd/messaging.py b/aprsd/messaging.py deleted file mode 100644 index 3fe3a79..0000000 --- a/aprsd/messaging.py +++ /dev/null @@ -1,4 +0,0 @@ -# What to return from a plugin if we have processed the message -# and it's ok, but don't send a usage string back - -# REMOVE THIS FILE diff --git a/aprsd/packets/__init__.py b/aprsd/packets/__init__.py index c83d002..32f7d80 100644 --- a/aprsd/packets/__init__.py +++ b/aprsd/packets/__init__.py @@ -1,3 +1,4 @@ +from aprsd.packets import collector from aprsd.packets.core import ( # noqa: F401 AckPacket, BeaconPacket, BulletinPacket, GPSPacket, MessagePacket, MicEPacket, ObjectPacket, Packet, RejectPacket, StatusPacket, @@ -9,4 +10,11 @@ from aprsd.packets.tracker import PacketTrack # noqa: F401 from aprsd.packets.watch_list import WatchList # noqa: F401 +# Register all the packet tracking objects. +collector.PacketCollector().register(PacketList) +collector.PacketCollector().register(SeenList) +collector.PacketCollector().register(PacketTrack) +collector.PacketCollector().register(WatchList) + + NULL_MESSAGE = -1 diff --git a/aprsd/packets/collector.py b/aprsd/packets/collector.py index 5c75b0f..d092e5a 100644 --- a/aprsd/packets/collector.py +++ b/aprsd/packets/collector.py @@ -20,6 +20,14 @@ class PacketMonitor(Protocol): """When we send a packet out the network.""" ... + def flush(self) -> None: + """Flush out any data.""" + ... + + def load(self) -> None: + """Load any data.""" + ... + @singleton class PacketCollector: @@ -27,30 +35,46 @@ class PacketCollector: self.monitors: list[Callable] = [] def register(self, monitor: Callable) -> None: + if not isinstance(monitor, PacketMonitor): + raise TypeError(f"Monitor {monitor} is not a PacketMonitor") self.monitors.append(monitor) def unregister(self, monitor: Callable) -> None: + if not isinstance(monitor, PacketMonitor): + raise TypeError(f"Monitor {monitor} is not a PacketMonitor") self.monitors.remove(monitor) def rx(self, packet: type[core.Packet]) -> None: for name in self.monitors: cls = name() - if isinstance(cls, PacketMonitor): - try: - cls.rx(packet) - except Exception as e: - LOG.error(f"Error in monitor {name} (rx): {e}") - - else: - raise TypeError(f"Monitor {name} is not a PacketMonitor") + try: + cls.rx(packet) + except Exception as e: + LOG.error(f"Error in monitor {name} (rx): {e}") def tx(self, packet: type[core.Packet]) -> None: for name in self.monitors: cls = name() - if isinstance(cls, PacketMonitor): - try: - cls.tx(packet) - except Exception as e: - LOG.error(f"Error in monitor {name} (tx): {e}") - else: - raise TypeError(f"Monitor {name} is not a PacketMonitor") + try: + cls.tx(packet) + except Exception as e: + LOG.error(f"Error in monitor {name} (tx): {e}") + + + def flush(self): + """Call flush on the objects. This is used to flush out any data.""" + for name in self.monitors: + cls = name() + try: + cls.flush() + except Exception as e: + LOG.error(f"Error in monitor {name} (flush): {e}") + + def load(self): + """Call load on the objects. This is used to load any data.""" + for name in self.monitors: + cls = name() + try: + cls.load() + except Exception as e: + LOG.error(f"Error in monitor {name} (load): {e}") diff --git a/aprsd/packets/packet_list.py b/aprsd/packets/packet_list.py index 067a7d5..41eeadb 100644 --- a/aprsd/packets/packet_list.py +++ b/aprsd/packets/packet_list.py @@ -3,7 +3,7 @@ import logging from oslo_config import cfg -from aprsd.packets import collector, core +from aprsd.packets import core from aprsd.utils import objectstore @@ -108,9 +108,3 @@ class PacketList(objectstore.ObjectStoreMixin): "packets": pkts, } return stats - - -# Now register the PacketList with the collector -# every packet we RX and TX goes through the collector -# for processing for whatever reason is needed. -collector.PacketCollector().register(PacketList) diff --git a/aprsd/packets/seen_list.py b/aprsd/packets/seen_list.py index 7150b64..6f0da5c 100644 --- a/aprsd/packets/seen_list.py +++ b/aprsd/packets/seen_list.py @@ -3,7 +3,7 @@ import logging from oslo_config import cfg -from aprsd.packets import collector, core +from aprsd.packets import core from aprsd.utils import objectstore @@ -47,8 +47,3 @@ class SeenList(objectstore.ObjectStoreMixin): def tx(self, packet: type[core.Packet]): """We don't care about TX packets.""" - - -# Register with the packet collector so we can process the packet -# when we get it off the client (network) -collector.PacketCollector().register(SeenList) diff --git a/aprsd/packets/tracker.py b/aprsd/packets/tracker.py index 83fa1c3..a751e15 100644 --- a/aprsd/packets/tracker.py +++ b/aprsd/packets/tracker.py @@ -3,7 +3,7 @@ import logging from oslo_config import cfg -from aprsd.packets import collector, core +from aprsd.packets import core from aprsd.utils import objectstore @@ -101,9 +101,3 @@ class PacketTrack(objectstore.ObjectStoreMixin): del self.data[key] except KeyError: pass - - -# Now register the PacketList with the collector -# every packet we RX and TX goes through the collector -# for processing for whatever reason is needed. -collector.PacketCollector().register(PacketTrack) diff --git a/aprsd/packets/watch_list.py b/aprsd/packets/watch_list.py index aa4d872..4344e9c 100644 --- a/aprsd/packets/watch_list.py +++ b/aprsd/packets/watch_list.py @@ -4,7 +4,7 @@ import logging from oslo_config import cfg from aprsd import utils -from aprsd.packets import collector, core +from aprsd.packets import core from aprsd.utils import objectstore @@ -117,6 +117,3 @@ class WatchList(objectstore.ObjectStoreMixin): return False else: return False - - -collector.PacketCollector().register(WatchList) diff --git a/aprsd/stats/collector.py b/aprsd/stats/collector.py index 9928bb3..c3da428 100644 --- a/aprsd/stats/collector.py +++ b/aprsd/stats/collector.py @@ -25,14 +25,13 @@ class Collector: stats = {} for name in self.producers: cls = name() - if isinstance(cls, StatsProducer): - try: - stats[cls.__class__.__name__] = cls.stats(serializable=serializable).copy() - except Exception as e: - LOG.error(f"Error in producer {name} (stats): {e}") - else: - raise TypeError(f"{cls} is not an instance of StatsProducer") + try: + stats[cls.__class__.__name__] = cls.stats(serializable=serializable).copy() + except Exception as e: + LOG.error(f"Error in producer {name} (stats): {e}") return stats def register_producer(self, producer_name: Callable): + if not isinstance(producer_name, StatsProducer): + raise TypeError(f"Producer {producer_name} is not a StatsProducer") self.producers.append(producer_name) From c12c42b87605b97fa836a8b40713168602c89d50 Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 18 Oct 2024 12:15:20 -0400 Subject: [PATCH 09/40] cleaned up some requirements we don't really need gevent, eventlet. those are only needed for the web admin interface --- requirements-dev.txt | 40 ++++++++++++++++++++-------------------- requirements.in | 4 +--- requirements.txt | 23 +++++++---------------- 3 files changed, 28 insertions(+), 39 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 10cdd9a..7ff68ac 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -8,23 +8,23 @@ add-trailing-comma==3.1.0 # via gray alabaster==1.0.0 # via sphinx autoflake==1.5.3 # via gray babel==2.16.0 # via sphinx -black==24.8.0 # via gray -build==1.2.2 # via -r requirements-dev.in, check-manifest, pip-tools +black==24.10.0 # via gray +build==1.2.2.post1 # via -r requirements-dev.in, check-manifest, pip-tools cachetools==5.5.0 # via tox certifi==2024.8.30 # via requests cfgv==3.4.0 # via pre-commit chardet==5.2.0 # via tox -charset-normalizer==3.3.2 # via requests -check-manifest==0.49 # via -r requirements-dev.in +charset-normalizer==3.4.0 # via requests +check-manifest==0.50 # via -r requirements-dev.in click==8.1.7 # via black, fixit, moreorless, pip-tools colorama==0.4.6 # via tox commonmark==0.9.1 # via rich configargparse==1.7 # via gray -coverage[toml]==7.6.1 # via pytest-cov -distlib==0.3.8 # via virtualenv +coverage[toml]==7.6.3 # via pytest-cov +distlib==0.3.9 # via virtualenv docutils==0.21.2 # via m2r, sphinx exceptiongroup==1.2.2 # via pytest -filelock==3.16.0 # via tox, virtualenv +filelock==3.16.1 # via tox, virtualenv fixit==2.1.0 # via gray flake8==7.1.1 # via -r requirements-dev.in, pep8-naming gray==0.15.0 # via -r requirements-dev.in @@ -34,35 +34,35 @@ imagesize==1.4.1 # via sphinx iniconfig==2.0.0 # via pytest isort==5.13.2 # via -r requirements-dev.in, gray jinja2==3.1.4 # via sphinx -libcst==1.4.0 # via fixit +libcst==1.5.0 # via fixit m2r==0.3.1 # via -r requirements-dev.in -markupsafe==2.1.5 # via jinja2 +markupsafe==3.0.2 # via jinja2 mccabe==0.7.0 # via flake8 mistune==0.8.4 # via m2r moreorless==0.4.0 # via fixit -mypy==1.11.2 # via -r requirements-dev.in +mypy==1.12.0 # via -r requirements-dev.in mypy-extensions==1.0.0 # via black, mypy nodeenv==1.9.1 # via pre-commit packaging==24.1 # via black, build, fixit, pyproject-api, pytest, sphinx, tox pathspec==0.12.1 # via black, trailrunner pep8-naming==0.14.1 # via -r requirements-dev.in pip-tools==7.4.1 # via -r requirements-dev.in -platformdirs==4.3.3 # via black, tox, virtualenv +platformdirs==4.3.6 # via black, tox, virtualenv pluggy==1.5.0 # via pytest, tox -pre-commit==3.8.0 # via -r requirements-dev.in +pre-commit==4.0.1 # via -r requirements-dev.in pycodestyle==2.12.1 # via flake8 pyflakes==3.2.0 # via autoflake, flake8 pygments==2.18.0 # via rich, sphinx -pyproject-api==1.7.1 # via tox -pyproject-hooks==1.1.0 # via build, pip-tools +pyproject-api==1.8.0 # via tox +pyproject-hooks==1.2.0 # via build, pip-tools pytest==8.3.3 # via -r requirements-dev.in, pytest-cov pytest-cov==5.0.0 # via -r requirements-dev.in -pyupgrade==3.17.0 # via gray +pyupgrade==3.18.0 # via gray pyyaml==6.0.2 # via libcst, pre-commit requests==2.32.3 # via sphinx rich==12.6.0 # via gray snowballstemmer==2.2.0 # via sphinx -sphinx==8.0.2 # via -r requirements-dev.in +sphinx==8.1.3 # via -r requirements-dev.in sphinxcontrib-applehelp==2.0.0 # via sphinx sphinxcontrib-devhelp==2.0.0 # via sphinx sphinxcontrib-htmlhelp==2.1.0 # via sphinx @@ -71,14 +71,14 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx tokenize-rt==6.0.0 # via add-trailing-comma, pyupgrade toml==0.10.2 # via autoflake -tomli==2.0.1 # via black, build, check-manifest, coverage, fixit, mypy, pip-tools, pyproject-api, pytest, sphinx, tox -tox==4.18.1 # via -r requirements-dev.in +tomli==2.0.2 # via black, build, check-manifest, coverage, fixit, mypy, pip-tools, pyproject-api, pytest, sphinx, tox +tox==4.23.0 # via -r requirements-dev.in trailrunner==1.4.0 # via fixit -typing-extensions==4.12.2 # via black, mypy +typing-extensions==4.12.2 # via black, mypy, tox unify==0.5 # via gray untokenize==0.1.1 # via unify urllib3==2.2.3 # via requests -virtualenv==20.26.4 # via pre-commit, tox +virtualenv==20.27.0 # via pre-commit, tox wheel==0.44.0 # via -r requirements-dev.in, pip-tools # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements.in b/requirements.in index 7feaaf5..1829bca 100644 --- a/requirements.in +++ b/requirements.in @@ -5,12 +5,10 @@ click click-params dataclasses dataclasses-json -eventlet flask flask-httpauth flask-socketio geopy -gevent imapclient kiss3 loguru @@ -18,7 +16,6 @@ oslo.config pluggy python-socketio pyyaml -pytz requests # Pinned due to gray needing 12.6.0 rich~=12.6.0 @@ -30,3 +27,4 @@ thesmuggler tzlocal update_checker wrapt +pytz diff --git a/requirements.txt b/requirements.txt index fef4b2d..f648c6e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,10 +9,10 @@ attrs==24.2.0 # via ax253, kiss3, rush ax253==0.1.5.post1 # via kiss3 beautifulsoup4==4.12.3 # via -r requirements.in bidict==0.23.1 # via python-socketio -bitarray==2.9.2 # via ax253, kiss3 +bitarray==3.0.0 # via ax253, kiss3 blinker==1.8.2 # via flask certifi==2024.8.30 # via requests -charset-normalizer==3.3.2 # via requests +charset-normalizer==3.4.0 # via requests click==8.1.7 # via -r requirements.in, click-params, flask click-params==0.5.0 # via -r requirements.in commonmark==0.9.1 # via rich @@ -20,15 +20,11 @@ dataclasses==0.6 # via -r requirements.in dataclasses-json==0.6.7 # via -r requirements.in debtcollector==3.0.0 # via oslo-config deprecated==1.2.14 # via click-params -dnspython==2.6.1 # via eventlet -eventlet==0.37.0 # via -r requirements.in flask==3.0.3 # via -r requirements.in, flask-httpauth, flask-socketio flask-httpauth==4.8.0 # via -r requirements.in -flask-socketio==5.3.7 # via -r requirements.in +flask-socketio==5.4.1 # via -r requirements.in geographiclib==2.0 # via geopy geopy==2.4.1 # via -r requirements.in -gevent==24.2.1 # via -r requirements.in -greenlet==3.1.0 # via eventlet, gevent h11==0.14.0 # via wsproto idna==3.10 # via requests imapclient==3.0.1 # via -r requirements.in @@ -37,8 +33,8 @@ itsdangerous==2.2.0 # via flask jinja2==3.1.4 # via flask kiss3==8.0.0 # via -r requirements.in loguru==0.7.2 # via -r requirements.in -markupsafe==2.1.5 # via jinja2, werkzeug -marshmallow==3.22.0 # via dataclasses-json +markupsafe==3.0.2 # via jinja2, werkzeug +marshmallow==3.23.0 # via dataclasses-json mypy-extensions==1.0.0 # via typing-inspect netaddr==1.3.0 # via oslo-config oslo-config==9.6.0 # via -r requirements.in @@ -49,7 +45,7 @@ pluggy==1.5.0 # via -r requirements.in pygments==2.18.0 # via rich pyserial==3.5 # via pyserial-asyncio pyserial-asyncio==0.6 # via kiss3 -python-engineio==4.9.1 # via python-socketio +python-engineio==4.10.1 # via python-socketio python-socketio==5.11.4 # via -r requirements.in, flask-socketio pytz==2024.2 # via -r requirements.in pyyaml==6.0.2 # via -r requirements.in, oslo-config @@ -58,7 +54,7 @@ rfc3986==2.0.0 # via oslo-config rich==12.6.0 # via -r requirements.in rush==2021.4.0 # via -r requirements.in shellingham==1.5.4 # via -r requirements.in -simple-websocket==1.0.0 # via python-engineio +simple-websocket==1.1.0 # via python-engineio six==1.16.0 # via -r requirements.in soupsieve==2.6 # via beautifulsoup4 stevedore==5.3.0 # via oslo-config @@ -74,8 +70,3 @@ werkzeug==3.0.4 # via flask wrapt==1.16.0 # via -r requirements.in, debtcollector, deprecated wsproto==1.2.0 # via simple-websocket zipp==3.20.2 # via importlib-metadata -zope-event==5.0 # via gevent -zope-interface==7.0.3 # via gevent - -# The following packages are considered to be unsafe in a requirements file: -# setuptools From 14c0a699cb70be899d8dfdc11aa15d64bc49155c Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 18 Oct 2024 12:25:16 -0400 Subject: [PATCH 10/40] Cleanup test failures --- aprsd/packets/collector.py | 1 - aprsd/packets/log.py | 2 -- aprsd/utils/__init__.py | 14 +++++++------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/aprsd/packets/collector.py b/aprsd/packets/collector.py index d092e5a..47c17a6 100644 --- a/aprsd/packets/collector.py +++ b/aprsd/packets/collector.py @@ -60,7 +60,6 @@ class PacketCollector: except Exception as e: LOG.error(f"Error in monitor {name} (tx): {e}") - def flush(self): """Call flush on the objects. This is used to flush out any data.""" for name in self.monitors: diff --git a/aprsd/packets/log.py b/aprsd/packets/log.py index 5bddecd..3c2d522 100644 --- a/aprsd/packets/log.py +++ b/aprsd/packets/log.py @@ -101,7 +101,6 @@ def log(packet, tx: Optional[bool] = False, header: Optional[bool] = True) -> No if header: if tx: via_color = "red" - # arrow = f"<{via_color}>->" arrow = f"<{via_color}>\u2192" logit.append( f"TX\u2191 " @@ -111,7 +110,6 @@ def log(packet, tx: Optional[bool] = False, header: Optional[bool] = True) -> No ) else: via_color = "fg #1AA730" - #arrow = f"<{via_color}>->" arrow = f"<{via_color}>\u2192" f"<{via_color}><-" logit.append( diff --git a/aprsd/utils/__init__.py b/aprsd/utils/__init__.py index b924ec3..e3ca433 100644 --- a/aprsd/utils/__init__.py +++ b/aprsd/utils/__init__.py @@ -175,18 +175,18 @@ def load_entry_points(group): def calculate_initial_compass_bearing(start, end): - if (type(start) != tuple) or (type(end) != tuple): + if (type(start) != tuple) or (type(end) != tuple): # noqa: E721 raise TypeError("Only tuples are supported as arguments") lat1 = math.radians(float(start[0])) lat2 = math.radians(float(end[0])) - diffLong = math.radians(float(end[1]) - float(start[1])) + diff_long = math.radians(float(end[1]) - float(start[1])) - x = math.sin(diffLong) * math.cos(lat2) + x = math.sin(diff_long) * math.cos(lat2) y = math.cos(lat1) * math.sin(lat2) - ( math.sin(lat1) - * math.cos(lat2) * math.cos(diffLong) + * math.cos(lat2) * math.cos(diff_long) ) initial_bearing = math.atan2(x, y) @@ -202,17 +202,17 @@ def calculate_initial_compass_bearing(start, end): def degrees_to_cardinal(bearing, full_string=False): if full_string: - DIRECTIONS = [ + directions = [ "North", "North-Northeast", "Northeast", "East-Northeast", "East", "East-Southeast", "Southeast", "South-Southeast", "South", "South-Southwest", "Southwest", "West-Southwest", "West", "West-Northwest", "Northwest", "North-Northwest", "North", ] else: - DIRECTIONS = [ + directions = [ "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N", ] - cardinal = DIRECTIONS[round(bearing / 22.5)] + cardinal = directions[round(bearing / 22.5)] return cardinal From 14274c93b59f146c7a9ef9dd9e0d2e085c86b191 Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 18 Oct 2024 16:08:09 -0400 Subject: [PATCH 11/40] 3.4.2 --- ChangeLog.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index bb04296..65071d5 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v3.4.2](https://github.com/craigerl/aprsd/compare/v3.4.1...v3.4.2) + +> 18 October 2024 + +- Removed remnants of QueryPlugin [`758007e`](https://github.com/craigerl/aprsd/commit/758007ea3ff809944f9ed4685c74e7eaff0f813b) +- Removed dumping of the stats on exit [`5314856`](https://github.com/craigerl/aprsd/commit/5314856101fbf9f306b112121706e7ac9513a0e4) +- Added color logging of thread names at keepalive [`5e9f92d`](https://github.com/craigerl/aprsd/commit/5e9f92dfa68a9a8841c4a10a1e8a68b3c3d9401d) +- Added packet log distance and new arrows [`3e9bf24`](https://github.com/craigerl/aprsd/commit/3e9bf2422acafe33e4bc3a3eb8d812cd81722ae2) +- Log closing client connection. [`9951b12`](https://github.com/craigerl/aprsd/commit/9951b12e2d0097975d7f482dbe818021f772fce1) +- Sort changelog commits by date [`a65262d`](https://github.com/craigerl/aprsd/commit/a65262d2ff68b5744e402d305656b00bb9950c90) +- Add final stages in Dockerfile [`8cdbf18`](https://github.com/craigerl/aprsd/commit/8cdbf18befd709a88100934cce953572b3a5f473) +- Collector cleanup [`765e02f`](https://github.com/craigerl/aprsd/commit/765e02f5b3237796936cb0378abd560ced906283) +- cleaned up some requirements [`c12c42b`](https://github.com/craigerl/aprsd/commit/c12c42b87605b97fa836a8b40713168602c89d50) +- Cleanup test failures [`14c0a69`](https://github.com/craigerl/aprsd/commit/14c0a699cb70be899d8dfdc11aa15d64bc49155c) + #### [v3.4.1](https://github.com/craigerl/aprsd/compare/v3.4.0...v3.4.1) > 23 September 2024 From 0ca62e727eb2f66b1f136921141a2571a47125ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 26 Oct 2024 00:26:57 +0000 Subject: [PATCH 12/40] Bump werkzeug from 3.0.4 to 3.0.6 Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.0.4 to 3.0.6. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/werkzeug/compare/3.0.4...3.0.6) --- updated-dependencies: - dependency-name: werkzeug dependency-type: indirect ... Signed-off-by: dependabot[bot] --- requirements.txt | 225 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 159 insertions(+), 66 deletions(-) diff --git a/requirements.txt b/requirements.txt index f648c6e..46c5903 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,69 +4,162 @@ # # pip-compile --annotation-style=line requirements.in # -aprslib==0.7.2 # via -r requirements.in -attrs==24.2.0 # via ax253, kiss3, rush -ax253==0.1.5.post1 # via kiss3 -beautifulsoup4==4.12.3 # via -r requirements.in -bidict==0.23.1 # via python-socketio -bitarray==3.0.0 # via ax253, kiss3 -blinker==1.8.2 # via flask -certifi==2024.8.30 # via requests -charset-normalizer==3.4.0 # via requests -click==8.1.7 # via -r requirements.in, click-params, flask -click-params==0.5.0 # via -r requirements.in -commonmark==0.9.1 # via rich -dataclasses==0.6 # via -r requirements.in -dataclasses-json==0.6.7 # via -r requirements.in -debtcollector==3.0.0 # via oslo-config -deprecated==1.2.14 # via click-params -flask==3.0.3 # via -r requirements.in, flask-httpauth, flask-socketio -flask-httpauth==4.8.0 # via -r requirements.in -flask-socketio==5.4.1 # via -r requirements.in -geographiclib==2.0 # via geopy -geopy==2.4.1 # via -r requirements.in -h11==0.14.0 # via wsproto -idna==3.10 # via requests -imapclient==3.0.1 # via -r requirements.in -importlib-metadata==8.5.0 # via ax253, kiss3 -itsdangerous==2.2.0 # via flask -jinja2==3.1.4 # via flask -kiss3==8.0.0 # via -r requirements.in -loguru==0.7.2 # via -r requirements.in -markupsafe==3.0.2 # via jinja2, werkzeug -marshmallow==3.23.0 # via dataclasses-json -mypy-extensions==1.0.0 # via typing-inspect -netaddr==1.3.0 # via oslo-config -oslo-config==9.6.0 # via -r requirements.in -oslo-i18n==6.4.0 # via oslo-config -packaging==24.1 # via marshmallow -pbr==6.1.0 # via oslo-i18n, stevedore -pluggy==1.5.0 # via -r requirements.in -pygments==2.18.0 # via rich -pyserial==3.5 # via pyserial-asyncio -pyserial-asyncio==0.6 # via kiss3 -python-engineio==4.10.1 # via python-socketio -python-socketio==5.11.4 # via -r requirements.in, flask-socketio -pytz==2024.2 # via -r requirements.in -pyyaml==6.0.2 # via -r requirements.in, oslo-config -requests==2.32.3 # via -r requirements.in, oslo-config, update-checker -rfc3986==2.0.0 # via oslo-config -rich==12.6.0 # via -r requirements.in -rush==2021.4.0 # via -r requirements.in -shellingham==1.5.4 # via -r requirements.in -simple-websocket==1.1.0 # via python-engineio -six==1.16.0 # via -r requirements.in -soupsieve==2.6 # via beautifulsoup4 -stevedore==5.3.0 # via oslo-config -tabulate==0.9.0 # via -r requirements.in -thesmuggler==1.0.1 # via -r requirements.in -typing-extensions==4.12.2 # via typing-inspect -typing-inspect==0.9.0 # via dataclasses-json -tzlocal==5.2 # via -r requirements.in -update-checker==0.18.0 # via -r requirements.in -urllib3==2.2.3 # via requests -validators==0.22.0 # via click-params -werkzeug==3.0.4 # via flask -wrapt==1.16.0 # via -r requirements.in, debtcollector, deprecated -wsproto==1.2.0 # via simple-websocket -zipp==3.20.2 # via importlib-metadata +aprslib==0.7.2 + # via -r requirements.in +attrs==24.2.0 + # via + # ax253 + # kiss3 + # rush +ax253==0.1.5.post1 + # via kiss3 +beautifulsoup4==4.12.3 + # via -r requirements.in +bidict==0.23.1 + # via python-socketio +bitarray==3.0.0 + # via + # ax253 + # kiss3 +blinker==1.8.2 + # via flask +certifi==2024.8.30 + # via requests +charset-normalizer==3.4.0 + # via requests +click==8.1.7 + # via + # -r requirements.in + # click-params + # flask +click-params==0.5.0 + # via -r requirements.in +commonmark==0.9.1 + # via rich +dataclasses==0.6 + # via -r requirements.in +dataclasses-json==0.6.7 + # via -r requirements.in +debtcollector==3.0.0 + # via oslo-config +deprecated==1.2.14 + # via click-params +flask==3.0.3 + # via + # -r requirements.in + # flask-httpauth + # flask-socketio +flask-httpauth==4.8.0 + # via -r requirements.in +flask-socketio==5.4.1 + # via -r requirements.in +geographiclib==2.0 + # via geopy +geopy==2.4.1 + # via -r requirements.in +h11==0.14.0 + # via wsproto +idna==3.10 + # via requests +imapclient==3.0.1 + # via -r requirements.in +importlib-metadata==8.5.0 + # via + # ax253 + # kiss3 +itsdangerous==2.2.0 + # via flask +jinja2==3.1.4 + # via flask +kiss3==8.0.0 + # via -r requirements.in +loguru==0.7.2 + # via -r requirements.in +markupsafe==3.0.2 + # via + # jinja2 + # werkzeug +marshmallow==3.23.0 + # via dataclasses-json +mypy-extensions==1.0.0 + # via typing-inspect +netaddr==1.3.0 + # via oslo-config +oslo-config==9.6.0 + # via -r requirements.in +oslo-i18n==6.4.0 + # via oslo-config +packaging==24.1 + # via marshmallow +pbr==6.1.0 + # via + # oslo-i18n + # stevedore +pluggy==1.5.0 + # via -r requirements.in +pygments==2.18.0 + # via rich +pyserial==3.5 + # via pyserial-asyncio +pyserial-asyncio==0.6 + # via kiss3 +python-engineio==4.10.1 + # via python-socketio +python-socketio==5.11.4 + # via + # -r requirements.in + # flask-socketio +pytz==2024.2 + # via -r requirements.in +pyyaml==6.0.2 + # via + # -r requirements.in + # oslo-config +requests==2.32.3 + # via + # -r requirements.in + # oslo-config + # update-checker +rfc3986==2.0.0 + # via oslo-config +rich==12.6.0 + # via -r requirements.in +rush==2021.4.0 + # via -r requirements.in +shellingham==1.5.4 + # via -r requirements.in +simple-websocket==1.1.0 + # via python-engineio +six==1.16.0 + # via -r requirements.in +soupsieve==2.6 + # via beautifulsoup4 +stevedore==5.3.0 + # via oslo-config +tabulate==0.9.0 + # via -r requirements.in +thesmuggler==1.0.1 + # via -r requirements.in +typing-extensions==4.12.2 + # via typing-inspect +typing-inspect==0.9.0 + # via dataclasses-json +tzlocal==5.2 + # via -r requirements.in +update-checker==0.18.0 + # via -r requirements.in +urllib3==2.2.3 + # via requests +validators==0.22.0 + # via click-params +werkzeug==3.0.6 + # via flask +wrapt==1.16.0 + # via + # -r requirements.in + # debtcollector + # deprecated +wsproto==1.2.0 + # via simple-websocket +zipp==3.20.2 + # via importlib-metadata From 882e90767dd967a4d1018c834a074b33ca9dcb06 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 29 Oct 2024 09:52:18 -0400 Subject: [PATCH 13/40] Change virtual env name to .venv --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 641f03d..001e0c7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ WORKDIR?=. -VENVDIR ?= $(WORKDIR)/.aprsd-venv +VENVDIR ?= $(WORKDIR)/.venv .DEFAULT_GOAL := help From ecf30d33978e26150bf41ff60b97ff00ab5d5f96 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 29 Oct 2024 09:52:39 -0400 Subject: [PATCH 14/40] Fixed issue in send_message command Send Message was using an old mechanism for logging ack packets. This patch fixes that problem. --- aprsd/cmds/send_message.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aprsd/cmds/send_message.py b/aprsd/cmds/send_message.py index 5de3cff..4288b44 100644 --- a/aprsd/cmds/send_message.py +++ b/aprsd/cmds/send_message.py @@ -14,6 +14,7 @@ from aprsd.client import client_factory from aprsd.main import cli import aprsd.packets # noqa : F401 from aprsd.packets import collector +from aprsd.packets import log as packet_log from aprsd.threads import tx @@ -103,7 +104,7 @@ def send_message( cl = client_factory.create() packet = cl.decode_packet(packet) collector.PacketCollector().rx(packet) - packet.log("RX") + packet_log.log(packet, tx=False) # LOG.debug("Got packet back {}".format(packet)) if isinstance(packet, packets.AckPacket): got_ack = True From 578062648bb1c188e578c88000852e477a429364 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 29 Oct 2024 11:08:05 -0400 Subject: [PATCH 15/40] Update Changelog for v3.4.3 --- ChangeLog.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index 65071d5..7242606 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v3.4.3](https://github.com/craigerl/aprsd/compare/v3.4.2...v3.4.3) + +> 29 October 2024 + +- Change virtual env name to .venv [`882e907`](https://github.com/craigerl/aprsd/commit/882e90767dd967a4d1018c834a074b33ca9dcb06) +- Fixed issue in send_message command [`ecf30d3`](https://github.com/craigerl/aprsd/commit/ecf30d33978e26150bf41ff60b97ff00ab5d5f96) + #### [v3.4.2](https://github.com/craigerl/aprsd/compare/v3.4.1...v3.4.2) > 18 October 2024 From 0271ccd14582cf042846e9c65c64fe501538bc5a Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 29 Oct 2024 12:30:19 -0400 Subject: [PATCH 16/40] Added new aprsd admin command This patch adds the aprsd admin command back. If you don't have about lots of web traffic, then use aprsd admin to start the admin interface. --- aprsd/cmds/admin.py | 54 +++++++++++++++++++++++++++++++++++++++++++++ aprsd/main.py | 16 +++++++++----- aprsd/wsgi.py | 10 ++++++++- 3 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 aprsd/cmds/admin.py diff --git a/aprsd/cmds/admin.py b/aprsd/cmds/admin.py new file mode 100644 index 0000000..cc77bed --- /dev/null +++ b/aprsd/cmds/admin.py @@ -0,0 +1,54 @@ +import logging +import os +import signal + +import click +from oslo_config import cfg +import socketio + +import aprsd +from aprsd import cli_helper +from aprsd import main as aprsd_main +from aprsd import utils +from aprsd.main import cli + + +os.environ["APRSD_ADMIN_COMMAND"] = "1" +from aprsd import wsgi as aprsd_wsgi + + +CONF = cfg.CONF +LOG = logging.getLogger("APRSD") + + +# main() ### +@cli.command() +@cli_helper.add_options(cli_helper.common_options) +@click.pass_context +@cli_helper.process_standard_options +def admin(ctx): + """Start the aprsd admin interface.""" + signal.signal(signal.SIGINT, aprsd_main.signal_handler) + signal.signal(signal.SIGTERM, aprsd_main.signal_handler) + + level, msg = utils._check_version() + if level: + LOG.warning(msg) + else: + LOG.info(msg) + LOG.info(f"APRSD Started version: {aprsd.__version__}") + # Dump all the config options now. + CONF.log_opt_values(LOG, logging.DEBUG) + + async_mode = "threading" + sio = socketio.Server(logger=True, async_mode=async_mode) + aprsd_wsgi.app.wsgi_app = socketio.WSGIApp(sio, aprsd_wsgi.app.wsgi_app) + aprsd_wsgi.init_app() + sio.register_namespace(aprsd_wsgi.LoggingNamespace("/logs")) + CONF.log_opt_values(LOG, logging.DEBUG) + aprsd_wsgi.app.run( + threaded=True, + debug=False, + port=CONF.admin.web_port, + host=CONF.admin.web_ip, + ) diff --git a/aprsd/main.py b/aprsd/main.py index e052ab9..7609bc0 100644 --- a/aprsd/main.py +++ b/aprsd/main.py @@ -54,7 +54,7 @@ def cli(ctx): def load_commands(): from .cmds import ( # noqa - completion, dev, fetch_stats, healthcheck, list_plugins, listen, + admin, completion, dev, fetch_stats, healthcheck, list_plugins, listen, send_message, server, webchat, ) @@ -79,11 +79,15 @@ def signal_handler(sig, frame): ), ) time.sleep(1.5) - packets.PacketTrack().save() - packets.WatchList().save() - packets.SeenList().save() - packets.PacketList().save() - collector.Collector().collect() + try: + packets.PacketTrack().save() + packets.WatchList().save() + packets.SeenList().save() + packets.PacketList().save() + collector.Collector().collect() + except Exception as e: + LOG.error(f"Failed to save data: {e}") + sys.exit(0) # signal.signal(signal.SIGTERM, sys.exit(0)) # sys.exit(0) diff --git a/aprsd/wsgi.py b/aprsd/wsgi.py index 28fc02e..0d7d2d6 100644 --- a/aprsd/wsgi.py +++ b/aprsd/wsgi.py @@ -3,6 +3,7 @@ import importlib.metadata as imp import io import json import logging +import os import queue import flask @@ -23,6 +24,12 @@ CONF = cfg.CONF LOG = logging.getLogger("gunicorn.access") logging_queue = queue.Queue() + +# ADMIN_COMMAND True means we are running from `aprsd admin` +# the `aprsd admin` command will import this file after setting +# the APRSD_ADMIN_COMMAND environment variable. +ADMIN_COMMAND = os.environ.get("APRSD_ADMIN_COMMAND", False) + auth = HTTPBasicAuth() users: dict[str, str] = {} app = Flask( @@ -262,6 +269,7 @@ def init_app(config_file=None, log_level=None): return log_level +print(f"__name__ = {__name__}") if __name__ == "__main__": async_mode = "threading" @@ -297,7 +305,7 @@ if __name__ == "uwsgi_file_aprsd_wsgi": CONF.log_opt_values(LOG, logging.DEBUG) -if __name__ == "aprsd.wsgi": +if __name__ == "aprsd.wsgi" and not ADMIN_COMMAND: # set async_mode to 'threading', 'eventlet', 'gevent' or 'gevent_uwsgi' to # force a mode else, the best mode is selected automatically from what's # installed From d863474c133d7650f9c79d1a88f0a4a04a2b056f Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 31 Oct 2024 09:17:36 -0400 Subject: [PATCH 17/40] Added some changes to listen to collect stats and only show those stats during listen --- aprsd/cmds/listen.py | 85 +++++++++++++++++++++++++++++++++++++++- aprsd/stats/collector.py | 5 +++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/aprsd/cmds/listen.py b/aprsd/cmds/listen.py index 646d3c9..60f48c5 100644 --- a/aprsd/cmds/listen.py +++ b/aprsd/cmds/listen.py @@ -10,12 +10,13 @@ import sys import time import click +from loguru import logger from oslo_config import cfg from rich.console import Console # local imports here import aprsd -from aprsd import cli_helper, packets, plugin, threads +from aprsd import cli_helper, packets, plugin, threads, utils from aprsd.client import client_factory from aprsd.main import cli from aprsd.packets import collector as packet_collector @@ -24,12 +25,14 @@ from aprsd.packets import seen_list from aprsd.stats import collector from aprsd.threads import keep_alive, rx from aprsd.threads import stats as stats_thread +from aprsd.threads.aprsd import APRSDThread # setup the global logger # log.basicConfig(level=log.DEBUG) # level=10 LOG = logging.getLogger("APRSD") CONF = cfg.CONF +LOGU = logger console = Console() @@ -46,6 +49,41 @@ def signal_handler(sig, frame): collector.Collector().collect() +@utils.singleton +class SimplePacketStats: + def __init__(self): + self.total_rx = 0 + self.total_tx = 0 + self.types = {} + + def rx(self, packet): + self.total_rx += 1 + ptype = packet.__class__.__name__ + if ptype not in self.types: + self.types[ptype] = {"tx": 0, "rx": 0} + self.types[ptype]["rx"] += 1 + + def tx(self, packet): + self.total_tx += 1 + ptype = packet.__class__.__name__ + if ptype not in self.types: + self.types[ptype] = {"tx": 0, "rx": 0} + self.types[ptype]["tx"] += 1 + + def flush(self): + pass + + def load(self): + pass + + def stats(self, serializable=False): + return { + "total_rx": self.total_rx, + "total_tx": self.total_tx, + "types": self.types, + } + + class APRSDListenThread(rx.APRSDRXThread): def __init__(self, packet_queue, packet_filter=None, plugin_manager=None): super().__init__(packet_queue) @@ -88,6 +126,28 @@ class APRSDListenThread(rx.APRSDRXThread): packet_collector.PacketCollector().rx(packet) +class ListenStatsThread(APRSDThread): + def __init__(self): + super().__init__("SimpleStats") + self._last_total_rx = 0 + + def loop(self): + if self.loop_count % 10 == 0: + # log the stats every 10 seconds + stats_json = collector.Collector().collect() + stats = stats_json["SimplePacketStats"] + total_rx = stats["total_rx"] + rate = (total_rx - self._last_total_rx) / 10 + LOG.warning(f"RX Rate: {rate} pps Total RX: {total_rx} - {self._last_total_rx}") + #LOG.error(stats) + self._last_total_rx = total_rx + for k, v in stats["types"].items(): + LOGU.opt(colors=True).warning(f"Type: {k} RX: {v['rx']} TX: {v['tx']}") + + time.sleep(1) + return True + + @cli.command() @cli_helper.add_options(cli_helper.common_options) @click.option( @@ -201,6 +261,27 @@ def listen( # just deregister the class from the packet collector packet_collector.PacketCollector().unregister(seen_list.SeenList) + packet_collector.PacketCollector().register(SimplePacketStats) + + from aprsd.client import stats as client_stats + from aprsd.packets.packet_list import PacketList # noqa: F401 + from aprsd.packets.seen_list import SeenList # noqa: F401 + from aprsd.packets.tracker import PacketTrack # noqa: F401 + from aprsd.packets.watch_list import WatchList # noqa: F401 + from aprsd.plugins import email + from aprsd.threads import aprsd as aprsd_thread + c = collector.Collector() + # c.unregister_producer(app.APRSDStats) + c.unregister_producer(PacketList) + c.unregister_producer(WatchList) + #c.unregister_producer(PacketTrack) + c.unregister_producer(plugin.PluginManager) + c.unregister_producer(aprsd_thread.APRSDThreadList) + c.unregister_producer(email.EmailStats) + c.unregister_producer(client_stats.APRSClientStats) + c.unregister_producer(seen_list.SeenList) + c.register_producer(SimplePacketStats) + pm = None pm = plugin.PluginManager() if load_plugins: @@ -222,6 +303,8 @@ def listen( ) LOG.debug("Start APRSDListenThread") listen_thread.start() + listen_stats = ListenStatsThread() + listen_stats.start() keepalive.start() LOG.debug("keepalive Join") diff --git a/aprsd/stats/collector.py b/aprsd/stats/collector.py index c3da428..d899031 100644 --- a/aprsd/stats/collector.py +++ b/aprsd/stats/collector.py @@ -35,3 +35,8 @@ class Collector: if not isinstance(producer_name, StatsProducer): raise TypeError(f"Producer {producer_name} is not a StatsProducer") self.producers.append(producer_name) + + def unregister_producer(self, producer_name: Callable): + if not isinstance(producer_name, StatsProducer): + raise TypeError(f"Producer {producer_name} is not a StatsProducer") + self.producers.remove(producer_name) From f265e8f3541701eeaaba820ed93eb23902b40f05 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 31 Oct 2024 17:39:04 -0400 Subject: [PATCH 18/40] Fix a small issue with packet sending failures When a packet _send_direct() failed to send due to a network timeout or client issue, we don't want to count that as a send attempt for the packet. This patch catches that and allows for another retry. --- aprsd/cmds/admin.py | 5 ++++- aprsd/threads/tx.py | 30 ++++++++++++++++++++++++++---- aprsd/wsgi.py | 1 - 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/aprsd/cmds/admin.py b/aprsd/cmds/admin.py index cc77bed..6f3a8d9 100644 --- a/aprsd/cmds/admin.py +++ b/aprsd/cmds/admin.py @@ -14,7 +14,10 @@ from aprsd.main import cli os.environ["APRSD_ADMIN_COMMAND"] = "1" -from aprsd import wsgi as aprsd_wsgi +# this import has to happen AFTER we set the +# above environment variable, so that the code +# inside the wsgi.py has the value +from aprsd import wsgi as aprsd_wsgi # noqa CONF = cfg.CONF diff --git a/aprsd/threads/tx.py b/aprsd/threads/tx.py index 25e61b1..b7ed45b 100644 --- a/aprsd/threads/tx.py +++ b/aprsd/threads/tx.py @@ -89,6 +89,9 @@ def _send_direct(packet, aprs_client=None): except Exception as e: LOG.error(f"Failed to send packet: {packet}") LOG.error(e) + return False + else: + return True class SendPacketThread(aprsd_threads.APRSDThread): @@ -150,8 +153,17 @@ class SendPacketThread(aprsd_threads.APRSDThread): # no attempt time, so lets send it, and start # tracking the time. packet.last_send_time = int(round(time.time())) - _send_direct(packet) - packet.send_count += 1 + sent = False + try: + sent = _send_direct(packet) + except Exception: + LOG.error(f"Failed to send packet: {packet}") + else: + # If an exception happens while sending + # we don't want this attempt to count + # against the packet + if sent: + packet.send_count += 1 time.sleep(1) # Make sure we get called again. @@ -199,8 +211,18 @@ class SendAckThread(aprsd_threads.APRSDThread): send_now = True if send_now: - _send_direct(self.packet) - self.packet.send_count += 1 + sent = False + try: + sent = _send_direct(self.packet) + except Exception: + LOG.error(f"Failed to send packet: {self.packet}") + else: + # If an exception happens while sending + # we don't want this attempt to count + # against the packet + if sent: + self.packet.send_count += 1 + self.packet.last_send_time = int(round(time.time())) time.sleep(1) diff --git a/aprsd/wsgi.py b/aprsd/wsgi.py index 0d7d2d6..47da201 100644 --- a/aprsd/wsgi.py +++ b/aprsd/wsgi.py @@ -269,7 +269,6 @@ def init_app(config_file=None, log_level=None): return log_level -print(f"__name__ = {__name__}") if __name__ == "__main__": async_mode = "threading" From fbfac97140932046921a3aa60c496133f4a368e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 26 Oct 2024 00:26:57 +0000 Subject: [PATCH 19/40] Bump werkzeug from 3.0.4 to 3.0.6 Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.0.4 to 3.0.6. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/werkzeug/compare/3.0.4...3.0.6) --- updated-dependencies: - dependency-name: werkzeug dependency-type: indirect ... Signed-off-by: dependabot[bot] --- requirements.txt | 225 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 159 insertions(+), 66 deletions(-) diff --git a/requirements.txt b/requirements.txt index f648c6e..46c5903 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,69 +4,162 @@ # # pip-compile --annotation-style=line requirements.in # -aprslib==0.7.2 # via -r requirements.in -attrs==24.2.0 # via ax253, kiss3, rush -ax253==0.1.5.post1 # via kiss3 -beautifulsoup4==4.12.3 # via -r requirements.in -bidict==0.23.1 # via python-socketio -bitarray==3.0.0 # via ax253, kiss3 -blinker==1.8.2 # via flask -certifi==2024.8.30 # via requests -charset-normalizer==3.4.0 # via requests -click==8.1.7 # via -r requirements.in, click-params, flask -click-params==0.5.0 # via -r requirements.in -commonmark==0.9.1 # via rich -dataclasses==0.6 # via -r requirements.in -dataclasses-json==0.6.7 # via -r requirements.in -debtcollector==3.0.0 # via oslo-config -deprecated==1.2.14 # via click-params -flask==3.0.3 # via -r requirements.in, flask-httpauth, flask-socketio -flask-httpauth==4.8.0 # via -r requirements.in -flask-socketio==5.4.1 # via -r requirements.in -geographiclib==2.0 # via geopy -geopy==2.4.1 # via -r requirements.in -h11==0.14.0 # via wsproto -idna==3.10 # via requests -imapclient==3.0.1 # via -r requirements.in -importlib-metadata==8.5.0 # via ax253, kiss3 -itsdangerous==2.2.0 # via flask -jinja2==3.1.4 # via flask -kiss3==8.0.0 # via -r requirements.in -loguru==0.7.2 # via -r requirements.in -markupsafe==3.0.2 # via jinja2, werkzeug -marshmallow==3.23.0 # via dataclasses-json -mypy-extensions==1.0.0 # via typing-inspect -netaddr==1.3.0 # via oslo-config -oslo-config==9.6.0 # via -r requirements.in -oslo-i18n==6.4.0 # via oslo-config -packaging==24.1 # via marshmallow -pbr==6.1.0 # via oslo-i18n, stevedore -pluggy==1.5.0 # via -r requirements.in -pygments==2.18.0 # via rich -pyserial==3.5 # via pyserial-asyncio -pyserial-asyncio==0.6 # via kiss3 -python-engineio==4.10.1 # via python-socketio -python-socketio==5.11.4 # via -r requirements.in, flask-socketio -pytz==2024.2 # via -r requirements.in -pyyaml==6.0.2 # via -r requirements.in, oslo-config -requests==2.32.3 # via -r requirements.in, oslo-config, update-checker -rfc3986==2.0.0 # via oslo-config -rich==12.6.0 # via -r requirements.in -rush==2021.4.0 # via -r requirements.in -shellingham==1.5.4 # via -r requirements.in -simple-websocket==1.1.0 # via python-engineio -six==1.16.0 # via -r requirements.in -soupsieve==2.6 # via beautifulsoup4 -stevedore==5.3.0 # via oslo-config -tabulate==0.9.0 # via -r requirements.in -thesmuggler==1.0.1 # via -r requirements.in -typing-extensions==4.12.2 # via typing-inspect -typing-inspect==0.9.0 # via dataclasses-json -tzlocal==5.2 # via -r requirements.in -update-checker==0.18.0 # via -r requirements.in -urllib3==2.2.3 # via requests -validators==0.22.0 # via click-params -werkzeug==3.0.4 # via flask -wrapt==1.16.0 # via -r requirements.in, debtcollector, deprecated -wsproto==1.2.0 # via simple-websocket -zipp==3.20.2 # via importlib-metadata +aprslib==0.7.2 + # via -r requirements.in +attrs==24.2.0 + # via + # ax253 + # kiss3 + # rush +ax253==0.1.5.post1 + # via kiss3 +beautifulsoup4==4.12.3 + # via -r requirements.in +bidict==0.23.1 + # via python-socketio +bitarray==3.0.0 + # via + # ax253 + # kiss3 +blinker==1.8.2 + # via flask +certifi==2024.8.30 + # via requests +charset-normalizer==3.4.0 + # via requests +click==8.1.7 + # via + # -r requirements.in + # click-params + # flask +click-params==0.5.0 + # via -r requirements.in +commonmark==0.9.1 + # via rich +dataclasses==0.6 + # via -r requirements.in +dataclasses-json==0.6.7 + # via -r requirements.in +debtcollector==3.0.0 + # via oslo-config +deprecated==1.2.14 + # via click-params +flask==3.0.3 + # via + # -r requirements.in + # flask-httpauth + # flask-socketio +flask-httpauth==4.8.0 + # via -r requirements.in +flask-socketio==5.4.1 + # via -r requirements.in +geographiclib==2.0 + # via geopy +geopy==2.4.1 + # via -r requirements.in +h11==0.14.0 + # via wsproto +idna==3.10 + # via requests +imapclient==3.0.1 + # via -r requirements.in +importlib-metadata==8.5.0 + # via + # ax253 + # kiss3 +itsdangerous==2.2.0 + # via flask +jinja2==3.1.4 + # via flask +kiss3==8.0.0 + # via -r requirements.in +loguru==0.7.2 + # via -r requirements.in +markupsafe==3.0.2 + # via + # jinja2 + # werkzeug +marshmallow==3.23.0 + # via dataclasses-json +mypy-extensions==1.0.0 + # via typing-inspect +netaddr==1.3.0 + # via oslo-config +oslo-config==9.6.0 + # via -r requirements.in +oslo-i18n==6.4.0 + # via oslo-config +packaging==24.1 + # via marshmallow +pbr==6.1.0 + # via + # oslo-i18n + # stevedore +pluggy==1.5.0 + # via -r requirements.in +pygments==2.18.0 + # via rich +pyserial==3.5 + # via pyserial-asyncio +pyserial-asyncio==0.6 + # via kiss3 +python-engineio==4.10.1 + # via python-socketio +python-socketio==5.11.4 + # via + # -r requirements.in + # flask-socketio +pytz==2024.2 + # via -r requirements.in +pyyaml==6.0.2 + # via + # -r requirements.in + # oslo-config +requests==2.32.3 + # via + # -r requirements.in + # oslo-config + # update-checker +rfc3986==2.0.0 + # via oslo-config +rich==12.6.0 + # via -r requirements.in +rush==2021.4.0 + # via -r requirements.in +shellingham==1.5.4 + # via -r requirements.in +simple-websocket==1.1.0 + # via python-engineio +six==1.16.0 + # via -r requirements.in +soupsieve==2.6 + # via beautifulsoup4 +stevedore==5.3.0 + # via oslo-config +tabulate==0.9.0 + # via -r requirements.in +thesmuggler==1.0.1 + # via -r requirements.in +typing-extensions==4.12.2 + # via typing-inspect +typing-inspect==0.9.0 + # via dataclasses-json +tzlocal==5.2 + # via -r requirements.in +update-checker==0.18.0 + # via -r requirements.in +urllib3==2.2.3 + # via requests +validators==0.22.0 + # via click-params +werkzeug==3.0.6 + # via flask +wrapt==1.16.0 + # via + # -r requirements.in + # debtcollector + # deprecated +wsproto==1.2.0 + # via simple-websocket +zipp==3.20.2 + # via importlib-metadata From 3fd606946db8df368da0cd0e9f6e9a0c18d36525 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 31 Oct 2024 17:39:04 -0400 Subject: [PATCH 20/40] Fix a small issue with packet sending failures When a packet _send_direct() failed to send due to a network timeout or client issue, we don't want to count that as a send attempt for the packet. This patch catches that and allows for another retry. --- aprsd/cmds/admin.py | 5 ++++- aprsd/threads/tx.py | 30 ++++++++++++++++++++++++++---- aprsd/wsgi.py | 1 - 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/aprsd/cmds/admin.py b/aprsd/cmds/admin.py index cc77bed..6f3a8d9 100644 --- a/aprsd/cmds/admin.py +++ b/aprsd/cmds/admin.py @@ -14,7 +14,10 @@ from aprsd.main import cli os.environ["APRSD_ADMIN_COMMAND"] = "1" -from aprsd import wsgi as aprsd_wsgi +# this import has to happen AFTER we set the +# above environment variable, so that the code +# inside the wsgi.py has the value +from aprsd import wsgi as aprsd_wsgi # noqa CONF = cfg.CONF diff --git a/aprsd/threads/tx.py b/aprsd/threads/tx.py index 25e61b1..b7ed45b 100644 --- a/aprsd/threads/tx.py +++ b/aprsd/threads/tx.py @@ -89,6 +89,9 @@ def _send_direct(packet, aprs_client=None): except Exception as e: LOG.error(f"Failed to send packet: {packet}") LOG.error(e) + return False + else: + return True class SendPacketThread(aprsd_threads.APRSDThread): @@ -150,8 +153,17 @@ class SendPacketThread(aprsd_threads.APRSDThread): # no attempt time, so lets send it, and start # tracking the time. packet.last_send_time = int(round(time.time())) - _send_direct(packet) - packet.send_count += 1 + sent = False + try: + sent = _send_direct(packet) + except Exception: + LOG.error(f"Failed to send packet: {packet}") + else: + # If an exception happens while sending + # we don't want this attempt to count + # against the packet + if sent: + packet.send_count += 1 time.sleep(1) # Make sure we get called again. @@ -199,8 +211,18 @@ class SendAckThread(aprsd_threads.APRSDThread): send_now = True if send_now: - _send_direct(self.packet) - self.packet.send_count += 1 + sent = False + try: + sent = _send_direct(self.packet) + except Exception: + LOG.error(f"Failed to send packet: {self.packet}") + else: + # If an exception happens while sending + # we don't want this attempt to count + # against the packet + if sent: + self.packet.send_count += 1 + self.packet.last_send_time = int(round(time.time())) time.sleep(1) diff --git a/aprsd/wsgi.py b/aprsd/wsgi.py index 0d7d2d6..47da201 100644 --- a/aprsd/wsgi.py +++ b/aprsd/wsgi.py @@ -269,7 +269,6 @@ def init_app(config_file=None, log_level=None): return log_level -print(f"__name__ = {__name__}") if __name__ == "__main__": async_mode = "threading" From df0ca0448373b1ce5707b01b2acaca9a50340715 Mon Sep 17 00:00:00 2001 From: Hemna Date: Thu, 31 Oct 2024 09:17:36 -0400 Subject: [PATCH 21/40] Added some changes to listen to collect stats and only show those stats during listen --- aprsd/cmds/listen.py | 78 +++++++++----------------------------------- 1 file changed, 15 insertions(+), 63 deletions(-) diff --git a/aprsd/cmds/listen.py b/aprsd/cmds/listen.py index 60f48c5..0c2ab0e 100644 --- a/aprsd/cmds/listen.py +++ b/aprsd/cmds/listen.py @@ -49,41 +49,6 @@ def signal_handler(sig, frame): collector.Collector().collect() -@utils.singleton -class SimplePacketStats: - def __init__(self): - self.total_rx = 0 - self.total_tx = 0 - self.types = {} - - def rx(self, packet): - self.total_rx += 1 - ptype = packet.__class__.__name__ - if ptype not in self.types: - self.types[ptype] = {"tx": 0, "rx": 0} - self.types[ptype]["rx"] += 1 - - def tx(self, packet): - self.total_tx += 1 - ptype = packet.__class__.__name__ - if ptype not in self.types: - self.types[ptype] = {"tx": 0, "rx": 0} - self.types[ptype]["tx"] += 1 - - def flush(self): - pass - - def load(self): - pass - - def stats(self, serializable=False): - return { - "total_rx": self.total_rx, - "total_tx": self.total_tx, - "types": self.types, - } - - class APRSDListenThread(rx.APRSDRXThread): def __init__(self, packet_queue, packet_filter=None, plugin_manager=None): super().__init__(packet_queue) @@ -127,22 +92,31 @@ class APRSDListenThread(rx.APRSDRXThread): class ListenStatsThread(APRSDThread): + """Log the stats from the PacketList.""" + def __init__(self): - super().__init__("SimpleStats") + super().__init__("SimpleStatsLog") self._last_total_rx = 0 def loop(self): if self.loop_count % 10 == 0: # log the stats every 10 seconds stats_json = collector.Collector().collect() - stats = stats_json["SimplePacketStats"] - total_rx = stats["total_rx"] + stats = stats_json["PacketList"] + total_rx = stats["rx"] rate = (total_rx - self._last_total_rx) / 10 - LOG.warning(f"RX Rate: {rate} pps Total RX: {total_rx} - {self._last_total_rx}") - #LOG.error(stats) + LOGU.opt(colors=True).info( + f"RX Rate: {rate} pps " + f"Total RX: {total_rx} " + f"RX Last 10 secs: {total_rx - self._last_total_rx}", + ) self._last_total_rx = total_rx for k, v in stats["types"].items(): - LOGU.opt(colors=True).warning(f"Type: {k} RX: {v['rx']} TX: {v['tx']}") + thread_hex = f"fg {utils.hex_from_name(k)}" + LOGU.opt(colors=True).info( + f"<{thread_hex}>{k:<15} " + f"RX: {v['rx']} TX: {v['tx']}", + ) time.sleep(1) return True @@ -255,33 +229,11 @@ def listen( aprs_client.set_filter(filter) keepalive = keep_alive.KeepAliveThread() - # keepalive.start() if not CONF.enable_seen_list: # just deregister the class from the packet collector packet_collector.PacketCollector().unregister(seen_list.SeenList) - packet_collector.PacketCollector().register(SimplePacketStats) - - from aprsd.client import stats as client_stats - from aprsd.packets.packet_list import PacketList # noqa: F401 - from aprsd.packets.seen_list import SeenList # noqa: F401 - from aprsd.packets.tracker import PacketTrack # noqa: F401 - from aprsd.packets.watch_list import WatchList # noqa: F401 - from aprsd.plugins import email - from aprsd.threads import aprsd as aprsd_thread - c = collector.Collector() - # c.unregister_producer(app.APRSDStats) - c.unregister_producer(PacketList) - c.unregister_producer(WatchList) - #c.unregister_producer(PacketTrack) - c.unregister_producer(plugin.PluginManager) - c.unregister_producer(aprsd_thread.APRSDThreadList) - c.unregister_producer(email.EmailStats) - c.unregister_producer(client_stats.APRSClientStats) - c.unregister_producer(seen_list.SeenList) - c.register_producer(SimplePacketStats) - pm = None pm = plugin.PluginManager() if load_plugins: From add18f1a6f08a8eda6729c82634c0e68f73b48f8 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 11:33:19 -0500 Subject: [PATCH 22/40] Added new dump-stats command This new command will dump the existing packetstats from the last time it was written to disk. --- aprsd/cmds/fetch_stats.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/aprsd/cmds/fetch_stats.py b/aprsd/cmds/fetch_stats.py index 386ff41..f43386a 100644 --- a/aprsd/cmds/fetch_stats.py +++ b/aprsd/cmds/fetch_stats.py @@ -11,6 +11,7 @@ from rich.table import Table import aprsd from aprsd import cli_helper from aprsd.main import cli +from aprsd.threads.stats import StatsStore # setup the global logger @@ -154,3 +155,18 @@ def fetch_stats(ctx, host, port): watch_table.add_row(key, value["last"]) console.print(watch_table) + + +@cli.command() +@cli_helper.add_options(cli_helper.common_options) +@click.pass_context +@cli_helper.process_standard_options +def dump_stats(ctx): + """Dump the current stats from the running APRSD instance.""" + console = Console() + console.print(f"APRSD Fetch-Stats started version: {aprsd.__version__}") + + ss = StatsStore() + ss.load() + stats = ss.data + console.print(stats) From 7e8d7cdf8671fbc559400ef2041d5bbe6fdb8c6d Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 11:34:12 -0500 Subject: [PATCH 23/40] Update PacketList This patch updates some of the code in PacketList to be a bit more efficient. Thanks to the Cursor IDE :P --- aprsd/packets/packet_list.py | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/aprsd/packets/packet_list.py b/aprsd/packets/packet_list.py index 41eeadb..cc31da8 100644 --- a/aprsd/packets/packet_list.py +++ b/aprsd/packets/packet_list.py @@ -37,9 +37,10 @@ class PacketList(objectstore.ObjectStoreMixin): self._total_rx += 1 self._add(packet) ptype = packet.__class__.__name__ - if ptype not in self.data["types"]: - self.data["types"][ptype] = {"tx": 0, "rx": 0} - self.data["types"][ptype]["rx"] += 1 + type_stats = self.data["types"].setdefault( + ptype, {"tx": 0, "rx": 0}, + ) + type_stats["rx"] += 1 def tx(self, packet: type[core.Packet]): """Add a packet that was received.""" @@ -47,9 +48,10 @@ class PacketList(objectstore.ObjectStoreMixin): self._total_tx += 1 self._add(packet) ptype = packet.__class__.__name__ - if ptype not in self.data["types"]: - self.data["types"][ptype] = {"tx": 0, "rx": 0} - self.data["types"][ptype]["tx"] += 1 + type_stats = self.data["types"].setdefault( + ptype, {"tx": 0, "rx": 0}, + ) + type_stats["tx"] += 1 def add(self, packet): with self.lock: @@ -81,28 +83,16 @@ class PacketList(objectstore.ObjectStoreMixin): return self._total_tx def stats(self, serializable=False) -> dict: - # limit the number of packets to return to 50 with self.lock: - tmp = OrderedDict( - reversed( - list( - self.data.get("packets", OrderedDict()).items(), - ), - ), - ) - pkts = [] - count = 1 - for packet in tmp: - pkts.append(tmp[packet]) - count += 1 - if count > CONF.packet_list_stats_maxlen: - break + # Get last N packets directly using list slicing + packets_list = list(self.data.get("packets", {}).values()) + pkts = packets_list[-CONF.packet_list_stats_maxlen:][::-1] stats = { - "total_tracked": self._total_rx + self._total_rx, + "total_tracked": self._total_rx + self._total_tx, # Fixed typo: was rx + rx "rx": self._total_rx, "tx": self._total_tx, - "types": self.data.get("types", []), + "types": self.data.get("types", {}), # Changed default from [] to {} "packet_count": len(self.data.get("packets", [])), "maxlen": self.maxlen, "packets": pkts, From d808e217a2bdd1cfffa7d69344a0b9a664bf2f6f Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 11:46:50 -0500 Subject: [PATCH 24/40] Updated APRSClient Added some doc strings and some types for returns as well as an exception catching around create_client --- aprsd/client/base.py | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/aprsd/client/base.py b/aprsd/client/base.py index 252a5f9..1e87eea 100644 --- a/aprsd/client/base.py +++ b/aprsd/client/base.py @@ -32,7 +32,11 @@ class APRSClient: @abc.abstractmethod def stats(self) -> dict: - pass + """Return statistics about the client connection. + + Returns: + dict: Statistics about the connection and packet handling + """ def set_filter(self, filter): self.filter = filter @@ -46,22 +50,31 @@ class APRSClient: return self._client def _create_client(self): - self._client = self.setup_connection() - if self.filter: - LOG.info("Creating APRS client filter") - self._client.set_filter(self.filter) + try: + self._client = self.setup_connection() + if self.filter: + LOG.info("Creating APRS client filter") + self._client.set_filter(self.filter) + except Exception as e: + LOG.error(f"Failed to create APRS client: {e}") + self._client = None + raise def stop(self): if self._client: LOG.info("Stopping client connection.") self._client.stop() - def send(self, packet: core.Packet): - """Send a packet to the network.""" + def send(self, packet: core.Packet) -> None: + """Send a packet to the network. + + Args: + packet: The APRS packet to send + """ self.client.send(packet) @wrapt.synchronized(lock) - def reset(self): + def reset(self) -> None: """Call this to force a rebuild/reconnect.""" LOG.info("Resetting client connection.") if self._client: @@ -76,7 +89,11 @@ class APRSClient: @abc.abstractmethod def setup_connection(self): - pass + """Initialize and return the underlying APRS connection. + + Returns: + object: The initialized connection object + """ @staticmethod @abc.abstractmethod @@ -90,7 +107,11 @@ class APRSClient: @abc.abstractmethod def decode_packet(self, *args, **kwargs): - pass + """Decode raw APRS packet data into a Packet object. + + Returns: + Packet: Decoded APRS packet + """ @abc.abstractmethod def consumer(self, callback, blocking=False, immortal=False, raw=False): From 0be87d8b4f1fa258a5cd32188eccd4aa22b7446e Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 11:54:07 -0500 Subject: [PATCH 25/40] Calculate delta once and reuse it --- aprsd/cmds/listen.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/aprsd/cmds/listen.py b/aprsd/cmds/listen.py index 0c2ab0e..40b9793 100644 --- a/aprsd/cmds/listen.py +++ b/aprsd/cmds/listen.py @@ -104,13 +104,18 @@ class ListenStatsThread(APRSDThread): stats_json = collector.Collector().collect() stats = stats_json["PacketList"] total_rx = stats["rx"] - rate = (total_rx - self._last_total_rx) / 10 + rx_delta = total_rx - self._last_total_rx + rate = rx_delta / 10 + + # Log summary stats LOGU.opt(colors=True).info( f"RX Rate: {rate} pps " f"Total RX: {total_rx} " - f"RX Last 10 secs: {total_rx - self._last_total_rx}", + f"RX Last 10 secs: {rx_delta}", ) self._last_total_rx = total_rx + + # Log individual type stats for k, v in stats["types"].items(): thread_hex = f"fg {utils.hex_from_name(k)}" LOGU.opt(colors=True).info( From f1d066b8a921a6d383837f17e3e4394d57435368 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 12:15:59 -0500 Subject: [PATCH 26/40] Added unit test for client base This patch adds a unit test for the APRSClient base class. --- tests/client/test_client_base.py | 140 +++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 tests/client/test_client_base.py diff --git a/tests/client/test_client_base.py b/tests/client/test_client_base.py new file mode 100644 index 0000000..b6faf2c --- /dev/null +++ b/tests/client/test_client_base.py @@ -0,0 +1,140 @@ +import unittest +from unittest import mock + +from aprsd.client.base import APRSClient +from aprsd.packets import core + + +class MockAPRSClient(APRSClient): + """Concrete implementation of APRSClient for testing.""" + + def stats(self): + return {"packets_received": 0, "packets_sent": 0} + + def setup_connection(self): + mock_connection = mock.MagicMock() + # Configure the mock with required methods + mock_connection.close = mock.MagicMock() + mock_connection.stop = mock.MagicMock() + mock_connection.set_filter = mock.MagicMock() + mock_connection.send = mock.MagicMock() + self._client = mock_connection + return mock_connection + + def decode_packet(self, *args, **kwargs): + return mock.MagicMock() + + def consumer(self, callback, blocking=False, immortal=False, raw=False): + pass + + def is_alive(self): + return True + + def close(self): + pass + + @staticmethod + def is_enabled(): + return True + + @staticmethod + def transport(): + return "mock" + + def reset(self): + """Mock implementation of reset.""" + if self._client: + self._client.close() + self._client = self.setup_connection() + if self.filter: + self._client.set_filter(self.filter) + + +class TestAPRSClient(unittest.TestCase): + def setUp(self): + # Reset the singleton instance before each test + APRSClient._instance = None + APRSClient._client = None + self.client = MockAPRSClient() + + def test_singleton_pattern(self): + """Test that multiple instantiations return the same instance.""" + client1 = MockAPRSClient() + client2 = MockAPRSClient() + self.assertIs(client1, client2) + + def test_set_filter(self): + """Test setting APRS filter.""" + # Get the existing mock client that was created in __init__ + mock_client = self.client._client + + test_filter = "m/50" + self.client.set_filter(test_filter) + self.assertEqual(self.client.filter, test_filter) + # The filter is set once during set_filter() and once during reset() + mock_client.set_filter.assert_called_with(test_filter) + + @mock.patch("aprsd.client.base.LOG") + def test_reset(self, mock_log): + """Test client reset functionality.""" + # Create a new mock client with the necessary methods + old_client = mock.MagicMock() + self.client._client = old_client + + self.client.reset() + + # Verify the old client was closed + old_client.close.assert_called_once() + + # Verify a new client was created + self.assertIsNotNone(self.client._client) + self.assertNotEqual(old_client, self.client._client) + + def test_send_packet(self): + """Test sending an APRS packet.""" + mock_packet = mock.Mock(spec=core.Packet) + self.client.send(mock_packet) + self.client._client.send.assert_called_once_with(mock_packet) + + def test_stop(self): + """Test stopping the client.""" + # Ensure client is created first + self.client._create_client() + + self.client.stop() + self.client._client.stop.assert_called_once() + + @mock.patch("aprsd.client.base.LOG") + def test_create_client_failure(self, mock_log): + """Test handling of client creation failure.""" + # Make setup_connection raise an exception + with mock.patch.object( + self.client, "setup_connection", + side_effect=Exception("Connection failed"), + ): + with self.assertRaises(Exception): + self.client._create_client() + + self.assertIsNone(self.client._client) + mock_log.error.assert_called_once() + + def test_client_property(self): + """Test the client property creates client if none exists.""" + self.client._client = None + client = self.client.client + self.assertIsNotNone(client) + + def test_filter_applied_on_creation(self): + """Test that filter is applied when creating new client.""" + test_filter = "m/50" + self.client.set_filter(test_filter) + + # Force client recreation + self.client.reset() + + # Verify filter was applied to new client + self.client._client.set_filter.assert_called_with(test_filter) + + +if __name__ == "__main__": + unittest.main() From ab2de86726106582c06230ed4e513d78f0bafb03 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 12:32:16 -0500 Subject: [PATCH 27/40] Added unit test for ClientFactory --- aprsd/plugins/fortune.py | 4 +- aprsd/plugins/location.py | 10 +++-- tests/client/test_factory.py | 75 ++++++++++++++++++++++++++++++++++++ tests/test_main.py | 8 +--- 4 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 tests/client/test_factory.py diff --git a/aprsd/plugins/fortune.py b/aprsd/plugins/fortune.py index 0ac6bb1..d0f44ca 100644 --- a/aprsd/plugins/fortune.py +++ b/aprsd/plugins/fortune.py @@ -8,7 +8,7 @@ from aprsd.utils import trace LOG = logging.getLogger("APRSD") -DEFAULT_FORTUNE_PATH = '/usr/games/fortune' +DEFAULT_FORTUNE_PATH = "/usr/games/fortune" class FortunePlugin(plugin.APRSDRegexCommandPluginBase): @@ -45,7 +45,7 @@ class FortunePlugin(plugin.APRSDRegexCommandPluginBase): command, shell=True, timeout=3, - universal_newlines=True, + text=True, ) output = ( output.replace("\r", "") diff --git a/aprsd/plugins/location.py b/aprsd/plugins/location.py index 4855979..879f12b 100644 --- a/aprsd/plugins/location.py +++ b/aprsd/plugins/location.py @@ -2,8 +2,10 @@ import logging import re import time -from geopy.geocoders import ArcGIS, AzureMaps, Baidu, Bing, GoogleV3 -from geopy.geocoders import HereV7, Nominatim, OpenCage, TomTom, What3WordsV3, Woosmap +from geopy.geocoders import ( + ArcGIS, AzureMaps, Baidu, Bing, GoogleV3, HereV7, Nominatim, OpenCage, + TomTom, What3WordsV3, Woosmap, +) from oslo_config import cfg from aprsd import packets, plugin, plugin_utils @@ -39,8 +41,8 @@ class USGov: result = plugin_utils.get_weather_gov_for_gps(lat, lon) # LOG.info(f"WEATHER: {result}") # LOG.info(f"area description {result['location']['areaDescription']}") - if 'location' in result: - loc = UsLocation(result['location']['areaDescription']) + if "location" in result: + loc = UsLocation(result["location"]["areaDescription"]) else: loc = UsLocation("Unknown Location") diff --git a/tests/client/test_factory.py b/tests/client/test_factory.py new file mode 100644 index 0000000..4c2257e --- /dev/null +++ b/tests/client/test_factory.py @@ -0,0 +1,75 @@ +import unittest +from unittest import mock + +from aprsd.client.factory import Client, ClientFactory + + +class MockClient: + """Mock client for testing.""" + + @classmethod + def is_enabled(cls): + return True + + @classmethod + def is_configured(cls): + return True + + +class TestClientFactory(unittest.TestCase): + """Test cases for ClientFactory.""" + + def setUp(self): + """Set up test fixtures.""" + self.factory = ClientFactory() + # Clear any registered clients from previous tests + self.factory.clients = [] + + def test_singleton(self): + """Test that ClientFactory is a singleton.""" + factory2 = ClientFactory() + self.assertEqual(self.factory, factory2) + + def test_register_client(self): + """Test registering a client.""" + self.factory.register(MockClient) + self.assertIn(MockClient, self.factory.clients) + + def test_register_invalid_client(self): + """Test registering an invalid client raises error.""" + invalid_client = mock.MagicMock(spec=Client) + with self.assertRaises(ValueError): + self.factory.register(invalid_client) + + def test_create_client(self): + """Test creating a client.""" + self.factory.register(MockClient) + client = self.factory.create() + self.assertIsInstance(client, MockClient) + + def test_create_no_clients(self): + """Test creating a client with no registered clients.""" + with self.assertRaises(Exception): + self.factory.create() + + def test_is_client_enabled(self): + """Test checking if any client is enabled.""" + self.factory.register(MockClient) + self.assertTrue(self.factory.is_client_enabled()) + + def test_is_client_enabled_none(self): + """Test checking if any client is enabled when none are.""" + MockClient.is_enabled = classmethod(lambda cls: False) + self.factory.register(MockClient) + self.assertFalse(self.factory.is_client_enabled()) + + def test_is_client_configured(self): + """Test checking if any client is configured.""" + self.factory.register(MockClient) + self.assertTrue(self.factory.is_client_configured()) + + def test_is_client_configured_none(self): + """Test checking if any client is configured when none are.""" + MockClient.is_configured = classmethod(lambda cls: False) + self.factory.register(MockClient) + self.assertFalse(self.factory.is_client_configured()) diff --git a/tests/test_main.py b/tests/test_main.py index ab1303d..276a42c 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,15 +1,9 @@ -import sys import unittest +from unittest import mock from aprsd.plugins import email -if sys.version_info >= (3, 2): - from unittest import mock -else: - from unittest import mock - - class TestMain(unittest.TestCase): @mock.patch("aprsd.plugins.email._imap_connect") @mock.patch("aprsd.plugins.email._smtp_connect") From 224686cac5e4cefd559fb9149ccac18069914423 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 13:39:44 -0500 Subject: [PATCH 28/40] Added unit test for APRSISClient --- tests/client/test_aprsis.py | 81 +++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tests/client/test_aprsis.py diff --git a/tests/client/test_aprsis.py b/tests/client/test_aprsis.py new file mode 100644 index 0000000..e1c7bad --- /dev/null +++ b/tests/client/test_aprsis.py @@ -0,0 +1,81 @@ +import datetime +import unittest +from unittest import mock + +from aprsd import exception +from aprsd.client.aprsis import APRSISClient + + +class TestAPRSISClient(unittest.TestCase): + """Test cases for APRSISClient.""" + + def setUp(self): + """Set up test fixtures.""" + super().setUp() + + # Mock the config + self.mock_conf = mock.MagicMock() + self.mock_conf.aprs_network.enabled = True + self.mock_conf.aprs_network.login = "TEST" + self.mock_conf.aprs_network.password = "12345" + self.mock_conf.aprs_network.host = "localhost" + self.mock_conf.aprs_network.port = 14580 + + @mock.patch("aprsd.client.base.APRSClient") + @mock.patch("aprsd.client.drivers.aprsis.Aprsdis") + def test_stats_not_configured(self, mock_aprsdis, mock_base): + """Test stats when client is not configured.""" + mock_client = mock.MagicMock() + mock_aprsdis.return_value = mock_client + + with mock.patch("aprsd.client.aprsis.cfg.CONF", self.mock_conf): + self.client = APRSISClient() + + with mock.patch.object(APRSISClient, "is_configured", return_value=False): + stats = self.client.stats() + self.assertEqual({}, stats) + + @mock.patch("aprsd.client.base.APRSClient") + @mock.patch("aprsd.client.drivers.aprsis.Aprsdis") + def test_stats_configured(self, mock_aprsdis, mock_base): + """Test stats when client is configured.""" + mock_client = mock.MagicMock() + mock_aprsdis.return_value = mock_client + + with mock.patch("aprsd.client.aprsis.cfg.CONF", self.mock_conf): + self.client = APRSISClient() + + mock_client = mock.MagicMock() + mock_client.server_string = "test.server:14580" + mock_client.aprsd_keepalive = datetime.datetime.now() + self.client._client = mock_client + self.client.filter = "m/50" + + with mock.patch.object(APRSISClient, "is_configured", return_value=True): + stats = self.client.stats() + self.assertEqual( + { + "server_string": mock_client.server_string, + "sever_keepalive": mock_client.aprsd_keepalive, + "filter": "m/50", + }, stats, + ) + + def test_is_configured_missing_login(self): + """Test is_configured with missing login.""" + self.mock_conf.aprs_network.login = None + with self.assertRaises(exception.MissingConfigOptionException): + APRSISClient.is_configured() + + def test_is_configured_missing_password(self): + """Test is_configured with missing password.""" + self.mock_conf.aprs_network.password = None + with self.assertRaises(exception.MissingConfigOptionException): + APRSISClient.is_configured() + + def test_is_configured_missing_host(self): + """Test is_configured with missing host.""" + self.mock_conf.aprs_network.host = None + with mock.patch("aprsd.client.aprsis.cfg.CONF", self.mock_conf): + with self.assertRaises(exception.MissingConfigOptionException): + APRSISClient.is_configured() From 579d0c95a085a7cb796ae9476da8c48fca201601 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 15:04:48 -0500 Subject: [PATCH 29/40] optimized Packet.get() --- aprsd/packets/core.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/aprsd/packets/core.py b/aprsd/packets/core.py index fa43f3f..52bea31 100644 --- a/aprsd/packets/core.py +++ b/aprsd/packets/core.py @@ -63,15 +63,11 @@ def _init_msgNo(): # noqa: N802 def _translate_fields(raw: dict) -> dict: - translate_fields = { - "from": "from_call", - "to": "to_call", - } - # First translate some fields - for key in translate_fields: - if key in raw: - raw[translate_fields[key]] = raw[key] - del raw[key] + # Direct key checks instead of iteration + if "from" in raw: + raw["from_call"] = raw.pop("from") + if "to" in raw: + raw["to_call"] = raw.pop("to") # addresse overrides to_call if "addresse" in raw: @@ -110,11 +106,7 @@ class Packet: via: Optional[str] = field(default=None, compare=False, hash=False) def get(self, key: str, default: Optional[str] = None): - """Emulate a getter on a dict.""" - if hasattr(self, key): - return getattr(self, key) - else: - return default + return getattr(self, key, default) @property def key(self) -> str: From 563b06876c02eb9193b0c7559765e47d932a5978 Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 20:15:52 -0500 Subject: [PATCH 30/40] fixed name for dump-stats output Also added a console.stats during loading of the stats --- aprsd/cmds/fetch_stats.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/aprsd/cmds/fetch_stats.py b/aprsd/cmds/fetch_stats.py index f43386a..e037371 100644 --- a/aprsd/cmds/fetch_stats.py +++ b/aprsd/cmds/fetch_stats.py @@ -164,9 +164,10 @@ def fetch_stats(ctx, host, port): def dump_stats(ctx): """Dump the current stats from the running APRSD instance.""" console = Console() - console.print(f"APRSD Fetch-Stats started version: {aprsd.__version__}") + console.print(f"APRSD Dump-Stats started version: {aprsd.__version__}") - ss = StatsStore() - ss.load() - stats = ss.data - console.print(stats) + with console.status("Dumping stats"): + ss = StatsStore() + ss.load() + stats = ss.data + console.print(stats) From 229155d0ee63aa80c8bc4ffbdbb5a3eb8a4a6e7c Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 5 Nov 2024 20:49:11 -0500 Subject: [PATCH 31/40] updated README.rst this patch includes information on building your own plugins for APRSD --- README.rst | 70 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/README.rst b/README.rst index 8d2e121..401c1d5 100644 --- a/README.rst +++ b/README.rst @@ -11,6 +11,37 @@ ____________________ `APRSD `_ is a Ham radio `APRS `_ message command gateway built on python. +Table of Contents +================= + +1. `What is APRSD <#what-is-aprsd>`_ +2. `APRSD Overview Diagram <#aprsd-overview-diagram>`_ +3. `Typical Use Case <#typical-use-case>`_ +4. `Installation <#installation>`_ +5. `Example Usage <#example-usage>`_ +6. `Help <#help>`_ +7. `Commands <#commands>`_ + - `Configuration <#configuration>`_ + - `Server <#server>`_ + - `Current List of Built-in Plugins <#current-list-of-built-in-plugins>`_ + - `Pypi.org APRSD Installable Plugin Packages <#pypiorg-aprsd-installable-plugin-packages>`_ + - `🐍 APRSD Installed 3rd Party Plugins <#aprsd-installed-3rd-party-plugins>`_ + - `Send Message <#send-message>`_ + - `Send Email (Radio to SMTP Server) <#send-email-radio-to-smtp-server>`_ + - `Receive Email (IMAP Server to Radio) <#receive-email-imap-server-to-radio>`_ + - `Location <#location>`_ + - `Web Admin Interface <#web-admin-interface>`_ +8. `Development <#development>`_ + - `Building Your Own APRSD Plugins <#building-your-own-aprsd-plugins>`_ +9. `Workflow <#workflow>`_ +10. `Release <#release>`_ +11. `Docker Container <#docker-container>`_ + - `Building <#building-1>`_ + - `Official Build <#official-build>`_ + - `Development Build <#development-build>`_ + - `Running the Container <#running-the-container>`_ + + What is APRSD ============= APRSD is a python application for interacting with the APRS network and providing @@ -147,8 +178,7 @@ look for incomming commands to the callsign configured in the config file Current list of built-in plugins -====================================== - +-------------------------------- :: └─> aprsd list-plugins @@ -300,18 +330,21 @@ AND... ping, fortune, time..... Web Admin Interface =================== +APRSD has a web admin interface that allows you to view the status of the running APRSD server instance. +The web admin interface shows graphs of packet counts, packet types, number of threads running, the latest +packets sent and received, and the status of each of the plugins that are loaded. You can also view the logfile +and view the raw APRSD configuration file. + To start the web admin interface, You have to install gunicorn in your virtualenv that already has aprsd installed. :: source /bin/activate - pip install gunicorn - gunicorn --bind 0.0.0.0:8080 "aprsd.wsgi:app" + aprsd admin --loglevel INFO The web admin interface will be running on port 8080 on the local machine. http://localhost:8080 - Development =========== @@ -320,7 +353,7 @@ Development * ``make`` Workflow -======== +-------- While working aprsd, The workflow is as follows: @@ -349,7 +382,7 @@ While working aprsd, The workflow is as follows: Release -======= +------- To do release to pypi: @@ -370,6 +403,29 @@ To do release to pypi: ``make upload`` +Building your own APRSD plugins +------------------------------- + +APRSD plugins are the mechanism by which APRSD can respond to APRS Messages. The plugins are loaded at server startup +and can also be loaded at listen startup. When a packet is received by APRSD, it is passed to each of the plugins +in the order they were registered in the config file. The plugins can then decide what to do with the packet. +When a plugin is called, it is passed a APRSD Packet object. The plugin can then do something with the packet and +return a reply message if desired. If a plugin does not want to reply to the packet, it can just return None. +When a plugin does return a reply message, APRSD will send the reply message to the appropriate destination. + +For example, when a 'ping' message is received, the PingPlugin will return a reply message of 'pong'. When APRSD +receives the 'pong' message, it will be sent back to the original caller of the ping message. + +APRSD plugins are simply python packages that can be installed from pypi.org. They are installed into the +aprsd virtualenv and can be imported by APRSD at runtime. The plugins are registered in the config file and loaded +at startup of the aprsd server command or the aprsd listen command. + +Overview +-------- +You can build your own plugins by following the instructions in the `Building your own APRSD plugins`_ section. + +Plugins are called by APRSD when packe + Docker Container ================ From 2fdc7b111d31006b568e820ee7aaa8290f5944b9 Mon Sep 17 00:00:00 2001 From: Hemna Date: Wed, 6 Nov 2024 08:43:25 -0500 Subject: [PATCH 32/40] Only load EmailStats if email is enabled This patch updates the stats collector to only register the EmailStats when the email plugin is enabled. --- aprsd/plugins/email.py | 6 ++++++ aprsd/stats/__init__.py | 2 -- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/aprsd/plugins/email.py b/aprsd/plugins/email.py index 12657a1..b7cd526 100644 --- a/aprsd/plugins/email.py +++ b/aprsd/plugins/email.py @@ -12,6 +12,7 @@ import imapclient from oslo_config import cfg from aprsd import packets, plugin, threads, utils +from aprsd.stats import collector from aprsd.threads import tx from aprsd.utils import trace @@ -126,6 +127,11 @@ class EmailPlugin(plugin.APRSDRegexCommandPluginBase): shortcuts = _build_shortcuts_dict() LOG.info(f"Email shortcuts {shortcuts}") + + # Register the EmailStats producer with the stats collector + # We do this here to prevent EmailStats from being registered + # when email is not enabled in the config file. + collector.Collector().register_producer(EmailStats) else: LOG.info("Email services not enabled.") self.enabled = False diff --git a/aprsd/stats/__init__.py b/aprsd/stats/__init__.py index 2059a65..0e68df7 100644 --- a/aprsd/stats/__init__.py +++ b/aprsd/stats/__init__.py @@ -1,7 +1,6 @@ from aprsd import plugin from aprsd.client import stats as client_stats from aprsd.packets import packet_list, seen_list, tracker, watch_list -from aprsd.plugins import email from aprsd.stats import app, collector from aprsd.threads import aprsd @@ -15,6 +14,5 @@ stats_collector.register_producer(watch_list.WatchList) stats_collector.register_producer(tracker.PacketTrack) stats_collector.register_producer(plugin.PluginManager) stats_collector.register_producer(aprsd.APRSDThreadList) -stats_collector.register_producer(email.EmailStats) stats_collector.register_producer(client_stats.APRSClientStats) stats_collector.register_producer(seen_list.SeenList) From d0018a8cd39d8d9b74b83655083b33be2e2b70a7 Mon Sep 17 00:00:00 2001 From: Hemna Date: Wed, 6 Nov 2024 11:38:06 -0500 Subject: [PATCH 33/40] Added rich output for dump-stats this patch adds table formatted output for the stats in the aprsd dump-stats command. You can also show the stats in raw json/dict format by passing --raw. You can also limit the sections of the stats by passing --show-section aprsdstats --- aprsd/cmds/fetch_stats.py | 142 +++++++++++++++++++++++++++++++++++++- 1 file changed, 140 insertions(+), 2 deletions(-) diff --git a/aprsd/cmds/fetch_stats.py b/aprsd/cmds/fetch_stats.py index e037371..fa235c1 100644 --- a/aprsd/cmds/fetch_stats.py +++ b/aprsd/cmds/fetch_stats.py @@ -159,9 +159,35 @@ def fetch_stats(ctx, host, port): @cli.command() @cli_helper.add_options(cli_helper.common_options) +@click.option( + "--raw", + is_flag=True, + default=False, + help="Dump raw stats instead of formatted output.", +) +@click.option( + "--show-section", + default=["All"], + help="Show specific sections of the stats. " + " Choices: All, APRSDStats, APRSDThreadList, APRSClientStats," + " PacketList, SeenList, WatchList", + multiple=True, + type=click.Choice( + [ + "All", + "APRSDStats", + "APRSDThreadList", + "APRSClientStats", + "PacketList", + "SeenList", + "WatchList", + ], + case_sensitive=False, + ), +) @click.pass_context @cli_helper.process_standard_options -def dump_stats(ctx): +def dump_stats(ctx, raw, show_section): """Dump the current stats from the running APRSD instance.""" console = Console() console.print(f"APRSD Dump-Stats started version: {aprsd.__version__}") @@ -170,4 +196,116 @@ def dump_stats(ctx): ss = StatsStore() ss.load() stats = ss.data - console.print(stats) + if raw: + if "All" in show_section: + console.print(stats) + return + else: + for section in show_section: + console.print(f"Dumping {section} section:") + console.print(stats[section]) + return + + t = Table(title="APRSD Stats") + t.add_column("Key") + t.add_column("Value") + for key, value in stats["APRSDStats"].items(): + t.add_row(key, str(value)) + + if "All" in show_section or "APRSDStats" in show_section: + console.print(t) + + # Show the thread list + t = Table(title="Thread List") + t.add_column("Name") + t.add_column("Class") + t.add_column("Alive?") + t.add_column("Loop Count") + t.add_column("Age") + for name, value in stats["APRSDThreadList"].items(): + t.add_row( + name, + value["class"], + str(value["alive"]), + str(value["loop_count"]), + str(value["age"]), + ) + + if "All" in show_section or "APRSDThreadList" in show_section: + console.print(t) + + # Show the plugins + t = Table(title="Plugin List") + t.add_column("Name") + t.add_column("Enabled") + t.add_column("Version") + t.add_column("TX") + t.add_column("RX") + for name, value in stats["PluginManager"].items(): + t.add_row( + name, + str(value["enabled"]), + value["version"], + str(value["tx"]), + str(value["rx"]), + ) + + if "All" in show_section or "PluginManager" in show_section: + console.print(t) + + # Now show the client stats + t = Table(title="Client Stats") + t.add_column("Key") + t.add_column("Value") + for key, value in stats["APRSClientStats"].items(): + t.add_row(key, str(value)) + + if "All" in show_section or "APRSClientStats" in show_section: + console.print(t) + + # now show the packet list + packet_list = stats.get("PacketList") + t = Table(title="Packet List") + t.add_column("Key") + t.add_column("Value") + t.add_row("Total Received", str(packet_list["rx"])) + t.add_row("Total Sent", str(packet_list["tx"])) + + if "All" in show_section or "PacketList" in show_section: + console.print(t) + + # now show the seen list + seen_list = stats.get("SeenList") + sorted_seen_list = sorted( + seen_list.items(), + ) + t = Table(title="Seen List") + t.add_column("Callsign") + t.add_column("Message Count") + t.add_column("Last Heard") + for key, value in sorted_seen_list: + t.add_row( + key, + str(value["count"]), + str(value["last"]), + ) + + if "All" in show_section or "SeenList" in show_section: + console.print(t) + + # now show the watch list + watch_list = stats.get("WatchList") + sorted_watch_list = sorted( + watch_list.items(), + ) + t = Table(title="Watch List") + t.add_column("Callsign") + t.add_column("Last Heard") + for key, value in sorted_watch_list: + t.add_row( + key, + str(value["last"]), + ) + + if "All" in show_section or "WatchList" in show_section: + console.print(t) From 6e62ac14b8cca193faf6c73464eb47e54efd7abe Mon Sep 17 00:00:00 2001 From: Hemna Date: Wed, 6 Nov 2024 17:59:10 -0500 Subject: [PATCH 34/40] Allow disabling sending all AckPackets This patch adds a new config option 'enable_sending_ack_packets', which is by default set to True. This allows the admin to disable sending Ack Packets for MessagePackets entirely. --- aprsd/conf/common.py | 6 ++++++ aprsd/threads/rx.py | 5 +++++ aprsd/threads/tx.py | 5 ++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/aprsd/conf/common.py b/aprsd/conf/common.py index 07d69cc..256c730 100644 --- a/aprsd/conf/common.py +++ b/aprsd/conf/common.py @@ -136,6 +136,12 @@ aprsd_opts = [ default=True, help="Set this to False, to disable logging of packets to the log file.", ), + cfg.BoolOpt( + "enable_sending_ack_packets", + default=True, + help="Set this to False, to disable sending of ack packets. This will entirely stop" + "APRSD from sending ack packets.", + ), ] watch_list_opts = [ diff --git a/aprsd/threads/rx.py b/aprsd/threads/rx.py index 3c88958..c770096 100644 --- a/aprsd/threads/rx.py +++ b/aprsd/threads/rx.py @@ -151,6 +151,11 @@ class APRSDProcessPacketThread(APRSDThread): def __init__(self, packet_queue): self.packet_queue = packet_queue super().__init__("ProcessPKT") + if not CONF.enable_sending_ack_packets: + LOG.warning( + "Sending ack packets is disabled, messages " + "will not be acknowledged.", + ) def process_ack_packet(self, packet): """We got an ack for a message, no need to resend it.""" diff --git a/aprsd/threads/tx.py b/aprsd/threads/tx.py index b7ed45b..83ab140 100644 --- a/aprsd/threads/tx.py +++ b/aprsd/threads/tx.py @@ -53,7 +53,10 @@ def send(packet: core.Packet, direct=False, aprs_client=None): # After prepare, as prepare assigns the msgNo collector.PacketCollector().tx(packet) if isinstance(packet, core.AckPacket): - _send_ack(packet, direct=direct, aprs_client=aprs_client) + if CONF.enable_sending_ack_packets: + _send_ack(packet, direct=direct, aprs_client=aprs_client) + else: + LOG.info("Sending ack packets is disabled. Not sending AckPacket.") else: _send_packet(packet, direct=direct, aprs_client=aprs_client) From 9f3c8f889f1866a7747bc82c1b3c2c39687dcb1c Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 8 Nov 2024 13:20:42 -0500 Subject: [PATCH 35/40] Allow loading a specific list of plugins Updated the PluginManager to allow only activating a specific list of plugins passed in, instead of what is in the config file. --- aprsd/plugin.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/aprsd/plugin.py b/aprsd/plugin.py index 2819e81..9a8ae64 100644 --- a/aprsd/plugin.py +++ b/aprsd/plugin.py @@ -472,7 +472,10 @@ class PluginManager: del self._pluggy_pm self.setup_plugins() - def setup_plugins(self, load_help_plugin=True): + def setup_plugins( + self, load_help_plugin=True, + plugin_list=[], + ): """Create the plugin manager and register plugins.""" LOG.info("Loading APRSD Plugins") @@ -481,9 +484,13 @@ class PluginManager: _help = HelpPlugin() self._pluggy_pm.register(_help) - enabled_plugins = CONF.enabled_plugins - if enabled_plugins: - for p_name in enabled_plugins: + # if plugins_list is passed in, only load + # those plugins. + if plugin_list: + for plugin_name in plugin_list: + self._load_plugin(plugin_name) + elif CONF.enabled_plugins: + for p_name in CONF.enabled_plugins: self._load_plugin(p_name) else: # Enabled plugins isn't set, so we default to loading all of From adcf94d8c755af7020ac93d7fb3731c637aefc3e Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 8 Nov 2024 13:21:38 -0500 Subject: [PATCH 36/40] Catch and log exceptions in consumer This patch adds a try except block around the APRSIS consumer. This gives us a chance to log the specific exception, so we can see why the consumer failed. --- aprsd/client/aprsis.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/aprsd/client/aprsis.py b/aprsd/client/aprsis.py index 2079be0..402685a 100644 --- a/aprsd/client/aprsis.py +++ b/aprsd/client/aprsis.py @@ -126,7 +126,10 @@ class APRSISClient(base.APRSClient): return aprs_client def consumer(self, callback, blocking=False, immortal=False, raw=False): - self._client.consumer( - callback, blocking=blocking, - immortal=immortal, raw=raw, - ) + try: + self._client.consumer( + callback, blocking=blocking, + immortal=immortal, raw=raw, + ) + except Exception as e: + LOG.error(f"Exception in consumer: {e}") From bd0bcc19244a8a5bf0bf851533eb303e7845c8ca Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 8 Nov 2024 13:22:53 -0500 Subject: [PATCH 37/40] Fixed the protocol for Stats Collector The stats() method had an inconsistent name for serializable. --- aprsd/stats/collector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aprsd/stats/collector.py b/aprsd/stats/collector.py index d899031..c63dd31 100644 --- a/aprsd/stats/collector.py +++ b/aprsd/stats/collector.py @@ -10,7 +10,7 @@ LOG = logging.getLogger("APRSD") @runtime_checkable class StatsProducer(Protocol): """The StatsProducer protocol is used to define the interface for collecting stats.""" - def stats(self, serializeable=False) -> dict: + def stats(self, serializable=False) -> dict: """provide stats in a dictionary format.""" ... From 7d1e73950288c721bb5a07224bc4b5bb52bb9164 Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 8 Nov 2024 13:28:46 -0500 Subject: [PATCH 38/40] Added new features to listen command. Changed the default to not log incoming packets. If you want to see the packets logged, then pass in --log-packets. Added the ability to specify a list of plugins to load by passing in --enable-plugin You can specify --enable-plugin multiple times to enable multiple plugins. Added new switch to enable the packet stats thread logging of stats of all the packets seen. --enable-packet-stats. This is off by default. --- aprsd/cmds/listen.py | 55 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/aprsd/cmds/listen.py b/aprsd/cmds/listen.py index 40b9793..47a6deb 100644 --- a/aprsd/cmds/listen.py +++ b/aprsd/cmds/listen.py @@ -50,12 +50,16 @@ def signal_handler(sig, frame): class APRSDListenThread(rx.APRSDRXThread): - def __init__(self, packet_queue, packet_filter=None, plugin_manager=None): + def __init__( + self, packet_queue, packet_filter=None, plugin_manager=None, + enabled_plugins=[], log_packets=False, + ): super().__init__(packet_queue) self.packet_filter = packet_filter self.plugin_manager = plugin_manager if self.plugin_manager: LOG.info(f"Plugins {self.plugin_manager.get_message_plugins()}") + self.log_packets = log_packets def process_packet(self, *args, **kwargs): packet = self._client.decode_packet(*args, **kwargs) @@ -76,13 +80,16 @@ class APRSDListenThread(rx.APRSDRXThread): if self.packet_filter: filter_class = filters[self.packet_filter] if isinstance(packet, filter_class): - packet_log.log(packet) + if self.log_packets: + packet_log.log(packet) if self.plugin_manager: # Don't do anything with the reply # This is the listen only command. self.plugin_manager.run(packet) else: - packet_log.log(packet) + if self.log_packets: + LOG.error("PISS") + packet_log.log(packet) if self.plugin_manager: # Don't do anything with the reply. # This is the listen only command. @@ -95,7 +102,7 @@ class ListenStatsThread(APRSDThread): """Log the stats from the PacketList.""" def __init__(self): - super().__init__("SimpleStatsLog") + super().__init__("PacketStatsLog") self._last_total_rx = 0 def loop(self): @@ -161,6 +168,11 @@ class ListenStatsThread(APRSDThread): ), help="Filter by packet type", ) +@click.option( + "--enable-plugin", + multiple=True, + help="Enable a plugin. This is the name of the file in the plugins directory.", +) @click.option( "--load-plugins", default=False, @@ -172,6 +184,18 @@ class ListenStatsThread(APRSDThread): nargs=-1, required=True, ) +@click.option( + "--log-packets", + default=False, + is_flag=True, + help="Log incoming packets.", +) +@click.option( + "--enable-packet-stats", + default=False, + is_flag=True, + help="Enable packet stats periodic logging.", +) @click.pass_context @cli_helper.process_standard_options def listen( @@ -179,8 +203,11 @@ def listen( aprs_login, aprs_password, packet_filter, + enable_plugin, load_plugins, filter, + log_packets, + enable_packet_stats, ): """Listen to packets on the APRS-IS Network based on FILTER. @@ -240,15 +267,26 @@ def listen( packet_collector.PacketCollector().unregister(seen_list.SeenList) pm = None - pm = plugin.PluginManager() if load_plugins: + pm = plugin.PluginManager() LOG.info("Loading plugins") pm.setup_plugins(load_help_plugin=False) + elif enable_plugin: + pm = plugin.PluginManager() + pm.setup_plugins( + load_help_plugin=False, + plugin_list=enable_plugin, + ) else: LOG.warning( "Not Loading any plugins use --load-plugins to load what's " "defined in the config file.", ) + + if pm: + for p in pm.get_plugins(): + LOG.info("Loaded plugin %s", p.__class__.__name__) + stats = stats_thread.APRSDStatsStoreThread() stats.start() @@ -257,11 +295,14 @@ def listen( packet_queue=threads.packet_queue, packet_filter=packet_filter, plugin_manager=pm, + enabled_plugins=enable_plugin, + log_packets=log_packets, ) LOG.debug("Start APRSDListenThread") listen_thread.start() - listen_stats = ListenStatsThread() - listen_stats.start() + if enable_packet_stats: + listen_stats = ListenStatsThread() + listen_stats.start() keepalive.start() LOG.debug("keepalive Join") From 98a62102b742960ff7202b0614fc2801dd60ad12 Mon Sep 17 00:00:00 2001 From: Hemna Date: Fri, 8 Nov 2024 13:47:02 -0500 Subject: [PATCH 39/40] Don't break logging aprslib failures this patch removes the newline when logging failures to parse aprs packets in aprslib --- aprsd/client/drivers/aprsis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aprsd/client/drivers/aprsis.py b/aprsd/client/drivers/aprsis.py index e4d9346..405de57 100644 --- a/aprsd/client/drivers/aprsis.py +++ b/aprsd/client/drivers/aprsis.py @@ -193,14 +193,14 @@ class Aprsdis(aprslib.IS): except ParseError as exp: self.logger.log( 11, - "%s\n Packet: %s", + "%s Packet: '%s'", exp, exp.packet, ) except UnknownFormat as exp: self.logger.log( 9, - "%s\n Packet: %s", + "%s Packet: '%s'", exp, exp.packet, ) From 03ce5a3d506a1304b93fd11cd2a43661f874d144 Mon Sep 17 00:00:00 2001 From: Hemna Date: Mon, 11 Nov 2024 12:44:01 -0500 Subject: [PATCH 40/40] Change healthcheck email thread check timeout Email thread by default runs every 5 minutes to check for email. The healthcheck max timeout for a loop run is also 5 minutes, leaving little room for a race condition for the healthcheck. This patch updates the healthcheck timout to 5 minutes 30 seconds. --- aprsd/cmds/healthcheck.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aprsd/cmds/healthcheck.py b/aprsd/cmds/healthcheck.py index 6914e8f..5750b70 100644 --- a/aprsd/cmds/healthcheck.py +++ b/aprsd/cmds/healthcheck.py @@ -63,7 +63,7 @@ def healthcheck(ctx, timeout): if email_thread_last_update != "never": d = now - email_thread_last_update - max_timeout = {"hours": 0.0, "minutes": 5, "seconds": 0} + max_timeout = {"hours": 0.0, "minutes": 5, "seconds": 30} max_delta = datetime.timedelta(**max_timeout) if d > max_delta: console.log(f"Email thread is very old! {d}")