Мы уже рассказывали в блоге об открытых разработках исследователей Университета ИТМО. Например, об инструменте для поиска генов устойчивости к антибиотикам и приложении, позволяющем анализировать бизнес-процессы.
В этот раз мы поговорим о Hawk ― сервисе, который автоматически анализирует код и отслеживает в нем ошибки.
О команде
Команда CodeX состоит из студентов и выпускников мировых университетов, в том числе Университета ИТМО. Цель объединения — вместе с талантливыми единомышленниками менять IT мир к лучшему, создавая проекты с открытым исходным кодом. На сегодняшний день, Кодекс создал уже более ста проектов разного масштаба — от небольших библиотек, до крупных продуктов. Все они имеют открытый код.
Наиболее известная разработка команды — визуальный редактор Editor.js, вошедший в число самых популярных проектов такого типа в мире.
О проекте
Новый проект, Hawk, получился не менее масштабным, чем редактор. Он состоит из трех десятков публичных репозиториев, общая кодовая база достигает сотен тысяч строк. От первого прототипа до релиза на мировом рынке прошло более четырех лет разработки.
Первая версия Хоука, как это часто бывает, появилась в результате внутреннего хакатона, которые CodeX периодически проводит с целью экспериментов и исследований. После хакатона созданный прототип допилили и подключили к собственным проектам — сервис оказался полезен. С его помощью команда дебажила свои разработки, исправляла в них ошибки и повышала качество проектов.
Тем не менее, первая версия имела недостатки. При достижении метрики в 10 миллионов обрабатываемых ошибок в сутки проявились проблемы с выдерживаемой нагрузкой. Стало понятно, что архитектура нуждается в пересмотре. Следующие 3 года ушли на проектирование микросервисной архитектуры, переписывание всего бэкенда с нуля, редизайн и переделку клиентов.
Принцип работы
Hawk — трекер ошибок. Разработчики интегрируют в свои проекты специальный скрипт «Кэтчер», который отлавливает необработанные исключения и отправляет их в «Гараж» — сервис для просмотра случившихся событий, изучения деталей ошибок, распределения их между исполнителями для исправления.
В Гараже ошибки группируются по дням, сортируются по количеству, выводятся в удобном для восприятия виде. Кроме того, CodeX рассказывала о планах по разработке системы предсказания приоритета ошибки с помощью машинного обучения.
Разработчики Hawk дали возможность видеть сразу все воркспейсы одновременно. Лэйаут Хоука похож на мессенджер: слева выводится список проектов, которые поднимаются наверх при получении новых ивентов. Справа — список ивентов в проекте. Кнопки воркспейсов работают как фильтры — скрывают из списка проектов те, что не принадлежат воркспейсу. Благодаря этому решению, работать с большим количеством интеграций становится удобнее.
По каждому событию можно посмотреть подробную информацию с собранными Хоуком данными: контекст ошибки, фрагмент кода, коммит и тд. Это должно помочь выяснить причину и исправить ошибку.
О пойманных ошибках Хоук сообщает владельцу проекта через ботов в Telegram, Slack или на почту.
Как устроен сервис
Хоук выдерживает высокие нагрузки благодаря обновленной архитектуре: в отличие от прототипа, который был монолитным приложением, теперь части системы не влияют друг на друга.
Кэтчеры представляют из себя скрипты под разные языки программирования, суть которых сводится к установке глобального обработчика ошибок и отправке их в Хоука. Все отправленные ошибки попадают в Коллектор — сервис приемки, написанный на Go. Проделав минимальную обработку и валидацию, Коллектор складывает ивенты в очередь на дальнейшую обработку.
В качестве брокера очередей выбран RabbitMQ. Консюмеры — Воркеры — фоново забирают ошибки из очереди, обрабатывают их и кладут в базу. Воркеры могут писаться на любом технологическом стеке. В данный момент большинство из них работает на Node.js. Время обработки событий с момента отправки до появления в Гараже — в среднем 5-10 секунд.
API для приложений работает на Node.js и GraphQL. База пользователей, проектов, ворскпейсов отделена от базы винтов. Есть отдельный микросервис CodeX Accounting для учета платежных операций. У него свой SDK, API (GraphQL), и база данных.
Сервис просмотра ошибок, Гараж, написан на Vue. Также имеются нативные приложения для Windows, Mac, Linux, созданные с помощью Electron.
Технические требования
В данный момент команда представила Кэтчеры под следующие языки: JavaScript (TypeScript), Node.js, PHP, Go, Python, Scala, Kotlin. При необходимости, разработчики могут создать собственные кэтчеры под свой стек или фреймворк, следуя инструкции.
По задумке команды, большинство пользователей Хоука имеют бесплатный полный доступ ко всем функциям. Для крупных клиентов, присылающих более 100 000 ошибок в сутки, предусмотрены несколько платных тарифных планов.
Сравнение с конкурентами
Главные аналоги — Sentry, Rollbar, TrackJS. По сравнению с ними, цены тарифных планов Хоука существенно ниже, а бесплатный план объемнее. Главная функциональность по отлову ошибок и просмотру контекста у проектов схожа. Второстепенных функций меньше. Из преимуществ: более легкая интеграция, удобная работа с несколькими проектами и воркспейсами, группировка событий по дням, удобный и приятный визуальный дизайн, быстрая скорость работы.
***
CodeX открыт к обратной связи и продолжает развивать Hawk. Оставляем контакты команды для связи: team@codex.so
UPD. Обновили полностью текст вместе с командой CodeX — добавили больше информации о принципах работы приложения.