aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/monlib/encode/json/json_decoder.cpp
diff options
context:
space:
mode:
authormiktorius <miktorius@yandex-team.com>2025-03-06 12:11:55 +0300
committermiktorius <miktorius@yandex-team.com>2025-03-06 14:53:44 +0300
commit618663dff0c22bb5fc2a8b1d946d6b91ac572fb4 (patch)
tree09d317c27318a1bf8b5c2ab3cba9415990432321 /library/cpp/monlib/encode/json/json_decoder.cpp
parent89948053154b88163e209389b19a93d81f8235e7 (diff)
downloadydb-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.cpp32
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) {