Skip to content

Commit eb7cec1

Browse files
committed
Refactor label name validation
Signed-off-by: Federico Torres <[email protected]>
1 parent d95bcb3 commit eb7cec1

File tree

2 files changed

+15
-21
lines changed
  • prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats
  • prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots

2 files changed

+15
-21
lines changed

prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/TextFormatUtil.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.prometheus.metrics.model.snapshots.Labels;
44
import io.prometheus.metrics.model.snapshots.PrometheusNaming;
5+
import io.prometheus.metrics.model.snapshots.ValidationScheme;
56

67
import java.io.IOException;
78
import java.io.OutputStreamWriter;
@@ -95,7 +96,7 @@ static void writeName(OutputStreamWriter writer, String name, NameType nameType)
9596
}
9697
break;
9798
case Label:
98-
if (PrometheusNaming.isValidLegacyLabelName(name)) {
99+
if (PrometheusNaming.isValidLegacyLabelName(name) && PrometheusNaming.nameValidationScheme == ValidationScheme.LEGACY_VALIDATION) {
99100
writer.write(name);
100101
return;
101102
}

prometheus-metrics-model/src/main/java/io/prometheus/metrics/model/snapshots/PrometheusNaming.java

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ public class PrometheusNaming {
7474
".total", ".created", ".bucket", ".info"
7575
};
7676

77+
static ValidationScheme initValidationScheme() {
78+
if (PrometheusProperties.get() != null && PrometheusProperties.get().getNamingProperties() != null) {
79+
String validationScheme = PrometheusProperties.get().getNamingProperties().getValidationScheme();
80+
if (validationScheme != null && validationScheme.equals("utf-8")) {
81+
return ValidationScheme.UTF_8_VALIDATION;
82+
}
83+
}
84+
return ValidationScheme.LEGACY_VALIDATION;
85+
}
86+
7787
/**
7888
* Test if a metric name is valid. Rules:
7989
* <ul>
@@ -96,16 +106,6 @@ public static boolean isValidMetricName(String name) {
96106
return validateMetricName(name) == null;
97107
}
98108

99-
static ValidationScheme initValidationScheme() {
100-
if (PrometheusProperties.get() != null && PrometheusProperties.get().getNamingProperties() != null) {
101-
String validationScheme = PrometheusProperties.get().getNamingProperties().getValidationScheme();
102-
if (validationScheme != null && validationScheme.equals("utf-8")) {
103-
return ValidationScheme.UTF_8_VALIDATION;
104-
}
105-
}
106-
return ValidationScheme.LEGACY_VALIDATION;
107-
}
108-
109109
static String validateMetricName(String name) {
110110
switch (nameValidationScheme) {
111111
case LEGACY_VALIDATION:
@@ -151,8 +151,7 @@ public static boolean isValidLegacyMetricName(String name) {
151151
public static boolean isValidLabelName(String name) {
152152
switch (nameValidationScheme) {
153153
case LEGACY_VALIDATION:
154-
return isValidLegacyLabelName(name) &&
155-
!(name.startsWith("__") || name.startsWith("._") || name.startsWith("..") || name.startsWith("_."));
154+
return isValidLegacyLabelName(name);
156155
case UTF_8_VALIDATION:
157156
return StandardCharsets.UTF_8.newEncoder().canEncode(name);
158157
default:
@@ -161,14 +160,8 @@ public static boolean isValidLabelName(String name) {
161160
}
162161

163162
public static boolean isValidLegacyLabelName(String name) {
164-
switch (nameValidationScheme) {
165-
case LEGACY_VALIDATION:
166-
return LEGACY_LABEL_NAME_PATTERN.matcher(name).matches();
167-
case UTF_8_VALIDATION:
168-
return LABEL_NAME_PATTERN.matcher(name).matches();
169-
default:
170-
throw new RuntimeException("Invalid name validation scheme requested: " + nameValidationScheme);
171-
}
163+
return LEGACY_LABEL_NAME_PATTERN.matcher(name).matches() &&
164+
!(name.startsWith("__") || name.startsWith("._") || name.startsWith("..") || name.startsWith("_."));
172165
}
173166

174167
/**

0 commit comments

Comments
 (0)