fix(tradein/tgbot): в логе сетевого сбоя не было причины — только пустота после двоеточия #3166

Merged
bot-backend merged 1 commit from fix/3156-tgbot-error-type into main 2026-08-27 19:05:47 +00:00
Collaborator

Чинит #3156.

Что было

WARNING app.services.tgbot.client: tg client: getUpdates — network error (попытка 1/3):  — retry через 2s

После двоеточия пусто. У httpx.ReadError и httpx.ConnectError текст исключения обычно пуст, а тип в строку не попадал.

Замер на проде 27.08 (контейнер tradein-tgbot): 23 срабатывания за сутки, 14 за последний час. До 3/3 не доходило ни разу — ретрай чинит с первой попытки, поэтому сообщений не теряется. Теряется возможность понять причину: по такой строке не отличить таймаут от обрыва соединения от сброса TLS.

Сеть при этом цела — сырой TLS до 149.154.167.220:443 проходит 6/6 за ~0.16s. То есть искать надо было бы в типе исключения, которого в логе нет.

Правка

Тип добавляется к тексту, а не вместо него: на исключениях с внятным сообщением диагностика не должна стать беднее прежней.

reason = f"{type(exc).__name__}: {exc}" if str(exc) else type(exc).__name__

Оба конца закреплены тестами: с пустым текстом (ReadError("") → в логе должен быть ReadError) и с непустым (ConnectTimeout("таймаут соединения") → в логе оба). Первый тест падает на старом коде — проверено рассуждением по формату, а не только зелёным прогоном.

tests/services/tgbot/ — 42 passed, ruff чист.

Дальше

Это не лечение, а включение света. Через сутки с типами в логе станет видно, лечится ли это таймаутами и keep-alive или это внешняя деградация — тогда и решать.

Чинит #3156. ## Что было ``` WARNING app.services.tgbot.client: tg client: getUpdates — network error (попытка 1/3): — retry через 2s ``` После двоеточия пусто. У `httpx.ReadError` и `httpx.ConnectError` текст исключения обычно пуст, а тип в строку не попадал. Замер на проде 27.08 (контейнер `tradein-tgbot`): **23 срабатывания за сутки, 14 за последний час**. До `3/3` не доходило ни разу — ретрай чинит с первой попытки, поэтому сообщений не теряется. Теряется возможность понять причину: по такой строке не отличить таймаут от обрыва соединения от сброса TLS. Сеть при этом цела — сырой TLS до `149.154.167.220:443` проходит 6/6 за ~0.16s. То есть искать надо было бы в типе исключения, которого в логе нет. ## Правка Тип добавляется **к** тексту, а не вместо него: на исключениях с внятным сообщением диагностика не должна стать беднее прежней. ```python reason = f"{type(exc).__name__}: {exc}" if str(exc) else type(exc).__name__ ``` Оба конца закреплены тестами: с пустым текстом (`ReadError("")` → в логе должен быть `ReadError`) и с непустым (`ConnectTimeout("таймаут соединения")` → в логе оба). Первый тест падает на старом коде — проверено рассуждением по формату, а не только зелёным прогоном. `tests/services/tgbot/` — 42 passed, ruff чист. ## Дальше Это не лечение, а включение света. Через сутки с типами в логе станет видно, лечится ли это таймаутами и keep-alive или это внешняя деградация — тогда и решать.
bot-backend added 1 commit 2026-08-27 18:59:15 +00:00
fix(tradein/tgbot): в логе сетевого сбоя не было причины — только пустота после двоеточия
All checks were successful
CI / changes (pull_request) Successful in 10s
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m51s
c01ec805df
Замер на проде 27.08: `getUpdates` падает 23 раза в сутки, 14 из них за один
час. Ретрай почти всегда чинит с первой попытки, поэтому сообщений не теряется
— теряется возможность понять, что происходит:

    network error (попытка 1/3):  — retry через 2s

После двоеточия пусто. У httpx.ReadError и httpx.ConnectError `str(exc)` пуст,
а тип исключения в строку не попадал. По такому логу не отличить таймаут от
обрыва соединения от сброса TLS, то есть 23 события в сутки не дают ни одной
зацепки. Сеть при этом цела: сырой TLS до Telegram проходит 6 из 6 попыток
за ~0.16s.

Тип добавляется к тексту, а не вместо него: на исключениях с внятным
сообщением диагностика не должна стать беднее прежней. Оба конца закреплены
тестами — с пустым текстом и с непустым.

Closes #3156
bot-backend merged commit b2748f90f8 into main 2026-08-27 19:05:47 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3166
No description provided.