Skip to content

Commit f22a613

Browse files
author
vansokol
committed
refactor core: move statistics to universal
Tests: проверно компиляцией и существующими тестами (это просто mv из core в universal, чтобы для universal классов можно было определять метрики) commit_hash:463aca2801ce685754340f1b9043c52dd72b88cb
1 parent 4fe7ff4 commit f22a613

File tree

15 files changed

+167
-131
lines changed

15 files changed

+167
-131
lines changed

.mapping.json

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,14 +1163,11 @@
11631163
"core/include/userver/utils/statistics/graphite.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/graphite.hpp",
11641164
"core/include/userver/utils/statistics/histogram.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/histogram.hpp",
11651165
"core/include/userver/utils/statistics/histogram_aggregator.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/histogram_aggregator.hpp",
1166-
"core/include/userver/utils/statistics/histogram_view.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/histogram_view.hpp",
11671166
"core/include/userver/utils/statistics/impl/histogram_bucket.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/impl/histogram_bucket.hpp",
11681167
"core/include/userver/utils/statistics/json.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/json.hpp",
1169-
"core/include/userver/utils/statistics/labels.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/labels.hpp",
11701168
"core/include/userver/utils/statistics/metadata.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/metadata.hpp",
11711169
"core/include/userver/utils/statistics/metric_tag.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/metric_tag.hpp",
11721170
"core/include/userver/utils/statistics/metric_tag_impl.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/metric_tag_impl.hpp",
1173-
"core/include/userver/utils/statistics/metric_value.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/metric_value.hpp",
11741171
"core/include/userver/utils/statistics/metrics_storage.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/metrics_storage.hpp",
11751172
"core/include/userver/utils/statistics/metrics_storage_fwd.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/metrics_storage_fwd.hpp",
11761173
"core/include/userver/utils/statistics/min_max_avg.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/min_max_avg.hpp",
@@ -1179,16 +1176,13 @@
11791176
"core/include/userver/utils/statistics/portability_info.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/portability_info.hpp",
11801177
"core/include/userver/utils/statistics/pretty_format.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/pretty_format.hpp",
11811178
"core/include/userver/utils/statistics/prometheus.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/prometheus.hpp",
1182-
"core/include/userver/utils/statistics/rate.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/rate.hpp",
1183-
"core/include/userver/utils/statistics/rate_counter.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/rate_counter.hpp",
11841179
"core/include/userver/utils/statistics/recentperiod.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/recentperiod.hpp",
11851180
"core/include/userver/utils/statistics/recentperiod_detail.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/recentperiod_detail.hpp",
11861181
"core/include/userver/utils/statistics/relaxed_counter.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/relaxed_counter.hpp",
11871182
"core/include/userver/utils/statistics/solomon.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/solomon.hpp",
11881183
"core/include/userver/utils/statistics/storage.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/storage.hpp",
11891184
"core/include/userver/utils/statistics/striped_rate_counter.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/striped_rate_counter.hpp",
11901185
"core/include/userver/utils/statistics/system_statistics_collector.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/system_statistics_collector.hpp",
1191-
"core/include/userver/utils/statistics/writer.hpp":"taxi/uservices/userver/core/include/userver/utils/statistics/writer.hpp",
11921186
"core/include/userver/utils/task_builder.hpp":"taxi/uservices/userver/core/include/userver/utils/task_builder.hpp",
11931187
"core/include/userver/utils/text.hpp":"taxi/uservices/userver/core/include/userver/utils/text.hpp",
11941188
"core/include/userver/utils/trx_tracker.hpp":"taxi/uservices/userver/core/include/userver/utils/trx_tracker.hpp",
@@ -2100,8 +2094,6 @@
21002094
"core/src/utils/statistics/pretty_format_test.cpp":"taxi/uservices/userver/core/src/utils/statistics/pretty_format_test.cpp",
21012095
"core/src/utils/statistics/prometheus.cpp":"taxi/uservices/userver/core/src/utils/statistics/prometheus.cpp",
21022096
"core/src/utils/statistics/prometheus_test.cpp":"taxi/uservices/userver/core/src/utils/statistics/prometheus_test.cpp",
2103-
"core/src/utils/statistics/rate.cpp":"taxi/uservices/userver/core/src/utils/statistics/rate.cpp",
2104-
"core/src/utils/statistics/rate_counter.cpp":"taxi/uservices/userver/core/src/utils/statistics/rate_counter.cpp",
21052097
"core/src/utils/statistics/rate_counter_test.cpp":"taxi/uservices/userver/core/src/utils/statistics/rate_counter_test.cpp",
21062098
"core/src/utils/statistics/rate_test.cpp":"taxi/uservices/userver/core/src/utils/statistics/rate_test.cpp",
21072099
"core/src/utils/statistics/recent_period_benchmark.cpp":"taxi/uservices/userver/core/src/utils/statistics/recent_period_benchmark.cpp",
@@ -2124,8 +2116,6 @@
21242116
"core/src/utils/statistics/value_builder_helpers_test.cpp":"taxi/uservices/userver/core/src/utils/statistics/value_builder_helpers_test.cpp",
21252117
"core/src/utils/statistics/visitation.cpp":"taxi/uservices/userver/core/src/utils/statistics/visitation.cpp",
21262118
"core/src/utils/statistics/visitation.hpp":"taxi/uservices/userver/core/src/utils/statistics/visitation.hpp",
2127-
"core/src/utils/statistics/writer.cpp":"taxi/uservices/userver/core/src/utils/statistics/writer.cpp",
2128-
"core/src/utils/statistics/writer_state.hpp":"taxi/uservices/userver/core/src/utils/statistics/writer_state.hpp",
21292119
"core/src/utils/statistics/writer_test.cpp":"taxi/uservices/userver/core/src/utils/statistics/writer_test.cpp",
21302120
"core/src/utils/sys_info.cpp":"taxi/uservices/userver/core/src/utils/sys_info.cpp",
21312121
"core/src/utils/sys_info.hpp":"taxi/uservices/userver/core/src/utils/sys_info.hpp",
@@ -5334,6 +5324,13 @@
53345324
"universal/include/userver/utils/small_string_fwd.hpp":"taxi/uservices/userver/universal/include/userver/utils/small_string_fwd.hpp",
53355325
"universal/include/userver/utils/small_string_serialization.hpp":"taxi/uservices/userver/universal/include/userver/utils/small_string_serialization.hpp",
53365326
"universal/include/userver/utils/span.hpp":"taxi/uservices/userver/universal/include/userver/utils/span.hpp",
5327+
"universal/include/userver/utils/statistics/histogram_view.hpp":"taxi/uservices/userver/universal/include/userver/utils/statistics/histogram_view.hpp",
5328+
"universal/include/userver/utils/statistics/labels.hpp":"taxi/uservices/userver/universal/include/userver/utils/statistics/labels.hpp",
5329+
"universal/include/userver/utils/statistics/metric_value.hpp":"taxi/uservices/userver/universal/include/userver/utils/statistics/metric_value.hpp",
5330+
"universal/include/userver/utils/statistics/rate.hpp":"taxi/uservices/userver/universal/include/userver/utils/statistics/rate.hpp",
5331+
"universal/include/userver/utils/statistics/rate_counter.hpp":"taxi/uservices/userver/universal/include/userver/utils/statistics/rate_counter.hpp",
5332+
"universal/include/userver/utils/statistics/request.hpp":"taxi/uservices/userver/universal/include/userver/utils/statistics/request.hpp",
5333+
"universal/include/userver/utils/statistics/writer.hpp":"taxi/uservices/userver/universal/include/userver/utils/statistics/writer.hpp",
53375334
"universal/include/userver/utils/str_icase.hpp":"taxi/uservices/userver/universal/include/userver/utils/str_icase.hpp",
53385335
"universal/include/userver/utils/str_icase_containers.hpp":"taxi/uservices/userver/universal/include/userver/utils/str_icase_containers.hpp",
53395336
"universal/include/userver/utils/strerror.hpp":"taxi/uservices/userver/universal/include/userver/utils/strerror.hpp",
@@ -5652,6 +5649,11 @@
56525649
"universal/src/utils/small_string_benchmark.cpp":"taxi/uservices/userver/universal/src/utils/small_string_benchmark.cpp",
56535650
"universal/src/utils/small_string_test.cpp":"taxi/uservices/userver/universal/src/utils/small_string_test.cpp",
56545651
"universal/src/utils/span_test.cpp":"taxi/uservices/userver/universal/src/utils/span_test.cpp",
5652+
"universal/src/utils/statistics/rate.cpp":"taxi/uservices/userver/universal/src/utils/statistics/rate.cpp",
5653+
"universal/src/utils/statistics/rate_counter.cpp":"taxi/uservices/userver/universal/src/utils/statistics/rate_counter.cpp",
5654+
"universal/src/utils/statistics/request.cpp":"taxi/uservices/userver/universal/src/utils/statistics/request.cpp",
5655+
"universal/src/utils/statistics/writer.cpp":"taxi/uservices/userver/universal/src/utils/statistics/writer.cpp",
5656+
"universal/src/utils/statistics/writer_state.hpp":"taxi/uservices/userver/universal/src/utils/statistics/writer_state.hpp",
56555657
"universal/src/utils/str_icase.cpp":"taxi/uservices/userver/universal/src/utils/str_icase.cpp",
56565658
"universal/src/utils/str_icase_benchmark.cpp":"taxi/uservices/userver/universal/src/utils/str_icase_benchmark.cpp",
56575659
"universal/src/utils/str_icase_containers_test.cpp":"taxi/uservices/userver/universal/src/utils/str_icase_containers_test.cpp",

core/include/userver/utils/statistics/storage.hpp

Lines changed: 1 addition & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@
55

66
#include <atomic>
77
#include <functional>
8-
#include <initializer_list>
98
#include <list>
109
#include <string>
11-
#include <unordered_map>
12-
#include <variant>
1310
#include <vector>
1411

1512
#include <userver/engine/shared_mutex.hpp>
1613
#include <userver/formats/json/value_builder.hpp>
1714
#include <userver/utils/assert.hpp>
1815
#include <userver/utils/statistics/entry.hpp>
19-
#include <userver/utils/statistics/metric_value.hpp>
16+
#include <userver/utils/statistics/request.hpp>
2017
#include <userver/utils/statistics/writer.hpp>
2118

2219
USERVER_NAMESPACE_BEGIN
@@ -26,69 +23,6 @@ namespace utils::statistics {
2623
/// @brief Used in legacy statistics extenders
2724
struct StatisticsRequest final {};
2825

29-
/// @brief Class describing the request for metrics data.
30-
///
31-
/// Metric path and metric name are the same thing. For example for code like
32-
///
33-
/// @code
34-
/// writer["a"]["b"]["c"] = 42;
35-
/// @endcode
36-
///
37-
/// the metric name is "a.b.c" and in Prometheus format it would be escaped like
38-
/// "a_b_c{} 42".
39-
///
40-
/// @note `add_labels` should not match labels from Storage, otherwise the
41-
/// returned metrics may not be read by metrics server.
42-
class Request final {
43-
public:
44-
using AddLabels = std::unordered_map<std::string, std::string>;
45-
46-
/// Default request without parameters. Equivalent to requesting all the
47-
/// metrics without adding or requiring any labels.
48-
Request() = default;
49-
50-
/// Makes request for metrics whose path starts with the `prefix`.
51-
static Request MakeWithPrefix(
52-
const std::string& prefix,
53-
AddLabels add_labels = {},
54-
std::vector<Label> require_labels = {}
55-
);
56-
57-
/// Makes request for metrics whose path is `path`.
58-
static Request MakeWithPath(
59-
const std::string& path,
60-
AddLabels add_labels = {},
61-
std::vector<Label> require_labels = {}
62-
);
63-
64-
/// Return metrics whose path matches with this `prefix`
65-
const std::string prefix{};
66-
67-
/// Enum for different match types of the `prefix`
68-
enum class PrefixMatch {
69-
kNoop, ///< Do not match, the `prefix` is empty
70-
kExact, ///< `prefix` equal to path
71-
kStartsWith, ///< Metric path starts with `prefix`
72-
};
73-
74-
/// Match type of the `prefix`
75-
const PrefixMatch prefix_match_type = PrefixMatch::kNoop;
76-
77-
/// Require those labels in the metric
78-
const std::vector<Label> require_labels{};
79-
80-
/// Add those labels to each returned metric
81-
const AddLabels add_labels{};
82-
83-
private:
84-
Request(
85-
std::string prefix_in,
86-
PrefixMatch path_match_type_in,
87-
std::vector<Label> require_labels_in,
88-
AddLabels add_labels_in
89-
);
90-
};
91-
9226
using ExtenderFunc = std::function<formats::json::ValueBuilder(const StatisticsRequest&)>;
9327

9428
using WriterFunc = std::function<void(Writer&)>;
@@ -111,13 +45,6 @@ inline constexpr bool kCheckSubscriptionUB = utils::impl::kEnableAssert;
11145

11246
} // namespace impl
11347

114-
class BaseFormatBuilder {
115-
public:
116-
virtual ~BaseFormatBuilder();
117-
118-
virtual void HandleMetric(std::string_view path, LabelsSpan labels, const MetricValue& value) = 0;
119-
};
120-
12148
/// @ingroup userver_clients
12249
///
12350
/// Storage of metrics, usually retrieved from components::StatisticsStorage.

core/src/utils/statistics/storage.cpp

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include <userver/utils/statistics/storage.hpp>
22

3-
#include <algorithm>
43
#include <utility>
54

65
#include <boost/container/small_vector.hpp>
@@ -24,20 +23,6 @@ namespace {
2423
const std::string kVersionField = "$version";
2524
constexpr int kVersion = 2;
2625

27-
void RemoveAddedLabels(std::vector<Label>& labels, const Request::AddLabels& add_labels) {
28-
labels.erase(
29-
std::remove_if(
30-
labels.begin(),
31-
labels.end(),
32-
[&add_labels](const auto& label) {
33-
auto it = add_labels.find(label.Name());
34-
return it != add_labels.end() && it->second == label.Value();
35-
}
36-
),
37-
labels.end()
38-
);
39-
}
40-
4126
class FakeFormatBuilder final : public BaseFormatBuilder {
4227
public:
4328
void HandleMetric(std::string_view, LabelsSpan, const MetricValue&) override {}
@@ -90,36 +75,6 @@ void WriteWithFakeFormat(impl::MetricsSource& source)
9075

9176
} // namespace
9277

93-
Request Request::MakeWithPrefix(const std::string& prefix, AddLabels add_labels, std::vector<Label> require_labels) {
94-
RemoveAddedLabels(require_labels, add_labels);
95-
return {
96-
prefix,
97-
prefix.empty() ? PrefixMatch::kNoop : PrefixMatch::kStartsWith,
98-
std::move(require_labels),
99-
std::move(add_labels)
100-
};
101-
}
102-
103-
Request Request::MakeWithPath(const std::string& path, AddLabels add_labels, std::vector<Label> require_labels) {
104-
RemoveAddedLabels(require_labels, add_labels);
105-
UASSERT(!path.empty());
106-
return {path, PrefixMatch::kExact, std::move(require_labels), std::move(add_labels)};
107-
}
108-
109-
Request::Request(
110-
std::string prefix_in,
111-
PrefixMatch path_match_type_in,
112-
std::vector<Label> require_labels_in,
113-
AddLabels add_labels_in
114-
)
115-
: prefix(std::move(prefix_in)),
116-
prefix_match_type(path_match_type_in),
117-
require_labels(std::move(require_labels_in)),
118-
add_labels(std::move(add_labels_in))
119-
{}
120-
121-
BaseFormatBuilder::~BaseFormatBuilder() = default;
122-
12378
Storage::Storage()
12479
: may_register_extenders_(true)
12580
{}

core/include/userver/utils/statistics/histogram_view.hpp renamed to universal/include/userver/utils/statistics/histogram_view.hpp

File renamed without changes.
File renamed without changes.

core/include/userver/utils/statistics/metric_value.hpp renamed to universal/include/userver/utils/statistics/metric_value.hpp

File renamed without changes.
File renamed without changes.

core/include/userver/utils/statistics/rate_counter.hpp renamed to universal/include/userver/utils/statistics/rate_counter.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55

66
#include <atomic>
77

8-
#include <userver/utils/statistics/fwd.hpp>
98
#include <userver/utils/statistics/rate.hpp>
109

1110
USERVER_NAMESPACE_BEGIN
1211

1312
namespace utils::statistics {
1413

14+
class Writer;
15+
1516
/// @brief Atomic counter of type Rate with relaxed memory ordering
1617
///
1718
/// This class is represented as Rate metric when serializing to statistics.
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#pragma once
2+
3+
/// @file userver/utils/statistics/request.hpp
4+
/// @brief @copybrief utils::statistics::Request
5+
6+
#include <string>
7+
#include <unordered_map>
8+
#include <vector>
9+
10+
#include <userver/utils/statistics/labels.hpp>
11+
#include <userver/utils/statistics/metric_value.hpp>
12+
13+
USERVER_NAMESPACE_BEGIN
14+
15+
namespace utils::statistics {
16+
17+
/// @brief Class describing the request for metrics data.
18+
///
19+
/// Metric path and metric name are the same thing. For example for code like
20+
///
21+
/// @code
22+
/// writer["a"]["b"]["c"] = 42;
23+
/// @endcode
24+
///
25+
/// the metric name is "a.b.c" and in Prometheus format it would be escaped like
26+
/// "a_b_c{} 42".
27+
///
28+
/// @note `add_labels` should not match labels from Storage, otherwise the
29+
/// returned metrics may not be read by metrics server.
30+
class Request final {
31+
public:
32+
using AddLabels = std::unordered_map<std::string, std::string>;
33+
34+
/// Default request without parameters. Equivalent to requesting all the
35+
/// metrics without adding or requiring any labels.
36+
Request() = default;
37+
38+
/// Makes request for metrics whose path starts with the `prefix`.
39+
static Request MakeWithPrefix(
40+
const std::string& prefix,
41+
AddLabels add_labels = {},
42+
std::vector<Label> require_labels = {}
43+
);
44+
45+
/// Makes request for metrics whose path is `path`.
46+
static Request MakeWithPath(
47+
const std::string& path,
48+
AddLabels add_labels = {},
49+
std::vector<Label> require_labels = {}
50+
);
51+
52+
/// Return metrics whose path matches with this `prefix`
53+
const std::string prefix{};
54+
55+
/// Enum for different match types of the `prefix`
56+
enum class PrefixMatch {
57+
kNoop, ///< Do not match, the `prefix` is empty
58+
kExact, ///< `prefix` equal to path
59+
kStartsWith, ///< Metric path starts with `prefix`
60+
};
61+
62+
/// Match type of the `prefix`
63+
const PrefixMatch prefix_match_type = PrefixMatch::kNoop;
64+
65+
/// Require those labels in the metric
66+
const std::vector<Label> require_labels{};
67+
68+
/// Add those labels to each returned metric
69+
const AddLabels add_labels{};
70+
71+
private:
72+
Request(
73+
std::string prefix_in,
74+
PrefixMatch path_match_type_in,
75+
std::vector<Label> require_labels_in,
76+
AddLabels add_labels_in
77+
);
78+
};
79+
80+
class BaseFormatBuilder {
81+
public:
82+
virtual ~BaseFormatBuilder();
83+
84+
virtual void HandleMetric(std::string_view path, LabelsSpan labels, const MetricValue& value) = 0;
85+
};
86+
87+
} // namespace utils::statistics
88+
89+
USERVER_NAMESPACE_END
File renamed without changes.

0 commit comments

Comments
 (0)