Isolate scan prewarm to web service

This commit is contained in:
2569718930@qq.com
2026-05-31 23:31:32 +08:00
parent 39c7c1903c
commit 3e5ff4ea8f
3 changed files with 32 additions and 1 deletions
+4
View File
@@ -28,6 +28,8 @@ services:
env_file: &id001
- .env
environment:
POLYWEATHER_SCAN_TERMINAL_PREWARM_ENABLED: 'false'
POLYWEATHER_SERVICE_ROLE: bot
TELEGRAM_AIRPORT_PUSH_INTERVAL_SEC: ${POLYWEATHER_BOT_AIRPORT_PUSH_INTERVAL_SEC:-180}
TELEGRAM_AIRPORT_PUSH_MAX_WORKERS: ${POLYWEATHER_BOT_AIRPORT_PUSH_MAX_WORKERS:-1}
healthcheck:
@@ -93,6 +95,8 @@ services:
max-file: "3"
container_name: polyweather_web
env_file: *id001
environment:
POLYWEATHER_SERVICE_ROLE: web
healthcheck:
interval: 30s
retries: 3
+22
View File
@@ -38,6 +38,28 @@ def test_scan_terminal_prewarm_is_lazy_by_default():
)
def test_scan_terminal_prewarm_only_runs_for_web_service(monkeypatch):
from web import app_factory
monkeypatch.setenv("POLYWEATHER_SCAN_TERMINAL_PREWARM_ENABLED", "true")
monkeypatch.delenv("POLYWEATHER_SERVICE_ROLE", raising=False)
assert app_factory._scan_terminal_prewarm_enabled() is False
monkeypatch.setenv("POLYWEATHER_SERVICE_ROLE", "bot")
assert app_factory._scan_terminal_prewarm_enabled() is False
monkeypatch.setenv("POLYWEATHER_SERVICE_ROLE", "web")
assert app_factory._scan_terminal_prewarm_enabled() is True
def test_docker_compose_isolates_scan_terminal_prewarm_to_web_service():
compose = (ROOT / "docker-compose.yml").read_text(encoding="utf-8")
assert "POLYWEATHER_SERVICE_ROLE: web" in compose
assert "POLYWEATHER_SERVICE_ROLE: bot" in compose
assert "POLYWEATHER_SCAN_TERMINAL_PREWARM_ENABLED: 'false'" in compose
def test_scan_terminal_backend_timeout_returns_before_next_proxy_abort():
import web.services.scan_terminal_config as scan_terminal_config
+6 -1
View File
@@ -24,10 +24,15 @@ from web.scan_terminal_service import start_scan_terminal_prewarm
_ROUTES_REGISTERED_FLAG = "_polyweather_routes_registered"
def _service_role() -> str:
return str(os.getenv("POLYWEATHER_SERVICE_ROLE") or "").strip().lower()
def _scan_terminal_prewarm_enabled() -> bool:
return str(
enabled = str(
os.getenv("POLYWEATHER_SCAN_TERMINAL_PREWARM_ENABLED") or "false"
).strip().lower() in {"1", "true", "yes", "on"}
return enabled and _service_role() in {"web", "api", "backend"}
def create_app() -> FastAPI: