← Admin Panel

Уведомления — лента

admin panel · макеты · уведомления

Что админ читает по клику на колокольчик: лента in-app — личный срез доставленных событий, статус прочтения, действия. Каналы, маршруты и типы — на экране настроек уведомлений; механика доставки — в диспетчере.

Колокольчик и панель → Шапка
in-app · вход в ленту
  1. 1 Колокольчик с unread-счётчиком — число непрочитанных in-app у текущего админа (доставки с read_at IS NULL). Счётчик обновляется мгновенно push-каналом (SSE), опрос — фоновый добор. Канал in-app залочён включённым, поэтому колокольчик есть всегда — лента = notifications ⋈ deliveries.
  2. 2 Панель — хвост последних событий, по клику открывается из колокольчика. «Прочитать все» проставляет read_at всем доставкам админа разом; шестерёнка ведёт в настройки каналов и маршрутов (правит только Owner).
  3. 3 Дедуп — серия однотипных сбоев схлопнута в одно уведомление со счётчиком ×N, не N строк. Ключ и окно — тротлинг диспетчера.
  4. 4 Discovery — единственный actionable-тип: «В scope» прямо из ленты заводит контейнер в охват источника (payload в notifications.meta). Событие общее для всех Owner / Admin, а действие глобальное, поэтому оно идемпотентно: источник истины по охвату — allow-list Harvester; контейнер уже в scope → повтор ничего не делает, а кнопка «В scope» гаснет у всех. Само уведомление состояние действия не хранит — журнал не мутируется ради этого. Живёт только в режиме scope «Только выбранное»; в режиме «Всё» объект подхватывается сам — тогда это просто инфо.
  5. 5 «Показать все» ведёт на полный экран — там история, фильтры и отметка прочтения по одному. В панели — только верхушка.
  6. Это лента Admin Panel — для Owner / Admin, адресатов алертов организации. У сотрудника-member своя лента личных уведомлений в Web App (прогоны агента, смена роли) — тот же диспетчер, своя витрина.
Полный экран — Inbox → Модель данных
notification inbox
achilles.local/admin/notifications/inbox /admin/notifications/inbox · Owner / Admin
Уведомления лента
Поиск по заголовку или источнику
Тип Severity Непрочитанные Период 6
Сегодня
Sync critical серия ×5 7 14:02 · 5 мин назад
Источник Jira: 5 сбоев прогона подряд Последний прогон упал на этапе извлечения — источник недоступен с 13:40.
harvester · source/42 8
Отметить прочитанным 9 Открыть источник
Security critical 13:48 · 20 мин назад
Перебор пароля: anna@…, 12 неудачных входов за 15 мин auth · user/anna
Discovery info 12:55 · 1 ч назад
Новый проект «Phoenix» в Jira — вне scope источника
добавить в охват сбора?
Ранее
Budget critical вчера, 18:30
AI-расходы за июнь превысили бюджет $500
admin · budget
Отметить непрочитанным 10 Открыть расходы
System critical вчера, 04:12
Backup Knowledge Store провалился knowledge_store · backup
Sync warning вчера, 02:05
Прогон Confluence: 8 документов в DLQ harvester · source/17
1–20 из 156
1 2 3 8
  1. 6 Фасеты Тип · Severity · Непрочитанные · Период — поведение единое для всех списков. «Непрочитанные» — частый дефолт; снять, чтобы увидеть историю.
  2. 7 Severity-чип = notifications.severity (critical · warning · info), цвет из каталога событий. Тип слева — категория маршрутизации (Sync · Security · Budget · System · Discovery).
  3. 8 Источник кликабелен — диплинк на сущность из source_ref: прогон, источник, провайдер, бюджет. Уводит туда, где чинят, прямо из ленты.
  4. 9 «Отметить прочитанным» пишет read_at в собственную доставку админа — у каждого своя лента и свой read-state, чужие не трогаются. Само событие — append-only, его не правят и не удаляют.
  5. 10 Прочитанное гаснет (приглушённая карточка, без акцентной полосы), но остаётся в истории; «Отметить непрочитанным» возвращает в счётчик. Группировка по дню — Сегодня · Ранее.
  6. Что попадает в ленту — личное: любой тип и канал, включая in-app у security и sync, отключается у себя в профиле (notification_prefs), личных замков нет. Организационный замок этих двух держит in-app включённым лишь на уровне организации — централизованно не погасить, но личного выбора он не ограничивает.