health показывает версию и вердикт по адресу клиента

Отказ по списку доступа отлаживался вслепую: сервис не сообщал, каким видит
адрес обратившегося. Теперь /health отдаёт your_ip, your_ip_allowed и версию,
не раскрывая при этом сам список.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vladimir Bryzgalov
2026-08-15 22:05:01 +05:00
co-authored by Claude Opus 5
parent 59857fff0f
commit c704fb5068
3 changed files with 39 additions and 3 deletions
+13 -2
View File
@@ -15,6 +15,7 @@ from app.config import Settings, load_settings
from app.pipeline import ModelsMissing, Pipeline, to_wav16k
from app.security import check_token, ip_allowed, parse_allowlist
from app.store import JobStatus, JobStore
from app.version import __version__
log = logging.getLogger("talkscore-asr")
@@ -113,13 +114,23 @@ def guard(request: Request) -> None:
@app.get("/health")
def health() -> JSONResponse:
"""Проверка живости - без токена, чтобы годилась для мониторинга."""
def health(request: Request) -> JSONResponse:
"""Проверка живости - без токена, чтобы годилась для мониторинга.
Показывает адрес обратившегося и вердикт по списку доступа: без этого
отладка отказов превращается в гадание, а сам адрес клиенту и так известен.
Список разрешённых адресов при этом не раскрывается.
"""
client_ip = request.client.host if request.client else None
return JSONResponse({
"status": "ok" if _state["ready"] else "no_models",
"version": __version__,
"error": _state["error"],
"queue": store.stats(),
"threads": settings.effective_threads(),
"your_ip": client_ip,
"your_ip_allowed": ip_allowed(client_ip, allowlist),
"ip_filter_active": bool(allowlist),
})