mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Address PR comments.
Signed-off-by: Arthur Silva Sens <arthursens2005@gmail.com>
This commit is contained in:
parent
13ea4dbf7f
commit
d5b2db34d5
|
@ -120,12 +120,17 @@ var (
|
|||
|
||||
// Build a normalized name for the specified metric.
|
||||
func normalizeName(metric pmetric.Metric, namespace string) string {
|
||||
var nameTokens = strings.FieldsFunc(
|
||||
// Split metric name into "tokens" (of supported metric name runes).
|
||||
// Note that this has the side effect of replacing multiple consecutive underscores with a single underscore.
|
||||
// This is part of the OTel to Prometheus specification: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.38.0/specification/compatibility/prometheus_and_openmetrics.md#otlp-metric-points-to-prometheus.
|
||||
nameTokens := strings.FieldsFunc(
|
||||
metric.Name(),
|
||||
func(r rune) bool { return nonMetricNameCharRE.MatchString(string(r)) },
|
||||
)
|
||||
|
||||
mainUnitSuffix, perUnitSuffix := buildUnitSuffixes(metric.Unit())
|
||||
mainUnitSuffix = cleanUpUnit(mainUnitSuffix)
|
||||
perUnitSuffix = cleanUpUnit(perUnitSuffix)
|
||||
if mainUnitSuffix != "" && !slices.Contains(nameTokens, mainUnitSuffix) {
|
||||
nameTokens = append(nameTokens, mainUnitSuffix)
|
||||
}
|
||||
|
@ -248,11 +253,15 @@ func buildUnitSuffixes(unit string) (mainUnitSuffix, perUnitSuffix string) {
|
|||
unitTokens := strings.SplitN(unit, "/", 2)
|
||||
|
||||
if len(unitTokens) > 0 {
|
||||
// Main unit
|
||||
// Append if not blank and doesn't contain '{}'
|
||||
mainUnitOTel := strings.TrimSpace(unitTokens[0])
|
||||
if mainUnitOTel != "" && !strings.ContainsAny(mainUnitOTel, "{}") {
|
||||
mainUnitSuffix = cleanUpUnit(unitMapGetOrDefault(mainUnitOTel))
|
||||
mainUnitSuffix = unitMapGetOrDefault(mainUnitOTel)
|
||||
}
|
||||
|
||||
// Per unit
|
||||
// Append if not blank and doesn't contain '{}'
|
||||
if len(unitTokens) > 1 && unitTokens[1] != "" {
|
||||
perUnitOTel := strings.TrimSpace(unitTokens[1])
|
||||
if perUnitOTel != "" && !strings.ContainsAny(perUnitOTel, "{}") {
|
||||
|
@ -260,12 +269,9 @@ func buildUnitSuffixes(unit string) (mainUnitSuffix, perUnitSuffix string) {
|
|||
}
|
||||
if perUnitSuffix != "" {
|
||||
perUnitSuffix = "per_" + perUnitSuffix
|
||||
mainUnitSuffix = strings.TrimSuffix(mainUnitSuffix, "_")
|
||||
}
|
||||
}
|
||||
|
||||
if perUnitSuffix != "" {
|
||||
mainUnitSuffix = strings.TrimSuffix(mainUnitSuffix, "_")
|
||||
}
|
||||
}
|
||||
|
||||
return mainUnitSuffix, perUnitSuffix
|
||||
|
|
|
@ -161,6 +161,7 @@ func TestBuildCompliantMetricNameWithSuffixes(t *testing.T) {
|
|||
// Slashes in units are converted.
|
||||
require.Equal(t, "system_io_foo_per_bar_total", BuildCompliantMetricName(createCounter("system.io", "foo/bar"), "", true))
|
||||
require.Equal(t, "metric_with_foreign_characters_total", BuildCompliantMetricName(createCounter("metric_with_字符_foreign_characters", ""), "", true))
|
||||
require.Equal(t, "temperature_C", BuildCompliantMetricName(createGauge("temperature", "%*()°C"), "", true)) // Removes non aplhanumerical characters from units
|
||||
}
|
||||
|
||||
func TestBuildCompliantMetricNameWithoutSuffixes(t *testing.T) {
|
||||
|
@ -188,6 +189,7 @@ func TestBuildMetricNameWithSuffixes(t *testing.T) {
|
|||
// Slashes in units are converted.
|
||||
require.Equal(t, "system.io_foo_per_bar_total", BuildMetricName(createCounter("system.io", "foo/bar"), "", true))
|
||||
require.Equal(t, "metric_with_字符_foreign_characters_total", BuildMetricName(createCounter("metric_with_字符_foreign_characters", ""), "", true))
|
||||
require.Equal(t, "temperature_%*()°C", BuildMetricName(createGauge("temperature", "%*()°C"), "", true)) // Keeps the all characters in unit
|
||||
|
||||
// Tests below show weird interactions that users can have with the metric names.
|
||||
// With BuildMetricName we don't check if units/type suffixes are already present in the metric name, we always add them.
|
||||
|
|
Loading…
Reference in a new issue