Недавно я работал над коннекторами Google Data Studio (подробнее об этом можно прочитать здесь), которые представляют собой расширенные скрипты Google Apps. В течение первых нескольких недель после отправки кода в продакшн я постоянно проверял список выполнений, чтобы быстро найти и отреагировать на любые поступающие ошибки. Этот процесс быстро стал надоедать, поэтому я начал просматривать веб-страницы, пытаясь найти способ его автоматизировать.
К сожалению, я не нашел никакого полезного инструмента, который поддерживал бы среду Google Apps Scripts, поэтому решил написать его сам.
В Leadfeeder для наших приложений Ruby мы используем отличный SaaS-инструмент под названием Honeybadger, который освобождает нас от ежедневной проверки журналов и позволяет нам просто получать уведомление Slack с информацией об ошибке в тот момент, когда что-то плохое. бывает.
Я большой поклонник того, насколько прост и надежен Honeybadger, поэтому я быстро проверил их документацию по API и решил, что начну создавать клиентскую библиотеку для поддержки среды Google Apps Scripts.
После нескольких дней кодирования TypeScript мне удалось создать версию, удовлетворяющую моим потребностям.
Из следующих абзацев вы узнаете, как настроить и использовать библиотеку. Разрешите поделиться своими знаниями и поработать с вами сейчас :)
Установка
Добавьте библиотеку в свой скрипт
Библиотека уже опубликована как скрипт приложений, что упрощает включение в ваш проект. Чтобы добавить его в свой скрипт, сделайте следующее в редакторе кода скрипта приложений:
Щелкните пункт меню «Ресурсы› Библиотеки… ». В текстовом поле« Найти библиотеку »введите идентификатор сценария M4hoogS1IHPlDGE3VXDWwuTI3yRUM8Pyy и нажмите кнопку« Выбрать ». Выберите версию в раскрывающемся списке (обычно лучше выбрать последнюю версию). Нажмите кнопку "Сохранить".
Настройте свой файл манифеста
- Если вы используете явные области в файле манифеста скрипта Google, убедитесь, что включена
googleapis.com/auth/script.external_requestобласть. - Если вы добавляете URL-адреса, доступные через UrlFetchApp, в белый список, обязательно добавьте
"https://api.honeybadger.io/"вurlFetchWhitelistключ вappsscript.jsonfile.
Настроить клиента
Сначала найдите ключ API своего проекта на следующей странице настроек Honeybadger:

Затем в вашей функции GAS инициализируйте клиента, выполнив следующую строку:
Honeybadger.configure({
apiKey: '[ YOUR API KEY HERE ]'
});
Отправлять уведомления об ошибках в Honeybadger
К сожалению, скрипты Google Apps не позволяют перехватить все необработанные исключения, поэтому вам придется заключить код вашей функции в try-catch следующим образом:
function yourGasFunction() {
try {
// Your code
} catch(e) {
Honeybadger.notify(e);
}
}
Добавить контекст выполнения
Вы можете передать дополнительный контекст, который будет отправляться вместе с вашими уведомлениями:
Honeybadger.context({
user_id: Session.getTemporaryActiveUserKey(),
user_email: Session.getActiveUser().getEmail()
});
Лично я использую следующую вспомогательную функцию, которая выполняет инициализацию, добавляет контекст выполнения и сразу настраивает обработку ошибок:
function withHoneybadger(callback) {
const scriptProperties = PropertiesService.getScriptProperties();
const apiKey = scriptProperties.getProperty('HONEYBADGER_API_KEY');
Honeybadger.init({ apiKey: apiKey });
Honeybadger.context({
user_id: Session.getTemporaryActiveUserKey(),
user_locale: Session.getActiveUserLocale(),
user_email: Session.getActiveUser().getEmail()
});
try {
return callback();
} catch (e) {
Honeybadger.notify(e);
throw e;
}
}
function myGasFunction() {
return withHoneybadger(function() {
return gasFunctionLogic();
});
}
Работает 🎉
Мне больше не нужно просматривать журналы, чтобы узнать, что один из моих скриптов не удался - журналы теперь приходят ко мне автоматически :)
Вот как выглядит пример уведомления об ошибке для моего скрипта. Вы можете быстро найти трассировку стека ошибок, затронутых пользователей, количество вхождений и контекст выполнения.

Помощь и идеи приветствуются
Код библиотеки можно найти в моем репозитории GitHub: https://github.com/Bajena/honeybadger-gas. Я призываю вас протестировать его, сообщить мне обо всех найденных ошибках и протянуть руку помощи, если у вас есть идеи по улучшению.
