userver: userver/alerts/source.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
source.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/alerts/source.hpp
4/// @brief @copybrief alerts::Source
5
6#include <chrono>
7
8#include <userver/utils/statistics/metric_tag.hpp>
9#include <userver/utils/statistics/metrics_storage.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace alerts {
14
15namespace impl {
16struct SourceData {
17 mutable std::atomic<bool> fired{false};
18 std::atomic<std::chrono::steady_clock::time_point> stop_timepoint{{}};
19
20 bool IsExpired() const;
21};
22
23void DumpMetric(utils::statistics::Writer& writer, const SourceData& m);
24} // namespace impl
25
26/// @brief Alert source instance which is used to fire alerts via metrics.
27class Source final {
28public:
29 static constexpr std::chrono::seconds kDefaultDuration{120};
30
31 explicit Source(const std::string& name);
32
33 /// Fire alert for duration seconds.
34 void FireAlert(utils::statistics::MetricsStorage& storage, std::chrono::seconds duration = kDefaultDuration);
35
36 /// Stop fired alert
37 void StopAlertNow(utils::statistics::MetricsStorage& storage);
38
39private:
40 utils::statistics::MetricTag<impl::SourceData> tag_;
41};
42
43} // namespace alerts
44
45USERVER_NAMESPACE_END