diff options
author | matusha-g <matusha-g@yandex-team.com> | 2025-07-09 13:12:35 +0300 |
---|---|---|
committer | matusha-g <matusha-g@yandex-team.com> | 2025-07-09 13:37:52 +0300 |
commit | 40a6e6e096b3533857b70c79a8ac9820655c7bf3 (patch) | |
tree | 72b70a8a4d0eb7b579d922627d0b3f0d36d292da /library/cpp/monlib/metrics | |
parent | 7c10e44e4cedbf09d754e8ff05392a9d168af143 (diff) | |
download | ydb-40a6e6e096b3533857b70c79a8ac9820655c7bf3.tar.gz |
monlib adds
add clone method
commit_hash:c96c84b95c05e307a7391742f4fca56010b24e3f
Diffstat (limited to 'library/cpp/monlib/metrics')
5 files changed, 55 insertions, 0 deletions
diff --git a/library/cpp/monlib/metrics/histogram_collector.h b/library/cpp/monlib/metrics/histogram_collector.h index 718aa42bd28..86e6bf675b4 100644 --- a/library/cpp/monlib/metrics/histogram_collector.h +++ b/library/cpp/monlib/metrics/histogram_collector.h @@ -41,6 +41,11 @@ namespace NMonitoring { * @return snapshot of the state of this collector. */ virtual IHistogramSnapshotPtr Snapshot() const = 0; + + /** + * @return copy of collector implementation + */ + virtual THolder<IHistogramCollector> Clone() = 0; }; using IHistogramCollectorPtr = THolder<IHistogramCollector>; diff --git a/library/cpp/monlib/metrics/histogram_collector_explicit.cpp b/library/cpp/monlib/metrics/histogram_collector_explicit.cpp index e0422b578eb..3c2ba01f725 100644 --- a/library/cpp/monlib/metrics/histogram_collector_explicit.cpp +++ b/library/cpp/monlib/metrics/histogram_collector_explicit.cpp @@ -36,6 +36,21 @@ namespace NMonitoring { return ExplicitHistogramSnapshot(Bounds_, values); } + THolder<IHistogramCollector> Clone() override { + TBucketBounds copyBounds(Bounds_); + return MakeHolder<TExplicitHistogramCollector>(TExplicitHistogramCollector(copyBounds, Values_)); + } + + private: + TExplicitHistogramCollector(TBucketBounds bounds, TAtomicsArray const& values) + : Values_(bounds.size()) + , Bounds_(std::move(bounds)) + { + for(size_t i = 0; i < Values_.Size(); ++i) { + Values_.Add(i, values[i]); + } + } + private: TAtomicsArray Values_; TBucketBounds Bounds_; diff --git a/library/cpp/monlib/metrics/histogram_collector_exponential.cpp b/library/cpp/monlib/metrics/histogram_collector_exponential.cpp index 73657cda56e..702ac204375 100644 --- a/library/cpp/monlib/metrics/histogram_collector_exponential.cpp +++ b/library/cpp/monlib/metrics/histogram_collector_exponential.cpp @@ -43,6 +43,24 @@ namespace NMonitoring { return new TExponentialHistogramSnapshot(Base_, Scale_, Values_.Copy()); } + THolder<IHistogramCollector> Clone() override { + return MakeHolder<TExponentialHistogramCollector>(TExponentialHistogramCollector(Values_, Base_, Scale_)); + } + + private: + TExponentialHistogramCollector(TAtomicsArray const& values, double base, double scale) + : Values_(values.Size()) + , Base_(base) + , Scale_(scale) + , MinValue_(scale) + , MaxValue_(scale * std::pow(base, values.Size() - 2)) + , LogOfBase_(std::log(base)) + { + for(size_t i = 0; i < Values_.Size(); ++i) { + Values_.Add(i, values[i]); + } + } + private: TAtomicsArray Values_; double Base_; diff --git a/library/cpp/monlib/metrics/histogram_collector_linear.cpp b/library/cpp/monlib/metrics/histogram_collector_linear.cpp index b893b16a833..c6c430ab4e3 100644 --- a/library/cpp/monlib/metrics/histogram_collector_linear.cpp +++ b/library/cpp/monlib/metrics/histogram_collector_linear.cpp @@ -45,6 +45,21 @@ namespace NMonitoring { StartValue_, BucketWidth_, Values_.Copy()); } + THolder<IHistogramCollector> Clone() override { + return MakeHolder<TLinearHistogramCollector>(TLinearHistogramCollector(Values_, StartValue_, BucketWidth_)); + } + + private: + TLinearHistogramCollector(TAtomicsArray const& values, TBucketBound startValue, TBucketBound bucketWidth) + : Values_(values.Size()) + , StartValue_(startValue) + , BucketWidth_(bucketWidth) + , MaxValue_(startValue + bucketWidth * (values.Size() - 2)) + { + for(size_t i = 0; i < Values_.Size(); ++i) { + Values_.Add(i, values[i]); + } + } private: TAtomicsArray Values_; TBucketBound StartValue_; diff --git a/library/cpp/monlib/metrics/metric_registry.cpp b/library/cpp/monlib/metrics/metric_registry.cpp index cc2e27d1185..927c05ef611 100644 --- a/library/cpp/monlib/metrics/metric_registry.cpp +++ b/library/cpp/monlib/metrics/metric_registry.cpp @@ -298,6 +298,7 @@ namespace NMonitoring { } void TMetricRegistry::Took(TInstant time, IMetricConsumer* consumer) const { + consumer->OnStreamBegin(); TReadGuard g{*Lock_}; for (const auto& it: Metrics_) { @@ -316,5 +317,6 @@ namespace NMonitoring { ); metric->Reset(); } + consumer->OnStreamEnd(); } } |