6#include <initializer_list>
8#include <userver/formats/json/value_builder.hpp>
9#include <userver/utils/assert.hpp>
10#include <userver/utils/statistics/metadata.hpp>
11#include <userver/utils/statistics/percentile.hpp>
13USERVER_NAMESPACE_BEGIN
17std::string GetPercentileFieldName(
double perc);
20formats::json::ValueBuilder PercentileToJson(
const T& perc, std::initializer_list<
double> percents) {
22 requires(
const T& t) { t.GetPercentile(0.0); },
23 "T must specify T::GetPercentile(double) returning "
24 "json-serializable value"
26 formats::json::ValueBuilder result;
27 for (
const double percent : percents) {
28 result[GetPercentileFieldName(percent)] = perc.GetPercentile(percent);
35formats::json::ValueBuilder PercentileToJson(
const T& perc) {
36 return PercentileToJson(perc, {0, 50, 90, 95, 98, 99, 99.6, 99.9, 100});