feat(metrics): метрики доступности БД и занятости пулов БД/Redis
vidconf_db_up проверяется отдельным от основного пула соединением (NullPool, короткий таймаут) — иначе в момент исчерпания пула проверка сама встала бы в очередь и не отличила бы «БД лежит» от «пул занят». vidconf_db_pool_* читаются синхронно из engine.pool, без единого запроса к БД. metrics_endpoint больше не виснет и не падает при недоступном основном пуле: критичные gauge'и считаются первыми и не зависят от него, а vidconf_pipeline_sessions (по-прежнему через Depends(get_session) — тестовый харнесс подменяет её на savepoint-сессию) обёрнут таймаутом и try/except.
This commit is contained in:
@@ -38,6 +38,13 @@ class Settings(BaseSettings):
|
||||
# и показывает проблему, а не висит полминуты, делая вид, что всё живо.
|
||||
db_pool_timeout: int = 10
|
||||
|
||||
# --- Проверка доступности БД вне основного пула (`core/db.py::check_db_up`) ---
|
||||
# Таймаут TCP/auth отдельного соединения-пробы (не путать с
|
||||
# `db_pool_timeout` выше — тот про очередь на основной пул). Дефолт
|
||||
# asyncpg — 60с, для сигнала мониторинга это неприемлемо долго: пусть
|
||||
# `vidconf_db_up` станет 0 за секунды, а не через минуту.
|
||||
db_probe_timeout_s: float = 3.0
|
||||
|
||||
# --- Пул соединений с Redis ---
|
||||
# Считается по УЧАСТНИКАМ, а не по запросам: каждое WS-подключение комнаты
|
||||
# (`api/chat.py`) держит собственное pub/sub-соединение всё время, пока
|
||||
|
||||
Reference in New Issue
Block a user