userver: userver/utils/statistics/percentile_format_json.hpp Source File
Loading...
Searching...
No Matches
percentile_format_json.hpp
1#pragma once
2
3#include <initializer_list>
4
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>
9
10USERVER_NAMESPACE_BEGIN
11
12namespace utils::statistics {
13
14std::string GetPercentileFieldName(double perc);
15
16template <typename T>
17formats::json::ValueBuilder PercentileToJson(const T& perc, std::initializer_list<double> percents) {
18 static_assert(
19 requires(const T& t) { t.GetPercentile(0.0); },
20 "T must specify T::GetPercentile(double) returning "
21 "json-serializable value"
22 );
23 formats::json::ValueBuilder result;
24 for (const double percent : percents) {
25 result[GetPercentileFieldName(percent)] = perc.GetPercentile(percent);
26 }
27 utils::statistics::SolomonChildrenAreLabelValues(result, "percentile");
28 return result;
29}
30
31template <typename T>
32formats::json::ValueBuilder PercentileToJson(const T& perc) {
33 return PercentileToJson(perc, {0, 50, 90, 95, 98, 99, 99.6, 99.9, 100});
34}
35
36} // namespace utils::statistics
37
38USERVER_NAMESPACE_END