Fast food против деликатесов. Создаем альтернативу Mozilla Socorro на Node.js за вечер

fast_food_vs_del

 

 

 

Разработчики редко задумываются о том, удобно ли будет пользоваться их «творением». Нас больше волнует, какими модными технологиями этот продукт будет напичкан и как предусмотреть все на свете. В итоге рождаются продукты вроде Mozilla Socorro.Что это? Socorro — сервер для сбора и обработки краш-репортов, которые создаются популярной кросс-платформенной библиотекой Google Breakpad.

Однажды наткнувшись на него, я с облегчением вздохнул и обрадовался тому, что совсем скоро краш-репорты в моем проекте будут красиво показываться как у Mozilla. Отправной точкой стала официальная документация, в которой сразу же бросились в глаза зависимости:

  • Mac OS X or Linux (Ubuntu/RHEL)
  • PostgreSQL 9.3
  • RabbitMQ 3.1
  • Python 2.6
  • C++ compiler (GCC 4.6 or greater)
  • Subversion
  • Git
  • PostrgreSQL and Python dev libraries (for psycopg2)

Даже не вооруженным взглядом видно, что перед нами отличный деликатес для разработчиков. Python, PostgreSQL и даже RabbitMQ, который к слову сказать — разрабатывается также в недрах Mozilla. Но проходит пару минут, технологическая эйфория спадает и вы начинаете понимать:

  1. Установка и настройка этого монстра займет много или даже ОЧЕНЬ много времени
  2. Зависимости очень «тяжелые», один только RabbitMQ съест не мало оперативной памяти
    Что особенно критично если у вас open-source проект, и в вашем распоряжении очень скромный сервер или VDS
  3. Соль и перец к перечисленному выше добавьте по вкусу

Потом вы вспоминаете, что вы просто хотели бы какой-то инструмент, который автоматически обрабатывает приходящие краш-репорты и добавляет извлеченную из него информацию в  дефекты на Github.

Первая мысль которая сразу же приходит на ум — найти альтернативы. Поверхностный поиск на github дал следующие результаты:

https://github.com/atom/mini-breakpad-server (Node.js)
https://github.com/GregoryHlavac/Caliper (Node.js)
https://github.com/efyx/LandingNet (Python)
https://github.com/reckhou/DoomAnalysis (Go)

Наиболее простым является mini-breakpad-server, он не требует никаких БД и достаточно прост в установке. НО как мне кажется существенным недостатком всех этих проектов является попытка сделать все тот  же Mozilla Socorro, только самостоятельно, на любимом ЯП. Никто не задумался над тем, что вероятно у проекта которому нужен подобный «сервер» уже есть свой сайт и еще один со статистикой по краш-репортам им не нужен.

Именно поэтому я решил упростить задачу и разбить такой проект на две части:

  1. Обработчик краш-дампов — будет извлекать  полезную информацию и добавлять комментарием в уже открытый дефект на гитхабе
  2. Web-приложение — принимает краш-дампы от клиента поставляемого вместе с приложением.

Это позволяет существенно сократить время необходимое на разработку. Чтобы написать свой велосипед быстро, я использовал Node.js для которого уже есть готовый модуль minidump

В качестве связующего звена, с помощью которого Web приложение будет обмениваться данными с этим обработчиком, я выбрал Redis. Потому что он прост, скромен и быстр 🙂 В итоге получилось следующее:

15-06-2014 0-14-32

Обработчик краш-дампов: https://github.com/RedisDesktop/breakpadProcessor.js

Он следит за списком breakpad:unprocessed  в Redis и обрабатывает поступающее минидампы. Сообщения поступающие в этот список должны иметь следующий формат:

В моем случае добавление происходит в приложении на php следующим образом:

При желании можно добавить сбор и отображение статистики  в веб-приложении.

 Материалы по теме: