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,
69 : Settings(period, kDistributionPercent, flags, span_level) {}
72 std::chrono::milliseconds period,
73 std::chrono::milliseconds distribution,
78 UASSERT(distribution <= period);
82 std::chrono::milliseconds period,
83 uint8_t distribution_percent,
87 : Settings(period, period * distribution_percent / 100, flags, span_level) {
88 UASSERT(distribution_percent <= 100);
91 template <
class Rep,
class Period>
92 constexpr Settings(std::chrono::duration<Rep, Period> period)
93 : Settings(period, kDistributionPercent, {},
logging::
Level::kInfo) {}
95 bool operator==(
const Settings& other)
const noexcept;
96 bool operator!=(
const Settings& other)
const noexcept;
127 using Callback = std::function<
void()>;
132 PeriodicTask(PeriodicTask&&) =
delete;
133 PeriodicTask(
const PeriodicTask&) =
delete;
140 void Start(std::string name, Settings settings, Callback callback);
205 constexpr static std::size_t kSize = 432;
206 constexpr static std::size_t kAlignment = 16;
207 utils::FastPimpl<Impl, kSize, kAlignment> impl_;