Плагины

Плагины позволяют изменить данные ошибки перед отправкой, исключить ненужные события или отследить срабатывание ограничения частоты отправки.

Механизм плагинов поддерживает следующие хуки:

ХукПредназначение
errorOnThrottleПозволяет отследить троттлинг ошибок при работе с модулем Error. Подробнее здесь
errorBeforeAddПозволяет модифицировать данные ошибки до её отправки в сервис. Подробнее здесь

Инициализация плагинов

Для начала установите SDK – введите в терминале команду:

npm install @apptracer/sdk --save

Плагины можно подключить при инициализации SDK через initTracerPlugins или позже, во время работы приложения, через addTracerPlugin.

Создание плагинов с помощью initTracerPlugins

initTracerPlugins подключает плагины при инициализации SDK. Они сохраняются на всё время работы, в том числе после отключения и возобновления модулей. Во время паузы обработка ошибок не выполняется.

ПараметрТипОписание
namestringНазвание инстанса SDK. Только в Lite-версии.
configITracerPluginsConfigНастройки подключаемых плагинов.

initTracerPlugins возвращает объект ITracerPlugins. Его метод addPlugin позволяет подключить ещё один плагин во время работы приложения. Вместо него также можно использовать функцию addTracerPlugin:

ПараметрТипОписание
pluginITracerPluginНастройки одного подключаемого плагина.

Пример подключения:

import { initTracerPlugins } from '@apptracer/sdk'; const config = { plugins: [{ name: 'checkout', errorBeforeAdd: function () { return { keys: { feature: 'checkout' } }; }, }], }; initTracerPlugins(config);

ITracerPluginsConfig

ПараметрТипОписание
pluginsITracerPlugin[]Список настроек подключаемых плагинов.

ITracerPlugin

ПараметрТипОписание
namestringНазвание плагина.
errorOnThrottle(errorInfo: ITracerErrorInfo) => voidХук для работы с троттлингом ошибок.
errorBeforeAdd(errorInfo: ITracerErrorInfo) => ITracerErrorData | boolean | voidХук для модификации ошибок перед отправкой.

Создание плагинов с помощью addTracerPlugin

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

ПараметрТипОписание
namestringИмя экземпляра SDK, только для Lite.
pluginITracerPluginНастройки подключаемого плагина.

Пример подключения:

import { addTracerPlugin } from '@apptracer/sdk'; // SDK проинициализирован, выполняется код const dispose = addTracerPlugin({ name: 'warnings', errorBeforeAdd: function (info) { if (info.error.message.indexOf('optional feature') !== -1) { return { severity: 'warning' }; } }, }); // Когда плагин больше не нужен: dispose();

Хук errorOnThrottle

JS SDK использует троттлинг, чтобы избежать в сервисе появления большого количества одинаковых ошибок. Функция, которую вы определите в errorOnThrottle, будет вызвана для каждой ошибки, попавшей под троттлинг – таким образом вы можете его отследить.

SDK позволяет отправить до 10 одинаковых ошибок подряд. Если ошибки продолжают повторяться, отправляется не более одной ошибки раз в 10 секунд.

Хук errorBeforeAdd

В errorBeforeAdd можно изменить данные ошибки перед отправкой: например, добавить ключи или задать уровень серьёзности. Верните объект с изменениями или false, чтобы исключить ошибку из отправки. Имена плагинов, изменивших ошибку, доступны в поле modifiedByPlugins.

Сначала SDK проверяет ограничение частоты отправки. Если оно сработало, вызывается только errorOnThrottle, а дальнейшая обработка ошибки прекращается. В остальных случаях SDK вызывает filterError, а затем — errorBeforeAdd, если фильтр не вернул false.

Плагины вызываются в порядке регистрации. Изменения, возвращённые одним плагином, доступны следующему; false прекращает обработку ошибки и вызов следующих плагинов. Возвращённые keys дополняют или переопределяют ключи события, а context заменяется целиком.

errorInfo.context содержит JSON-копию контекста события. Чтобы заменить отправляемый контекст, верните { context: новыйОбъект }, а чтобы удалить — { context: undefined }. Изменение самого errorInfo.context не меняет данные события.

Пример использования:

import { addTracerPlugin } from '@apptracer/sdk'; addTracerPlugin({ name: 'warnings', errorBeforeAdd: (errorInfo) => { if (errorInfo.errorStack.includes('some_text')) { return { severity: 'warning', keys: { withSomeText: true }, }; } } });

addPlugin, как и addTracerPlugin, возвращает функцию удаления добавленного плагина. Для добавления плагинов после инициализации используйте эти методы, не вызывая initTracerPlugins повторно.