@@ -54,9 +54,12 @@ class SanitizeNameTester
5454 }
5555 static std::string mapToPrometheusName (const std::string &name,
5656 const std::string &unit,
57- prometheus_client::MetricType prometheus_type)
57+ prometheus_client::MetricType prometheus_type,
58+ bool without_units = false ,
59+ bool without_type_suffix = false )
5860 {
59- return PrometheusExporterUtils::MapToPrometheusName (name, unit, prometheus_type);
61+ return PrometheusExporterUtils::MapToPrometheusName (name, unit, prometheus_type, without_units,
62+ without_type_suffix);
6063 }
6164};
6265} // namespace metrics
@@ -419,6 +422,93 @@ TEST(PrometheusExporterUtils, ConvertRateExpressedToPrometheusUnit)
419422 " _per_minute" );
420423}
421424
425+ TEST (PromentheusExporterUtils, PrometheusNameMapping)
426+ {
427+ // General test cases on unit expansions and name sanitization
428+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
429+ " sample_metric___name" , " g" , prometheus::MetricType::Counter),
430+ " sample_metric_name_grams_total" );
431+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
432+ " sample_metric_name" , " s" , prometheus::MetricType::Counter),
433+ " sample_metric_name_seconds_total" );
434+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
435+ " sample_metric_name" , " s" , prometheus::MetricType::Gauge),
436+ " sample_metric_name_seconds" );
437+ // Test without_units & without_type_suffix with Counters and unit = 1
438+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
439+ " sample_metric_name" , " 1" , prometheus::MetricType::Counter),
440+ " sample_metric_name_total" );
441+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
442+ " sample_metric_name" , " 1" , prometheus::MetricType::Counter, true , false ),
443+ " sample_metric_name_total" );
444+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
445+ " sample_metric_name" , " 1" , prometheus::MetricType::Counter, false , true ),
446+ " sample_metric_name" );
447+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
448+ " sample_metric_name" , " 1" , prometheus::MetricType::Counter, true , true ),
449+ " sample_metric_name" );
450+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
451+ " sample_metric_name" , " 1" , prometheus::MetricType::Counter, true , true ),
452+ " sample_metric_name" );
453+ // Test without_units & without_type_suffix with Counters and non-special units
454+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
455+ " sample_metric_name" , " %" , prometheus::MetricType::Counter),
456+ " sample_metric_name_percent_total" );
457+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
458+ " sample_metric_name" , " m" , prometheus::MetricType::Counter, true , false ),
459+ " sample_metric_name_total" );
460+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
461+ " sample_metric_name" , " By" , prometheus::MetricType::Counter, false , true ),
462+ " sample_metric_name_bytes" );
463+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
464+ " sample_metric_name" , " s" , prometheus::MetricType::Counter, true , true ),
465+ " sample_metric_name" );
466+ // Special case Gauges & ratio
467+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
468+ " sample_metric_name" , " 1" , prometheus::MetricType::Gauge),
469+ " sample_metric_name_ratio" );
470+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
471+ " sample_metric_name" , " 1" , prometheus::MetricType::Gauge, false , true ),
472+ " sample_metric_name_ratio" );
473+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
474+ " sample_metric_name" , " 1" , prometheus::MetricType::Gauge, true , false ),
475+ " sample_metric_name" );
476+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
477+ " sample_metric_name" , " 1" , prometheus::MetricType::Gauge, true , true ),
478+ " sample_metric_name" );
479+ // Test without_type_suffix affects only counters
480+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
481+ " sample_metric_name" , " Hz" , prometheus::MetricType::Counter),
482+ " sample_metric_name_hertz_total" );
483+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
484+ " sample_metric_name" , " Hz" , prometheus::MetricType::Counter, false , true ),
485+ " sample_metric_name_hertz" );
486+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
487+ " sample_metric_name" , " Hz" , prometheus::MetricType::Gauge),
488+ " sample_metric_name_hertz" );
489+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
490+ " sample_metric_name" , " Hz" , prometheus::MetricType::Gauge, false , true ),
491+ " sample_metric_name_hertz" );
492+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
493+ " sample_metric_name" , " Hz" , prometheus::MetricType::Histogram),
494+ " sample_metric_name_hertz" );
495+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
496+ " sample_metric_name" , " Hz" , prometheus::MetricType::Histogram, false , true ),
497+ " sample_metric_name_hertz" );
498+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
499+ " sample_metric_name" , " Hz" , prometheus::MetricType::Summary),
500+ " sample_metric_name_hertz" );
501+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
502+ " sample_metric_name" , " Hz" , prometheus::MetricType::Summary, false , true ),
503+ " sample_metric_name_hertz" );
504+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
505+ " sample_metric_name" , " Hz" , prometheus::MetricType::Info),
506+ " sample_metric_name_hertz" );
507+ ASSERT_EQ (exporter::metrics::SanitizeNameTester::mapToPrometheusName (
508+ " sample_metric_name" , " Hz" , prometheus::MetricType::Info, false , true ),
509+ " sample_metric_name_hertz" );
510+ }
511+
422512TEST_F (AttributeCollisionTest, JoinsCollidingKeys)
423513{
424514 CheckTranslation ({{" foo.a" , " value1" }, {" foo_a" , " value2" }}, {{" foo_a" , " value1;value2" },
0 commit comments