Это библиотека для обработки и записи метрик в файл. См. примеры (examples).
Есть несколько потоков-работников, которые обновляют метрики. Мы резервируем один поток-писатель под запись метрик. Потоки обновляют значения метрик и не заботятся о записи метрик - за это полностью отвечает поток-писатель, который просыпается через определенный интервал времени и записывает метрики в файлик. При этом мы должны задать правило вычесления метрик, потому что поток-писатель пишет через интервплы, а обновления могут поступать в разные моменты времени. Например, можно задать среднее арифметическое для CPU или сумму для HTTP запросов за это отвечает класс AvgCalculator и SumCalculator - наследники BaseCalculator.
По дефолту доступны базовые правила записи метриу -- это сумма и среднее арифмитическое. Эти классы у нас реализованы потоко-безопасными. Чтобы создать свое правили вычисления метрики нужно всего лишь унаследоваться от BaseCalcutor<T>. Примеры как это можно сделать приведены в файле examples.h в папке examples.
Допустим, мы хотим какую-то свою новую метрику и уже создали свое правило вычисления её.
auto my_metric = Metric<MyType, MyCalculator>::Create("name of metric ");Или же мы хотим создать метрику, которая, например, суммирует значения апдейтов. Для этого просто можно в качестве параметра передать SumCalculator и название метрики.
auto my_metric = Metric<MyType, SumCalculator>::Create("SumMetric");
Обновление метрики можно производить так:
my_metric->Update(value);
Если вдруг потоку-работнику понадобилось скинуть кэш метрики, то можно сделать так
MyType value = my_metric->CollectAndReset();Чтобы начать записывать в файл нам нужно создать объект.
MetricWriter w("filename", time_of_check_metrics);
И стартовать!
w.Start();Тут time_of_check_metrics - это интервал, через который поток-писатель собирает информацию от потоков-работников и записывает в файл.