Files
backup-tool/backend/src/backup_tool/web.py
T

44 lines
1.1 KiB
Python

"""Dedicated HTTP runtime role."""
from __future__ import annotations
import stat
import uvicorn
from backup_tool.config import Settings
from backup_tool.observability.logging import configure_logging, log_event
def _prepare_socket(settings: Settings) -> str:
path = settings.web_socket_path
path.parent.mkdir(mode=0o750, parents=True, exist_ok=True)
try:
existing = path.lstat()
except FileNotFoundError:
return str(path)
if not stat.S_ISSOCK(existing.st_mode):
raise RuntimeError("web socket path is not a socket")
path.unlink()
return str(path)
def run_web(settings: Settings) -> int:
"""Run exactly one ASGI server without reload or embedded background roles."""
from backup_tool.api.app import create_app
configure_logging("web", settings.log_level)
server = uvicorn.Server(
uvicorn.Config(
create_app(settings),
uds=_prepare_socket(settings),
log_level=settings.log_level.lower(),
reload=False,
workers=1,
log_config=None,
)
)
server.run()
log_event("role_stopped", role="web")
return 0