userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
cache_statistics.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/cache/cache_statistics.hpp
4
/// @brief Statistics collection for components::CachingComponentBase
5
6
#
include
<
atomic
>
7
#
include
<
chrono
>
8
#
include
<
cstddef
>
9
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
>
14
15
USERVER_NAMESPACE_BEGIN
16
17
namespace
cache
{
18
19
namespace
impl {
20
21
struct
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};
25
26
utils
::
statistics
::RateCounter documents_read_count{0};
27
utils
::
statistics
::RateCounter documents_parse_failures{0};
28
29
std::atomic<std::chrono::steady_clock::time_point> last_update_start_time{{}};
30
std::atomic<std::chrono::steady_clock::time_point> last_successful_update_start_time{{}};
31
std::atomic<std::chrono::milliseconds> last_update_duration{{}};
32
};
33
34
void
DumpMetric(
utils
::
statistics
::Writer& writer,
const
UpdateStatistics& stats);
35
36
struct
Statistics
final
{
37
UpdateStatistics full_update;
38
UpdateStatistics incremental_update;
39
std::atomic<std::size_t> documents_current_count{0};
40
std::atomic<
bool
> is_first_sync_update_complete{
false
};
// Success or failure does not matter here.
41
};
42
43
void
DumpMetric(
utils
::
statistics
::Writer& writer,
const
Statistics& stats);
44
45
enum
class
UpdateState { kNotFinished, kSuccess, kNoChanges, kFailure };
46
47
}
// namespace impl
48
49
/// @brief Allows a specific cache to fill cache statistics during an `Update`.
50
///
51
/// If `Update` returns without throwing an exception and without calling one
52
/// of the `Finish*` methods, the behavior is undefined.
53
///
54
/// See components::CachingComponentBase::Set() for information on actual cache
55
/// update, rather than statistics update.
56
class
UpdateStatisticsScope
final
{
57
public
:
58
/// @cond
59
// Note: DO NOT try to create `UpdateStatisticsScope` manually for manual `Update` calls.
60
// CachingComponentBase's internals WILL be corrupted.
61
// Call `InvalidateAsync` or `UpdateSyncDebug` instead.
62
// For internal use only.
63
UpdateStatisticsScope(
utils
::impl::InternalTag, impl::Statistics& stats,
cache
::
UpdateType
type);
64
65
~UpdateStatisticsScope();
66
67
// For internal use only.
68
impl::UpdateState GetState(
utils
::impl::InternalTag)
const
noexcept
;
69
/// @endcond
70
71
/// @brief Mark that the `Update` has finished with changes
72
/// @param total_documents_count the new total number of items stored in the cache
73
void
Finish
(std::size_t total_documents_count);
74
75
/// @brief Mark that the `Update` has finished without changes
76
void
FinishNoChanges
();
77
78
/// @brief Mark that the `Update` failed
79
void
FinishWithError
();
80
81
/// @brief Each item received from the data source should be accounted with
82
/// this function
83
/// @note This method can be called multiple times per `Update`
84
/// @param add the number of items (both valid and non-valid) newly received
85
void
IncreaseDocumentsReadCount
(std::size_t add);
86
87
/// @brief Each received item that failed validation should be accounted with
88
/// this function, in addition to IncreaseDocumentsReadCount
89
/// @note This method can be called multiple times per `Update`
90
/// @param add the number of non-valid items newly received
91
void
IncreaseDocumentsParseFailures
(std::size_t add);
92
93
private
:
94
void
DoFinish(impl::UpdateState new_state);
95
96
impl::Statistics& stats_;
97
impl::UpdateStatistics& update_stats_;
98
impl::UpdateState state_{impl::UpdateState::kNotFinished};
99
const
std::chrono::steady_clock::time_point update_start_time_;
100
};
101
102
}
// namespace cache
103
104
USERVER_NAMESPACE_END
userver
cache
cache_statistics.hpp
Generated on
for userver by
Doxygen
1.17.0