Skip to content
Snippets Groups Projects
Verified Commit fa952000 authored by Stefan Hynek's avatar Stefan Hynek :drooling_face:
Browse files

fix(config): make logging logging configurable with REPDAV_LOG_LEVEL environment variable

also, add SENTRY_ENV for configuring the sentry environment; refactor AppConfig class for more failsafety; rename TEXTGRID_HOST to TEXTGRID_URL

close #10
parent 28032586
No related branches found
No related tags found
1 merge request!30Resolve "make logging level configurable"
......@@ -12,18 +12,22 @@ from repdav.config import AppConfig
app_config = AppConfig()
if app_config.dsn:
sentry_sdk.init(app_config.dsn, traces_sample_rate=1.0)
sentry_sdk.init(
dsn=app_config.dsn,
environment=app_config.environment,
traces_sample_rate=1.0,
)
logging.basicConfig(
level=logging.DEBUG, format="%(name)s %(levelname)s %(asctime)s %(message)s"
level=app_config.log_level, format="%(name)s %(levelname)s %(asctime)s %(message)s"
)
_logger = logging.getLogger(__name__)
_logger.propagate = True
# configure the "wsgidav" named logger
tmp_logger = logging.getLogger("wsgidav")
tmp_logger.propagate = True
tmp_logger.setLevel(logging.DEBUG)
wsgidav_logger = logging.getLogger("wsgidav")
wsgidav_logger.propagate = True
wsgidav_logger.setLevel(app_config.log_level)
# Configuration of the WsgiDAVApp.
# https://wsgidav.readthedocs.io/en/latest/user_guide_configure.html
......
......@@ -3,51 +3,79 @@
# SPDX-License-Identifier: CC0-1.0
import os
import logging
from typing import Optional
from urllib.parse import urlparse
_logger = logging.getLogger(__name__)
def check_url(url):
def check_url(url: str):
"""Check if `url` can be parsed."""
if url:
result = urlparse(url)
if result.scheme and result.netloc:
return url
raise ValueError(f"{url} is not a valid URL.")
result = urlparse(url)
if result.scheme and result.netloc:
return url
raise ValueError(f"{url} is not a valid URL.")
def check_port(port):
def check_port(port: int):
"""Check if port is set correctly to a non-privileged value."""
if 1000 <= port <= 65535:
return port
raise ValueError(f"{port} is not a valid Port.")
def check_log_level(level: str):
"""Check if log level exists."""
if level in logging._nameToLevel: # pylint: disable=protected-access
return level
_logger.warning("%s is not a valid Logging Level. Falling back to WARNING.", level)
return "WARNING"
class AppConfig:
"""Settings that can be be configured from the environment."""
def __init__(self) -> None:
self._dsn = check_url(os.getenv("SENTRY_DSN"))
self._host = os.getenv("REPDAV_HOST") or "localhost"
self._port = check_port(int(os.getenv("REPDAV_PORT") or 8080))
self._tg_host = check_url(os.getenv("TEXTGRID_HOST"))
_dsn = os.getenv("SENTRY_DSN")
self._dsn = check_url(_dsn) if _dsn else None
_environment = os.getenv("SENTRY_ENV")
self._environment = _environment if _environment else "production"
_host = os.getenv("REPDAV_HOST")
self._host = _host if _host else "localhost"
_log_level = os.getenv("REPDAV_LOG_LEVEL")
self._log_level = check_log_level(_log_level) if _log_level else "WARNING"
_port = os.getenv("REPDAV_PORT")
self._port = check_port(int(_port)) if _port else 8080
_tg_host = os.getenv("TEXTGRID_URL")
self._tg_host = check_url(_tg_host) if _tg_host else "https://textgridlab.org"
@property
def dsn(self) -> Optional[str]:
"""Sentry DSN."""
return self._dsn
@property
def environment(self) -> str:
"""Sentry Environment."""
return self._environment
@property
def host(self) -> str:
"""Service hostname."""
return self._host
@property
def log_level(self) -> str:
"""Service log level."""
return self._log_level
@property
def port(self) -> int:
"""Service port."""
return self._port
@property
def tg_host(self) -> Optional[str]:
def tg_host(self) -> str:
"""Textgrid host URL."""
return self._tg_host
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment