diff options
| author | alexnadtochiy <[email protected]> | 2025-12-12 16:20:28 +0300 |
|---|---|---|
| committer | alexnadtochiy <[email protected]> | 2025-12-12 17:14:17 +0300 |
| commit | 3d4e0b44c9bb86ca521b20e125f1625846670605 (patch) | |
| tree | 49b05c34297cdf350c57a9f37c516ca5a9527021 /library/cpp/monlib/encode | |
| parent | 0f01c3cec912301670d5791b06740e6234d192e5 (diff) | |
Fix prometheus nan parsing
commit_hash:ea34eba995ae4c386785fe89df58c439a2e3ea63
Diffstat (limited to 'library/cpp/monlib/encode')
| -rw-r--r-- | library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp | 2 | ||||
| -rw-r--r-- | library/cpp/monlib/encode/prometheus/prometheus_decoder_ut.cpp | 25 |
2 files changed, 23 insertions, 4 deletions
diff --git a/library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp b/library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp index 16a08f47819..5ccc854cab2 100644 --- a/library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp +++ b/library/cpp/monlib/encode/prometheus/prometheus_decoder.cpp @@ -576,7 +576,7 @@ namespace NMonitoring { return std::numeric_limits<double>::infinity(); } else if (str == TStringBuf("-Inf")) { return -std::numeric_limits<double>::infinity(); - } else if (str == TStringBuf("NaN")) { + } else if (str == TStringBuf("NaN") || str == TStringBuf("Nan")) { return NAN; } diff --git a/library/cpp/monlib/encode/prometheus/prometheus_decoder_ut.cpp b/library/cpp/monlib/encode/prometheus/prometheus_decoder_ut.cpp index 72e13a39dda..4dbb4b574bb 100644 --- a/library/cpp/monlib/encode/prometheus/prometheus_decoder_ut.cpp +++ b/library/cpp/monlib/encode/prometheus/prometheus_decoder_ut.cpp @@ -111,12 +111,13 @@ Y_UNIT_TEST_SUITE(TPrometheusDecoderTest) { "#\n" "# TYPE name counter\n" "name{labelname=\"val1\",basename=\"basevalue\"} NaN\n" - "name {labelname=\"val2\",basename=\"basevalue\"} 2.3 1234567890\n" + "name{labelname=\"val2\",basename=\"basevalue\"} Nan\n" + "name {labelname=\"val3\",basename=\"basevalue\"} 2.3 1234567890\n" "# HELP name two-line\\n doc str\\\\ing\n"; { auto samples = Decode(inputMetrics); - UNIT_ASSERT_EQUAL(samples.SamplesSize(), 2); + UNIT_ASSERT_EQUAL(samples.SamplesSize(), 3); { auto& s = samples.GetSamples(0); @@ -134,6 +135,15 @@ Y_UNIT_TEST_SUITE(TPrometheusDecoderTest) { ASSERT_LABEL_EQUAL(s.GetLabels(0), "sensor", "name"); ASSERT_LABEL_EQUAL(s.GetLabels(1), "basename", "basevalue"); ASSERT_LABEL_EQUAL(s.GetLabels(2), "labelname", "val2"); + ASSERT_UINT_POINT(s, TInstant::Zero(), ui64(0)); + } + { + auto& s = samples.GetSamples(2); + UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::EMetricType::RATE); + UNIT_ASSERT_EQUAL(s.LabelsSize(), 3); + ASSERT_LABEL_EQUAL(s.GetLabels(0), "sensor", "name"); + ASSERT_LABEL_EQUAL(s.GetLabels(1), "basename", "basevalue"); + ASSERT_LABEL_EQUAL(s.GetLabels(2), "labelname", "val3"); ASSERT_UINT_POINT(s, TInstant::MilliSeconds(1234567890), i64(2)); } } @@ -141,7 +151,7 @@ Y_UNIT_TEST_SUITE(TPrometheusDecoderTest) { TPrometheusDecodeSettings settings; settings.Mode = EPrometheusDecodeMode::RAW; auto samples = Decode(inputMetrics, settings); - UNIT_ASSERT_EQUAL(samples.SamplesSize(), 2); + UNIT_ASSERT_EQUAL(samples.SamplesSize(), 3); { auto& s = samples.GetSamples(0); @@ -159,6 +169,15 @@ Y_UNIT_TEST_SUITE(TPrometheusDecoderTest) { ASSERT_LABEL_EQUAL(s.GetLabels(0), "sensor", "name"); ASSERT_LABEL_EQUAL(s.GetLabels(1), "basename", "basevalue"); ASSERT_LABEL_EQUAL(s.GetLabels(2), "labelname", "val2"); + ASSERT_DOUBLE_POINT(s, TInstant::MilliSeconds(0), NAN); + } + { + auto& s = samples.GetSamples(2); + UNIT_ASSERT_EQUAL(s.GetMetricType(), NProto::EMetricType::GAUGE); + UNIT_ASSERT_EQUAL(s.LabelsSize(), 3); + ASSERT_LABEL_EQUAL(s.GetLabels(0), "sensor", "name"); + ASSERT_LABEL_EQUAL(s.GetLabels(1), "basename", "basevalue"); + ASSERT_LABEL_EQUAL(s.GetLabels(2), "labelname", "val3"); ASSERT_DOUBLE_POINT(s, TInstant::MilliSeconds(1234567890), 2.3); } } |
