3#include <initializer_list>
5#include <userver/formats/json/value_builder.hpp>
6#include <userver/utils/assert.hpp>
7#include <userver/utils/statistics/metadata.hpp>
8#include <userver/utils/statistics/percentile.hpp>
10USERVER_NAMESPACE_BEGIN
12namespace utils::statistics {
14std::string GetPercentileFieldName(
double perc);
17formats::json::ValueBuilder PercentileToJson(
const T& perc, std::initializer_list<
double> percents) {
19 requires(
const T& t) { t.GetPercentile(0.0); },
20 "T must specify T::GetPercentile(double) returning "
21 "json-serializable value"
23 formats::json::ValueBuilder result;
24 for (
const double percent : percents) {
25 result[GetPercentileFieldName(percent)] = perc.GetPercentile(percent);
32formats::json::ValueBuilder PercentileToJson(
const T& perc) {
33 return PercentileToJson(perc, {0, 50, 90, 95, 98, 99, 99.6, 99.9, 100});