diff --git a/ChangeLog b/ChangeLog index c2b2469..6bdaceb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,44 @@ CHANGES ======= +v1.6.1 +------ + +* Removed debug log for KeepAlive thread +* ignore Makefile.venv +* Reworked Makefile to use Makefile.venv +* Fixed version unit tests +* Updated stats output for KeepAlive thread +* Update Dockerfile-dev to work with startup +* Force all the graphs to 0 minimum +* Added email messages graphs +* Reworked the stats dict output and healthcheck +* Added callsign to the web index page +* Added log config for flask and lnav config file +* Added showing APRS-IS server to stats +* Provide an initial datapoint on rendering index +* Make the index page behind auth +* Bump pygments from 2.7.3 to 2.7.4 +* Added acks with messages graphs +* Updated web stats index to show messages and ram usage +* Added aprsd web index page +* Bump lxml from 4.6.2 to 4.6.3 +* Bump jinja2 from 2.11.2 to 2.11.3 +* Bump urllib3 from 1.26.2 to 1.26.3 +* Added log format and dateformat to config file +* Added Dockerfile-dev and updated build.sh +* Require python 3.7 and > +* Added plugin live reload and StockPlugin +* Updated Dockerfile and build.sh +* Updated Dockerfile for multiplatform builds +* Updated Dockerfile for multiplatform builds +* Dockerfile: Make creation of /config quiet failure +* Updated README docs + v1.6.0 ------ +* 1.6.0 release prep * Updated path of run.sh for docker build * Moved docker related stuffs to docker dir * Removed some noisy debug log diff --git a/Makefile b/Makefile index 3afe008..282188b 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,9 @@ dev: venv $(VENV)/pre-commit install .PHONY: docs -docs: venv +docs: build + cp README.rst docs/readme.rst + cp Changelog docs/changelog.rst tox -edocs .PHONY: server diff --git a/README.rst b/README.rst index f7ea08e..54b069f 100644 --- a/README.rst +++ b/README.rst @@ -161,8 +161,7 @@ Output ====== :: - └─[$] > aprsd sample-config - + └─> aprsd sample-config aprs: # Get the passcode for your callsign here: # https://apps.magicbug.co.uk/passcode @@ -171,6 +170,7 @@ Output password: '00000' port: 14580 aprsd: + dateformat: '%m/%d/%Y %I:%M:%S %p' email: enabled: true imap: @@ -197,16 +197,19 @@ Output - aprsd.plugins.location.LocationPlugin - aprsd.plugins.ping.PingPlugin - aprsd.plugins.query.QueryPlugin + - aprsd.plugins.stock.StockPlugin - aprsd.plugins.time.TimePlugin - aprsd.plugins.weather.USWeatherPlugin - aprsd.plugins.version.VersionPlugin logfile: /tmp/aprsd.log + logformat: '[%(asctime)s] [%(threadName)-12s] [%(levelname)-5.5s] %(message)s - [%(pathname)s:%(lineno)d]' plugin_dir: ~/.config/aprsd/plugins trace: false units: imperial web: enabled: true host: 0.0.0.0 + logging_enabled: true port: 8001 users: admin: aprsd diff --git a/docs/apidoc/aprsd.plugins.rst b/docs/apidoc/aprsd.plugins.rst index 7c6718a..a8126fd 100644 --- a/docs/apidoc/aprsd.plugins.rst +++ b/docs/apidoc/aprsd.plugins.rst @@ -44,6 +44,14 @@ aprsd.plugins.query module :undoc-members: :show-inheritance: +aprsd.plugins.stock module +-------------------------- + +.. automodule:: aprsd.plugins.stock + :members: + :undoc-members: + :show-inheritance: + aprsd.plugins.time module ------------------------- diff --git a/docs/apidoc/aprsd.rst b/docs/apidoc/aprsd.rst index 45de7ac..e95eae2 100644 --- a/docs/apidoc/aprsd.rst +++ b/docs/apidoc/aprsd.rst @@ -23,14 +23,6 @@ aprsd.client module aprsd.dev module ---------------- -.. automodule:: aprsd.dev - :members: - :undoc-members: - :show-inheritance: - -aprsd.dev module ----------------- - .. automodule:: aprsd.dev :members: :undoc-members: @@ -68,6 +60,14 @@ aprsd.fuzzyclock module :undoc-members: :show-inheritance: +aprsd.healthcheck module +------------------------ + +.. automodule:: aprsd.healthcheck + :members: + :undoc-members: + :show-inheritance: + aprsd.main module ----------------- @@ -100,10 +100,10 @@ aprsd.plugin\_utils module :undoc-members: :show-inheritance: -aprsd.plugin\_utils module --------------------------- +aprsd.stats module +------------------ -.. automodule:: aprsd.plugin_utils +.. automodule:: aprsd.stats :members: :undoc-members: :show-inheritance: @@ -116,6 +116,14 @@ aprsd.threads module :undoc-members: :show-inheritance: +aprsd.trace module +------------------ + +.. automodule:: aprsd.trace + :members: + :undoc-members: + :show-inheritance: + aprsd.utils module ------------------ diff --git a/docs/changelog.rst b/docs/changelog.rst new file mode 100644 index 0000000..6bdaceb --- /dev/null +++ b/docs/changelog.rst @@ -0,0 +1,308 @@ +CHANGES +======= + +v1.6.1 +------ + +* Removed debug log for KeepAlive thread +* ignore Makefile.venv +* Reworked Makefile to use Makefile.venv +* Fixed version unit tests +* Updated stats output for KeepAlive thread +* Update Dockerfile-dev to work with startup +* Force all the graphs to 0 minimum +* Added email messages graphs +* Reworked the stats dict output and healthcheck +* Added callsign to the web index page +* Added log config for flask and lnav config file +* Added showing APRS-IS server to stats +* Provide an initial datapoint on rendering index +* Make the index page behind auth +* Bump pygments from 2.7.3 to 2.7.4 +* Added acks with messages graphs +* Updated web stats index to show messages and ram usage +* Added aprsd web index page +* Bump lxml from 4.6.2 to 4.6.3 +* Bump jinja2 from 2.11.2 to 2.11.3 +* Bump urllib3 from 1.26.2 to 1.26.3 +* Added log format and dateformat to config file +* Added Dockerfile-dev and updated build.sh +* Require python 3.7 and > +* Added plugin live reload and StockPlugin +* Updated Dockerfile and build.sh +* Updated Dockerfile for multiplatform builds +* Updated Dockerfile for multiplatform builds +* Dockerfile: Make creation of /config quiet failure +* Updated README docs + +v1.6.0 +------ + +* 1.6.0 release prep +* Updated path of run.sh for docker build +* Moved docker related stuffs to docker dir +* Removed some noisy debug log +* Bump cryptography from 3.3.1 to 3.3.2 +* Wrap another server call with try except +* Wrap all imap calls with try except blocks +* Bump bleach from 3.2.1 to 3.3.0 +* EmailThread was exiting because of IMAP timeout, added exceptions for this +* Added memory tracing in keeplive +* Fixed tox pep8 failure for trace +* Added tracing facility +* Fixed email login issue +* duplicate email messages from RF would generate usage response +* Enable debug logging for smtp and imap +* more debug around email thread +* debug around EmailThread hanging or vanishing +* Fixed resend email after config rework +* Added flask messages web UI and basic auth +* Fixed an issue with LocationPlugin +* Cleaned up the KeepAlive output +* updated .gitignore +* Added healthcheck app +* Add flask and flask\_classful reqs +* Added Flask web thread and stats collection +* First hack at flask +* Allow email to be disabled +* Reworked the config file and options +* Updated documentation and config output +* Fixed extracting lat/lon +* Added openweathermap weather plugin +* Added new time plugins +* Fixed TimePlugin timezone issue +* remove fortune white space +* fix git with install.txt +* change query char from ? to ! +* Updated readme to include readthedocs link +* Added aprsd-dev plugin test cli and WxPlugin + +v1.5.1 +------ + +* Updated Changelog for v1.5.1 +* Updated README to fix pypi page +* Update INSTALL.txt + +v1.5.0 +------ + +* Updated Changelog for v1.5.0 release +* Fix tox tests +* fix usage statement +* Enabled some emailthread messages and added timestamp +* Fixed main server client initialization +* test plugin expect responses update to match query output +* Fixed the queryPlugin unit test +* Removed flask code +* Changed default log level to INFO +* fix plugin tests to expect new strings +* fix query command syntax ?, ?3, ?d(elete), ?a(ll) +* Fixed latitude reporting in locationPlugin +* get rid of some debug noise from tracker and email delay +* fixed sample-config double print +* make sample config easier to interpret +* Fixed comments +* Added the ability to add comments to the config file +* Updated docker run.sh script +* Added --raw format for sending messages +* Fixed --quiet option +* Added send-message login checking and --no-ack +* Added new config for aprs.fi API Key +* Added a fix for failed logins to APRS-IS +* Fixed unit test for fortune plugin +* Fixed fortune plugin failures +* getting out of git hell with client.py problems +* Extend APRS.IS object to change login string +* Extend APRS.IS object to change login string +* expect different reply from query plugin +* update query plugin to resend last N messages. syntax: ?rN +* Added unit test for QueryPlugin +* Updated MsgTrack restart\_delayed +* refactor Plugin objects to plugins directory +* Updated README with more workflow details +* change query character syntax, don't reply that we're resending stuff +* Added APRSD system diagram to docs +* Disable MX record validation +* Added some more badges to readme files +* Updated build for docs tox -edocs +* switch command characters for query plugin +* Fix broken test +* undo git disaster +* swap Query command characters a bit +* Added Sphinx based documentation +* refactor Plugin objects to plugins directory +* Updated Makefile +* removed double-quote-string-fixer +* Lots of fixes +* Added more pre-commit hook tests +* Fixed email shortcut lookup +* Added Makefile for easy dev setup +* Added Makefile for easy dev setup +* Cleaned out old ack\_dict +* add null reply for send\_email +* Updated README with more workflow details +* backout my patch that broke tox, trying to push to craiger-test branch +* Fixed failures caused by last commit +* don't tell radio emails were sent, ack is enuf +* Updated README to include development env +* Added pre-commit hooks +* Update Changelog for v1.5.0 +* Added QueryPlugin resend all delayed msgs or Flush +* Added QueryPlugin +* Added support to save/load MsgTrack on exit/start +* Creation of MsgTrack object and other stuff +* Added FortunePlugin unit test +* Added some plugin unit tests +* reworked threading +* Reworked messaging lib + +v1.1.0 +------ + +* Refactored the main process\_packet method +* Update README with version 1.1.0 related info +* Added fix for an unknown packet type +* Ensure fortune is installed +* Updated docker-compose +* Added Changelog +* Fixed issue when RX ack +* Updated the aprsd-slack-plugin required version +* Updated README.rst +* Fixed send-message with email command and others +* Update .gitignore +* Big patch +* Major refactor +* Updated the Dockerfile to use alpine + +v1.0.1 +------ + +* Fix unknown characterset emails +* Updated loggin timestamp to include [] +* Updated README with a TOC +* Updates for building containers +* Don't use the dirname for the plugin path search +* Reworked Plugin loading +* Updated README with development information +* Fixed an issue with weather plugin + +v1.0.0 +------ + +* Rewrote the README.md to README.rst +* Fixed the usage string after plugins introduced +* Created plugin.py for Command Plugins +* Refactor networking and commands +* get rid of some debug statements +* yet another unicode problem, in resend\_email fixed +* reset default email check delay to 60, fix a few comments +* Update tox environment to fix formatting python errors +* fixed fortune. yet another unicode issue, tested in py3 and py2 +* lose some logging statements +* completely off urllib now, tested locate/weather in py2 and py3 +* add urllib import back until i replace all calls with requests +* cleaned up weather code after switch to requests ... from urllib. works on py2 and py3 +* switch from urlib to requests for weather, tested in py3 and py2. still need to update locate, and all other http calls +* imap tags are unicode in py3. .decode tags +* Update INSTALL.txt +* Initial conversion to click +* Reconnect on socket timeout +* clean up code around closed\_socket and reconnect +* Update INSTALL.txt +* Fixed all pep8 errors and some py3 errors +* fix check\_email\_thread to do proper threading, take delay as arg +* found another .decode that didn't include errors='ignore' +* some failed attempts at getting the first txt or html from a multipart message, currently sends the last +* fix parse\_email unicode probs by using body.decode(errors='ignore').. again +* fix parse\_email unicode probs by using body.decode(errors='ignore') +* clean up code around closed\_socket and reconnect +* socket timeout 5 minutes +* Detect closed socket, reconnect, with a bit more grace +* can detect closed socket and reconnect now +* Update INSTALL.txt +* more debugging messages trying to find rare tight loop in main +* Update INSTALL.txt +* main loop went into tight loop, more debug prints +* main loop went into tight loop, added debug print before every continue +* Update INSTALL.txt +* Update INSTALL.txt +* George Carlin profanity filter +* added decaying email check timer which resets with activity +* Fixed all pep8 errors and some py3 errors +* Fixed all pep8 errors and some py3 errors +* Reconnect on socket timeout +* socket reconnect on timeout testing +* socket timeout of 300 instead of 60 +* Reconnect on socket timeout +* socket reconnect on timeout testing +* Fixed all pep8 errors and some py3 errors +* fix check\_email\_thread to do proper threading, take delay as arg +* INSTALL.txt for the average person +* fix bugs after beautification and yaml config additions. Convert to sockets. case insensitive commands +* fix INBOX +* Update README.md +* Added tox support +* Fixed SMTP settings +* Created fake\_aprs.py +* select inbox if gmail server +* removed ASS +* Added a try block around imap login +* Added port and fixed telnet user +* Require ~/.aprsd/config.yml +* updated README for install and usage instructions +* added test to ensure shortcuts in config.yml +* added exit if missing config file +* Added reading of a config file +* update readme +* update readme +* sanitize readme +* readme again again +* readme again again +* readme again +* readme +* readme update +* First stab at migrating this to a pytpi repo +* First stab at migrating this to a pytpi repo +* Added password, callsign and host +* Added argparse for cli options +* comments +* Cleaned up trailing whitespace +* add tweaked fuzzyclock +* make tn a global +* Added standard python main() +* tweaks to readme +* drop virtenv on first line +* sanitize readme a bit more +* sanitize readme a bit more +* sanitize readme +* added weather and location 3 +* added weather and location 2 +* added weather and location +* mapme +* de-localize +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* de-localize +* Update README.md +* Update README.md +* Update aprsd.py +* Add files via upload +* Update README.md +* Update aprsd.py +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Update README.md +* Add files via upload +* Initial commit diff --git a/docs/index.rst b/docs/index.rst index 8b1a043..e660fb0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,6 +13,7 @@ :caption: Contents: readme + changelog install configure server diff --git a/docs/readme.rst b/docs/readme.rst index 61d4f71..54b069f 100644 --- a/docs/readme.rst +++ b/docs/readme.rst @@ -1,18 +1,16 @@ +===== APRSD ------ +===== .. image:: https://badge.fury.io/py/aprsd.svg :target: https://badge.fury.io/py/aprsd +.. image:: http://hits.dwyl.com/craigerl/aprsd.svg + :target: http://hits.dwyl.com/craigerl/aprsd + .. image:: https://github.com/craigerl/aprsd/workflows/python/badge.svg :target: https://github.com/craigerl/aprsd/actions -.. image:: https://img.shields.io/pypi/pyversions/aprsd.svg - :target: https://pypi.python.org/pypi/aprsd - -.. image:: https://img.shields.io/:license-apache-blue.svg - :target: http://www.apache.org/licenses/LICENSE-2.0 - .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://black.readthedocs.io/en/stable/ @@ -26,9 +24,7 @@ APRSD .. image:: https://static.pepy.tech/personalized-badge/aprsd?period=month&units=international_system&left_color=black&right_color=orange&left_text=Downloads :target: https://pepy.tech/project/aprsd - -Summary -======= +.. contents:: :local: `APRSD `_ is a Ham radio `APRS `_ message command gateway built on python. @@ -43,12 +39,13 @@ provide responding to messages to check email, get location, ping, time of day, get weather, and fortune telling as well as version information of aprsd itself. -APRSD overview diagram +Documentation: https://aprsd.readthedocs.io + + +APRSD Overview Diagram ---------------------- -.. figure:: _static/aprsd_overview.svg - :align: center - :width: 800px +.. image:: https://raw.githubusercontent.com/craigerl/aprsd/master/docs/_static/aprsd_overview.svg?sanitize=true Typical use case @@ -116,6 +113,11 @@ email server, and associated logins, passwords. search for "yourdomain", "password". Search for "shortcuts" to setup email aliases as well. +Installation: +============= + + pip install aprsd + Example usage: ============== @@ -145,9 +147,11 @@ Help +Commands +======== Configuration -------------- +============= This command outputs a sample config yml formatted block that you can edit and use to pass in to aprsd with -c. By default aprsd looks in ~/.config/aprsd/aprsd.yml @@ -157,8 +161,7 @@ Output ====== :: - └─[$] > aprsd sample-config - + └─> aprsd sample-config aprs: # Get the passcode for your callsign here: # https://apps.magicbug.co.uk/passcode @@ -167,6 +170,7 @@ Output password: '00000' port: 14580 aprsd: + dateformat: '%m/%d/%Y %I:%M:%S %p' email: enabled: true imap: @@ -193,16 +197,19 @@ Output - aprsd.plugins.location.LocationPlugin - aprsd.plugins.ping.PingPlugin - aprsd.plugins.query.QueryPlugin + - aprsd.plugins.stock.StockPlugin - aprsd.plugins.time.TimePlugin - aprsd.plugins.weather.USWeatherPlugin - aprsd.plugins.version.VersionPlugin logfile: /tmp/aprsd.log + logformat: '[%(asctime)s] [%(threadName)-12s] [%(levelname)-5.5s] %(message)s - [%(pathname)s:%(lineno)d]' plugin_dir: ~/.config/aprsd/plugins trace: false units: imperial web: enabled: true host: 0.0.0.0 + logging_enabled: true port: 8001 users: admin: aprsd @@ -233,7 +240,7 @@ Output apiKey: APIKEYVALUE server ------- +====== This is the main server command that will listen to APRS-IS servers and look for incomming commands to the callsign configured in the config file @@ -273,7 +280,7 @@ look for incomming commands to the callsign configured in the config file send-message ------------- +============ This command is typically used for development to send another aprsd instance test messages @@ -303,8 +310,8 @@ test messages -h, --help Show this message and exit. -Example Message output: ------------------------ +Example output: +=============== SEND EMAIL (radio to smtp server) @@ -375,7 +382,7 @@ AND... ping, fortune, time..... Development ------------ +=========== * git clone git@github.com:craigerl/aprsd.git * cd aprsd @@ -386,10 +393,18 @@ Workflow While working aprsd, The workflow is as follows -* Edit code, save file +* checkout a new branch to work on +* git checkout -b mybranch +* Edit code +* run tox -epep8 * run tox -efmt * run tox -p * git commit ( This will run the pre-commit hooks which does checks too ) +* Once you are done with all of your commits, then push up the branch to + github +* git push -u origin mybranch +* Create a pull request from your branch so github tests can run and we can do + a code review. Release @@ -415,7 +430,7 @@ To do release to pypi: Docker Container ----------------- +================ Building ========