The API image ran four uvicorn workers, and each one built a full flow controller — four sets of MQTT subscriptions, cron ticks and webhooks. Runs one worker now; scaling out is the worker split, not more processes. Adds a loop-lag watchdog and a deep /utils/health/ that fails when the event loop is wedged or Redis is unreachable, the two failure modes a process-alive check never sees. Autoheal restarts on that signal, behind a compose profile because it mounts the Docker socket. The private user-seeding routes now need an explicit opt-in rather than just ENVIRONMENT=local, so a deployment that kept the default never exposes them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011LF61rxW1FG5YCD2J9YqjY
19 lines
798 B
Python
19 lines
798 B
Python
"""Redirect the suite at its own database.
|
|
|
|
`app.core.db` builds the engine at import time and several modules bind that
|
|
object, so the name has to be in the environment before anything imports the
|
|
settings. Overriding it here — the first module pytest imports for the
|
|
package — keeps a test run from touching the development data.
|
|
"""
|
|
|
|
import os
|
|
|
|
os.environ["POSTGRES_DB"] = "app_test"
|
|
# The MCP session manager can only be entered once per instance, and the suite
|
|
# builds a TestClient — and so a lifespan — per test module. Tests that want the
|
|
# endpoint mount it themselves.
|
|
os.environ["MCP_ENABLED"] = "false"
|
|
# The private seeding endpoints are opt-in; the suite is one of the two places
|
|
# (with the dev stack) where they are meant to work.
|
|
os.environ["PRIVATE_API_ENABLED"] = "true"
|