Moved logging to log for wsgi.py

Added wsgi.py to be used with gunicorn to start aprsd's web admin
interface.

gunicorn -b :8080 "aprsd.wsgi:app"
This commit is contained in:
Hemna 2023-07-16 16:28:15 -04:00
parent 565ffe3f72
commit 35d41582ee
20 changed files with 57 additions and 28 deletions

View File

@ -289,6 +289,20 @@ LOCATION
AND... ping, fortune, time.....
Web Admin Interface
===================
To start the web admin interface, You have to install gunicorn in your virtualenv that already has aprsd installed.
::
source <path to APRSD's virtualenv>/bin/activate
pip install gunicorn
gunicorn --bind 0.0.0.0:8080 "aprsd.wsgi:app"
The web admin interface will be running on port 8080 on the local machine. http://localhost:8080
Development
===========

View File

@ -14,7 +14,7 @@ from werkzeug.security import check_password_hash, generate_password_hash
import aprsd
from aprsd import cli_helper, client, conf, packets, plugin, threads
from aprsd.logging import rich as aprsd_logging
from aprsd.log import rich as aprsd_logging
from aprsd.rpc import client as aprsd_rpc_client
@ -335,7 +335,7 @@ def init_flask(loglevel, quiet):
return socketio, flask_app
def create_app(config_file=None, log_level=None, gunicorn=False):
def create_app(config_file=None, log_level=None):
global socketio
global app
@ -351,12 +351,9 @@ def create_app(config_file=None, log_level=None, gunicorn=False):
if not log_level:
log_level = CONF.logging.log_level
if gunicorn:
socketio, app = init_flask(log_level, False)
setup_logging(app, log_level, False)
return app
else:
return socketio
socketio, app = init_flask(log_level, False)
setup_logging(app, log_level, False)
return app
if __name__ == "aprsd.flask":

View File

@ -8,7 +8,7 @@ from oslo_config import cfg
import aprsd
from aprsd import conf # noqa: F401
from aprsd.logging import log
from aprsd.log import log
from aprsd.utils import trace

View File

@ -144,7 +144,7 @@ class APRSISClient(Client):
try:
LOG.info("Creating aprslib client")
aprs_client = aprsis.Aprsdis(user, passwd=password, host=host, port=port)
# Force the logging to be the same
# Force the log to be the same
aprs_client.logger = LOG
aprs_client.connect()
connected = True

View File

@ -17,7 +17,7 @@ from aprsd.rpc import client as rpc_client
# setup the global logger
# logging.basicConfig(level=logging.DEBUG) # level=10
# log.basicConfig(level=log.DEBUG) # level=10
LOG = logging.getLogger("APRSD")
CONF = cfg.CONF

View File

@ -21,7 +21,7 @@ from aprsd.rpc import client as aprsd_rpc_client
# setup the global logger
# logging.basicConfig(level=logging.DEBUG) # level=10
# log.basicConfig(level=log.DEBUG) # level=10
CONF = cfg.CONF
LOG = logging.getLogger("APRSD")
console = Console()

View File

@ -22,7 +22,7 @@ from aprsd.threads import rx
# setup the global logger
# logging.basicConfig(level=logging.DEBUG) # level=10
# log.basicConfig(level=log.DEBUG) # level=10
LOG = logging.getLogger("APRSD")
CONF = cfg.CONF
console = Console()

View File

@ -22,7 +22,7 @@ import wrapt
import aprsd
from aprsd import cli_helper, client, conf, packets, stats, threads, utils
from aprsd.logging import rich as aprsd_logging
from aprsd.log import rich as aprsd_logging
from aprsd.main import cli
from aprsd.threads import rx, tx
from aprsd.utils import objectstore, trace

View File

@ -28,7 +28,7 @@ def set_lib_defaults():
def set_log_defaults():
# logging.set_defaults(default_log_levels=logging.get_default_log_levels())
# log.set_defaults(default_log_levels=log.get_default_log_levels())
pass

View File

@ -1,5 +1,5 @@
"""
The options for logging setup
The options for log setup
"""
from oslo_config import cfg

View File

@ -1,5 +1,5 @@
"""
The options for logging setup
The options for log setup
"""
import logging
@ -33,7 +33,7 @@ logging_opts = [
cfg.BoolOpt(
"rich_logging",
default=True,
help="Enable Rich logging",
help="Enable Rich log",
),
cfg.StrOpt(
"logfile",
@ -45,6 +45,12 @@ logging_opts = [
default=DEFAULT_LOG_FORMAT,
help="Log file format, unless rich_logging enabled.",
),
cfg.StrOpt(
"log_level",
default="INFO",
choices=LOG_LEVELS.keys(),
help="Log level for logging of events.",
),
]

View File

@ -7,7 +7,7 @@ import sys
from oslo_config import cfg
from aprsd import conf
from aprsd.logging import rich as aprsd_logging
from aprsd.log import rich as aprsd_logging
CONF = cfg.CONF
@ -15,8 +15,8 @@ LOG = logging.getLogger("APRSD")
logging_queue = queue.Queue()
# Setup the logging faciility
# to disable logging to stdout, but still log to file
# Setup the log faciility
# to disable log to stdout, but still log to file
# use the --quiet option on the cmdln
def setup_logging(loglevel, quiet):
log_level = conf.log.LOG_LEVELS[loglevel]

View File

@ -130,7 +130,7 @@ class APRSDRichHandler(RichHandler):
"""Render log for display.
Args:
record (LogRecord): logging Record.
record (LogRecord): log Record.
traceback (Optional[Traceback]): Traceback instance or None for no Traceback.
message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents.

View File

@ -39,7 +39,7 @@ from aprsd import cli_helper, packets, stats, threads, utils
# setup the global logger
# logging.basicConfig(level=logging.DEBUG) # level=10
# log.basicConfig(level=log.DEBUG) # level=10
CONF = cfg.CONF
LOG = logging.getLogger("APRSD")
CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"])

View File

@ -666,7 +666,7 @@ class APRSDEmailThread(threads.APRSDThread):
EmailInfo().delay = 60
# reset clock
LOG.debug("Done looping over Server.fetch, logging out.")
LOG.debug("Done looping over Server.fetch, log out.")
self.past = datetime.datetime.now()
try:
server.logout()

View File

@ -4,7 +4,7 @@ import threading
import wrapt
from aprsd import threads
from aprsd.logging import log
from aprsd.log import log
LOG = logging.getLogger("APRSD")

12
aprsd/wsgi.py Normal file
View File

@ -0,0 +1,12 @@
import logging
from oslo_config import cfg
from aprsd import admin_web
from aprsd import conf # noqa
CONF = cfg.CONF
LOG = logging.getLogger("APRSD")
app = None
app = admin_web.create_app()

View File

@ -30,7 +30,7 @@ class TestSendMessageCommand(unittest.TestCase):
CONF.admin.user = "admin"
CONF.admin.password = "password"
@mock.patch("aprsd.logging.log.setup_logging")
@mock.patch("aprsd.log.log.setup_logging")
def test_no_tocallsign(self, mock_logging):
"""Make sure we get an error if there is no tocallsign."""
@ -47,7 +47,7 @@ class TestSendMessageCommand(unittest.TestCase):
assert result.exit_code == 2
assert "Error: Missing argument 'TOCALLSIGN'" in result.output
@mock.patch("aprsd.logging.log.setup_logging")
@mock.patch("aprsd.log.log.setup_logging")
def test_no_command(self, mock_logging):
"""Make sure we get an error if there is no command."""

View File

@ -32,7 +32,7 @@ class TestSendMessageCommand(unittest.TestCase):
CONF.admin.user = "admin"
CONF.admin.password = "password"
@mock.patch("aprsd.logging.log.setup_logging")
@mock.patch("aprsd.log.log.setup_logging")
def test_init_flask(self, mock_logging):
"""Make sure we get an error if there is no login and config."""