Files
NetAlertX/server/config_paths.py
T
Jokob @NetAlertX 9e38cfd8b4 Add website monitoring plugin and update workflows configuration
- Introduced a new plugin for monitoring website health, including functionality to check URLs and log results.
- Created README and configuration files for the workflows plugin, detailing its purpose and settings.
- Updated import paths in various test files to reflect the new directory structure.
- Ensured compatibility of test cases with the updated plugin architecture.
2026-08-10 02:32:49 +00:00

110 lines
3.2 KiB
Python

"""Runtime path helpers for NetAlertX.
This module centralises path resolution so code can rely on the
Docker environment variables while still working during local
development and testing where those variables may not be set.
"""
from __future__ import annotations
import os
import sys
from pathlib import Path
__all__ = [
"APP_PATH",
"DATA_PATH",
"CONFIG_PATH",
"DB_PATH",
"TMP_PATH",
"API_PATH",
"LOG_PATH",
"FRONT_PATH",
"SERVER_PATH",
"BACK_PATH",
"PLUGINS_PATH",
"REPORT_TEMPLATES_PATH",
"API_PATH_WITH_TRAILING_SEP",
"LOG_PATH_WITH_TRAILING_SEP",
"CONFIG_PATH_WITH_TRAILING_SEP",
"DB_PATH_WITH_TRAILING_SEP",
"PLUGINS_PATH_WITH_TRAILING_SEP",
"REPORT_TEMPLATES_PATH_WITH_TRAILING_SEP",
"ensure_trailing_sep",
"APP_PATH_STR",
"DATA_PATH_STR",
"CONFIG_PATH_STR",
"DB_PATH_STR",
"TMP_PATH_STR",
"API_PATH_STR",
"LOG_PATH_STR",
"FRONT_PATH_STR",
"SERVER_PATH_STR",
"BACK_PATH_STR",
"PLUGINS_PATH_STR",
"REPORT_TEMPLATES_PATH_STR",
"ensure_in_syspath",
]
_DEFAULT_APP_PATH = Path("/app")
_DEFAULT_DATA_PATH = Path("/data")
_DEFAULT_TMP_PATH = Path("/tmp")
def _resolve_env_path(variable: str, default: Path) -> Path:
"""Return the path from the environment or fall back to *default*."""
value = os.getenv(variable)
if value:
return Path(value)
return default
def ensure_trailing_sep(path: Path) -> str:
"""Return *path* as a string that always ends with the OS separator."""
path_str = str(path)
return path_str if path_str.endswith(os.sep) else f"{path_str}{os.sep}"
APP_PATH = _resolve_env_path("NETALERTX_APP", _DEFAULT_APP_PATH)
DATA_PATH = _resolve_env_path("NETALERTX_DATA", _DEFAULT_DATA_PATH)
CONFIG_PATH = _resolve_env_path("NETALERTX_CONFIG", DATA_PATH / "config")
DB_PATH = _resolve_env_path("NETALERTX_DB", DATA_PATH / "db")
TMP_PATH = _resolve_env_path("NETALERTX_TMP", _DEFAULT_TMP_PATH)
API_PATH = _resolve_env_path("NETALERTX_API", TMP_PATH / "api")
LOG_PATH = _resolve_env_path("NETALERTX_LOG", TMP_PATH / "log")
FRONT_PATH = APP_PATH / "front"
SERVER_PATH = APP_PATH / "server"
BACK_PATH = APP_PATH / "back"
PLUGINS_PATH = SERVER_PATH / "plugins"
REPORT_TEMPLATES_PATH = FRONT_PATH / "report_templates"
API_PATH_WITH_TRAILING_SEP = ensure_trailing_sep(API_PATH)
LOG_PATH_WITH_TRAILING_SEP = ensure_trailing_sep(LOG_PATH)
CONFIG_PATH_WITH_TRAILING_SEP = ensure_trailing_sep(CONFIG_PATH)
DB_PATH_WITH_TRAILING_SEP = ensure_trailing_sep(DB_PATH)
PLUGINS_PATH_WITH_TRAILING_SEP = ensure_trailing_sep(PLUGINS_PATH)
REPORT_TEMPLATES_PATH_WITH_TRAILING_SEP = ensure_trailing_sep(REPORT_TEMPLATES_PATH)
APP_PATH_STR = str(APP_PATH)
DATA_PATH_STR = str(DATA_PATH)
CONFIG_PATH_STR = str(CONFIG_PATH)
DB_PATH_STR = str(DB_PATH)
TMP_PATH_STR = str(TMP_PATH)
API_PATH_STR = str(API_PATH)
LOG_PATH_STR = str(LOG_PATH)
FRONT_PATH_STR = str(FRONT_PATH)
SERVER_PATH_STR = str(SERVER_PATH)
BACK_PATH_STR = str(BACK_PATH)
PLUGINS_PATH_STR = str(PLUGINS_PATH)
REPORT_TEMPLATES_PATH_STR = str(REPORT_TEMPLATES_PATH)
def ensure_in_syspath(path: Path) -> str:
"""Add *path* to ``sys.path`` if missing and return the string value."""
path_str = str(path)
if path_str not in sys.path:
sys.path.append(path_str)
return path_str