# SafeStats

Библиотека для экспорта метрик в соломон по pull-схеме.

Ключевые особенности:

1) safe stats оптимизирована для батчевого обновления метрик
2) можно добавлять свои типы метрик (кастомные гистрограммы, например)
3) можно обновлять метрику сразу для нескольких наборов лейблов; например вы хотите писать счетчик с лейблами всех работающих на хите экспериментов (эксперименты в многомерной схеме), тогда можно просто создать мультиконтекст и делать просто ctx.Inc(...) без цикла по экспериментам


Подробнее про батчевое обновление метрик: для записи метрик создаются контексты. Эти контексты накапливают список изменений. Изменения сбрасываются в деструторе контекста или по методу Flush(). Как происходит сброс? Тут два варианта: если safe stats создан с ненулевым параметром размера асинхронной очереди, то все изменения сбрасываются в очередь, откуда их разгребает отдельный тред и применяет к стейту метрик. Если размер очереди достиг максимума, то в точке сброса метрик тред будет ждать (лучше до этого не доводить, следить чтобы разгребаюзий тред не был перегружен (не писать столько метрик), и выставить достаточный размер очереди, чтобы легко переживать всплески). Если safe stats создан с нулевым параметром размера асинхронной очереди, то все изменения всегда будут применяться синхронно под локом (в проде никогда так не делайте, всегда используйте отдельный тред).
