aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/monlib/encode
diff options
context:
space:
mode:
authormiktorius <miktorius@yandex-team.com>2025-03-03 12:16:59 +0300
committermiktorius <miktorius@yandex-team.com>2025-03-03 12:35:24 +0300
commite5e00e2a402f3028369f177f5919182949a71ba6 (patch)
treed06a7353708c3ed2fdf2db2a20eab8e7c6f24746 /library/cpp/monlib/encode
parent5fc9035f13cbbee5e75a9f7933bb877454a40c24 (diff)
downloadydb-e5e00e2a402f3028369f177f5919182949a71ba6.tar.gz
monlib : adding memOnly flag support for cpp lib
commit_hash:cffc55ecd6d0ea22c3c2ce52f21e6aba6da16a15
Diffstat (limited to 'library/cpp/monlib/encode')
-rw-r--r--library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp6
-rw-r--r--library/cpp/monlib/encode/buffered/buffered_encoder_base.h3
-rw-r--r--library/cpp/monlib/encode/fake/fake.cpp3
-rw-r--r--library/cpp/monlib/encode/protobuf/protobuf_encoder.cpp5
-rw-r--r--library/cpp/monlib/encode/protobuf/protos/samples.proto3
-rw-r--r--library/cpp/monlib/encode/spack/spack_v1_decoder.cpp8
-rw-r--r--library/cpp/monlib/encode/spack/spack_v1_encoder.cpp12
-rw-r--r--library/cpp/monlib/encode/spack/spack_v1_ut.cpp11
8 files changed, 41 insertions, 10 deletions
diff --git a/library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp b/library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp
index 87c832d642..c0449a10ff 100644
--- a/library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp
+++ b/library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp
@@ -144,6 +144,12 @@ void TBufferedEncoderBase::OnLogHistogram(TInstant time, TLogHistogramSnapshotPt
metric.TimeSeries.Add(time, s.Get());
}
+void TBufferedEncoderBase::OnMemOnly(bool isMemOnly) {
+ State_.Expect(TEncoderState::EState::METRIC);
+ TMetric& metric = Metrics_.back();
+ metric.IsMemOnly = isMemOnly;
+}
+
TString TBufferedEncoderBase::FormatLabels(const TPooledLabels& labels) const {
auto formattedLabels = TVector<TString>(Reserve(labels.size() + CommonLabels_.size()));
auto addLabel = [&](const TPooledLabel& l) {
diff --git a/library/cpp/monlib/encode/buffered/buffered_encoder_base.h b/library/cpp/monlib/encode/buffered/buffered_encoder_base.h
index fe3714e58f..dab5671ad4 100644
--- a/library/cpp/monlib/encode/buffered/buffered_encoder_base.h
+++ b/library/cpp/monlib/encode/buffered/buffered_encoder_base.h
@@ -37,6 +37,8 @@ public:
void OnSummaryDouble(TInstant time, ISummaryDoubleSnapshotPtr snapshot) override;
void OnLogHistogram(TInstant, TLogHistogramSnapshotPtr) override;
+ void OnMemOnly(bool isMemOnly) override;
+
protected:
using TPooledStr = TStringPoolBuilder::TValue;
@@ -80,6 +82,7 @@ protected:
EMetricType MetricType = EMetricType::UNKNOWN;
TPooledLabels Labels;
TMetricTimeSeries TimeSeries;
+ bool IsMemOnly;
};
protected:
diff --git a/library/cpp/monlib/encode/fake/fake.cpp b/library/cpp/monlib/encode/fake/fake.cpp
index 69d691361a..e3db20cbd1 100644
--- a/library/cpp/monlib/encode/fake/fake.cpp
+++ b/library/cpp/monlib/encode/fake/fake.cpp
@@ -43,6 +43,9 @@ namespace NMonitoring {
void Close() override {
}
+
+ void OnMemOnly(bool) override {
+ }
};
IMetricEncoderPtr EncoderFake() {
diff --git a/library/cpp/monlib/encode/protobuf/protobuf_encoder.cpp b/library/cpp/monlib/encode/protobuf/protobuf_encoder.cpp
index 2d11b9d5ba..2cffda13ac 100644
--- a/library/cpp/monlib/encode/protobuf/protobuf_encoder.cpp
+++ b/library/cpp/monlib/encode/protobuf/protobuf_encoder.cpp
@@ -227,6 +227,11 @@ namespace NMonitoring {
FillLogHistogram(*snapshot, point->MutableLogHistogram());
}
+ void OnMemOnly(bool isMemOnly) override {
+ Y_ENSURE(Sample_, "metric not started");
+ Sample_->SetIsMemOnly(isMemOnly);
+ }
+
void Close() override {
}
diff --git a/library/cpp/monlib/encode/protobuf/protos/samples.proto b/library/cpp/monlib/encode/protobuf/protos/samples.proto
index 371f4181d2..a3ca917221 100644
--- a/library/cpp/monlib/encode/protobuf/protos/samples.proto
+++ b/library/cpp/monlib/encode/protobuf/protos/samples.proto
@@ -59,7 +59,7 @@ message TPoint {
message TSingleSample {
repeated TLabel Labels = 1;
EMetricType MetricType = 2;
-
+ bool IsMemOnly = 10;
// inlined TPoint
uint64 Time = 3;
oneof Value {
@@ -76,6 +76,7 @@ message TMultiSample {
repeated TLabel Labels = 1;
EMetricType MetricType = 2;
repeated TPoint Points = 3;
+ bool IsMemOnly = 4;
}
message TSingleSamplesList {
diff --git a/library/cpp/monlib/encode/spack/spack_v1_decoder.cpp b/library/cpp/monlib/encode/spack/spack_v1_decoder.cpp
index 384ef456dd..a236bb9a50 100644
--- a/library/cpp/monlib/encode/spack/spack_v1_decoder.cpp
+++ b/library/cpp/monlib/encode/spack/spack_v1_decoder.cpp
@@ -107,15 +107,15 @@ namespace NMonitoring {
c->OnMetricBegin(metricType);
- // TODO: use it
- ReadFixed<ui8>(); // skip flags byte
+ // (5.2) flags byte
+ c->OnMemOnly(ReadFixed<ui8>() & 0x01);
auto metricNameValueIndex = std::numeric_limits<ui32>::max();
if (Header_.Version >= SV1_02) {
metricNameValueIndex = ReadVarint();
}
- // (5.2) labels
+ // (5.3) labels
ui32 labelsCount = ReadVarint();
DECODE_ENSURE(Header_.Version >= SV1_02 || labelsCount > 0, "metric #" << i << " has no labels");
c->OnLabelsBegin();
@@ -125,7 +125,7 @@ namespace NMonitoring {
ReadLabels(labelNames, labelValues, labelsCount, c);
c->OnLabelsEnd();
- // (5.3) values
+ // (5.4) values
switch (valueType) {
case EValueType::NONE:
break;
diff --git a/library/cpp/monlib/encode/spack/spack_v1_encoder.cpp b/library/cpp/monlib/encode/spack/spack_v1_encoder.cpp
index 7e13c3292b..70c5bba551 100644
--- a/library/cpp/monlib/encode/spack/spack_v1_encoder.cpp
+++ b/library/cpp/monlib/encode/spack/spack_v1_encoder.cpp
@@ -68,6 +68,10 @@ namespace NMonitoring {
TBufferedEncoderBase::OnLogHistogram(time, snapshot);
}
+ void OnMemOnly(bool isMemOnly) override {
+ TBufferedEncoderBase::OnMemOnly(isMemOnly);
+ }
+
void Close() override {
if (Closed_) {
return;
@@ -128,8 +132,8 @@ namespace NMonitoring {
ui8 typesByte = PackTypes(metric);
Out_->Write(&typesByte, sizeof(typesByte));
- // TODO: implement
- ui8 flagsByte = 0x00;
+ // (5.2) flags byte
+ ui8 flagsByte = metric.IsMemOnly & 0x01;
Out_->Write(&flagsByte, sizeof(flagsByte));
// v1.2 format addition — metric name
@@ -143,10 +147,10 @@ namespace NMonitoring {
WriteVarUInt32(Out_, it->Value->Index);
}
- // (5.2) labels
+ // (5.3) labels
WriteLabels(metric.Labels, MetricName_);
- // (5.3) values
+ // (5.4) values
switch (metric.TimeSeries.Size()) {
case 0:
break;
diff --git a/library/cpp/monlib/encode/spack/spack_v1_ut.cpp b/library/cpp/monlib/encode/spack/spack_v1_ut.cpp
index fe778eb7e0..bbc3b8712b 100644
--- a/library/cpp/monlib/encode/spack/spack_v1_ut.cpp
+++ b/library/cpp/monlib/encode/spack/spack_v1_ut.cpp
@@ -104,7 +104,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
ui8 expectedMetric1[] = {
0x0C, // types (RATE | NONE) (fixed ui8)
- 0x00, // flags (fixed ui8)
+ 0x01, // flags (fixed ui8)
0x01, // metric labels count (varint)
0x00, // label name index (varint)
0x01, // label value index (varint)
@@ -282,6 +282,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
e->OnLabelsBegin();
e->OnLabel("name", "q1");
e->OnLabelsEnd();
+ e->OnMemOnly(true);
}
e->OnMetricEnd();
}
@@ -513,12 +514,14 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
{
const NProto::TMultiSample& s = samples.GetSamples(0);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::RATE);
+ UNIT_ASSERT_EQUAL(s.GetIsMemOnly(), true);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 1);
AssertLabelEqual(s.GetLabels(0), "name", "q1");
}
{
const NProto::TMultiSample& s = samples.GetSamples(1);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::COUNTER);
+ UNIT_ASSERT_EQUAL(s.GetIsMemOnly(), false);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 1);
AssertLabelEqual(s.GetLabels(0), "name", "q2");
@@ -528,6 +531,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
{
const NProto::TMultiSample& s = samples.GetSamples(2);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::COUNTER);
+ UNIT_ASSERT_EQUAL(s.GetIsMemOnly(), false);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 1);
AssertLabelEqual(s.GetLabels(0), "name", "q3");
@@ -537,6 +541,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
{
const NProto::TMultiSample& s = samples.GetSamples(3);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::GAUGE);
+ UNIT_ASSERT_EQUAL(s.GetIsMemOnly(), false);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 1);
AssertLabelEqual(s.GetLabels(0), "name", "answer");
@@ -547,6 +552,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
{
const NProto::TMultiSample& s = samples.GetSamples(4);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::HISTOGRAM);
+ UNIT_ASSERT_EQUAL(s.GetIsMemOnly(), false);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 1);
AssertLabelEqual(s.GetLabels(0), "name", "responseTimeMillis");
@@ -570,6 +576,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
{
const NProto::TMultiSample& s = samples.GetSamples(5);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::IGAUGE);
+ UNIT_ASSERT_EQUAL(s.GetIsMemOnly(), false);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 1);
AssertLabelEqual(s.GetLabels(0), "name", "bytes");
@@ -579,6 +586,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
{
const NProto::TMultiSample& s = samples.GetSamples(6);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::DSUMMARY);
+ UNIT_ASSERT_EQUAL(s.GetIsMemOnly(), false);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 1);
AssertLabelEqual(s.GetLabels(0), "name", "temperature");
@@ -601,6 +609,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
{
const NProto::TMultiSample& s = samples.GetSamples(7);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::LOGHISTOGRAM);
+ UNIT_ASSERT_EQUAL(s.GetIsMemOnly(), false);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 1);
AssertLabelEqual(s.GetLabels(0), "name", "ms");