diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/monlib/metrics/metric_registry.h | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/monlib/metrics/metric_registry.h')
-rw-r--r-- | library/cpp/monlib/metrics/metric_registry.h | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/library/cpp/monlib/metrics/metric_registry.h b/library/cpp/monlib/metrics/metric_registry.h new file mode 100644 index 0000000000..68b2d652cb --- /dev/null +++ b/library/cpp/monlib/metrics/metric_registry.h @@ -0,0 +1,122 @@ +#pragma once + +#include "labels.h" +#include "metric.h" + +#include <util/system/rwlock.h> + +#include <library/cpp/threading/light_rw_lock/lightrwlock.h> + + +namespace NMonitoring { + class IMetricFactory { + public: + virtual ~IMetricFactory() = default; + + virtual IGauge* Gauge(ILabelsPtr labels) = 0; + virtual ILazyGauge* LazyGauge(ILabelsPtr labels, std::function<double()> supplier) = 0; + virtual IIntGauge* IntGauge(ILabelsPtr labels) = 0; + virtual ILazyIntGauge* LazyIntGauge(ILabelsPtr labels, std::function<i64()> supplier) = 0; + virtual ICounter* Counter(ILabelsPtr labels) = 0; + virtual ILazyCounter* LazyCounter(ILabelsPtr labels, std::function<ui64()> supplier) = 0; + + virtual IRate* Rate(ILabelsPtr labels) = 0; + virtual ILazyRate* LazyRate(ILabelsPtr labels, std::function<ui64()> supplier) = 0; + + virtual IHistogram* HistogramCounter( + ILabelsPtr labels, + IHistogramCollectorPtr collector) = 0; + + virtual IHistogram* HistogramRate( + ILabelsPtr labels, + IHistogramCollectorPtr collector) = 0; + }; + + class IMetricSupplier { + public: + virtual ~IMetricSupplier() = default; + + virtual void Accept(TInstant time, IMetricConsumer* consumer) const = 0; + virtual void Append(TInstant time, IMetricConsumer* consumer) const = 0; + }; + + class IMetricRegistry: public IMetricSupplier, public IMetricFactory { + public: + virtual const TLabels& CommonLabels() const noexcept = 0; + virtual void RemoveMetric(const ILabels& labels) noexcept = 0; + }; + + + /////////////////////////////////////////////////////////////////////////////// + // TMetricRegistry + /////////////////////////////////////////////////////////////////////////////// + class TMetricRegistry: public IMetricRegistry { + public: + TMetricRegistry(); + ~TMetricRegistry(); + + explicit TMetricRegistry(const TLabels& commonLabels); + + /** + * Get a global metrics registry instance. + */ + static TMetricRegistry* Instance(); + + TGauge* Gauge(TLabels labels); + TLazyGauge* LazyGauge(TLabels labels, std::function<double()> supplier); + TIntGauge* IntGauge(TLabels labels); + TLazyIntGauge* LazyIntGauge(TLabels labels, std::function<i64()> supplier); + TCounter* Counter(TLabels labels); + TLazyCounter* LazyCounter(TLabels labels, std::function<ui64()> supplier); + TRate* Rate(TLabels labels); + TLazyRate* LazyRate(TLabels labels, std::function<ui64()> supplier); + + THistogram* HistogramCounter( + TLabels labels, + IHistogramCollectorPtr collector); + + THistogram* HistogramRate( + TLabels labels, + IHistogramCollectorPtr collector); + + void Reset(); + + void Accept(TInstant time, IMetricConsumer* consumer) const override; + void Append(TInstant time, IMetricConsumer* consumer) const override; + + const TLabels& CommonLabels() const noexcept override { + return CommonLabels_; + } + + void RemoveMetric(const ILabels& labels) noexcept override; + + private: + TGauge* Gauge(ILabelsPtr labels) override; + TLazyGauge* LazyGauge(ILabelsPtr labels, std::function<double()> supplier) override; + TIntGauge* IntGauge(ILabelsPtr labels) override; + TLazyIntGauge* LazyIntGauge(ILabelsPtr labels, std::function<i64()> supplier) override; + TCounter* Counter(ILabelsPtr labels) override; + TLazyCounter* LazyCounter(ILabelsPtr labels, std::function<ui64()> supplier) override; + TRate* Rate(ILabelsPtr labels) override; + TLazyRate* LazyRate(ILabelsPtr labels, std::function<ui64()> supplier) override; + + THistogram* HistogramCounter( + ILabelsPtr labels, + IHistogramCollectorPtr collector) override; + + THistogram* HistogramRate( + ILabelsPtr labels, + IHistogramCollectorPtr collector) override; + + private: + TRWMutex Lock_; + THashMap<ILabelsPtr, IMetricPtr> Metrics_; + + template <typename TMetric, EMetricType type, typename TLabelsType, typename... Args> + TMetric* Metric(TLabelsType&& labels, Args&&... args); + + TLabels CommonLabels_; + }; + + void WriteLabels(IMetricConsumer* consumer, const ILabels& labels); +} |