Перейти к содержимому

Обзор ​

sessionIntegration ведёт одну сессию на визит — знаменатель здоровья релизов: сколько было визитов и сколько из них прошли плохо. Она включена по умолчанию.

  • Сессия начинается при инициализации SDK и живёт в localStorage, так что перезагрузки и новые вкладки того же визита её разделяют. Она заканчивается после 30 минут бездействия; следующее событие или переход в SPA после этого начинает новую.
  • Она отправляется событием session при начале и каждый раз, когда её статус ухудшается: обработанная ошибка (captureException()) делает её errored, необработанная (GlobalErrorIntegration) — crashed. Один лишь выросший счётчик ошибок отправляется, когда страница скрывается.
  • Страница, которая ушла без чистого завершения, — упавшая вкладка («Опаньки…», нехватка памяти), принудительно закрытый браузер, выключенный компьютер — делает свою сессию abnormal (см. Аварийные завершения).
  • Каждое другое событие несёт id сессии в contexts['session.id'] — так инцидент знает, сколько сессий он задел.

Сессии бесплатны: они никогда не входят в квоту и не сэмплируются. Что панель делает с ними — на странице Сессии.

Использование ​

Ничего делать не нужно — init() регистрирует её автоматически. Чтобы выключить:

ts
import { disable } from '@buglapse/browser'

disable('session')

Со script-тегом выключите Сессии в Настройки → Скрипт загрузчика проекта.

ОпцияПо умолчаниюОписание
abnormalExitstrueПомечать сессию abnormal, если одна из её страниц ушла без чистого завершения.
ts
import { init } from '@buglapse/browser'
import { sessionIntegration } from '@buglapse/browser/integrations'

init({
    dsn: '{dsn}',
    integrations: [sessionIntegration({ abnormalExits: false })],
})

Аварийные завершения ​

Упавшая вкладка не выполняет кода, который мог бы о ней сообщить, поэтому это выясняется позже. Каждая страница держит в localStorage небольшой пульс (обновляется каждые 10 секунд) и удаляет его на pagehide — при переходе, закрытии вкладки или браузера. Пульс, который остановился больше чем на 2 минуты и не был удалён, принадлежит странице, ушедшей нечисто: любая страница вашего сайта, открытая потом, — другая вкладка или следующий визит — помечает сессию той страницы abnormal. Так что об этом сообщается, когда снова работает какая-нибудь страница сайта, а не в момент падения.

Это эвристика, как в Sentry: падение рендерера, принудительное закрытие, падение ОС или убитый процесс выглядят одинаково. Чтобы не было ложных срабатываний, о скрытой странице (фоновая вкладка, свёрнутое окно) не сообщается никогда — браузеры замедляют и замораживают скрытые страницы, а выгрузка такой страницы — не падение, — и ничего не сообщается сразу после пробуждения компьютера из сна.

Id сессии ​

getSessionId() возвращает id текущей сессии — например, чтобы передать визит на ваш бэкенд. Работает до init() и без интеграции; как и событие, чтение считается активностью и начинает новую сессию, если прошлая истекла.

ts
import { getSessionId } from '@buglapse/browser'

await fetch('/api/checkout', { method: 'POST', headers: { 'X-Session-Id': getSessionId() } })

Сессия не зависит от трейсинга — это не id трейса, и к группировке спанов она отношения не имеет.