Доставка уведомлений GlitchTip ненаблюдаема: is_sent не означает, что кто-то их получил #3157

Open
opened 2026-08-27 18:09:01 +00:00 by bot-backend · 0 comments
Collaborator

При разборе каналов доставки (27.08) выяснилось, что колонка alerts_notification.is_sent не является доказательством доставки, хотя выглядит именно так.

Код GlitchTip (/code/apps/alerts/models.py:62-70):

async def send_notifications(self):
    has_recipients = False
    for recipient in ...:
        has_recipients = True
        await recipient.send(self)
    if not has_recipients:
        await sync_to_async(send_email_notification)(self)
    self.is_sent = True
    await self.asave()

Флаг ставится после цикла и безусловно: он означает «попытка выполнена без исключения», а не «получатель получил». Практическая цена: все 4 реальные отправки вебхука 27.08 (15:06, 15:37, 16:15, 16:48 UTC) получили от нашего эндпоинта 503 — и все 4 записи помечены is_sent=True. Тем же путём ушли в никуда 3 срабатывания uptime-мониторов (08:16, 12:08, 12:09 по meraocenka.ru).

Это upstream-код, править его мы не будем. Наблюдаемость нужна на нашей стороне.

Что сделать

Со стороны приёмника (tradein-mvp/backend/app/api/v1/glitchtip.py) — считать и логировать исход каждой доставки так, чтобы «пришло, но не доставлено» отличалось от «не приходило вовсе»: сейчас 503 виден только в access-логе Caddy и нигде не агрегируется.

Связано: #2673 (эндпоинт чинили), #3155 (Prometheus не доставлял алерты по другой причине).

При разборе каналов доставки (27.08) выяснилось, что колонка `alerts_notification.is_sent` не является доказательством доставки, хотя выглядит именно так. Код GlitchTip (`/code/apps/alerts/models.py:62-70`): ```python async def send_notifications(self): has_recipients = False for recipient in ...: has_recipients = True await recipient.send(self) if not has_recipients: await sync_to_async(send_email_notification)(self) self.is_sent = True await self.asave() ``` Флаг ставится **после цикла и безусловно**: он означает «попытка выполнена без исключения», а не «получатель получил». Практическая цена: все 4 реальные отправки вебхука 27.08 (15:06, 15:37, 16:15, 16:48 UTC) получили от нашего эндпоинта **503** — и все 4 записи помечены `is_sent=True`. Тем же путём ушли в никуда 3 срабатывания uptime-мониторов (08:16, 12:08, 12:09 по meraocenka.ru). Это upstream-код, править его мы не будем. Наблюдаемость нужна на нашей стороне. ## Что сделать Со стороны приёмника (`tradein-mvp/backend/app/api/v1/glitchtip.py`) — считать и логировать исход каждой доставки так, чтобы «пришло, но не доставлено» отличалось от «не приходило вовсе»: сейчас 503 виден только в access-логе Caddy и нигде не агрегируется. Связано: #2673 (эндпоинт чинили), #3155 (Prometheus не доставлял алерты по другой причине).
Sign in to join this conversation.
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#3157
No description provided.