reperr - приложение на OneScript.Web, которое задействует механизмы платформы 1С 8.3.17+ по автоматической обработке ошибок. С его помощью можно прямо из окна 1С можно создать задачу в Jira или Redmine, а также отправить сообщение об ошибке в Sentry или RabbitMQ.
Название reperr образовалось от report и error, произносится как рэпер.
Проект живет на GitHub.
Какие задачи решает reperr?
reperr помогает отправлять информацию об ошибках в баг-трекер прямо из 1С. Пользователь, не выходя из программы, нажимает в системном окне кнопку "Отправить" и ошибка сразу регистрируется в трекере, со скриншотом, стеком вызовов и прочей информацией, которая нужна для расследования проблемы и ее решения.
Как пользоваться?
Рассмотрим один из вариантов: допустим, что в роли баг-трекера выступает Jira. Также имеется некая информационная база, ошибки в которой решено перехватывать и отправлять баг-трекер.
Для начала необходимо создать и настроить служебную учетную запись Jira, от имени который reperr будет регистрировать ошибки. Для этой учетной записи потребуется создать токен. Он требуется для доступа к Jira API.
Токен генерируется тут:
В следующем окне нужно перейти в раздел "Безопасность":
Полученный токен нужно сохранить, он потребуется на одном из следующих шагов.
Затем нужно скопировать исходники проекта на ту машину, на которой он будет работать. Можно клонировать репозиторий или скачать архив из релизов.
Следующий шаг: указать в файле `src/appsettings.json` реквизиты подключения к вашему экземпляру Jira и обязательные параметры, например, задачи какого типа и с каким приоритетом создавать.
После установки параметров нужно запустить проект. Сделать это можно по-разному: в докере и неправильным способом напрямую на OneScript.Web.
Я настоятельно рекомендую запускать правильным способом. Для этого в каталоге проекта нужно выполнить команду:
docker-compose up
Само собой, движок docker и docker-compose должны быть установлены.
После запуска имеет смысл проверить, что веб-интерфейс открывается в обычном браузере.
Далее нужно указать в информационной базе ссылку на reperr, а также изменить другие параметры регистрации ошибок, если это требуется. Для применения настроек 1С попросит перезапустить текущий сеанс.
Окно с настройками открывается из меню "Функции для технического специалиста" -> "Стандартные" -> "Управления настройками обработки ошибок":
Можно считать, что первоначальная настройка выполнена. Чтобы проверить работоспособность того, что мы настроили, воспроизведем какую-нибудь ошибку. Самое простое - написать внешнюю обработку с обращением к чему-нибудь несуществующему.
Теперь при возникновении ошибки в системе отобразится кнопка "Отправить отчет", а при ее нажатии появится надпись "Отчет отправлен". Обратите внимание на то, что место отображения кнопки "Отправить отчет" зависит от настроек обработки ошибок.
После нажатия на кнопку "Отправить" система сообщает: "Отчет отправлен".
Что произойдет, если ошибка возникнет много раз и у нескольких пользователей? Неужели в трекере появится много одинаковых задач?
Это поведение будет зависеть от выбранной точки интеграции. Если точка интеграции - Jira или Redmine, то не появится. В RabbitMQ и Sentry отправляется каждый отчет.
Чтобы проверить, как отрабатывает такой сценарий, необходимо снова воспроизвести ту же самую ошибку. В этот раз появится более информативное сообщение о том, что ошибка уже зарегистрирована, с указанием номера, а кнопка "Отправить" не отобразится.
Проверим, как выглядит результат в Jira. На скриншоте ниже видно, что создана задача REP-53, со стеком и скриншотом. Если при отправке ошибки из 1С прикрепить произвольный файл, то и он отобразится во вложениях.
Опыт эксплуатации и особенности
Решение стабильно работает как в Windows, так и в Linux, дает минимальную нагрузку, работает без сбоев месяцами.
На какие особенности следует обратить внимание:
- все настройки обработки ошибок кочуют вместе с копиями информационной базы. Это приводит к тому, что все копии одной ИБ будут стучаться по той ссылке, которая была указана в момент создания копии. Платформа 1С не передает в отчете по ошибке адрес информационной базы, поэтому reperr не сможет понять, откуда конкретно пришел запрос.
- сейчас в платформе нет возможности переопределить надпись "Отчет отправлен". Это приводит к тому, что при отправке отчета о новой ошибке пользователь не сможет сразу увидеть, под каким номером она была зарегистрирована. Единственный способ - воспроизвести ошибку еще раз. Я уже направил пожелание на доработку веб-сервиса разработчикам платформы 1С.
- веб-интерфейс reperr примитивен и не предоставляет практически никаких возможностей, кроме просмотра информации. Лично мне имеющихся возможностей пока хватает, но развиваться есть куда.
Решение будет полезным как службе поддержки, так и конечным пользователям. В контуре тестирования \ разработки оно тоже пригодится.
Всем, кто уже перешел на 8.3.17 или 8.3.18, можно смело пользоваться. Я буду очень благодарен за обратную связь, новые идеи, и, конечно, пул-реквесты.
Технические подробности
Этот раздел привожу для тех, кому интересны внутренности приложения.
reperr разработан на OneScript.Web. Почему именно так? Есть две причины, и главная из них - мне очень хотелось изучить движок и его возможности. Вторая причина - хотелось остаться внутри экосистемы 1С. Все-таки это продукт, который подразумевает тесное взаимодействие с платформой 1С и только с ней. Разрабатывать такой проект на Node.js было бы занимательно, но не логично.
reperr состоит из двух условных частей: ядра и слоя прикладной логики.
Ядро - это реализация веб-сервиса, спецификация которого опубликована в документации к платформе. Другие публикации (первая, вторая) на IS хорошо дополняют документацию, поэтому повторяться не буду.
Ядро reperr выполняет три функции:
- получает информацию об ошибках, которые возникают в подключенных базах
- запрашивает прикладную часть о необходимости регистрации ошибки
- получает, распаковывает и сохраняет в локальном каталоге отчеты об ошибках (архивы с report.json, скриншотами и другими файлами, которые прикрепил пользователь)
"Прикладная" часть отвечает за:
- отображение информации в веб-интерфейсе
- сохранение информации о возникших ошибках и отчетов по этим ошибкам во внутреннем формате
- вычисление "отпечатков" ошибок
- принятие решения об отправке ошибки
- отправку ошибок в точку интеграции
Архитектура проекта далека от идеальной, но уже сейчас позволяет относительно быстро реализовать свою точку интеграции. Для этого нужно:
- создать свой класс и реализовать в нем методы программного интерфейса
- добавить свой ключ в файл настроек appsettings.json
- немного дополнить класс, который обрабатывает файл настроек.
Если тема окажется актуальной и интересной, я могу создать отдельную публикацию на тему подключения новых точек интеграции, на примере YouTrack или СППР. Какой issue наберет большее количество лайков, на том и сделаю.
PS: в недрах проекта спрятана пасхалка. Ее не так уж сложно найти, нужно совсем немного постараться. Поверьте, это стоит того)