Skip to content

Commit

Permalink
Merge ec4d6ab into 5b09df1
Browse files Browse the repository at this point in the history
  • Loading branch information
dvrazumov authored May 2, 2024
2 parents 5b09df1 + ec4d6ab commit ff684d1
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 4 deletions.
6 changes: 2 additions & 4 deletions library/cpp/monlib/encode/prometheus/prometheus_encoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,11 @@ namespace NMonitoring {
Y_ENSURE(!name.Empty(), "trying to write metric with empty name");

char ch = name[0];
if (NPrometheus::IsValidMetricNameStart(ch)) {
Out_->Write(ch);
} else {
if (!NPrometheus::IsValidMetricNameStart(ch)) {
Out_->Write('_');
}

for (size_t i = 1, len = name.length(); i < len; i++) {
for (size_t i = 0, len = name.length(); i < len; i++) {
ch = name[i];
if (NPrometheus::IsValidMetricNameContinuation(ch)) {
Out_->Write(ch);
Expand Down
83 changes: 83 additions & 0 deletions library/cpp/monlib/encode/prometheus/prometheus_encoder_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,89 @@ single{labels="l1", project="solomon", } 17 1512216010000
# TYPE two counter
two{labels="l2", project="solomon", } 42 1500000000000
)");
}

Y_UNIT_TEST(FirstCharacterShouldNotBeReplaced) {
auto result = EncodeToString([](IMetricEncoder* e) {
e->OnStreamBegin();
const TVector<std::pair<TString, double>> sensors = {
{"0", 0.0},
{"50", 50.0},
{"90", 90.0},
{"99", 99.0},
{"100", 100},
{"012345", 123.45},
{"abc0123", 123.0},
{"0123abc", 123.0},
};

for (const auto& [name, value]: sensors) {
e->OnMetricBegin(EMetricType::COUNTER);
{
e->OnLabelsBegin();
e->OnLabel("sensor", name);
e->OnLabelsEnd();
}
e->OnDouble(TInstant::Zero(), value);
e->OnMetricEnd();
}
e->OnStreamEnd();
});

UNIT_ASSERT_STRINGS_EQUAL(result,
R"(# TYPE _0 counter
_0 0
# TYPE _50 counter
_50 50
# TYPE _90 counter
_90 90
# TYPE _99 counter
_99 99
# TYPE _100 counter
_100 100
# TYPE _012345 counter
_012345 123.45
# TYPE abc0123 counter
abc0123 123
# TYPE _0123abc counter
_0123abc 123
)");
}

Y_UNIT_TEST(InvalidCharactersShouldBeReplaced) {
auto result = EncodeToString([](IMetricEncoder* e) {
e->OnStreamBegin();
const TVector<std::pair<TString, double>> sensors = {
{"abc/def", 1.0},
{"a+-*/=&{}()|bc", 0.1},
{"0.0", 0.0},
{"99.9", 99.9}};

for (const auto& [name, value]: sensors) {
e->OnMetricBegin(EMetricType::COUNTER);
{
e->OnLabelsBegin();
e->OnLabel("sensor", name);
e->OnLabelsEnd();
}
e->OnDouble(TInstant::Zero(), value);
e->OnMetricEnd();
}
e->OnStreamEnd();
});

UNIT_ASSERT_STRINGS_EQUAL(result,
R"(# TYPE abc_def counter
abc_def 1
# TYPE a___________bc counter
a___________bc 0.1
# TYPE _0_0 counter
_0_0 0
# TYPE _99_9 counter
_99_9 99.9
)");
}
}

0 comments on commit ff684d1

Please sign in to comment.