aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorgusev-p <gusev-p@yandex-team.ru>2022-02-10 16:47:20 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:47:20 +0300
commit1715700d00b30399d3648be821fd585ae552365e (patch)
tree6857a59158ea36e56d87fb32fbb8e44673c0ca0f /library/cpp
parentb23c1d7a8015c2006a148fd93b84cdeb0aee17a3 (diff)
downloadydb-1715700d00b30399d3648be821fd585ae552365e.tar.gz
Restoring authorship annotation for <gusev-p@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/actors/core/log.cpp46
-rw-r--r--library/cpp/actors/core/log.h2
-rw-r--r--library/cpp/histogram/adaptive/multi_histogram.h2
-rw-r--r--library/cpp/monlib/counters/counters.h8
-rw-r--r--library/cpp/monlib/dynamic_counters/encode.cpp8
-rw-r--r--library/cpp/monlib/dynamic_counters/encode.h10
-rw-r--r--library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp56
-rw-r--r--library/cpp/monlib/encode/buffered/buffered_encoder_base.h8
-rw-r--r--library/cpp/monlib/encode/buffered/string_pool.h8
-rw-r--r--library/cpp/monlib/encode/json/json.h16
-rw-r--r--library/cpp/monlib/encode/json/json_decoder.cpp2
-rw-r--r--library/cpp/monlib/encode/json/json_decoder_ut.cpp112
-rw-r--r--library/cpp/monlib/encode/json/json_encoder.cpp200
-rw-r--r--library/cpp/monlib/encode/json/json_ut.cpp446
-rw-r--r--library/cpp/monlib/encode/json/ut/expected.json30
-rw-r--r--library/cpp/monlib/encode/json/ut/expected_buffered.json24
-rw-r--r--library/cpp/monlib/encode/json/ut/expected_cloud.json74
-rw-r--r--library/cpp/monlib/encode/json/ut/expected_cloud_buffered.json184
-rw-r--r--library/cpp/monlib/encode/json/ut/ya.make6
-rw-r--r--library/cpp/monlib/encode/prometheus/prometheus.h4
-rw-r--r--library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp16
-rw-r--r--library/cpp/monlib/encode/prometheus/prometheus_encoder.cpp14
-rw-r--r--library/cpp/monlib/encode/spack/spack_v1.h32
-rw-r--r--library/cpp/monlib/encode/spack/spack_v1_decoder.cpp38
-rw-r--r--library/cpp/monlib/encode/spack/spack_v1_encoder.cpp74
-rw-r--r--library/cpp/monlib/encode/spack/spack_v1_ut.cpp294
-rw-r--r--library/cpp/monlib/metrics/metric_value.h36
-rw-r--r--library/cpp/testing/benchmark/bench.h16
28 files changed, 883 insertions, 883 deletions
diff --git a/library/cpp/actors/core/log.cpp b/library/cpp/actors/core/log.cpp
index 5f63b5af58..83ec0c5e43 100644
--- a/library/cpp/actors/core/log.cpp
+++ b/library/cpp/actors/core/log.cpp
@@ -715,26 +715,26 @@ namespace NActors {
}
};
- class TCompositeLogBackend: public TLogBackend {
- public:
- TCompositeLogBackend(TVector<TAutoPtr<TLogBackend>>&& underlyingBackends)
- : UnderlyingBackends(std::move(underlyingBackends))
- {
- }
-
- void WriteData(const TLogRecord& rec) override {
- for (auto& b: UnderlyingBackends) {
- b->WriteData(rec);
- }
- }
-
- void ReopenLog() override {
- }
-
- private:
- TVector<TAutoPtr<TLogBackend>> UnderlyingBackends;
- };
-
+ class TCompositeLogBackend: public TLogBackend {
+ public:
+ TCompositeLogBackend(TVector<TAutoPtr<TLogBackend>>&& underlyingBackends)
+ : UnderlyingBackends(std::move(underlyingBackends))
+ {
+ }
+
+ void WriteData(const TLogRecord& rec) override {
+ for (auto& b: UnderlyingBackends) {
+ b->WriteData(rec);
+ }
+ }
+
+ void ReopenLog() override {
+ }
+
+ private:
+ TVector<TAutoPtr<TLogBackend>> UnderlyingBackends;
+ };
+
TAutoPtr<TLogBackend> CreateStderrBackend() {
return new TStderrBackend();
}
@@ -747,7 +747,7 @@ namespace NActors {
return new TNullLogBackend();
}
- TAutoPtr<TLogBackend> CreateCompositeLogBackend(TVector<TAutoPtr<TLogBackend>>&& underlyingBackends) {
- return new TCompositeLogBackend(std::move(underlyingBackends));
- }
+ TAutoPtr<TLogBackend> CreateCompositeLogBackend(TVector<TAutoPtr<TLogBackend>>&& underlyingBackends) {
+ return new TCompositeLogBackend(std::move(underlyingBackends));
+ }
}
diff --git a/library/cpp/actors/core/log.h b/library/cpp/actors/core/log.h
index c11a7cf3c1..8499990e80 100644
--- a/library/cpp/actors/core/log.h
+++ b/library/cpp/actors/core/log.h
@@ -299,7 +299,7 @@ namespace NActors {
TAutoPtr<TLogBackend> CreateStderrBackend();
TAutoPtr<TLogBackend> CreateFileBackend(const TString& fileName);
TAutoPtr<TLogBackend> CreateNullBackend();
- TAutoPtr<TLogBackend> CreateCompositeLogBackend(TVector<TAutoPtr<TLogBackend>>&& underlyingBackends);
+ TAutoPtr<TLogBackend> CreateCompositeLogBackend(TVector<TAutoPtr<TLogBackend>>&& underlyingBackends);
/////////////////////////////////////////////////////////////////////
// Logging adaptors for memory log and logging into filesystem
diff --git a/library/cpp/histogram/adaptive/multi_histogram.h b/library/cpp/histogram/adaptive/multi_histogram.h
index 41caac5ba6..c9948f6733 100644
--- a/library/cpp/histogram/adaptive/multi_histogram.h
+++ b/library/cpp/histogram/adaptive/multi_histogram.h
@@ -64,7 +64,7 @@ namespace NKiwiAggr {
TVector<ui64> GetIds() const {
TVector<ui64> result(0);
- for (THistogramsMap::const_iterator it = Histograms.begin(); it != Histograms.end(); ++it) {
+ for (THistogramsMap::const_iterator it = Histograms.begin(); it != Histograms.end(); ++it) {
result.push_back(it->first);
}
return result;
diff --git a/library/cpp/monlib/counters/counters.h b/library/cpp/monlib/counters/counters.h
index 038b55f0c8..2180cf381d 100644
--- a/library/cpp/monlib/counters/counters.h
+++ b/library/cpp/monlib/counters/counters.h
@@ -112,10 +112,10 @@ namespace NMonitoring {
return AtomicGet(Value) == 0;
}
- TAtomic& GetAtomic() {
- return Value;
- }
-
+ TAtomic& GetAtomic() {
+ return Value;
+ }
+
private:
TAtomic Value;
bool Derivative;
diff --git a/library/cpp/monlib/dynamic_counters/encode.cpp b/library/cpp/monlib/dynamic_counters/encode.cpp
index ffa48d276e..f609c6160d 100644
--- a/library/cpp/monlib/dynamic_counters/encode.cpp
+++ b/library/cpp/monlib/dynamic_counters/encode.cpp
@@ -113,10 +113,10 @@ namespace NMonitoring {
}
}
- THolder<ICountableConsumer> AsCountableConsumer(IMetricEncoderPtr encoder, TCountableBase::EVisibility visibility) {
- return MakeHolder<TConsumer>(std::move(encoder), visibility);
- }
-
+ THolder<ICountableConsumer> AsCountableConsumer(IMetricEncoderPtr encoder, TCountableBase::EVisibility visibility) {
+ return MakeHolder<TConsumer>(std::move(encoder), visibility);
+ }
+
void ToJson(const TDynamicCounters& counters, IOutputStream* out) {
TConsumer consumer{EncoderJson(out), TCountableBase::EVisibility::Public};
counters.Accept(TString{}, TString{}, consumer);
diff --git a/library/cpp/monlib/dynamic_counters/encode.h b/library/cpp/monlib/dynamic_counters/encode.h
index c79964d7cb..1a3b253518 100644
--- a/library/cpp/monlib/dynamic_counters/encode.h
+++ b/library/cpp/monlib/dynamic_counters/encode.h
@@ -2,7 +2,7 @@
#include "counters.h"
-#include <library/cpp/monlib/encode/encoder.h>
+#include <library/cpp/monlib/encode/encoder.h>
#include <library/cpp/monlib/encode/format.h>
namespace NMonitoring {
@@ -13,10 +13,10 @@ namespace NMonitoring {
TCountableBase::EVisibility visibility = TCountableBase::EVisibility::Public
);
- THolder<ICountableConsumer> AsCountableConsumer(
- NMonitoring::IMetricEncoderPtr encoder,
- TCountableBase::EVisibility visibility = TCountableBase::EVisibility::Public);
-
+ THolder<ICountableConsumer> AsCountableConsumer(
+ NMonitoring::IMetricEncoderPtr encoder,
+ TCountableBase::EVisibility visibility = TCountableBase::EVisibility::Public);
+
void ToJson(const TDynamicCounters& counters, IOutputStream* out);
TString ToJson(const TDynamicCounters& counters);
diff --git a/library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp b/library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp
index 87c832d642..4928fdf70f 100644
--- a/library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp
+++ b/library/cpp/monlib/encode/buffered/buffered_encoder_base.cpp
@@ -1,8 +1,8 @@
#include "buffered_encoder_base.h"
-#include <util/string/join.h>
-#include <util/string/builder.h>
-
+#include <util/string/join.h>
+#include <util/string/builder.h>
+
namespace NMonitoring {
void TBufferedEncoderBase::OnStreamBegin() {
@@ -42,8 +42,8 @@ void TBufferedEncoderBase::OnMetricEnd() {
Y_ENSURE(existing.GetValueType() == metric.TimeSeries.GetValueType(),
"Time series point type mismatch: expected " << existing.GetValueType()
- << " but found " << metric.TimeSeries.GetValueType()
- << ", labels '" << FormatLabels(metric.Labels) << "'");
+ << " but found " << metric.TimeSeries.GetValueType()
+ << ", labels '" << FormatLabels(metric.Labels) << "'");
existing.CopyFrom(metric.TimeSeries);
Metrics_.pop_back();
@@ -144,27 +144,27 @@ void TBufferedEncoderBase::OnLogHistogram(TInstant time, TLogHistogramSnapshotPt
metric.TimeSeries.Add(time, s.Get());
}
-TString TBufferedEncoderBase::FormatLabels(const TPooledLabels& labels) const {
- auto formattedLabels = TVector<TString>(Reserve(labels.size() + CommonLabels_.size()));
- auto addLabel = [&](const TPooledLabel& l) {
- auto formattedLabel = TStringBuilder() << LabelNamesPool_.Get(l.Key) << '=' << LabelValuesPool_.Get(l.Value);
- formattedLabels.push_back(std::move(formattedLabel));
- };
-
- for (const auto& l: labels) {
- addLabel(l);
- }
- for (const auto& l: CommonLabels_) {
- const auto it = FindIf(labels, [&](const TPooledLabel& label) {
- return label.Key == l.Key;
- });
- if (it == labels.end()) {
- addLabel(l);
- }
- }
- Sort(formattedLabels);
-
- return TStringBuilder() << "{" << JoinSeq(", ", formattedLabels) << "}";
-}
-
+TString TBufferedEncoderBase::FormatLabels(const TPooledLabels& labels) const {
+ auto formattedLabels = TVector<TString>(Reserve(labels.size() + CommonLabels_.size()));
+ auto addLabel = [&](const TPooledLabel& l) {
+ auto formattedLabel = TStringBuilder() << LabelNamesPool_.Get(l.Key) << '=' << LabelValuesPool_.Get(l.Value);
+ formattedLabels.push_back(std::move(formattedLabel));
+ };
+
+ for (const auto& l: labels) {
+ addLabel(l);
+ }
+ for (const auto& l: CommonLabels_) {
+ const auto it = FindIf(labels, [&](const TPooledLabel& label) {
+ return label.Key == l.Key;
+ });
+ if (it == labels.end()) {
+ addLabel(l);
+ }
+ }
+ Sort(formattedLabels);
+
+ return TStringBuilder() << "{" << JoinSeq(", ", formattedLabels) << "}";
+}
+
} // namespace NMonitoring
diff --git a/library/cpp/monlib/encode/buffered/buffered_encoder_base.h b/library/cpp/monlib/encode/buffered/buffered_encoder_base.h
index fe3714e58f..12f838d905 100644
--- a/library/cpp/monlib/encode/buffered/buffered_encoder_base.h
+++ b/library/cpp/monlib/encode/buffered/buffered_encoder_base.h
@@ -82,10 +82,10 @@ protected:
TMetricTimeSeries TimeSeries;
};
-protected:
- TString FormatLabels(const TPooledLabels& labels) const;
-
-protected:
+protected:
+ TString FormatLabels(const TPooledLabels& labels) const;
+
+protected:
TEncoderState State_;
TStringPoolBuilder LabelNamesPool_;
diff --git a/library/cpp/monlib/encode/buffered/string_pool.h b/library/cpp/monlib/encode/buffered/string_pool.h
index 00e5644608..f07d050729 100644
--- a/library/cpp/monlib/encode/buffered/string_pool.h
+++ b/library/cpp/monlib/encode/buffered/string_pool.h
@@ -37,10 +37,10 @@ namespace NMonitoring {
return StrVector_.at(index).first;
}
- TStringBuf Get(const TValue* value) const {
- return StrVector_.at(value->Index).first;
- }
-
+ TStringBuf Get(const TValue* value) const {
+ return StrVector_.at(value->Index).first;
+ }
+
template <typename TConsumer>
void ForEach(TConsumer&& c) {
Y_ENSURE(IsBuilt_, "Pool must be sorted first");
diff --git a/library/cpp/monlib/encode/json/json.h b/library/cpp/monlib/encode/json/json.h
index 21530f20c3..f6968c0016 100644
--- a/library/cpp/monlib/encode/json/json.h
+++ b/library/cpp/monlib/encode/json/json.h
@@ -16,14 +16,14 @@ namespace NMonitoring {
/// Buffered encoder will merge series with same labels into one.
IMetricEncoderPtr BufferedEncoderJson(IOutputStream* out, int indentation = 0);
- IMetricEncoderPtr EncoderCloudJson(IOutputStream* out,
- int indentation = 0,
- TStringBuf metricNameLabel = "name");
-
- IMetricEncoderPtr BufferedEncoderCloudJson(IOutputStream* out,
- int indentation = 0,
- TStringBuf metricNameLabel = "name");
-
+ IMetricEncoderPtr EncoderCloudJson(IOutputStream* out,
+ int indentation = 0,
+ TStringBuf metricNameLabel = "name");
+
+ IMetricEncoderPtr BufferedEncoderCloudJson(IOutputStream* out,
+ int indentation = 0,
+ TStringBuf metricNameLabel = "name");
+
void DecodeJson(TStringBuf data, IMetricConsumer* c, TStringBuf metricNameLabel = "name");
}
diff --git a/library/cpp/monlib/encode/json/json_decoder.cpp b/library/cpp/monlib/encode/json/json_decoder.cpp
index d44ff5fd28..8420b93aab 100644
--- a/library/cpp/monlib/encode/json/json_decoder.cpp
+++ b/library/cpp/monlib/encode/json/json_decoder.cpp
@@ -52,7 +52,7 @@ public:
Bounds_.clear();
Values_.clear();
- InfPresented_ = false;
+ InfPresented_ = false;
return snapshot;
}
diff --git a/library/cpp/monlib/encode/json/json_decoder_ut.cpp b/library/cpp/monlib/encode/json/json_decoder_ut.cpp
index 4464e1d26a..52c34e4f37 100644
--- a/library/cpp/monlib/encode/json/json_decoder_ut.cpp
+++ b/library/cpp/monlib/encode/json/json_decoder_ut.cpp
@@ -120,60 +120,60 @@ Y_UNIT_TEST_SUITE(TJsonDecoderTest) {
ValidateCommonParts(std::move(commonParts), true, true);
ValidateMetrics(collector.Metrics);
}
-
- Y_UNIT_TEST(CanParseHistogramsWithInf) {
- const char* metricsData = R"({
-"metrics":
- [
- {
- "hist": {
- "bounds": [
- 10
- ],
- "buckets": [
- 11
- ],
- "inf": 12
- },
- "name":"s1",
- "type": "HIST_RATE"
- },
- {
- "hist": {
- "bounds": [
- 20
- ],
- "buckets": [
- 21
- ]
- },
- "name":"s2",
- "type":"HIST_RATE"
- }
- ]
-})";
- TCollectingConsumer consumer(false);
- DecodeJson(metricsData, &consumer);
-
- UNIT_ASSERT_VALUES_EQUAL(consumer.Metrics.size(), 2);
- {
- const auto& m = consumer.Metrics[0];
- UNIT_ASSERT_VALUES_EQUAL(m.Kind, EMetricType::HIST_RATE);
- UNIT_ASSERT_VALUES_EQUAL(m.Values->Size(), 1);
- const auto* histogram = (*m.Values)[0].GetValue().AsHistogram();
- UNIT_ASSERT_VALUES_EQUAL(histogram->Count(), 2);
- UNIT_ASSERT_VALUES_EQUAL(histogram->UpperBound(1), Max<TBucketBound>());
- UNIT_ASSERT_VALUES_EQUAL(histogram->Value(0), 11);
- UNIT_ASSERT_VALUES_EQUAL(histogram->Value(1), 12);
- }
- {
- const auto& m = consumer.Metrics[1];
- UNIT_ASSERT_VALUES_EQUAL(m.Kind, EMetricType::HIST_RATE);
- UNIT_ASSERT_VALUES_EQUAL(m.Values->Size(), 1);
- const auto* histogram = (*m.Values)[0].GetValue().AsHistogram();
- UNIT_ASSERT_VALUES_EQUAL(histogram->Count(), 1);
- UNIT_ASSERT_VALUES_EQUAL(histogram->UpperBound(0), 20);
- UNIT_ASSERT_VALUES_EQUAL(histogram->Value(0), 21);
- }
- }
+
+ Y_UNIT_TEST(CanParseHistogramsWithInf) {
+ const char* metricsData = R"({
+"metrics":
+ [
+ {
+ "hist": {
+ "bounds": [
+ 10
+ ],
+ "buckets": [
+ 11
+ ],
+ "inf": 12
+ },
+ "name":"s1",
+ "type": "HIST_RATE"
+ },
+ {
+ "hist": {
+ "bounds": [
+ 20
+ ],
+ "buckets": [
+ 21
+ ]
+ },
+ "name":"s2",
+ "type":"HIST_RATE"
+ }
+ ]
+})";
+ TCollectingConsumer consumer(false);
+ DecodeJson(metricsData, &consumer);
+
+ UNIT_ASSERT_VALUES_EQUAL(consumer.Metrics.size(), 2);
+ {
+ const auto& m = consumer.Metrics[0];
+ UNIT_ASSERT_VALUES_EQUAL(m.Kind, EMetricType::HIST_RATE);
+ UNIT_ASSERT_VALUES_EQUAL(m.Values->Size(), 1);
+ const auto* histogram = (*m.Values)[0].GetValue().AsHistogram();
+ UNIT_ASSERT_VALUES_EQUAL(histogram->Count(), 2);
+ UNIT_ASSERT_VALUES_EQUAL(histogram->UpperBound(1), Max<TBucketBound>());
+ UNIT_ASSERT_VALUES_EQUAL(histogram->Value(0), 11);
+ UNIT_ASSERT_VALUES_EQUAL(histogram->Value(1), 12);
+ }
+ {
+ const auto& m = consumer.Metrics[1];
+ UNIT_ASSERT_VALUES_EQUAL(m.Kind, EMetricType::HIST_RATE);
+ UNIT_ASSERT_VALUES_EQUAL(m.Values->Size(), 1);
+ const auto* histogram = (*m.Values)[0].GetValue().AsHistogram();
+ UNIT_ASSERT_VALUES_EQUAL(histogram->Count(), 1);
+ UNIT_ASSERT_VALUES_EQUAL(histogram->UpperBound(0), 20);
+ UNIT_ASSERT_VALUES_EQUAL(histogram->Value(0), 21);
+ }
+ }
}
diff --git a/library/cpp/monlib/encode/json/json_encoder.cpp b/library/cpp/monlib/encode/json/json_encoder.cpp
index 20d2bb6283..fb14ffdf07 100644
--- a/library/cpp/monlib/encode/json/json_encoder.cpp
+++ b/library/cpp/monlib/encode/json/json_encoder.cpp
@@ -14,21 +14,21 @@
namespace NMonitoring {
namespace {
- enum class EJsonStyle {
- Solomon,
- Cloud
- };
-
+ enum class EJsonStyle {
+ Solomon,
+ Cloud
+ };
+
///////////////////////////////////////////////////////////////////////
// TJsonWriter
///////////////////////////////////////////////////////////////////////
class TJsonWriter {
public:
- TJsonWriter(IOutputStream* out, int indentation, EJsonStyle style, TStringBuf metricNameLabel)
+ TJsonWriter(IOutputStream* out, int indentation, EJsonStyle style, TStringBuf metricNameLabel)
: Buf_(NJsonWriter::HEM_UNSAFE, out)
- , Style_(style)
- , MetricNameLabel_(metricNameLabel)
- , CurrentMetricName_()
+ , Style_(style)
+ , MetricNameLabel_(metricNameLabel)
+ , CurrentMetricName_()
{
Buf_.SetIndentSpaces(indentation);
Buf_.SetWriteNanAsString();
@@ -37,11 +37,11 @@ namespace NMonitoring {
void WriteTime(TInstant time) {
if (time != TInstant::Zero()) {
Buf_.WriteKey(TStringBuf("ts"));
- if (Style_ == EJsonStyle::Solomon) {
- Buf_.WriteULongLong(time.Seconds());
- } else {
- Buf_.WriteString(time.ToString());
- }
+ if (Style_ == EJsonStyle::Solomon) {
+ Buf_.WriteULongLong(time.Seconds());
+ } else {
+ Buf_.WriteString(time.ToString());
+ }
}
}
@@ -61,8 +61,8 @@ namespace NMonitoring {
}
void WriteValue(IHistogramSnapshot* s) {
- Y_ENSURE(Style_ == EJsonStyle::Solomon);
-
+ Y_ENSURE(Style_ == EJsonStyle::Solomon);
+
Buf_.WriteKey(TStringBuf("hist"));
Buf_.BeginObject();
if (ui32 count = s->Count()) {
@@ -94,8 +94,8 @@ namespace NMonitoring {
}
void WriteValue(ISummaryDoubleSnapshot* s) {
- Y_ENSURE(Style_ == EJsonStyle::Solomon);
-
+ Y_ENSURE(Style_ == EJsonStyle::Solomon);
+
Buf_.WriteKey(TStringBuf("summary"));
Buf_.BeginObject();
@@ -118,8 +118,8 @@ namespace NMonitoring {
}
void WriteValue(TLogHistogramSnapshot* s) {
- Y_ENSURE(Style_ == EJsonStyle::Solomon);
-
+ Y_ENSURE(Style_ == EJsonStyle::Solomon);
+
Buf_.WriteKey(TStringBuf("log_hist"));
Buf_.BeginObject();
@@ -169,64 +169,64 @@ namespace NMonitoring {
break;
case EMetricValueType::UNKNOWN:
- ythrow yexception() << "unknown metric value type";
+ ythrow yexception() << "unknown metric value type";
}
}
void WriteLabel(TStringBuf name, TStringBuf value) {
Y_ENSURE(IsUtf(name), "label name is not valid UTF-8 string");
Y_ENSURE(IsUtf(value), "label value is not valid UTF-8 string");
- if (Style_ == EJsonStyle::Cloud && name == MetricNameLabel_) {
- CurrentMetricName_ = value;
- } else {
- Buf_.WriteKey(name);
- Buf_.WriteString(value);
- }
- }
-
- void WriteMetricType(EMetricType type) {
- if (Style_ == EJsonStyle::Cloud) {
- Buf_.WriteKey("type");
- Buf_.WriteString(MetricTypeToCloudStr(type));
- } else {
- Buf_.WriteKey("kind");
- Buf_.WriteString(MetricTypeToStr(type));
- }
- }
-
- void WriteName() {
- if (Style_ != EJsonStyle::Cloud) {
- return;
- }
- if (CurrentMetricName_.Empty()) {
- ythrow yexception() << "label '" << MetricNameLabel_ << "' is not defined";
- }
- Buf_.WriteKey("name");
- Buf_.WriteString(CurrentMetricName_);
- CurrentMetricName_.clear();
- }
-
- private:
- static TStringBuf MetricTypeToCloudStr(EMetricType type) {
- switch (type) {
- case EMetricType::GAUGE:
- return TStringBuf("DGAUGE");
- case EMetricType::COUNTER:
- return TStringBuf("COUNTER");
- case EMetricType::RATE:
- return TStringBuf("RATE");
- case EMetricType::IGAUGE:
- return TStringBuf("IGAUGE");
- default:
- ythrow yexception() << "metric type '" << type << "' is not supported by cloud json format";
- }
- }
-
+ if (Style_ == EJsonStyle::Cloud && name == MetricNameLabel_) {
+ CurrentMetricName_ = value;
+ } else {
+ Buf_.WriteKey(name);
+ Buf_.WriteString(value);
+ }
+ }
+
+ void WriteMetricType(EMetricType type) {
+ if (Style_ == EJsonStyle::Cloud) {
+ Buf_.WriteKey("type");
+ Buf_.WriteString(MetricTypeToCloudStr(type));
+ } else {
+ Buf_.WriteKey("kind");
+ Buf_.WriteString(MetricTypeToStr(type));
+ }
+ }
+
+ void WriteName() {
+ if (Style_ != EJsonStyle::Cloud) {
+ return;
+ }
+ if (CurrentMetricName_.Empty()) {
+ ythrow yexception() << "label '" << MetricNameLabel_ << "' is not defined";
+ }
+ Buf_.WriteKey("name");
+ Buf_.WriteString(CurrentMetricName_);
+ CurrentMetricName_.clear();
+ }
+
+ private:
+ static TStringBuf MetricTypeToCloudStr(EMetricType type) {
+ switch (type) {
+ case EMetricType::GAUGE:
+ return TStringBuf("DGAUGE");
+ case EMetricType::COUNTER:
+ return TStringBuf("COUNTER");
+ case EMetricType::RATE:
+ return TStringBuf("RATE");
+ case EMetricType::IGAUGE:
+ return TStringBuf("IGAUGE");
+ default:
+ ythrow yexception() << "metric type '" << type << "' is not supported by cloud json format";
+ }
+ }
+
protected:
NJsonWriter::TBuf Buf_;
- EJsonStyle Style_;
- TString MetricNameLabel_;
- TString CurrentMetricName_;
+ EJsonStyle Style_;
+ TString MetricNameLabel_;
+ TString CurrentMetricName_;
};
///////////////////////////////////////////////////////////////////////
@@ -234,8 +234,8 @@ namespace NMonitoring {
///////////////////////////////////////////////////////////////////////
class TEncoderJson final: public IMetricEncoder, public TJsonWriter {
public:
- TEncoderJson(IOutputStream* out, int indentation, EJsonStyle style, TStringBuf metricNameLabel)
- : TJsonWriter{out, indentation, style, metricNameLabel}
+ TEncoderJson(IOutputStream* out, int indentation, EJsonStyle style, TStringBuf metricNameLabel)
+ : TJsonWriter{out, indentation, style, metricNameLabel}
{
}
@@ -267,11 +267,11 @@ namespace NMonitoring {
State_.Switch(TEncoderState::EState::ROOT, TEncoderState::EState::METRIC);
if (Buf_.KeyExpected()) {
// first metric, so open metrics array
- Buf_.WriteKey(TStringBuf(Style_ == EJsonStyle::Solomon ? "sensors" : "metrics"));
+ Buf_.WriteKey(TStringBuf(Style_ == EJsonStyle::Solomon ? "sensors" : "metrics"));
Buf_.BeginList();
}
Buf_.BeginObject();
- WriteMetricType(type);
+ WriteMetricType(type);
}
void OnMetricEnd() override {
@@ -300,7 +300,7 @@ namespace NMonitoring {
}
if (State_ == TEncoderState::EState::ROOT) {
State_ = TEncoderState::EState::COMMON_LABELS;
- Buf_.WriteKey(TStringBuf(Style_ == EJsonStyle::Solomon ? "commonLabels" : "labels"));
+ Buf_.WriteKey(TStringBuf(Style_ == EJsonStyle::Solomon ? "commonLabels" : "labels"));
} else if (State_ == TEncoderState::EState::METRIC) {
State_ = TEncoderState::EState::METRIC_LABELS;
Buf_.WriteKey(TStringBuf("labels"));
@@ -323,9 +323,9 @@ namespace NMonitoring {
Y_ENSURE(!EmptyLabels_, "Labels cannot be empty");
Buf_.EndObject();
- if (State_ == TEncoderState::EState::METRIC) {
- WriteName();
- }
+ if (State_ == TEncoderState::EState::METRIC) {
+ WriteName();
+ }
}
void OnLabel(TStringBuf name, TStringBuf value) override {
@@ -420,8 +420,8 @@ namespace NMonitoring {
///////////////////////////////////////////////////////////////////////
class TBufferedJsonEncoder : public TBufferedEncoderBase, public TJsonWriter {
public:
- TBufferedJsonEncoder(IOutputStream* out, int indentation, EJsonStyle style, TStringBuf metricNameLabel)
- : TJsonWriter{out, indentation, style, metricNameLabel}
+ TBufferedJsonEncoder(IOutputStream* out, int indentation, EJsonStyle style, TStringBuf metricNameLabel)
+ : TJsonWriter{out, indentation, style, metricNameLabel}
{
MetricsMergingMode_ = EMetricsMergingMode::MERGE_METRICS;
}
@@ -464,12 +464,12 @@ namespace NMonitoring {
WriteTime(CommonTime_);
if (CommonLabels_.size() > 0) {
- Buf_.WriteKey(TStringBuf(Style_ == EJsonStyle::Solomon ? "commonLabels": "labels"));
- WriteLabels(CommonLabels_, true);
+ Buf_.WriteKey(TStringBuf(Style_ == EJsonStyle::Solomon ? "commonLabels": "labels"));
+ WriteLabels(CommonLabels_, true);
}
if (Metrics_.size() > 0) {
- Buf_.WriteKey(TStringBuf(Style_ == EJsonStyle::Solomon ? "sensors" : "metrics"));
+ Buf_.WriteKey(TStringBuf(Style_ == EJsonStyle::Solomon ? "sensors" : "metrics"));
WriteMetrics();
}
@@ -488,10 +488,10 @@ namespace NMonitoring {
void WriteMetric(TMetric& metric) {
Buf_.BeginObject();
- WriteMetricType(metric.MetricType);
+ WriteMetricType(metric.MetricType);
Buf_.WriteKey(TStringBuf("labels"));
- WriteLabels(metric.Labels, false);
+ WriteLabels(metric.Labels, false);
metric.TimeSeries.SortByTs();
if (metric.TimeSeries.Size() == 1) {
@@ -515,7 +515,7 @@ namespace NMonitoring {
Buf_.EndObject();
}
- void WriteLabels(const TPooledLabels& labels, bool isCommon) {
+ void WriteLabels(const TPooledLabels& labels, bool isCommon) {
Buf_.BeginObject();
for (auto i = 0u; i < labels.size(); ++i) {
@@ -526,10 +526,10 @@ namespace NMonitoring {
}
Buf_.EndObject();
-
- if (!isCommon) {
- WriteName();
- }
+
+ if (!isCommon) {
+ WriteName();
+ }
}
private:
@@ -539,18 +539,18 @@ namespace NMonitoring {
}
IMetricEncoderPtr EncoderJson(IOutputStream* out, int indentation) {
- return MakeHolder<TEncoderJson>(out, indentation, EJsonStyle::Solomon, "");
+ return MakeHolder<TEncoderJson>(out, indentation, EJsonStyle::Solomon, "");
}
IMetricEncoderPtr BufferedEncoderJson(IOutputStream* out, int indentation) {
- return MakeHolder<TBufferedJsonEncoder>(out, indentation, EJsonStyle::Solomon, "");
- }
-
- IMetricEncoderPtr EncoderCloudJson(IOutputStream* out, int indentation, TStringBuf metricNameLabel) {
- return MakeHolder<TEncoderJson>(out, indentation, EJsonStyle::Cloud, metricNameLabel);
- }
-
- IMetricEncoderPtr BufferedEncoderCloudJson(IOutputStream* out, int indentation, TStringBuf metricNameLabel) {
- return MakeHolder<TBufferedJsonEncoder>(out, indentation, EJsonStyle::Cloud, metricNameLabel);
+ return MakeHolder<TBufferedJsonEncoder>(out, indentation, EJsonStyle::Solomon, "");
}
+
+ IMetricEncoderPtr EncoderCloudJson(IOutputStream* out, int indentation, TStringBuf metricNameLabel) {
+ return MakeHolder<TEncoderJson>(out, indentation, EJsonStyle::Cloud, metricNameLabel);
+ }
+
+ IMetricEncoderPtr BufferedEncoderCloudJson(IOutputStream* out, int indentation, TStringBuf metricNameLabel) {
+ return MakeHolder<TBufferedJsonEncoder>(out, indentation, EJsonStyle::Cloud, metricNameLabel);
+ }
}
diff --git a/library/cpp/monlib/encode/json/json_ut.cpp b/library/cpp/monlib/encode/json/json_ut.cpp
index 09e7909289..9bd38e5fc5 100644
--- a/library/cpp/monlib/encode/json/json_ut.cpp
+++ b/library/cpp/monlib/encode/json/json_ut.cpp
@@ -8,7 +8,7 @@
#include <library/cpp/testing/unittest/registar.h>
#include <util/stream/str.h>
-#include <util/string/builder.h>
+#include <util/string/builder.h>
#include <limits>
@@ -136,171 +136,171 @@ Y_UNIT_TEST_SUITE(TJsonTest) {
const TInstant now = TInstant::ParseIso8601Deprecated("2017-11-05T01:02:03Z");
Y_UNIT_TEST(Encode) {
- auto check = [](bool cloud, bool buffered, TStringBuf expectedResourceKey) {
- TString json;
- TStringOutput out(json);
- auto e = cloud
- ? (buffered ? BufferedEncoderCloudJson(&out, 2, "metric") : EncoderCloudJson(&out, 2, "metric"))
- : (buffered ? BufferedEncoderJson(&out, 2) : EncoderJson(&out, 2));
- e->OnStreamBegin();
- { // common time
- e->OnCommonTime(TInstant::Seconds(1500000000));
+ auto check = [](bool cloud, bool buffered, TStringBuf expectedResourceKey) {
+ TString json;
+ TStringOutput out(json);
+ auto e = cloud
+ ? (buffered ? BufferedEncoderCloudJson(&out, 2, "metric") : EncoderCloudJson(&out, 2, "metric"))
+ : (buffered ? BufferedEncoderJson(&out, 2) : EncoderJson(&out, 2));
+ e->OnStreamBegin();
+ { // common time
+ e->OnCommonTime(TInstant::Seconds(1500000000));
}
- { // common labels
+ { // common labels
e->OnLabelsBegin();
- e->OnLabel("project", "solomon");
+ e->OnLabel("project", "solomon");
e->OnLabelsEnd();
}
- { // metric #1
- e->OnMetricBegin(EMetricType::COUNTER);
- {
- e->OnLabelsBegin();
- e->OnLabel("metric", "single");
- e->OnLabel("labels", "l1");
- e->OnLabelsEnd();
- }
- e->OnUint64(now, 17);
- e->OnMetricEnd();
- }
- { // metric #2
- e->OnMetricBegin(EMetricType::RATE);
- {
- e->OnLabelsBegin();
- e->OnLabel("metric", "single");
- e->OnLabel("labels", "l2");
- e->OnLabelsEnd();
- }
- e->OnUint64(now, 17);
- e->OnMetricEnd();
- }
- { // metric #3
- e->OnMetricBegin(EMetricType::GAUGE);
- e->OnDouble(now, 3.14);
- {
- e->OnLabelsBegin();
- e->OnLabel("metric", "single");
- e->OnLabel("labels", "l3");
- e->OnLabelsEnd();
- }
- e->OnMetricEnd();
- }
- { // metric #4
- e->OnMetricBegin(EMetricType::IGAUGE);
- e->OnInt64(now, 42);
- {
- e->OnLabelsBegin();
- e->OnLabel("metric", "single_igauge");
- e->OnLabel("labels", "l4");
- e->OnLabelsEnd();
- }
- e->OnMetricEnd();
+ { // metric #1
+ e->OnMetricBegin(EMetricType::COUNTER);
+ {
+ e->OnLabelsBegin();
+ e->OnLabel("metric", "single");
+ e->OnLabel("labels", "l1");
+ e->OnLabelsEnd();
+ }
+ e->OnUint64(now, 17);
+ e->OnMetricEnd();
}
- { // metric #5
- e->OnMetricBegin(EMetricType::GAUGE);
- {
- e->OnLabelsBegin();
- e->OnLabel("metric", "multiple");
- e->OnLabel("labels", "l5");
- e->OnLabelsEnd();
- }
- e->OnDouble(now, std::numeric_limits<double>::quiet_NaN());
- e->OnDouble(now + TDuration::Seconds(15), std::numeric_limits<double>::infinity());
- e->OnDouble(now + TDuration::Seconds(30), -std::numeric_limits<double>::infinity());
- e->OnMetricEnd();
+ { // metric #2
+ e->OnMetricBegin(EMetricType::RATE);
+ {
+ e->OnLabelsBegin();
+ e->OnLabel("metric", "single");
+ e->OnLabel("labels", "l2");
+ e->OnLabelsEnd();
+ }
+ e->OnUint64(now, 17);
+ e->OnMetricEnd();
}
-
- { // metric #6
- e->OnMetricBegin(EMetricType::COUNTER);
- e->OnUint64(now, 1337);
- e->OnUint64(now + TDuration::Seconds(15), 1338);
- {
- e->OnLabelsBegin();
- e->OnLabel("metric", "multiple");
- e->OnLabel("labels", "l6");
- e->OnLabelsEnd();
- }
- e->OnMetricEnd();
- }
- e->OnStreamEnd();
- e->Close();
- json += "\n";
-
+ { // metric #3
+ e->OnMetricBegin(EMetricType::GAUGE);
+ e->OnDouble(now, 3.14);
+ {
+ e->OnLabelsBegin();
+ e->OnLabel("metric", "single");
+ e->OnLabel("labels", "l3");
+ e->OnLabelsEnd();
+ }
+ e->OnMetricEnd();
+ }
+ { // metric #4
+ e->OnMetricBegin(EMetricType::IGAUGE);
+ e->OnInt64(now, 42);
+ {
+ e->OnLabelsBegin();
+ e->OnLabel("metric", "single_igauge");
+ e->OnLabel("labels", "l4");
+ e->OnLabelsEnd();
+ }
+ e->OnMetricEnd();
+ }
+ { // metric #5
+ e->OnMetricBegin(EMetricType::GAUGE);
+ {
+ e->OnLabelsBegin();
+ e->OnLabel("metric", "multiple");
+ e->OnLabel("labels", "l5");
+ e->OnLabelsEnd();
+ }
+ e->OnDouble(now, std::numeric_limits<double>::quiet_NaN());
+ e->OnDouble(now + TDuration::Seconds(15), std::numeric_limits<double>::infinity());
+ e->OnDouble(now + TDuration::Seconds(30), -std::numeric_limits<double>::infinity());
+ e->OnMetricEnd();
+ }
+
+ { // metric #6
+ e->OnMetricBegin(EMetricType::COUNTER);
+ e->OnUint64(now, 1337);
+ e->OnUint64(now + TDuration::Seconds(15), 1338);
+ {
+ e->OnLabelsBegin();
+ e->OnLabel("metric", "multiple");
+ e->OnLabel("labels", "l6");
+ e->OnLabelsEnd();
+ }
+ e->OnMetricEnd();
+ }
+ e->OnStreamEnd();
+ e->Close();
+ json += "\n";
+
auto parseJson = [] (auto buf) {
NJson::TJsonValue value;
NJson::ReadJsonTree(buf, &value, true);
return value;
};
- const auto expectedJson = NResource::Find(expectedResourceKey);
+ const auto expectedJson = NResource::Find(expectedResourceKey);
UNIT_ASSERT_EQUAL(parseJson(json), parseJson(expectedJson));
- };
-
- check(false, false, "/expected.json");
- check(false, true, "/expected_buffered.json");
- check(true, false, "/expected_cloud.json");
- check(true, true, "/expected_cloud_buffered.json");
- }
-
- TLogHistogramSnapshotPtr TestLogHistogram(ui32 v = 1) {
- TVector<double> buckets{0.5 * v, 0.25 * v, 0.25 * v, 0.5 * v};
- return MakeIntrusive<TLogHistogramSnapshot>(1.5, 1u, 0, std::move(buckets));
- }
-
- Y_UNIT_TEST(HistogramAndSummaryMetricTypesAreNotSupportedByCloudJson) {
- const TInstant now = TInstant::ParseIso8601Deprecated("2017-11-05T01:02:03Z");
-
- auto emit = [&](IMetricEncoder* encoder, EMetricType metricType) {
- encoder->OnStreamBegin();
+ };
+
+ check(false, false, "/expected.json");
+ check(false, true, "/expected_buffered.json");
+ check(true, false, "/expected_cloud.json");
+ check(true, true, "/expected_cloud_buffered.json");
+ }
+
+ TLogHistogramSnapshotPtr TestLogHistogram(ui32 v = 1) {
+ TVector<double> buckets{0.5 * v, 0.25 * v, 0.25 * v, 0.5 * v};
+ return MakeIntrusive<TLogHistogramSnapshot>(1.5, 1u, 0, std::move(buckets));
+ }
+
+ Y_UNIT_TEST(HistogramAndSummaryMetricTypesAreNotSupportedByCloudJson) {
+ const TInstant now = TInstant::ParseIso8601Deprecated("2017-11-05T01:02:03Z");
+
+ auto emit = [&](IMetricEncoder* encoder, EMetricType metricType) {
+ encoder->OnStreamBegin();
{
- encoder->OnMetricBegin(metricType);
- {
- encoder->OnLabelsBegin();
- encoder->OnLabel("name", "m");
- encoder->OnLabelsEnd();
- }
-
- switch (metricType) {
- case EMetricType::HIST: {
- auto histogram = ExponentialHistogram(6, 2);
- encoder->OnHistogram(now, histogram->Snapshot());
- break;
- }
- case EMetricType::LOGHIST: {
- auto histogram = TestLogHistogram();
- encoder->OnLogHistogram(now, histogram);
- break;
- }
- case EMetricType::DSUMMARY: {
- auto summary = MakeIntrusive<TSummaryDoubleSnapshot>(10., -0.5, 0.5, 0.3, 30u);
- encoder->OnSummaryDouble(now, summary);
- break;
- }
- default:
- Y_FAIL("unexpected metric type [%s]", ToString(metricType).c_str());
- }
-
- encoder->OnMetricEnd();
+ encoder->OnMetricBegin(metricType);
+ {
+ encoder->OnLabelsBegin();
+ encoder->OnLabel("name", "m");
+ encoder->OnLabelsEnd();
+ }
+
+ switch (metricType) {
+ case EMetricType::HIST: {
+ auto histogram = ExponentialHistogram(6, 2);
+ encoder->OnHistogram(now, histogram->Snapshot());
+ break;
+ }
+ case EMetricType::LOGHIST: {
+ auto histogram = TestLogHistogram();
+ encoder->OnLogHistogram(now, histogram);
+ break;
+ }
+ case EMetricType::DSUMMARY: {
+ auto summary = MakeIntrusive<TSummaryDoubleSnapshot>(10., -0.5, 0.5, 0.3, 30u);
+ encoder->OnSummaryDouble(now, summary);
+ break;
+ }
+ default:
+ Y_FAIL("unexpected metric type [%s]", ToString(metricType).c_str());
+ }
+
+ encoder->OnMetricEnd();
}
- encoder->OnStreamEnd();
- encoder->Close();
- };
-
- auto doTest = [&](bool buffered, EMetricType metricType) {
- TString json;
- TStringOutput out(json);
- auto encoder = buffered ? BufferedEncoderCloudJson(&out, 2) : EncoderCloudJson(&out, 2);
- const TString expectedMessage = TStringBuilder()
- << "metric type '" << metricType << "' is not supported by cloud json format";
- UNIT_ASSERT_EXCEPTION_CONTAINS_C(emit(encoder.Get(), metricType), yexception, expectedMessage,
- TString("buffered: ") + ToString(buffered));
- };
-
- doTest(false, EMetricType::HIST);
- doTest(false, EMetricType::LOGHIST);
- doTest(false, EMetricType::DSUMMARY);
- doTest(true, EMetricType::HIST);
- doTest(true, EMetricType::LOGHIST);
- doTest(true, EMetricType::DSUMMARY);
+ encoder->OnStreamEnd();
+ encoder->Close();
+ };
+
+ auto doTest = [&](bool buffered, EMetricType metricType) {
+ TString json;
+ TStringOutput out(json);
+ auto encoder = buffered ? BufferedEncoderCloudJson(&out, 2) : EncoderCloudJson(&out, 2);
+ const TString expectedMessage = TStringBuilder()
+ << "metric type '" << metricType << "' is not supported by cloud json format";
+ UNIT_ASSERT_EXCEPTION_CONTAINS_C(emit(encoder.Get(), metricType), yexception, expectedMessage,
+ TString("buffered: ") + ToString(buffered));
+ };
+
+ doTest(false, EMetricType::HIST);
+ doTest(false, EMetricType::LOGHIST);
+ doTest(false, EMetricType::DSUMMARY);
+ doTest(true, EMetricType::HIST);
+ doTest(true, EMetricType::LOGHIST);
+ doTest(true, EMetricType::DSUMMARY);
}
Y_UNIT_TEST(MetricsWithDifferentLabelOrderGetMerged) {
@@ -369,13 +369,13 @@ Y_UNIT_TEST_SUITE(TJsonTest) {
UNIT_ASSERT_VALUES_EQUAL(samples.CommonLabelsSize(), 1);
AssertLabelEqual(samples.GetCommonLabels(0), "project", "solomon");
- UNIT_ASSERT_VALUES_EQUAL(samples.SamplesSize(), 6);
+ UNIT_ASSERT_VALUES_EQUAL(samples.SamplesSize(), 6);
{
const NProto::TMultiSample& s = samples.GetSamples(0);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::COUNTER);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
AssertLabelEqual(s.GetLabels(0), "metric", "single");
- AssertLabelEqual(s.GetLabels(1), "labels", "l1");
+ AssertLabelEqual(s.GetLabels(1), "labels", "l1");
UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 1);
AssertPointEqual(s.GetPoints(0), now, ui64(17));
@@ -385,7 +385,7 @@ Y_UNIT_TEST_SUITE(TJsonTest) {
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::RATE);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
AssertLabelEqual(s.GetLabels(0), "metric", "single");
- AssertLabelEqual(s.GetLabels(1), "labels", "l2");
+ AssertLabelEqual(s.GetLabels(1), "labels", "l2");
UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 1);
AssertPointEqual(s.GetPoints(0), now, ui64(17));
@@ -395,27 +395,27 @@ Y_UNIT_TEST_SUITE(TJsonTest) {
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::GAUGE);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
AssertLabelEqual(s.GetLabels(0), "metric", "single");
- AssertLabelEqual(s.GetLabels(1), "labels", "l3");
+ AssertLabelEqual(s.GetLabels(1), "labels", "l3");
UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 1);
AssertPointEqual(s.GetPoints(0), now, 3.14);
}
{
const NProto::TMultiSample& s = samples.GetSamples(3);
- UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::IGAUGE);
- UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
- AssertLabelEqual(s.GetLabels(0), "metric", "single_igauge");
- AssertLabelEqual(s.GetLabels(1), "labels", "l4");
-
- UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 1);
- AssertPointEqual(s.GetPoints(0), now, i64(42));
- }
- {
- const NProto::TMultiSample& s = samples.GetSamples(4);
+ UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::IGAUGE);
+ UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
+ AssertLabelEqual(s.GetLabels(0), "metric", "single_igauge");
+ AssertLabelEqual(s.GetLabels(1), "labels", "l4");
+
+ UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 1);
+ AssertPointEqual(s.GetPoints(0), now, i64(42));
+ }
+ {
+ const NProto::TMultiSample& s = samples.GetSamples(4);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::GAUGE);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
AssertLabelEqual(s.GetLabels(0), "metric", "multiple");
- AssertLabelEqual(s.GetLabels(1), "labels", "l5");
+ AssertLabelEqual(s.GetLabels(1), "labels", "l5");
UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 3);
AssertPointEqualNan(s.GetPoints(0), now);
@@ -423,11 +423,11 @@ Y_UNIT_TEST_SUITE(TJsonTest) {
AssertPointEqualInf(s.GetPoints(2), now + TDuration::Seconds(30), -11);
}
{
- const NProto::TMultiSample& s = samples.GetSamples(5);
+ const NProto::TMultiSample& s = samples.GetSamples(5);
UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::COUNTER);
UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
AssertLabelEqual(s.GetLabels(0), "metric", "multiple");
- AssertLabelEqual(s.GetLabels(1), "labels", "l6");
+ AssertLabelEqual(s.GetLabels(1), "labels", "l6");
UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 2);
AssertPointEqual(s.GetPoints(0), now, ui64(1337));
@@ -1158,61 +1158,61 @@ Y_UNIT_TEST_SUITE(TJsonTest) {
UNIT_ASSERT_NO_DIFF(result2, NResource::Find("/int_gauge.json"));
}
- Y_UNIT_TEST(InconsistentMetricTypes) {
- auto emitMetrics = [](IMetricEncoder& encoder, const TString& expectedError) {
- encoder.OnMetricBegin(EMetricType::GAUGE);
- {
- encoder.OnLabelsBegin();
- encoder.OnLabel("name", "m");
- encoder.OnLabel("l1", "v1");
- encoder.OnLabel("l2", "v2");
- encoder.OnLabelsEnd();
- }
- encoder.OnDouble(now, 1.0);
- encoder.OnMetricEnd();
-
- encoder.OnMetricBegin(EMetricType::COUNTER);
- {
- encoder.OnLabelsBegin();
- encoder.OnLabel("name", "m");
- encoder.OnLabel("l1", "v1");
- encoder.OnLabel("l2", "v2");
- encoder.OnLabelsEnd();
- }
- encoder.OnUint64(now, 1);
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(encoder.OnMetricEnd(),
- yexception,
- expectedError);
- };
-
- {
- TStringStream out;
- auto encoder = BufferedEncoderJson(&out);
-
- encoder->OnStreamBegin();
- encoder->OnLabelsBegin();
- encoder->OnLabel("c", "cv");
- encoder->OnLabelsEnd();
- emitMetrics(*encoder,
- "Time series point type mismatch: expected DOUBLE but found UINT64, "
- "labels '{c=cv, l1=v1, l2=v2, name=m}'");
- }
-
- {
- TStringStream out;
- auto encoder = BufferedEncoderJson(&out);
-
- encoder->OnStreamBegin();
- encoder->OnLabelsBegin();
- encoder->OnLabel("l1", "v100");
- encoder->OnLabelsEnd();
- emitMetrics(*encoder,
- "Time series point type mismatch: expected DOUBLE but found UINT64, "
- "labels '{l1=v1, l2=v2, name=m}'");
- }
- }
-
+ Y_UNIT_TEST(InconsistentMetricTypes) {
+ auto emitMetrics = [](IMetricEncoder& encoder, const TString& expectedError) {
+ encoder.OnMetricBegin(EMetricType::GAUGE);
+ {
+ encoder.OnLabelsBegin();
+ encoder.OnLabel("name", "m");
+ encoder.OnLabel("l1", "v1");
+ encoder.OnLabel("l2", "v2");
+ encoder.OnLabelsEnd();
+ }
+ encoder.OnDouble(now, 1.0);
+ encoder.OnMetricEnd();
+
+ encoder.OnMetricBegin(EMetricType::COUNTER);
+ {
+ encoder.OnLabelsBegin();
+ encoder.OnLabel("name", "m");
+ encoder.OnLabel("l1", "v1");
+ encoder.OnLabel("l2", "v2");
+ encoder.OnLabelsEnd();
+ }
+ encoder.OnUint64(now, 1);
+
+ UNIT_ASSERT_EXCEPTION_CONTAINS(encoder.OnMetricEnd(),
+ yexception,
+ expectedError);
+ };
+
+ {
+ TStringStream out;
+ auto encoder = BufferedEncoderJson(&out);
+
+ encoder->OnStreamBegin();
+ encoder->OnLabelsBegin();
+ encoder->OnLabel("c", "cv");
+ encoder->OnLabelsEnd();
+ emitMetrics(*encoder,
+ "Time series point type mismatch: expected DOUBLE but found UINT64, "
+ "labels '{c=cv, l1=v1, l2=v2, name=m}'");
+ }
+
+ {
+ TStringStream out;
+ auto encoder = BufferedEncoderJson(&out);
+
+ encoder->OnStreamBegin();
+ encoder->OnLabelsBegin();
+ encoder->OnLabel("l1", "v100");
+ encoder->OnLabelsEnd();
+ emitMetrics(*encoder,
+ "Time series point type mismatch: expected DOUBLE but found UINT64, "
+ "labels '{l1=v1, l2=v2, name=m}'");
+ }
+ }
+
Y_UNIT_TEST(IntGaugeDecode) {
NProto::TMultiSamplesList samples;
{
diff --git a/library/cpp/monlib/encode/json/ut/expected.json b/library/cpp/monlib/encode/json/ut/expected.json
index ead853455b..30c405b0bd 100644
--- a/library/cpp/monlib/encode/json/ut/expected.json
+++ b/library/cpp/monlib/encode/json/ut/expected.json
@@ -11,7 +11,7 @@
"labels":
{
"metric":"single",
- "labels":"l1"
+ "labels":"l1"
},
"ts":1509843723,
"value":17
@@ -21,7 +21,7 @@
"labels":
{
"metric":"single",
- "labels":"l2"
+ "labels":"l2"
},
"ts":1509843723,
"value":17
@@ -31,27 +31,27 @@
"labels":
{
"metric":"single",
- "labels":"l3"
+ "labels":"l3"
},
"ts":1509843723,
"value":3.14
},
{
- "kind":"IGAUGE",
- "labels":
- {
- "metric":"single_igauge",
- "labels":"l4"
- },
- "ts":1509843723,
- "value":42
- },
- {
+ "kind":"IGAUGE",
+ "labels":
+ {
+ "metric":"single_igauge",
+ "labels":"l4"
+ },
+ "ts":1509843723,
+ "value":42
+ },
+ {
"kind":"GAUGE",
"labels":
{
"metric":"multiple",
- "labels":"l5"
+ "labels":"l5"
},
"timeseries":
[
@@ -85,7 +85,7 @@
"labels":
{
"metric":"multiple",
- "labels":"l6"
+ "labels":"l6"
}
}
]
diff --git a/library/cpp/monlib/encode/json/ut/expected_buffered.json b/library/cpp/monlib/encode/json/ut/expected_buffered.json
index 9a6a1d6201..0a33842437 100644
--- a/library/cpp/monlib/encode/json/ut/expected_buffered.json
+++ b/library/cpp/monlib/encode/json/ut/expected_buffered.json
@@ -37,16 +37,16 @@
"value":3.14
},
{
- "kind":"IGAUGE",
- "labels":
- {
+ "kind":"IGAUGE",
+ "labels":
+ {
"labels":"l4",
"metric":"single_igauge"
- },
- "ts":1509843723,
- "value":42
- },
- {
+ },
+ "ts":1509843723,
+ "value":42
+ },
+ {
"kind":"GAUGE",
"labels":
{
@@ -71,11 +71,11 @@
},
{
"kind":"COUNTER",
- "labels":
- {
+ "labels":
+ {
"labels":"l6",
"metric":"multiple"
- },
+ },
"timeseries":
[
{
@@ -86,7 +86,7 @@
"ts":1509843738,
"value":1338
}
- ]
+ ]
}
]
}
diff --git a/library/cpp/monlib/encode/json/ut/expected_cloud.json b/library/cpp/monlib/encode/json/ut/expected_cloud.json
index 6184811579..78e90ec3be 100644
--- a/library/cpp/monlib/encode/json/ut/expected_cloud.json
+++ b/library/cpp/monlib/encode/json/ut/expected_cloud.json
@@ -1,92 +1,92 @@
{
- "ts":"2017-07-14T02:40:00.000000Z",
- "labels":
+ "ts":"2017-07-14T02:40:00.000000Z",
+ "labels":
{
"project":"solomon"
},
- "metrics":
+ "metrics":
[
{
- "type":"COUNTER",
+ "type":"COUNTER",
"labels":
{
- "labels":"l1"
+ "labels":"l1"
},
- "name":"single",
- "ts":"2017-11-05T01:02:03.000000Z",
+ "name":"single",
+ "ts":"2017-11-05T01:02:03.000000Z",
"value":17
},
{
- "type":"RATE",
+ "type":"RATE",
"labels":
{
- "labels":"l2"
+ "labels":"l2"
},
- "name":"single",
- "ts":"2017-11-05T01:02:03.000000Z",
+ "name":"single",
+ "ts":"2017-11-05T01:02:03.000000Z",
"value":17
},
{
- "type":"DGAUGE",
+ "type":"DGAUGE",
"labels":
{
- "labels":"l3"
+ "labels":"l3"
},
- "name":"single",
- "ts":"2017-11-05T01:02:03.000000Z",
+ "name":"single",
+ "ts":"2017-11-05T01:02:03.000000Z",
"value":3.14
},
{
- "type":"IGAUGE",
+ "type":"IGAUGE",
"labels":
{
- "labels":"l4"
+ "labels":"l4"
},
- "name":"single_igauge",
- "ts":"2017-11-05T01:02:03.000000Z",
- "value":42
- },
- {
- "type":"DGAUGE",
- "labels":
- {
- "labels":"l5"
- },
- "name":"multiple",
+ "name":"single_igauge",
+ "ts":"2017-11-05T01:02:03.000000Z",
+ "value":42
+ },
+ {
+ "type":"DGAUGE",
+ "labels":
+ {
+ "labels":"l5"
+ },
+ "name":"multiple",
"timeseries":
[
{
- "ts":"2017-11-05T01:02:03.000000Z",
+ "ts":"2017-11-05T01:02:03.000000Z",
"value":"nan"
},
{
- "ts":"2017-11-05T01:02:18.000000Z",
+ "ts":"2017-11-05T01:02:18.000000Z",
"value":"inf"
},
{
- "ts":"2017-11-05T01:02:33.000000Z",
+ "ts":"2017-11-05T01:02:33.000000Z",
"value":"-inf"
}
]
},
{
- "type":"COUNTER",
+ "type":"COUNTER",
"timeseries":
[
{
- "ts":"2017-11-05T01:02:03.000000Z",
+ "ts":"2017-11-05T01:02:03.000000Z",
"value":1337
},
{
- "ts":"2017-11-05T01:02:18.000000Z",
+ "ts":"2017-11-05T01:02:18.000000Z",
"value":1338
}
],
"labels":
{
- "labels":"l6"
- },
- "name":"multiple"
+ "labels":"l6"
+ },
+ "name":"multiple"
}
]
}
diff --git a/library/cpp/monlib/encode/json/ut/expected_cloud_buffered.json b/library/cpp/monlib/encode/json/ut/expected_cloud_buffered.json
index be237d522b..5b7aeb836e 100644
--- a/library/cpp/monlib/encode/json/ut/expected_cloud_buffered.json
+++ b/library/cpp/monlib/encode/json/ut/expected_cloud_buffered.json
@@ -1,92 +1,92 @@
-{
- "ts":"2017-07-14T02:40:00.000000Z",
- "labels":
- {
- "project":"solomon"
- },
- "metrics":
- [
- {
- "type":"COUNTER",
- "labels":
- {
- "labels":"l1"
- },
- "name":"single",
- "ts":"2017-11-05T01:02:03.000000Z",
- "value":17
- },
- {
- "type":"RATE",
- "labels":
- {
- "labels":"l2"
- },
- "name":"single",
- "ts":"2017-11-05T01:02:03.000000Z",
- "value":17
- },
- {
- "type":"DGAUGE",
- "labels":
- {
- "labels":"l3"
- },
- "name":"single",
- "ts":"2017-11-05T01:02:03.000000Z",
- "value":3.14
- },
- {
- "type":"IGAUGE",
- "labels":
- {
- "labels":"l4"
- },
- "name":"single_igauge",
- "ts":"2017-11-05T01:02:03.000000Z",
- "value":42
- },
- {
- "type":"DGAUGE",
- "labels":
- {
- "labels":"l5"
- },
- "name":"multiple",
- "timeseries":
- [
- {
- "ts":"2017-11-05T01:02:03.000000Z",
- "value":"nan"
- },
- {
- "ts":"2017-11-05T01:02:18.000000Z",
- "value":"inf"
- },
- {
- "ts":"2017-11-05T01:02:33.000000Z",
- "value":"-inf"
- }
- ]
- },
- {
- "type":"COUNTER",
- "labels":
- {
- "labels":"l6"
- },
- "name":"multiple",
- "timeseries":
- [
- {
- "ts":"2017-11-05T01:02:03.000000Z",
- "value":1337
- },
- {
- "ts":"2017-11-05T01:02:18.000000Z",
- "value":1338
- }
- ]
- }
- ]
-}
+{
+ "ts":"2017-07-14T02:40:00.000000Z",
+ "labels":
+ {
+ "project":"solomon"
+ },
+ "metrics":
+ [
+ {
+ "type":"COUNTER",
+ "labels":
+ {
+ "labels":"l1"
+ },
+ "name":"single",
+ "ts":"2017-11-05T01:02:03.000000Z",
+ "value":17
+ },
+ {
+ "type":"RATE",
+ "labels":
+ {
+ "labels":"l2"
+ },
+ "name":"single",
+ "ts":"2017-11-05T01:02:03.000000Z",
+ "value":17
+ },
+ {
+ "type":"DGAUGE",
+ "labels":
+ {
+ "labels":"l3"
+ },
+ "name":"single",
+ "ts":"2017-11-05T01:02:03.000000Z",
+ "value":3.14
+ },
+ {
+ "type":"IGAUGE",
+ "labels":
+ {
+ "labels":"l4"
+ },
+ "name":"single_igauge",
+ "ts":"2017-11-05T01:02:03.000000Z",
+ "value":42
+ },
+ {
+ "type":"DGAUGE",
+ "labels":
+ {
+ "labels":"l5"
+ },
+ "name":"multiple",
+ "timeseries":
+ [
+ {
+ "ts":"2017-11-05T01:02:03.000000Z",
+ "value":"nan"
+ },
+ {
+ "ts":"2017-11-05T01:02:18.000000Z",
+ "value":"inf"
+ },
+ {
+ "ts":"2017-11-05T01:02:33.000000Z",
+ "value":"-inf"
+ }
+ ]
+ },
+ {
+ "type":"COUNTER",
+ "labels":
+ {
+ "labels":"l6"
+ },
+ "name":"multiple",
+ "timeseries":
+ [
+ {
+ "ts":"2017-11-05T01:02:03.000000Z",
+ "value":1337
+ },
+ {
+ "ts":"2017-11-05T01:02:18.000000Z",
+ "value":1338
+ }
+ ]
+ }
+ ]
+}
diff --git a/library/cpp/monlib/encode/json/ut/ya.make b/library/cpp/monlib/encode/json/ut/ya.make
index e50c4f4903..851443ae62 100644
--- a/library/cpp/monlib/encode/json/ut/ya.make
+++ b/library/cpp/monlib/encode/json/ut/ya.make
@@ -15,9 +15,9 @@ RESOURCE(
buffered_ts_merge.json /buffered_ts_merge.json
empty_series.json /empty_series.json
expected.json /expected.json
- expected_buffered.json /expected_buffered.json
- expected_cloud.json /expected_cloud.json
- expected_cloud_buffered.json /expected_cloud_buffered.json
+ expected_buffered.json /expected_buffered.json
+ expected_cloud.json /expected_cloud.json
+ expected_cloud_buffered.json /expected_cloud_buffered.json
merged.json /merged.json
histogram_timeseries.json /histogram_timeseries.json
histogram_value.json /histogram_value.json
diff --git a/library/cpp/monlib/encode/prometheus/prometheus.h b/library/cpp/monlib/encode/prometheus/prometheus.h
index 2e7fa31c28..21248f5fef 100644
--- a/library/cpp/monlib/encode/prometheus/prometheus.h
+++ b/library/cpp/monlib/encode/prometheus/prometheus.h
@@ -11,8 +11,8 @@ namespace NMonitoring {
class TPrometheusDecodeException: public yexception {
};
- IMetricEncoderPtr EncoderPrometheus(IOutputStream* out, TStringBuf metricNameLabel = "sensor");
+ IMetricEncoderPtr EncoderPrometheus(IOutputStream* out, TStringBuf metricNameLabel = "sensor");
- void DecodePrometheus(TStringBuf data, IMetricConsumer* c, TStringBuf metricNameLabel = "sensor");
+ void DecodePrometheus(TStringBuf data, IMetricConsumer* c, TStringBuf metricNameLabel = "sensor");
}
diff --git a/library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp b/library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp
index 7e81357dbd..5dc0bc8033 100644
--- a/library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp
+++ b/library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp
@@ -168,10 +168,10 @@ namespace NMonitoring {
///////////////////////////////////////////////////////////////////////
class TPrometheusReader {
public:
- TPrometheusReader(TStringBuf data, IMetricConsumer* c, TStringBuf metricNameLabel)
+ TPrometheusReader(TStringBuf data, IMetricConsumer* c, TStringBuf metricNameLabel)
: Data_(data)
, Consumer_(c)
- , MetricNameLabel_(metricNameLabel)
+ , MetricNameLabel_(metricNameLabel)
{
}
@@ -516,12 +516,12 @@ namespace NMonitoring {
}
void ConsumeLabels(TStringBuf name, const TLabelsMap& labels) {
- Y_PARSER_ENSURE(labels.count(MetricNameLabel_) == 0,
- "label name '" << MetricNameLabel_ <<
+ Y_PARSER_ENSURE(labels.count(MetricNameLabel_) == 0,
+ "label name '" << MetricNameLabel_ <<
"' is reserved, but is used with metric: " << name << LabelsToStr(labels));
Consumer_->OnLabelsBegin();
- Consumer_->OnLabel(MetricNameLabel_, TString(name)); // TODO: remove this string allocation
+ Consumer_->OnLabel(MetricNameLabel_, TString(name)); // TODO: remove this string allocation
for (const auto& it: labels) {
Consumer_->OnLabel(it.first, it.second);
}
@@ -579,7 +579,7 @@ namespace NMonitoring {
private:
TStringBuf Data_;
IMetricConsumer* Consumer_;
- TStringBuf MetricNameLabel_;
+ TStringBuf MetricNameLabel_;
THashMap<TString, EPrometheusMetricType> SeenTypes_;
THistogramBuilder HistogramBuilder_;
@@ -589,8 +589,8 @@ namespace NMonitoring {
};
} // namespace
-void DecodePrometheus(TStringBuf data, IMetricConsumer* c, TStringBuf metricNameLabel) {
- TPrometheusReader reader(data, c, metricNameLabel);
+void DecodePrometheus(TStringBuf data, IMetricConsumer* c, TStringBuf metricNameLabel) {
+ TPrometheusReader reader(data, c, metricNameLabel);
reader.Read();
}
diff --git a/library/cpp/monlib/encode/prometheus/prometheus_encoder.cpp b/library/cpp/monlib/encode/prometheus/prometheus_encoder.cpp
index 15efeb8c03..c370fd2b6e 100644
--- a/library/cpp/monlib/encode/prometheus/prometheus_encoder.cpp
+++ b/library/cpp/monlib/encode/prometheus/prometheus_encoder.cpp
@@ -249,9 +249,9 @@ namespace NMonitoring {
///////////////////////////////////////////////////////////////////////
class TPrometheusEncoder final: public IMetricEncoder {
public:
- explicit TPrometheusEncoder(IOutputStream* out, TStringBuf metricNameLabel)
+ explicit TPrometheusEncoder(IOutputStream* out, TStringBuf metricNameLabel)
: Writer_(out)
- , MetricNameLabel_(metricNameLabel)
+ , MetricNameLabel_(metricNameLabel)
{
}
@@ -358,10 +358,10 @@ namespace NMonitoring {
MetricState_.Labels.Add(l.Name(), l.Value());
}
- TMaybe<TLabel> nameLabel = MetricState_.Labels.Extract(MetricNameLabel_);
+ TMaybe<TLabel> nameLabel = MetricState_.Labels.Extract(MetricNameLabel_);
Y_ENSURE(nameLabel,
"labels " << MetricState_.Labels <<
- " does not contain label '" << MetricNameLabel_ << '\'');
+ " does not contain label '" << MetricNameLabel_ << '\'');
const TString& metricName = ToString(nameLabel->Value());
if (MetricState_.Type != EMetricType::DSUMMARY) {
@@ -399,15 +399,15 @@ namespace NMonitoring {
private:
TEncoderState State_;
TPrometheusWriter Writer_;
- TString MetricNameLabel_;
+ TString MetricNameLabel_;
TInstant CommonTime_ = TInstant::Zero();
TLabels CommonLabels_;
TMetricState MetricState_;
};
}
- IMetricEncoderPtr EncoderPrometheus(IOutputStream* out, TStringBuf metricNameLabel) {
- return MakeHolder<TPrometheusEncoder>(out, metricNameLabel);
+ IMetricEncoderPtr EncoderPrometheus(IOutputStream* out, TStringBuf metricNameLabel) {
+ return MakeHolder<TPrometheusEncoder>(out, metricNameLabel);
}
} // namespace NMonitoring
diff --git a/library/cpp/monlib/encode/spack/spack_v1.h b/library/cpp/monlib/encode/spack/spack_v1.h
index cf1c9417b9..e962d21467 100644
--- a/library/cpp/monlib/encode/spack/spack_v1.h
+++ b/library/cpp/monlib/encode/spack/spack_v1.h
@@ -78,7 +78,7 @@ namespace NMonitoring {
///////////////////////////////////////////////////////////////////////////////
struct Y_PACKED TSpackHeader {
ui16 Magic = 0x5053; // "SP"
- ui16 Version; // MSB - major version, LSB - minor version
+ ui16 Version; // MSB - major version, LSB - minor version
ui16 HeaderSize = sizeof(TSpackHeader);
ui8 TimePrecision;
ui8 Compression;
@@ -89,12 +89,12 @@ namespace NMonitoring {
// add new fields here
};
- enum ESpackV1Version: ui16 {
- SV1_00 = 0x0100,
- SV1_01 = 0x0101,
- SV1_02 = 0x0102
- };
-
+ enum ESpackV1Version: ui16 {
+ SV1_00 = 0x0100,
+ SV1_01 = 0x0101,
+ SV1_02 = 0x0102
+ };
+
IMetricEncoderPtr EncoderSpackV1(
IOutputStream* out,
ETimePrecision timePrecision,
@@ -102,14 +102,14 @@ namespace NMonitoring {
EMetricsMergingMode mergingMode = EMetricsMergingMode::DEFAULT
);
- IMetricEncoderPtr EncoderSpackV12(
- IOutputStream* out,
- ETimePrecision timePrecision,
- ECompression compression,
- EMetricsMergingMode mergingMode = EMetricsMergingMode::DEFAULT,
- TStringBuf metricNameLabel = "name"
- );
-
- void DecodeSpackV1(IInputStream* in, IMetricConsumer* c, TStringBuf metricNameLabel = "name");
+ IMetricEncoderPtr EncoderSpackV12(
+ IOutputStream* out,
+ ETimePrecision timePrecision,
+ ECompression compression,
+ EMetricsMergingMode mergingMode = EMetricsMergingMode::DEFAULT,
+ TStringBuf metricNameLabel = "name"
+ );
+ void DecodeSpackV1(IInputStream* in, IMetricConsumer* c, TStringBuf metricNameLabel = "name");
+
}
diff --git a/library/cpp/monlib/encode/spack/spack_v1_decoder.cpp b/library/cpp/monlib/encode/spack/spack_v1_decoder.cpp
index 1f445fc80d..330e81a7a2 100644
--- a/library/cpp/monlib/encode/spack/spack_v1_decoder.cpp
+++ b/library/cpp/monlib/encode/spack/spack_v1_decoder.cpp
@@ -27,9 +27,9 @@ namespace NMonitoring {
///////////////////////////////////////////////////////////////////////
class TDecoderSpackV1 {
public:
- TDecoderSpackV1(IInputStream* in, TStringBuf metricNameLabel)
+ TDecoderSpackV1(IInputStream* in, TStringBuf metricNameLabel)
: In_(in)
- , MetricNameLabel_(metricNameLabel)
+ , MetricNameLabel_(metricNameLabel)
{
}
@@ -83,9 +83,9 @@ namespace NMonitoring {
// (4) read common labels
if (ui32 commonLabelsCount = ReadVarint()) {
- c->OnLabelsBegin();
+ c->OnLabelsBegin();
ReadLabels(labelNames, labelValues, commonLabelsCount, c);
- c->OnLabelsEnd();
+ c->OnLabelsEnd();
}
// (5) read metrics
@@ -110,20 +110,20 @@ namespace NMonitoring {
// TODO: use it
ReadFixed<ui8>(); // skip flags byte
- auto metricNameValueIndex = std::numeric_limits<ui32>::max();
- if (Header_.Version >= SV1_02) {
- metricNameValueIndex = ReadVarint();
- }
-
+ auto metricNameValueIndex = std::numeric_limits<ui32>::max();
+ if (Header_.Version >= SV1_02) {
+ metricNameValueIndex = ReadVarint();
+ }
+
// (5.2) labels
ui32 labelsCount = ReadVarint();
- DECODE_ENSURE(Header_.Version >= SV1_02 || labelsCount > 0, "metric #" << i << " has no labels");
- c->OnLabelsBegin();
- if (Header_.Version >= SV1_02) {
- c->OnLabel(MetricNameLabel_, labelValues.Get(metricNameValueIndex));
- }
+ DECODE_ENSURE(Header_.Version >= SV1_02 || labelsCount > 0, "metric #" << i << " has no labels");
+ c->OnLabelsBegin();
+ if (Header_.Version >= SV1_02) {
+ c->OnLabel(MetricNameLabel_, labelValues.Get(metricNameValueIndex));
+ }
ReadLabels(labelNames, labelValues, labelsCount, c);
- c->OnLabelsEnd();
+ c->OnLabelsEnd();
// (5.3) values
switch (valueType) {
@@ -214,7 +214,7 @@ namespace NMonitoring {
ui32 bucketsCount = ReadVarint();
auto s = TExplicitHistogramSnapshot::New(bucketsCount);
- if (SV1_00 == Header_.Version) { // v1.0
+ if (SV1_00 == Header_.Version) { // v1.0
for (ui32 i = 0; i < bucketsCount; i++) {
i64 bound = ReadFixed<i64>();
double doubleBound = (bound != Max<i64>())
@@ -275,7 +275,7 @@ namespace NMonitoring {
private:
IInputStream* In_;
- TString MetricNameLabel_;
+ TString MetricNameLabel_;
ETimePrecision TimePrecision_;
TSpackHeader Header_;
}; // class TDecoderSpackV1
@@ -450,8 +450,8 @@ namespace NMonitoring {
}
}
- void DecodeSpackV1(IInputStream* in, IMetricConsumer* c, TStringBuf metricNameLabel) {
- TDecoderSpackV1 decoder(in, metricNameLabel);
+ void DecodeSpackV1(IInputStream* in, IMetricConsumer* c, TStringBuf metricNameLabel) {
+ TDecoderSpackV1 decoder(in, metricNameLabel);
decoder.Decode(c);
}
diff --git a/library/cpp/monlib/encode/spack/spack_v1_encoder.cpp b/library/cpp/monlib/encode/spack/spack_v1_encoder.cpp
index a2b0bb5f50..3e7a2fc7ea 100644
--- a/library/cpp/monlib/encode/spack/spack_v1_encoder.cpp
+++ b/library/cpp/monlib/encode/spack/spack_v1_encoder.cpp
@@ -23,15 +23,15 @@ namespace NMonitoring {
IOutputStream* out,
ETimePrecision timePrecision,
ECompression compression,
- EMetricsMergingMode mergingMode,
- ESpackV1Version version,
- TStringBuf metricNameLabel
+ EMetricsMergingMode mergingMode,
+ ESpackV1Version version,
+ TStringBuf metricNameLabel
)
: Out_(out)
, TimePrecision_(timePrecision)
, Compression_(compression)
- , Version_(version)
- , MetricName_(Version_ >= SV1_02 ? LabelNamesPool_.PutIfAbsent(metricNameLabel) : nullptr)
+ , Version_(version)
+ , MetricName_(Version_ >= SV1_02 ? LabelNamesPool_.PutIfAbsent(metricNameLabel) : nullptr)
{
MetricsMergingMode_ = mergingMode;
@@ -89,7 +89,7 @@ namespace NMonitoring {
// (1) write header
TSpackHeader header;
- header.Version = Version_;
+ header.Version = Version_;
header.TimePrecision = EncodeTimePrecision(TimePrecision_);
header.Compression = EncodeCompression(Compression_);
header.LabelNamesSize = static_cast<ui32>(
@@ -119,7 +119,7 @@ namespace NMonitoring {
WriteTime(CommonTime_);
// (4) write common labels' indexes
- WriteLabels(CommonLabels_, nullptr);
+ WriteLabels(CommonLabels_, nullptr);
// (5) write metrics
// metrics count already written in header
@@ -132,19 +132,19 @@ namespace NMonitoring {
ui8 flagsByte = 0x00;
Out_->Write(&flagsByte, sizeof(flagsByte));
- // v1.2 format addition — metric name
- if (Version_ >= SV1_02) {
- const auto it = FindIf(metric.Labels, [&](const auto& l) {
- return l.Key == MetricName_;
- });
- Y_ENSURE(it != metric.Labels.end(),
- "metric name label '" << LabelNamesPool_.Get(MetricName_->Index) << "' not found, "
- << "all metric labels '" << FormatLabels(metric.Labels) << "'");
- WriteVarUInt32(Out_, it->Value->Index);
- }
-
+ // v1.2 format addition — metric name
+ if (Version_ >= SV1_02) {
+ const auto it = FindIf(metric.Labels, [&](const auto& l) {
+ return l.Key == MetricName_;
+ });
+ Y_ENSURE(it != metric.Labels.end(),
+ "metric name label '" << LabelNamesPool_.Get(MetricName_->Index) << "' not found, "
+ << "all metric labels '" << FormatLabels(metric.Labels) << "'");
+ WriteVarUInt32(Out_, it->Value->Index);
+ }
+
// (5.2) labels
- WriteLabels(metric.Labels, MetricName_);
+ WriteLabels(metric.Labels, MetricName_);
// (5.3) values
switch (metric.TimeSeries.Size()) {
@@ -190,12 +190,12 @@ namespace NMonitoring {
return (static_cast<ui8>(metric.MetricType) << 2) | static_cast<ui8>(valueType);
}
- void WriteLabels(const TPooledLabels& labels, const TPooledStr* skipKey) {
- WriteVarUInt32(Out_, static_cast<ui32>(skipKey ? labels.size() - 1 : labels.size()));
+ void WriteLabels(const TPooledLabels& labels, const TPooledStr* skipKey) {
+ WriteVarUInt32(Out_, static_cast<ui32>(skipKey ? labels.size() - 1 : labels.size()));
for (auto&& label : labels) {
- if (label.Key == skipKey) {
- continue;
- }
+ if (label.Key == skipKey) {
+ continue;
+ }
WriteVarUInt32(Out_, label.Key->Index);
WriteVarUInt32(Out_, label.Value->Index);
}
@@ -289,8 +289,8 @@ namespace NMonitoring {
IOutputStream* Out_;
ETimePrecision TimePrecision_;
ECompression Compression_;
- ESpackV1Version Version_;
- const TPooledStr* MetricName_;
+ ESpackV1Version Version_;
+ const TPooledStr* MetricName_;
bool Closed_ = false;
};
@@ -302,17 +302,17 @@ namespace NMonitoring {
ECompression compression,
EMetricsMergingMode mergingMode
) {
- return MakeHolder<TEncoderSpackV1>(out, timePrecision, compression, mergingMode, SV1_01, "");
+ return MakeHolder<TEncoderSpackV1>(out, timePrecision, compression, mergingMode, SV1_01, "");
}
- IMetricEncoderPtr EncoderSpackV12(
- IOutputStream* out,
- ETimePrecision timePrecision,
- ECompression compression,
- EMetricsMergingMode mergingMode,
- TStringBuf metricNameLabel
- ) {
- Y_ENSURE(!metricNameLabel.Empty(), "metricNameLabel can't be empty");
- return MakeHolder<TEncoderSpackV1>(out, timePrecision, compression, mergingMode, SV1_02, metricNameLabel);
- }
+ IMetricEncoderPtr EncoderSpackV12(
+ IOutputStream* out,
+ ETimePrecision timePrecision,
+ ECompression compression,
+ EMetricsMergingMode mergingMode,
+ TStringBuf metricNameLabel
+ ) {
+ Y_ENSURE(!metricNameLabel.Empty(), "metricNameLabel can't be empty");
+ return MakeHolder<TEncoderSpackV1>(out, timePrecision, compression, mergingMode, SV1_02, metricNameLabel);
+ }
}
diff --git a/library/cpp/monlib/encode/spack/spack_v1_ut.cpp b/library/cpp/monlib/encode/spack/spack_v1_ut.cpp
index fe778eb7e0..c6748cb0f5 100644
--- a/library/cpp/monlib/encode/spack/spack_v1_ut.cpp
+++ b/library/cpp/monlib/encode/spack/spack_v1_ut.cpp
@@ -468,7 +468,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
IMetricEncoderPtr e = EncoderProtobuf(&samples);
TBuffer data(expectedSize);
- if (SV1_00 == version) { // v1.0
+ if (SV1_00 == version) { // v1.0
data.Append(reinterpret_cast<char*>(expectedHeader_v1_0), Y_ARRAY_SIZE(expectedHeader_v1_0));
} else {
data.Append(reinterpret_cast<char*>(expectedHeader), Y_ARRAY_SIZE(expectedHeader));
@@ -480,7 +480,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
data.Append(reinterpret_cast<char*>(expectedMetric2), Y_ARRAY_SIZE(expectedMetric2));
data.Append(reinterpret_cast<char*>(expectedMetric3), Y_ARRAY_SIZE(expectedMetric3));
data.Append(reinterpret_cast<char*>(expectedMetric4), Y_ARRAY_SIZE(expectedMetric4));
- if (SV1_00 == version) { // v1.0
+ if (SV1_00 == version) { // v1.0
data.Append(reinterpret_cast<char*>(expectedMetric5_v1_0), Y_ARRAY_SIZE(expectedMetric5_v1_0));
} else {
data.Append(reinterpret_cast<char*>(expectedMetric5), Y_ARRAY_SIZE(expectedMetric5));
@@ -494,7 +494,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
void DecodeDataToSamples(NProto::TMultiSamplesList & samples) {
TSpackHeader header;
- header.Version = SV1_01;
+ header.Version = SV1_01;
DecodeDataToSamples(samples, header.Version);
}
@@ -689,7 +689,7 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
// Check that histogram bounds decoded from different versions are the same
NProto::TMultiSamplesList samples, samples_v1_0;
DecodeDataToSamples(samples);
- DecodeDataToSamples(samples_v1_0, /*version = */ SV1_00);
+ DecodeDataToSamples(samples_v1_0, /*version = */ SV1_00);
const NProto::THistogram& pointHistogram = samples.GetSamples(4).GetPoints(0).GetHistogram();
const NProto::THistogram& pointHistogram_v1_0 = samples_v1_0.GetSamples(4).GetPoints(0).GetHistogram();
@@ -698,148 +698,148 @@ Y_UNIT_TEST_SUITE(TSpackTest) {
UNIT_ASSERT_DOUBLES_EQUAL(pointHistogram.GetBounds(i), pointHistogram_v1_0.GetBounds(i), Min<double>());
}
}
-
- Y_UNIT_TEST(SimpleV12) {
- ui8 expectedSerialized[] = {
- // header
- 0x53, 0x50, // magic "SP" (fixed ui16)
- // minor, major
- 0x02, 0x01, // version (fixed ui16)
- 0x18, 0x00, // header size (fixed ui16)
- 0x00, // time precision (fixed ui8)
- 0x00, // compression algorithm (fixed ui8)
- 0x0A, 0x00, 0x00, 0x00, // label names size (fixed ui32)
- 0x14, 0x00, 0x00, 0x00, // labels values size (fixed ui32)
- 0x01, 0x00, 0x00, 0x00, // metric count (fixed ui32)
- 0x01, 0x00, 0x00, 0x00, // points count (fixed ui32)
-
- // string pools
- 0x73, 0x00, // "s\0"
- 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x00, // "project\0"
- 0x73, 0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x00, // "solomon\0"
- 0x74, 0x65, 0x6D, 0x70, 0x65, 0x72, 0x61, 0x74, // temperature
- 0x75, 0x72, 0x65, 0x00,
-
- // common time
- 0x00, 0x2f, 0x68, 0x59, // common time in seconds (fixed ui32)
-
- // common labels
- 0x00, // common labels count (varint)
-
- // metric
- 0x09, // types (COUNTER | ONE_WITHOUT_TS) (fixed ui8)
- 0x00, // flags (fixed ui8)
- 0x01, // name index (varint)
- 0x01, // metric labels count (varint)
- 0x01, // 'project' label name index (varint)
- 0x00, // 'project' label value index (varint)
- 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // value (fixed ui64)
- };
-
- // encode
- {
- TBuffer actualSerialized;
- {
- TBufferOutput out(actualSerialized);
- auto e = EncoderSpackV12(
- &out,
- ETimePrecision::SECONDS,
- ECompression::IDENTITY,
- EMetricsMergingMode::DEFAULT,
- "s");
-
- e->OnStreamBegin();
- e->OnCommonTime(TInstant::Seconds(1500000000));
-
- {
- e->OnMetricBegin(EMetricType::COUNTER);
- {
- e->OnLabelsBegin();
- e->OnLabel("project", "solomon");
- e->OnLabel("s", "temperature");
- e->OnLabelsEnd();
- }
- // Only the last value will be encoded
- e->OnUint64(TInstant::Zero(), 10);
- e->OnUint64(TInstant::Zero(), 13);
- e->OnUint64(TInstant::Zero(), 17);
- e->OnMetricEnd();
- }
-
- e->OnStreamEnd();
- e->Close();
- }
-
- UNIT_ASSERT_VALUES_EQUAL(actualSerialized.Size(), Y_ARRAY_SIZE(expectedSerialized));
- UNIT_ASSERT_BINARY_EQUALS(actualSerialized.Data(), expectedSerialized);
- }
-
- // decode
- {
- NProto::TMultiSamplesList samples;
- {
- auto input = TMemoryInput(expectedSerialized, Y_ARRAY_SIZE(expectedSerialized));
- auto encoder = EncoderProtobuf(&samples);
- DecodeSpackV1(&input, encoder.Get(), "s");
- }
-
- UNIT_ASSERT_VALUES_EQUAL(TInstant::MilliSeconds(samples.GetCommonTime()),
- TInstant::Seconds(1500000000));
-
- UNIT_ASSERT_VALUES_EQUAL(samples.CommonLabelsSize(), 0);
-
- UNIT_ASSERT_VALUES_EQUAL(samples.SamplesSize(), 1);
- {
- const auto& s = samples.GetSamples(0);
- UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::COUNTER);
- UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
- AssertLabelEqual(s.GetLabels(0), "s", "temperature");
- AssertLabelEqual(s.GetLabels(1), "project", "solomon");
-
- UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 1);
- AssertPointEqual(s.GetPoints(0), TInstant::Zero(), ui64(17));
- }
- }
- }
-
- Y_UNIT_TEST(V12MissingNameForOneMetric) {
- TBuffer b;
- TBufferOutput out(b);
- auto e = EncoderSpackV12(
- &out,
- ETimePrecision::SECONDS,
- ECompression::IDENTITY,
- EMetricsMergingMode::DEFAULT,
- "s");
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- [&]() {
- e->OnStreamBegin();
- {
- e->OnMetricBegin(EMetricType::COUNTER);
- {
- e->OnLabelsBegin();
- e->OnLabel("s", "s1");
- e->OnLabelsEnd();
- }
- e->OnUint64(TInstant::Zero(), 1);
- e->OnMetricEnd();
-
- e->OnMetricBegin(EMetricType::COUNTER);
- {
- e->OnLabelsBegin();
+
+ Y_UNIT_TEST(SimpleV12) {
+ ui8 expectedSerialized[] = {
+ // header
+ 0x53, 0x50, // magic "SP" (fixed ui16)
+ // minor, major
+ 0x02, 0x01, // version (fixed ui16)
+ 0x18, 0x00, // header size (fixed ui16)
+ 0x00, // time precision (fixed ui8)
+ 0x00, // compression algorithm (fixed ui8)
+ 0x0A, 0x00, 0x00, 0x00, // label names size (fixed ui32)
+ 0x14, 0x00, 0x00, 0x00, // labels values size (fixed ui32)
+ 0x01, 0x00, 0x00, 0x00, // metric count (fixed ui32)
+ 0x01, 0x00, 0x00, 0x00, // points count (fixed ui32)
+
+ // string pools
+ 0x73, 0x00, // "s\0"
+ 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x00, // "project\0"
+ 0x73, 0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x00, // "solomon\0"
+ 0x74, 0x65, 0x6D, 0x70, 0x65, 0x72, 0x61, 0x74, // temperature
+ 0x75, 0x72, 0x65, 0x00,
+
+ // common time
+ 0x00, 0x2f, 0x68, 0x59, // common time in seconds (fixed ui32)
+
+ // common labels
+ 0x00, // common labels count (varint)
+
+ // metric
+ 0x09, // types (COUNTER | ONE_WITHOUT_TS) (fixed ui8)
+ 0x00, // flags (fixed ui8)
+ 0x01, // name index (varint)
+ 0x01, // metric labels count (varint)
+ 0x01, // 'project' label name index (varint)
+ 0x00, // 'project' label value index (varint)
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // value (fixed ui64)
+ };
+
+ // encode
+ {
+ TBuffer actualSerialized;
+ {
+ TBufferOutput out(actualSerialized);
+ auto e = EncoderSpackV12(
+ &out,
+ ETimePrecision::SECONDS,
+ ECompression::IDENTITY,
+ EMetricsMergingMode::DEFAULT,
+ "s");
+
+ e->OnStreamBegin();
+ e->OnCommonTime(TInstant::Seconds(1500000000));
+
+ {
+ e->OnMetricBegin(EMetricType::COUNTER);
+ {
+ e->OnLabelsBegin();
e->OnLabel("project", "solomon");
- e->OnLabel("m", "v");
- e->OnLabelsEnd();
- }
- e->OnUint64(TInstant::Zero(), 2);
- e->OnMetricEnd();
- }
-
- e->OnStreamEnd();
- e->Close();
- }(),
- yexception,
- "metric name label 's' not found, all metric labels '{m=v, project=solomon}'");
- }
+ e->OnLabel("s", "temperature");
+ e->OnLabelsEnd();
+ }
+ // Only the last value will be encoded
+ e->OnUint64(TInstant::Zero(), 10);
+ e->OnUint64(TInstant::Zero(), 13);
+ e->OnUint64(TInstant::Zero(), 17);
+ e->OnMetricEnd();
+ }
+
+ e->OnStreamEnd();
+ e->Close();
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(actualSerialized.Size(), Y_ARRAY_SIZE(expectedSerialized));
+ UNIT_ASSERT_BINARY_EQUALS(actualSerialized.Data(), expectedSerialized);
+ }
+
+ // decode
+ {
+ NProto::TMultiSamplesList samples;
+ {
+ auto input = TMemoryInput(expectedSerialized, Y_ARRAY_SIZE(expectedSerialized));
+ auto encoder = EncoderProtobuf(&samples);
+ DecodeSpackV1(&input, encoder.Get(), "s");
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(TInstant::MilliSeconds(samples.GetCommonTime()),
+ TInstant::Seconds(1500000000));
+
+ UNIT_ASSERT_VALUES_EQUAL(samples.CommonLabelsSize(), 0);
+
+ UNIT_ASSERT_VALUES_EQUAL(samples.SamplesSize(), 1);
+ {
+ const auto& s = samples.GetSamples(0);
+ UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::COUNTER);
+ UNIT_ASSERT_VALUES_EQUAL(s.LabelsSize(), 2);
+ AssertLabelEqual(s.GetLabels(0), "s", "temperature");
+ AssertLabelEqual(s.GetLabels(1), "project", "solomon");
+
+ UNIT_ASSERT_VALUES_EQUAL(s.PointsSize(), 1);
+ AssertPointEqual(s.GetPoints(0), TInstant::Zero(), ui64(17));
+ }
+ }
+ }
+
+ Y_UNIT_TEST(V12MissingNameForOneMetric) {
+ TBuffer b;
+ TBufferOutput out(b);
+ auto e = EncoderSpackV12(
+ &out,
+ ETimePrecision::SECONDS,
+ ECompression::IDENTITY,
+ EMetricsMergingMode::DEFAULT,
+ "s");
+
+ UNIT_ASSERT_EXCEPTION_CONTAINS(
+ [&]() {
+ e->OnStreamBegin();
+ {
+ e->OnMetricBegin(EMetricType::COUNTER);
+ {
+ e->OnLabelsBegin();
+ e->OnLabel("s", "s1");
+ e->OnLabelsEnd();
+ }
+ e->OnUint64(TInstant::Zero(), 1);
+ e->OnMetricEnd();
+
+ e->OnMetricBegin(EMetricType::COUNTER);
+ {
+ e->OnLabelsBegin();
+ e->OnLabel("project", "solomon");
+ e->OnLabel("m", "v");
+ e->OnLabelsEnd();
+ }
+ e->OnUint64(TInstant::Zero(), 2);
+ e->OnMetricEnd();
+ }
+
+ e->OnStreamEnd();
+ e->Close();
+ }(),
+ yexception,
+ "metric name label 's' not found, all metric labels '{m=v, project=solomon}'");
+ }
}
diff --git a/library/cpp/monlib/metrics/metric_value.h b/library/cpp/monlib/metrics/metric_value.h
index 607fcc8602..5f235e7a0b 100644
--- a/library/cpp/monlib/metrics/metric_value.h
+++ b/library/cpp/monlib/metrics/metric_value.h
@@ -384,35 +384,35 @@ namespace NMonitoring {
template <typename T>
void Add(TInstant time, T value) {
- Add(TPoint(time, value), TValueType<T>::Type);
- }
-
- void Add(TPoint point, EMetricValueType valueType) {
+ Add(TPoint(time, value), TValueType<T>::Type);
+ }
+
+ void Add(TPoint point, EMetricValueType valueType) {
if (Empty()) {
- ValueType_ = valueType;
+ ValueType_ = valueType;
} else {
- CheckTypes(ValueType_, valueType);
+ CheckTypes(ValueType_, valueType);
}
- Points_.push_back(point);
+ Points_.push_back(point);
if (ValueType_ == EMetricValueType::SUMMARY) {
- TPoint& p = Points_.back();
- p.GetValue().AsSummaryDouble()->Ref();
+ TPoint& p = Points_.back();
+ p.GetValue().AsSummaryDouble()->Ref();
} else if (ValueType_ == EMetricValueType::HISTOGRAM) {
- TPoint& p = Points_.back();
- p.GetValue().AsHistogram()->Ref();
+ TPoint& p = Points_.back();
+ p.GetValue().AsHistogram()->Ref();
} else if (ValueType_ == EMetricValueType::LOGHISTOGRAM) {
- TPoint& p = Points_.back();
- p.GetValue().AsLogHistogram()->Ref();
+ TPoint& p = Points_.back();
+ p.GetValue().AsLogHistogram()->Ref();
}
}
void CopyFrom(const TMetricTimeSeries& other) {
- if (Empty()) {
- ValueType_ = other.ValueType_;
- } else {
- CheckTypes(GetValueType(), other.GetValueType());
- }
+ if (Empty()) {
+ ValueType_ = other.ValueType_;
+ } else {
+ CheckTypes(GetValueType(), other.GetValueType());
+ }
size_t prevSize = Points_.size();
Copy(std::begin(other.Points_), std::end(other.Points_),
diff --git a/library/cpp/testing/benchmark/bench.h b/library/cpp/testing/benchmark/bench.h
index 21551ad0dd..4225a31fd3 100644
--- a/library/cpp/testing/benchmark/bench.h
+++ b/library/cpp/testing/benchmark/bench.h
@@ -1,9 +1,9 @@
#pragma once
-#include <util/system/compiler.h>
+#include <util/system/compiler.h>
#include <util/system/types.h>
-#include <utility>
+#include <utility>
namespace NBench {
namespace NCpu {
@@ -71,14 +71,14 @@ namespace NBench {
}
#endif
- /**
- * Use this function to prevent unused variables elimination.
- *
- * @param Unused variable (e.g. return value of benchmarked function).
- */
+ /**
+ * Use this function to prevent unused variables elimination.
+ *
+ * @param Unused variable (e.g. return value of benchmarked function).
+ */
template <typename T>
Y_FORCE_INLINE void DoNotOptimize(T&& datum) {
- ::DoNotOptimizeAway(std::forward<T>(datum));
+ ::DoNotOptimizeAway(std::forward<T>(datum));
}
int Main(int argc, char** argv);