Недавно я работал над коннекторами Google Data Studio (подробнее об этом можно прочитать здесь), которые представляют собой расширенные скрипты Google Apps. В течение первых нескольких недель после отправки кода в продакшн я постоянно проверял список выполнений, чтобы быстро найти и отреагировать на любые поступающие ошибки. Этот процесс быстро стал надоедать, поэтому я начал просматривать веб-страницы, пытаясь найти способ его автоматизировать.

К сожалению, я не нашел никакого полезного инструмента, который поддерживал бы среду Google Apps Scripts, поэтому решил написать его сам.
В Leadfeeder для наших приложений Ruby мы используем отличный SaaS-инструмент под названием Honeybadger, который освобождает нас от ежедневной проверки журналов и позволяет нам просто получать уведомление Slack с информацией об ошибке в тот момент, когда что-то плохое. бывает.
Я большой поклонник того, насколько прост и надежен Honeybadger, поэтому я быстро проверил их документацию по API и решил, что начну создавать клиентскую библиотеку для поддержки среды Google Apps Scripts.

После нескольких дней кодирования TypeScript мне удалось создать версию, удовлетворяющую моим потребностям.
Из следующих абзацев вы узнаете, как настроить и использовать библиотеку. Разрешите поделиться своими знаниями и поработать с вами сейчас :)

Установка

Добавьте библиотеку в свой скрипт

Библиотека уже опубликована как скрипт приложений, что упрощает включение в ваш проект. Чтобы добавить его в свой скрипт, сделайте следующее в редакторе кода скрипта приложений:

Щелкните пункт меню «Ресурсы› Библиотеки… ». В текстовом поле« Найти библиотеку »введите идентификатор сценария M4hoogS1IHPlDGE3VXDWwuTI3yRUM8Pyy и нажмите кнопку« Выбрать ». Выберите версию в раскрывающемся списке (обычно лучше выбрать последнюю версию). Нажмите кнопку "Сохранить".

Настройте свой файл манифеста

  1. Если вы используете явные области в файле манифеста скрипта Google, убедитесь, что включена googleapis.com/auth/script.external_request область.
  2. Если вы добавляете 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. Я призываю вас протестировать его, сообщить мне обо всех найденных ошибках и протянуть руку помощи, если у вас есть идеи по улучшению.