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 static constexpr std::chrono::hours kInfiniteDuration{24 * 365 * 10}; // In 10 years, someone should notice.
31
32 explicit Source(const std::string& name);
33
34 /// Fire alert for duration seconds.
35 void FireAlert(utils::statistics::MetricsStorage& storage, std::chrono::seconds duration = kDefaultDuration);
36
37 /// Stop fired alert
38 void StopAlertNow(utils::statistics::MetricsStorage& storage);
39
40private:
41 utils::statistics::MetricTag<impl::SourceData> tag_;
42};
43
44} // namespace alerts
45
46USERVER_NAMESPACE_END