1
0
mirror of https://github.com/craigerl/aprsd.git synced 2026-03-31 12:15:34 -04:00

1355 Commits

Author SHA1 Message Date
85ebf8a274 refactor(threads): migrate TX threads to Event-based timing
- PacketSendSchedulerThread: Add daemon=False, replace time.sleep with self.wait
- AckSendSchedulerThread: Add daemon=False, replace time.sleep with self.wait
- SendPacketThread: Replace time.sleep with self.wait, remove manual loop_count
- SendAckThread: Replace time.sleep with self.wait, remove manual loop_count
- BeaconSendThread: Set self.period=CONF.beacon_interval, remove counter-based
  conditional, replace time.sleep with self.wait, remove _loop_cnt tracking
- Update tests to use new Event-based API
2026-03-24 13:22:37 -04:00
bc9ce61e59 refactor(threads): migrate RX threads to Event-based timing
- APRSDRXThread: Replace time.sleep with self.wait for interruptible waits
- APRSDRXThread.stop(): Use _shutdown_event.set() instead of thread_stop
- APRSDRXThread: Error recovery waits check for shutdown signal
- APRSDFilterThread: Use queue timeout with self.period for interruptible wait
- Remove unused time import
- Update tests to use new Event-based API
2026-03-24 13:22:37 -04:00
343ec3e81c refactor(threads): migrate stats threads to Event-based timing 2026-03-24 13:22:37 -04:00
44b8bc572d refactor(threads): migrate KeepAliveThread to Event-based timing 2026-03-24 13:22:36 -04:00
43ba69e352 feat(threads): add join_non_daemon() to APRSDThreadList
Allows graceful shutdown by waiting for non-daemon threads to complete
while allowing daemon threads to be terminated immediately.
2026-03-24 13:22:36 -04:00
b7a37322e1 refactor(threads): add daemon, period, Event-based shutdown to APRSDThread
- Add daemon=True class attribute (subclasses override to False)
- Add period=1 class attribute for wait interval
- Replace thread_stop boolean with _shutdown_event (threading.Event)
- Add wait() method for interruptible sleeps
- Update tests for new Event-based API

BREAKING: thread_stop boolean replaced with _shutdown_event.
Code checking thread.thread_stop directly must use thread._shutdown_event.is_set()
2026-03-24 13:22:36 -04:00
bc9b15d47a Add implementation plan for daemon threads and Event-based timing refactor 2026-03-24 13:22:36 -04:00
d8747317df Add design spec for daemon threads and Event-based timing refactor 2026-03-24 13:22:36 -04:00
github-actions[bot]
4cc90a53ed
chore: update AUTHORS [skip ci] 2026-03-24 17:12:56 +00:00
dependabot[bot]
425ad469b0
Bump marshmallow from 3.26.1 to 3.26.2 (#207)
Bumps [marshmallow](https://github.com/marshmallow-code/marshmallow) from 3.26.1 to 3.26.2.
- [Changelog](https://github.com/marshmallow-code/marshmallow/blob/3.26.2/CHANGELOG.rst)
- [Commits](https://github.com/marshmallow-code/marshmallow/compare/3.26.1...3.26.2)

---
updated-dependencies:
- dependency-name: marshmallow
  dependency-version: 3.26.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-24 13:12:45 -04:00
bbc2ccd302
Merge pull request #214 from craigerl/fix/cli-command-issues
Fix CLI command inconsistencies
2026-02-28 09:33:31 -05:00
698d218572 Fix JSON serialization of UnknownPacket in stats
The SimpleJSONEncoder didn't handle dataclasses like UnknownPacket,
causing a TypeError when saving stats to disk. Added support for
dataclasses using dataclasses.asdict().
2026-02-27 23:40:14 -05:00
fcfb349d29 Fix CLI command inconsistencies
- Refactor duplicate plugin discovery code into aprsd/utils/package.py
- Fix inconsistent --profile option in listen.py (now uses common_options)
- Add common_options decorator to completion command for consistency
- Improve healthcheck error message for missing APRSClientStats
- Consolidate signal handler in listen.py to use shared one from main.py
2026-02-27 23:35:38 -05:00
7172d6352f address failure for healthcheck 2026-02-19 13:33:55 -05:00
bc8a24bea4 Fix master-build.yml: remove zero-width spaces from GitHub Actions template syntax 2026-02-19 08:33:18 -05:00
ac35c44bc2 another attempt at master build for github 2026-02-18 21:58:54 -05:00
8483d93965 try and fix master build 2026-02-18 14:30:59 -05:00
0248f40604 fixed some type declaration inconsistencies. 2026-02-18 14:20:52 -05:00
6ea9889369 make consumer call signature consistent. 2026-02-18 14:11:25 -05:00
2b7e42802b update the keepalive for kiss 2026-02-18 14:00:52 -05:00
c99a9c919d fixed inconsistent driver send() declaration.
The KISS drivers aren't adhering to the protocol for
defining the send() method.  both now specify that they
return a bool.
2026-02-18 13:49:40 -05:00
202c689658 Replace insecure pickle serialization with JSON
SECURITY FIX: Replace pickle.load() with json.load() to eliminate
remote code execution vulnerability from malicious pickle files.

Changes:
- Update ObjectStoreMixin to use JSON instead of pickle
- Add PacketJSONDecoder to reconstruct Packet objects from JSON
- Change file extension from .p to .json
- Add warning when old pickle files detected
- Add OrderedDict restoration for PacketList
- Update all tests to work with JSON format

Users with existing pickle files must run:
  aprsd dev migrate-pickle

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-17 16:07:55 -05:00
0701db2629 docs on listen 2026-02-10 19:09:07 -05:00
c5ca4f11af Added new APRSDPushStatsThread
This allows an aprsd server instance to push it's to a remote
location.
2026-02-10 18:49:23 -05:00
008fe3c83e Fixed an issue with dev command 2026-02-07 17:17:15 -05:00
3128f24ef7 reverse the threaded plugin processing.
Considering how little processing each plugin has, it's
a bit overkill for now to have a threaded processing of plugins.

Also had issues where the help plugin was responding when it shouldn't.
2026-02-06 17:31:05 -05:00
6968f16cec update multiarch build on tag 2026-02-05 17:23:35 -05:00
03da33c905 change python tests 2026-02-05 17:17:14 -05:00
8b500ac5f1 added ruff to tox 2026-02-05 17:11:40 -05:00
c62d0545c6 linting fix for test_tx 2026-02-05 17:04:57 -05:00
6f9e6b2993 fix issue with getting the right plugin version 2026-01-26 16:57:24 -05:00
7f7d03ea69 Added export-config
This allows aprsd to export the config options for aprsd
and/or the installed plugins.
2026-01-26 16:12:25 -05:00
0b01881f46 Added new export-plugins command
This allows the user to run and see the details about all of the
installed plugins in a json format.
2026-01-26 15:52:16 -05:00
github-actions[bot]
2f698ed95e
chore: update AUTHORS [skip ci] 2026-01-25 18:05:24 +00:00
2180a52a9f added some mocks to speed up tests 2026-01-25 13:04:47 -05:00
95bd43a0b1 update the pyproject to point to documentation 2026-01-24 22:12:59 -05:00
b4763f969c upgrade setuptools 2026-01-23 17:57:17 -05:00
3bcd03a514 Fix client / driver inconsistencies from protocol
The client registry defined a protocol that all drivers had
to implement.  This patch ensures that all methods are
consistent in the protocol definition.
2026-01-23 09:18:35 -05:00
ee61bf5fd5 Updates for plugins to make them more consistent.
Got rid of some comment blocks and inconsistent logging messsages
2026-01-22 23:35:09 -05:00
7151cb5d07 Updated docs. 2026-01-21 20:27:38 -05:00
730f6585af updated docs. Added PLUGINS.md 2026-01-21 20:20:57 -05:00
f9cdb45ea0 fix pep8 failure 2026-01-21 17:53:39 -05:00
72371cd4ed Account for required option
This patch accounts for a required config option in the
process_standard_options_no_config decorator
2026-01-21 16:37:01 -05:00
cefe3e30e7 Removed AVWX plugin.
The AVWX Based weather plugin requires a subscription to the AVWX
API, or to self host a running AVWX API.  So this plugin has been
moved to it's own external plugin here:
aprsd-avwx-plugin:

https://github.com/hemna/aprsd-avwx-plugin
2026-01-21 16:27:14 -05:00
d783a01400 moved optional deps into pyproject.toml 2026-01-21 15:54:01 -05:00
github-actions[bot]
f7e4c47715
chore: update AUTHORS [skip ci] 2026-01-21 20:46:07 +00:00
24bc86424e Added --output-json for aprsd sample-config
This adds the ability to output the sample config
as json for non-human processing.
2026-01-21 15:45:48 -05:00
e3fda752f6 Remove openweathermap
OpenWeatherMap based plugins have been moved to the external
aprsd-openweathermap-plugins here:

https://github.com/hemna/aprsd-openweathermap-plugin

OWM plugins have been removed from aprsd proper because
they require a paid subscription now.  bye.
2026-01-21 15:27:05 -05:00
da3ef77ea3 upgrade to python 3.11 2026-01-20 17:31:14 -05:00
d2cb208be8 Added new owner_callsign
the owner_callsign is a new [DEFAULT]
option that must be set.  It's the legal FCC callsign
associated with the license that owns this instances of APRSD.
that might be different than callsign, because the name of the
aprsd might be a bot for the APRS network that's useful,
such as 'REPEAT'
2026-01-20 17:27:47 -05:00