Первая версия Hawk появилась в 2017 году в результате одного из хакатонов, которые регулярно проводятся в CodeX в образовательных целях. Команде нужен был «отловщик» ошибок в коде, а покупать и использовать готовое решение было не интересно. Но позже разработчики развили мысль и решили, что такой плагин был бы полезен не только внутри команды, но и для сторонних разработчиков.
Впрочем, не все начиналось гладко: первая версия сервиса оказалась не слишком удобной и при первом же тестировании на сторонних ресурсах не выдержала нагрузки от пользователей.
«Первую версию мы тестировали у наших знакомых из компании "Комитет", куда входит VC.ru, DTF, TJournal и так далее. Тогда количество приходящих в Hawk событий начало очень сильно расти ― это тормозило работу и делало его неустойчивым. Так что нам пришлось полностью переписать его архитектуру», – рассказывает Виталий Гурын, проджект-менеджер и разработчик в CodeX.
Идея программы достаточно простая: есть маленькие программы-кэтчеры, которые устанавливаются как плагины на сайтах, в веб- или андроид-приложениях. Найденные ошибки они передают на сервер, причем собираются не только сами ошибки в коде, но и подробная информация о них ― например, какие действия пользователя вызвали ошибку, в какой момент времени, сколько раз она повторилась, какие в это время были параметры у браузера и так далее. Все эти детали визуально отображаются на панели администратора ― разработчики назвали ее «Гараж».
Программа построена на основе микросервисной архитектуры. То есть каждый рабочий модуль (например коллектор для приема ошибок и воркер для их обработки) реализован в виде отдельного сервиса. Как отмечают разработчики, такое решение позволяет масштабировать каждый из модулей соответственно их нагрузке ― а саму программу делает более стабильной.
На реализацию полноценного продукта у команды ушло несколько лет: работать над новой версией начали в 2018 году, а закончили только сейчас.
«Это была совсем не очевидная задача. Очень много времени ушло на разработку функционала, добавление и доработку кэтчеров. Сначала они могли присылать только название ошибки, потом мы научили их присылать куски кода и другую полезную информацию, которая помогла бы понять, как решить проблему. Дальше пришлось разбираться с тем, как правильно организовать архитектуру: как микросервисы будут друг с другом общаться, как сделать так, чтобы всё работало стабильно. И если какой-то из сервисов отвалился, Hawk продолжал работать», – объясняет Виталий Гурын.
Сейчас Hawk умеет работать со всеми популярными языками программирования, которыми пользуются сами разработчики: JavaScript, PHP, Go, Node.js, Python, Scala, Kotlin. В будущем планируется добавить репозитории и с более сложными и редкими языками. Причем сделать это могут и сами пользователи. Как и все проекты команды, Hawk ― это открытое ПО.
«Все кусочки Hawk имеют открытый исходный код. Это значит, что можно зайти на GitHub и посмотреть, как устроен каждый из наших микросервисов. Мы не стесняемся наших решений и в том числе показываем наглядно, что будет происходить с данными пользователей. К тому же это удобно для всех: любой человек, если захочет, может поискать ошибки в нашем коде, уязвимости, добавить что-то или адаптировать под себя и так далее», ― отмечает Виталий Гурын.
Сейчас программа по-прежнему тестируется на площадках компании «Комитет». Как отмечают разработчики, это взаимовыгодное сотрудничество: компания может пользоваться свежим продуктом, а команда разработки получает возможность протестировать программу в условиях очень большой нагрузки.
«Надо отметить, что это не какой-то статический сканер, который анализирует код и говорит: вот здесь ошибка. Это происходит в режиме run-time. То есть пользователь заходит на сайт, нажимает что-то и видит, что ничего не происходит. Его действия фиксируются в логах ― Hawk может отловить эту информацию и показать разработчикам, на какой странице произошла ошибка, что пользователь делал и так далее. По сути, программа заменяет репорты от пользователей или работу тестировщиков. Это позволяет производить мониторинг ошибок и получать уведомления в автоматическом режиме», ― объясняет Никита Мельников, devops-разработчик в CodeX.
Проект не совсем коммерческий ― он доступен бесплатно всем пользователям, но с определенным лимитом в 100 тысяч ошибок в месяц. Как отмечают его создатели, этого вполне достаточно для рядовых самостоятельных разработчиков. Для крупных компаний предусмотрены тарифы в 200 тысяч, миллион и более ошибок. Введение платных тарифов объясняется тем, что поддерживать сервисы и оплачивать сервера достаточно дорого.
«Каждый раз, когда мы делаем какие-то решения для себя, то всегда стараемся упаковать их в красивую обертку, написать к ним грамотную и подробную документацию. Делаем такой микрорелиз. Для нас это уже устоявшаяся практика. Но конкретно этот проект достаточно большой: у нас сейчас порядка 30 репозиториев ― различных кодовых баз, из которых состоит Hawk. Для поддержания проекта требуется достаточно большая серверная инфраструктура, которую содержать за свои деньги проблематично. Поэтому там есть платные тарифы ― это нужно просто чтобы поддерживать работу этого сервиса», ― заключает Виталий Гурын.
Команда двигалась к долгожданному релизу больше 4 лет, и сегодня Hawk официально запустился. CodeX представил продукт мировому сообществу на Product Hunt ― это платформа, где формируется хит-парад новых проектов. Предыдущий крупный проект CodeX — визуальный редактор Editor.js ― в день релиза возглавил хит-парад и получил множество наград.