Github   Telegram
Loading...
Searching...
No Matches
cache_statistics.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <atomic>
7#include <chrono>
8#include <cstddef>
9
13
14USERVER_NAMESPACE_BEGIN
15
16namespace cache {
17
18namespace impl {
19
20struct UpdateStatistics final {
21 std::atomic<std::size_t> update_attempt_count{0};
22 std::atomic<std::size_t> update_no_changes_count{0};
23 std::atomic<std::size_t> update_failures_count{0};
24
25 std::atomic<std::size_t> documents_read_count{0};
26 std::atomic<std::size_t> documents_parse_failures{0};
27
28 std::atomic<std::chrono::steady_clock::time_point> last_update_start_time{{}};
29 std::atomic<std::chrono::steady_clock::time_point>
30 last_successful_update_start_time{{}};
31 std::atomic<std::chrono::milliseconds> last_update_duration{{}};
32};
33
34void DumpMetric(utils::statistics::Writer& writer,
35 const UpdateStatistics& stats);
36
37struct Statistics final {
38 UpdateStatistics full_update;
39 UpdateStatistics incremental_update;
40 std::atomic<std::size_t> documents_current_count{0};
41};
42
43void DumpMetric(utils::statistics::Writer& writer, const Statistics& stats);
44
45} // namespace impl
46
52 public:
54 // For internal use only
55 UpdateStatisticsScope(impl::Statistics& stats, cache::UpdateType type);
56
59
62 void Finish(std::size_t documents_count);
63
66
71 void IncreaseDocumentsReadCount(std::size_t add);
72
77 void IncreaseDocumentsParseFailures(std::size_t add);
78
79 private:
80 impl::Statistics& stats_;
81 impl::UpdateStatistics& update_stats_;
82 bool finished_{false};
83 const std::chrono::steady_clock::time_point update_start_time_;
84};
85
86} // namespace cache
87
88USERVER_NAMESPACE_END