diff options
author | miktorius <miktorius@yandex-team.com> | 2025-03-06 12:11:55 +0300 |
---|---|---|
committer | miktorius <miktorius@yandex-team.com> | 2025-03-06 14:53:44 +0300 |
commit | 618663dff0c22bb5fc2a8b1d946d6b91ac572fb4 (patch) | |
tree | 09d317c27318a1bf8b5c2ab3cba9415990432321 /library/cpp/monlib/encode/json/json_decoder.cpp | |
parent | 89948053154b88163e209389b19a93d81f8235e7 (diff) | |
download | ydb-618663dff0c22bb5fc2a8b1d946d6b91ac572fb4.tar.gz |
monlib : memOnly support for JSON encoding/decoding (cpp)
json encoder memonly
attempt
commit_hash:0cef79f66356a94c398c76dc9baf2fe3ea9a6948
Diffstat (limited to 'library/cpp/monlib/encode/json/json_decoder.cpp')
-rw-r--r-- | library/cpp/monlib/encode/json/json_decoder.cpp | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/library/cpp/monlib/encode/json/json_decoder.cpp b/library/cpp/monlib/encode/json/json_decoder.cpp index 3718990075..801ff0833d 100644 --- a/library/cpp/monlib/encode/json/json_decoder.cpp +++ b/library/cpp/monlib/encode/json/json_decoder.cpp @@ -193,6 +193,7 @@ struct TMetricCollector { TLogHistogramBuilder LogHistBuilder; TTypedPoint LastPoint; TVector<TTypedPoint> TimeSeries; + bool IsMemOnly = false; bool SeenTsOrValue = false; bool SeenTimeseries = false; @@ -207,6 +208,7 @@ struct TMetricCollector { HistogramBuilder.Clear(); SummaryBuilder.Clear(); LogHistBuilder.Clear(); + IsMemOnly = false; } void AddLabel(const TLabel& label) { @@ -222,6 +224,10 @@ struct TMetricCollector { LastPoint.SetValue(value); } + void SetMemOnly(bool isMemOnly) { + IsMemOnly = isMemOnly; + } + void SaveLastPoint() { DECODE_ENSURE(LastPoint.GetTime() != TInstant::Zero(), "cannot add point without or zero timestamp"); @@ -419,6 +425,10 @@ private: Consumer_->OnSummaryDouble(time, std::move(snapshot)); } + void OnMemOnly(bool isMemOnly) override{ + Consumer_->OnMemOnly(isMemOnly); + } + private: const TCommonParts CommonParts_; IMetricConsumer* Consumer_; @@ -442,6 +452,7 @@ class TDecoderJson final: public NJson::TJsonCallbacks { METRIC_LABELS, METRIC_TYPE, METRIC_MODE, // TODO: must be deleted + METRIC_MEMONLY, METRIC_TIMESERIES, METRIC_TS, METRIC_VALUE, @@ -858,7 +869,7 @@ if (Y_UNLIKELY(!(CONDITION))) { \ } else if (key == TStringBuf("log_hist")) { State_.ToNext(TState::METRIC_LOG_HIST); } else if (key == TStringBuf("memOnly")) { - // deprecated. Skip it without errors for backward compatibility + State_.ToNext(TState::METRIC_MEMONLY); } else { ErrorMsg_ = TStringBuilder() << "unexpected key \"" << key << "\" in a metric schema"; return false; @@ -1033,6 +1044,18 @@ if (Y_UNLIKELY(!(CONDITION))) { \ return true; } + bool OnBoolean(bool value) override { + switch (State_.Current()) { + case TState::METRIC_MEMONLY: + LastMetric_.IsMemOnly = value; + State_.ToPrev(); + break; + default: + return false; + } + return true; + } + void ConsumeMetric() { // for backwad compatibility all unknown metrics treated as gauges if (LastMetric_.Type == EMetricType::UNKNOWN) { @@ -1055,7 +1078,12 @@ if (Y_UNLIKELY(!(CONDITION))) { \ MetricConsumer_->OnLabelsEnd(); } - // (3) values + // (3) flags + if (LastMetric_.IsMemOnly) { + MetricConsumer_->OnMemOnly(true); + } + + // (4) values switch (LastMetric_.Type) { case EMetricType::GAUGE: LastMetric_.Consume([this](TInstant time, EMetricValueType valueType, TMetricValue value) { |