Примечание преводчика: текст взят из блога компании Asana, которая на данный момент проводит бета-тестирование своего productivity software.
Многие из наших пользователей уже встречались с «уникальными сообщениями об ошибках», когда наше приложение перестает работать по той или иной причине. Эти сообщения вышлядят достаточно необычно, и нам хотелось бы рассказать о том, как мы к ним пришли.
![](http://files.dmitriid.com/habr/squid/1.png)
На изображении: Если вы свяжетесь с нами по поводу этой ошибки, используйте следующую уникальную фразу, идентифицирующую ошибку: 12 старых сверчков жужжат со счастливым видом
При диагностировании проблем очень помогает возможность ассоциировать ошибку у пользователя с какой-либо информацией в логах. Когда приложение аварийно звершает работу, мы генерируем уникальный ID для этого события, которое показывается пользователю, чтобы тот мог использовать его, описывая проблему нам. Мы не изобрели ничего нового, и все на самом деле очень просто. Но, используя этот ID, наша тех. поддержка может сразу перейти к детальной информации о проблеме, что позволяет нам быстрее классифицировать и отреагировать на нее.
Новым является подход к генерации таких ID. В большинстве приложений ID, который выдается пользователю, является длинной цепочкой, состоящей из цифр и/или букв. У такого подхода существует множество мелких тонких недостатков, поэтому из любопытства и из желания скрасить так достаточно неприятную ситуацию мы решили попробовать что-то новенькое.
Предтавьте, что вы выводите 32 бита информации (числа от одного до 4-х миллиардов) в виде предложения, а не набора цифр. Каждое предложение может иметь одинаковую, предсказуемую структуру, а чтобы их составить, само число можно использовать для выборки слов по словарю. Как в игре Mad Libs.
Такой возможной структурой может являться «количество + прилагательное + существительное во множественном числе + глагол + наречие». Ну, например, «6 грустных кальмаров обнимаются нежно». Мы можем разделить биты числа следующим образом:
Получив таким образом организованный словарь, мы можем генерировать 4 миллиарда уникальных (и иногда весьма запоминаемых) предложений. В Asana идентификаторы, используемые для генерации сообщения об ошибке, случайны, поэтому вряд ли одно и то же предложение повторится дважды.
Так как мы трепетно относимся к тому, чтобы предоставить нашим пользователям положительный опыт от использование нашего продукта, мы вложили много усилий в систему, которая записывает проблемЫ, которые происходят где угодно в приложении — у нас на серверах или в браузере пользователя. Эта система собирает большое количество информации о проблеме (стэктрейсы, куски логов, состояние приложения, информация о пользователе и сессии и т.п.), автоматически группирует одинаковые ошибки и импортирует их во внутренний список задач (см. скриншот).
![](http://files.dmitriid.com/habr/squid/2.png)
Имея доступ ко всем проблемам в Asana, мы можем просмотреть суммарную информацию по каждой проблеме, как, например, сколько раз она возникло и скольких пользователей задела. Тут мы можем назначать им метки, приоритеты и отправлять на правку. Эта система делает Asana очень эффективным трекером, так как каждая проблема содержит большое количество дополнительной информации, включая, безусловно, способ найти ее, основываясь на уникальном ID ошибки, который присылает пользователь.
Поэтому если что-то престает работать, будьте уверены, эта проблема уже занесена в список задач нашей команды. А мы надеемся, что вы получите утешительный приз. 12 пушистых котят обнимаются нежно. Или 8 сумасшедших орков топают громко. Или… ну вы поняли.
Многие из наших пользователей уже встречались с «уникальными сообщениями об ошибках», когда наше приложение перестает работать по той или иной причине. Эти сообщения вышлядят достаточно необычно, и нам хотелось бы рассказать о том, как мы к ним пришли.
![](http://files.dmitriid.com/habr/squid/1.png)
На изображении: Если вы свяжетесь с нами по поводу этой ошибки, используйте следующую уникальную фразу, идентифицирующую ошибку: 12 старых сверчков жужжат со счастливым видом
При диагностировании проблем очень помогает возможность ассоциировать ошибку у пользователя с какой-либо информацией в логах. Когда приложение аварийно звершает работу, мы генерируем уникальный ID для этого события, которое показывается пользователю, чтобы тот мог использовать его, описывая проблему нам. Мы не изобрели ничего нового, и все на самом деле очень просто. Но, используя этот ID, наша тех. поддержка может сразу перейти к детальной информации о проблеме, что позволяет нам быстрее классифицировать и отреагировать на нее.
Новым является подход к генерации таких ID. В большинстве приложений ID, который выдается пользователю, является длинной цепочкой, состоящей из цифр и/или букв. У такого подхода существует множество мелких тонких недостатков, поэтому из любопытства и из желания скрасить так достаточно неприятную ситуацию мы решили попробовать что-то новенькое.
Предложения из цифр
Предтавьте, что вы выводите 32 бита информации (числа от одного до 4-х миллиардов) в виде предложения, а не набора цифр. Каждое предложение может иметь одинаковую, предсказуемую структуру, а чтобы их составить, само число можно использовать для выборки слов по словарю. Как в игре Mad Libs.
Такой возможной структурой может являться «количество + прилагательное + существительное во множественном числе + глагол + наречие». Ну, например, «6 грустных кальмаров обнимаются нежно». Мы можем разделить биты числа следующим образом:
- 5 битов для количества (2-33, в результате всегда будет множественное число)
- 7 битов для прилагательного (одно из 128 вариантов)
- 7 битов для существительного во множественном числе (одно из 128 вариантов. Чтобы было веселее, мы выбрали животных)
- 7 битов для глагола (одно из 128 вариантов)
- 6 битов для наречия (одно из 64 вариантов)
Получив таким образом организованный словарь, мы можем генерировать 4 миллиарда уникальных (и иногда весьма запоминаемых) предложений. В Asana идентификаторы, используемые для генерации сообщения об ошибке, случайны, поэтому вряд ли одно и то же предложение повторится дважды.
Автоматическое отслеживание проблем
Так как мы трепетно относимся к тому, чтобы предоставить нашим пользователям положительный опыт от использование нашего продукта, мы вложили много усилий в систему, которая записывает проблемЫ, которые происходят где угодно в приложении — у нас на серверах или в браузере пользователя. Эта система собирает большое количество информации о проблеме (стэктрейсы, куски логов, состояние приложения, информация о пользователе и сессии и т.п.), автоматически группирует одинаковые ошибки и импортирует их во внутренний список задач (см. скриншот).
![](http://files.dmitriid.com/habr/squid/2.png)
Имея доступ ко всем проблемам в Asana, мы можем просмотреть суммарную информацию по каждой проблеме, как, например, сколько раз она возникло и скольких пользователей задела. Тут мы можем назначать им метки, приоритеты и отправлять на правку. Эта система делает Asana очень эффективным трекером, так как каждая проблема содержит большое количество дополнительной информации, включая, безусловно, способ найти ее, основываясь на уникальном ID ошибки, который присылает пользователь.
Поэтому если что-то престает работать, будьте уверены, эта проблема уже занесена в список задач нашей команды. А мы надеемся, что вы получите утешительный приз. 12 пушистых котят обнимаются нежно. Или 8 сумасшедших орков топают громко. Или… ну вы поняли.