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

1358 Commits

Author SHA1 Message Date
bf258e4bcf chore(tests): fix unused variable linter warning in test_stats.py 2026-03-24 13:22:37 -04:00
4ab59c6cf3 refactor(main): update signal handler for Event-based thread shutdown
- Replace time.sleep(1.5) with thread_list.join_non_daemon(timeout=5.0)
- Remove unused import time since time.sleep is no longer used
- Remove outdated commented-out code
- Improve log message (removed '10 seconds' reference)
2026-03-24 13:22:37 -04:00
505c0fa8a8 refactor(threads): migrate APRSRegistryThread to Event-based timing
- Set self.period=CONF.aprs_registry.frequency_seconds in __init__
- Remove counter-based conditional (loop every N seconds pattern)
- Replace time.sleep(1) with self.wait()
- Remove _loop_cnt tracking (use inherited loop_count from base)
- Remove unused time import
2026-03-24 13:22:37 -04:00
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