11#include <userver/logging/level.hpp>
12#include <userver/utils/assert.hpp>
13#include <userver/utils/fast_pimpl.hpp>
14#include <userver/utils/flags.hpp>
16USERVER_NAMESPACE_BEGIN
23class PeriodicTaskControl;
40class PeriodicTask
final {
61 struct Settings
final {
62 static constexpr uint8_t kDistributionPercent = 25;
65 std::chrono::milliseconds period,
66 utils::Flags<
Flags> flags = {},
69 : Settings(period, kDistributionPercent, flags, span_level)
73 std::chrono::milliseconds period,
74 std::chrono::milliseconds distribution,
75 utils::Flags<
Flags> flags = {},
83 UASSERT(distribution <= period);
87 std::chrono::milliseconds period,
88 uint8_t distribution_percent,
89 utils::Flags<
Flags> flags = {},
92 : Settings(period, period * distribution_percent / 100, flags, span_level)
94 UASSERT(distribution_percent <= 100);
97 template <
class Rep,
class Period>
98 constexpr Settings(std::chrono::duration<Rep, Period> period)
99 : Settings(period, kDistributionPercent, {},
logging::
Level::kInfo)
102 bool operator==(
const Settings& other)
const noexcept;
103 bool operator!=(
const Settings& other)
const noexcept;
134 using Callback = std::function<
void()>;
139 PeriodicTask(PeriodicTask&&) =
delete;
140 PeriodicTask(
const PeriodicTask&) =
delete;
147 void Start(std::string name, Settings settings, Callback callback);
212 constexpr static std::size_t kSize = 448;
213 constexpr static std::size_t kAlignment = 16;
214 utils::FastPimpl<Impl, kSize, kAlignment> impl_;