10#include <userver/cache/update_type.hpp>
11#include <userver/utils/impl/internal_tag.hpp>
12#include <userver/utils/statistics/fwd.hpp>
13#include <userver/utils/statistics/rate_counter.hpp>
15USERVER_NAMESPACE_BEGIN
21struct UpdateStatistics
final {
22 utils::statistics::RateCounter update_attempt_count{0};
23 utils::statistics::RateCounter update_no_changes_count{0};
24 utils::statistics::RateCounter update_failures_count{0};
26 utils::statistics::RateCounter documents_read_count{0};
27 utils::statistics::RateCounter documents_parse_failures{0};
29 std::atomic<std::chrono::steady_clock::time_point> last_update_start_time{{}};
30 std::atomic<std::chrono::steady_clock::time_point>
31 last_successful_update_start_time{{}};
32 std::atomic<std::chrono::milliseconds> last_update_duration{{}};
35void DumpMetric(utils::statistics::Writer& writer,
36 const UpdateStatistics& stats);
38struct Statistics
final {
39 UpdateStatistics full_update;
40 UpdateStatistics incremental_update;
41 std::atomic<std::size_t> documents_current_count{0};
44void DumpMetric(utils::statistics::Writer& writer,
const Statistics& stats);
46enum class UpdateState { kNotFinished, kSuccess, kFailure };
57class UpdateStatisticsScope
final {
63 ~UpdateStatisticsScope();
66 impl::UpdateState GetState(utils::impl::InternalTag)
const;
71 void Finish(std::size_t total_documents_count);
92 void DoFinish(impl::UpdateState new_state);
94 impl::Statistics& stats_;
95 impl::UpdateStatistics& update_stats_;
96 impl::UpdateState state_{impl::UpdateState::kNotFinished};
97 const std::chrono::steady_clock::time_point update_start_time_;