Skip to content

Commit

Permalink
Merge pull request #53 from ringcentral/prometheus-sanitizing-label-n…
Browse files Browse the repository at this point in the history
…ames

#49: get rid of locale (not needed provided names are sanitized), change prefix label_ to l_
  • Loading branch information
devromik authored Jun 13, 2023
2 parents 16ca78a + 7db2b8e commit 9425155
Show file tree
Hide file tree
Showing 9 changed files with 17 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class DefaultPrometheusMetricSanitizer implements PrometheusMetricSanitiz

public static final boolean DEFAULT_SANITIZE_METRIC_NAME = true;
public static final boolean DEFAULT_SANITIZE_LABEL_NAME = true;
public static final String DEFAULT_NON_LETTER_LABEL_NAME_FIRST_CHAR_PREFIX = "label_";
public static final String DEFAULT_NON_LETTER_LABEL_NAME_FIRST_CHAR_PREFIX = "l_";

private static final Pattern LABEL_NAME_FORBIDDEN_CHAR_PATTERN = Pattern.compile("\\W");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,17 @@

import java.io.IOException;
import java.io.Writer;
import java.util.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import static com.ringcentral.platform.metrics.reporters.prometheus.PrometheusMetricsExporter.Format.PROMETHEUS_TEXT_O_O_4;
import static io.prometheus.client.Collector.MetricFamilySamples;
import static java.lang.String.join;
import static java.util.Collections.emptyList;
import static java.util.Collections.enumeration;
import static java.util.Locale.ENGLISH;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toList;
import static org.slf4j.LoggerFactory.getLogger;
Expand All @@ -40,11 +44,9 @@ public enum Format {
public static final Format DEFAULT_FORMAT = PROMETHEUS_TEXT_O_O_4;
public static final String NAME_PARTS_DELIMITER = "_";
public static final boolean DEFAULT_CONVERT_NAME_TO_LOWER_CASE = false;
public static final Locale DEFAULT_LOCALE = Locale.ENGLISH;

private final Format defaultFormat;
private final boolean convertNameToLowercase;
private final Locale locale;
private final PrometheusMetricSanitizer sanitizer;
private final InstanceSamplesProvider<? extends PrometheusSample, ? extends PrometheusInstanceSample> instanceSamplesProvider;

Expand All @@ -54,21 +56,18 @@ public PrometheusMetricsExporter(MetricRegistry metricRegistry) {
this(
DEFAULT_FORMAT,
DEFAULT_CONVERT_NAME_TO_LOWER_CASE,
DEFAULT_LOCALE,
new DefaultPrometheusMetricSanitizer(),
new PrometheusInstanceSamplesProvider(metricRegistry));
}

public PrometheusMetricsExporter(
Format defaultFormat,
boolean convertNameToLowercase,
Locale locale,
PrometheusMetricSanitizer sanitizer,
InstanceSamplesProvider<? extends PrometheusSample, ? extends PrometheusInstanceSample> instanceSamplesProvider) {

this.defaultFormat = requireNonNull(defaultFormat);
this.convertNameToLowercase = convertNameToLowercase;
this.locale = locale != null ? locale : DEFAULT_LOCALE;
this.sanitizer = requireNonNull(sanitizer);
this.instanceSamplesProvider = requireNonNull(instanceSamplesProvider);
}
Expand Down Expand Up @@ -167,13 +166,13 @@ private MetricFamilySamples toMetricFamilySamples(PrometheusInstanceSample is) {

private String buildName(MetricName name) {
final var sanitizedName = sanitizer.sanitizeMetricName(join(NAME_PARTS_DELIMITER, name));
return convertNameToLowercase ? sanitizedName.toLowerCase(locale) : sanitizedName;
return convertNameToLowercase ? sanitizedName.toLowerCase(ENGLISH) : sanitizedName;
}

private String buildNameSuffix(PrometheusSample ps) {
final var suffix = ps.nameSuffix();
final var sanitizedSuffix = sanitizer.sanitizeMetricName(suffix);
return convertNameToLowercase ? sanitizedSuffix.toLowerCase(locale) : sanitizedSuffix;
return convertNameToLowercase ? sanitizedSuffix.toLowerCase(ENGLISH) : sanitizedSuffix;
}

private static String helpFor(PrometheusInstanceSample is) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import static com.ringcentral.platform.metrics.samples.prometheus.PrometheusInstanceSamplesProviderBuilder.prometheusInstanceSamplesProvider;
import static java.util.Objects.requireNonNull;
Expand All @@ -18,7 +17,6 @@ public class PrometheusMetricsExporterBuilder {

private PrometheusMetricsExporter.Format defaultFormat = PrometheusMetricsExporter.DEFAULT_FORMAT;
private boolean convertNameToLowercase = PrometheusMetricsExporter.DEFAULT_CONVERT_NAME_TO_LOWER_CASE;
private Locale locale = PrometheusMetricsExporter.DEFAULT_LOCALE;
private PrometheusMetricSanitizer sanitizer = new DefaultPrometheusMetricSanitizer();
private final List<InstanceSamplesProvider<? extends PrometheusSample, ? extends PrometheusInstanceSample>> instanceSamplesProviders = new ArrayList<>();

Expand Down Expand Up @@ -49,11 +47,6 @@ public PrometheusMetricsExporterBuilder convertNameToLowercase(boolean convertNa
return this;
}

public PrometheusMetricsExporterBuilder locale(Locale locale) {
this.locale = requireNonNull(locale);
return this;
}

public PrometheusMetricsExporterBuilder sanitizer(PrometheusMetricSanitizer sanitizer) {
this.sanitizer = requireNonNull(sanitizer);
return this;
Expand All @@ -72,7 +65,6 @@ public PrometheusMetricsExporter build() {
return new PrometheusMetricsExporter(
defaultFormat,
convertNameToLowercase,
locale,
sanitizer,
instanceSamplesProviders.size() == 1 ? instanceSamplesProviders.get(0) : new CompositeInstanceSamplesProvider<>(instanceSamplesProviders));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ public void sanitizingMetricName() {
@Test
public void sanitizingLabelName() {
assertThat(sanitizer.sanitizeLabelName("a.1.:._.й.|"), is("a_1________"));
assertThat(sanitizer.sanitizeLabelNames(List.of(".a.1.:._.й.|")), is(List.of("label__a_1________")));
assertThat(sanitizer.sanitizeLabelNames(List.of(".a.1.:._.й.|")), is(List.of("l__a_1________")));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import static com.ringcentral.platform.metrics.samples.prometheus.PrometheusInstanceSamplesProviderBuilder.prometheusInstanceSamplesProvider;
import static com.ringcentral.platform.metrics.samples.prometheus.PrometheusSampleSpec.sampleSpec;
import static com.ringcentral.platform.metrics.timer.configs.builders.TimerConfigBuilder.withTimer;
import static java.util.Locale.ENGLISH;
import static java.util.concurrent.TimeUnit.SECONDS;

@SuppressWarnings("ALL")
Expand Down Expand Up @@ -91,7 +90,6 @@ public static void main(String[] args) throws Exception {

PrometheusMetricsExporter exporter = prometheusMetricsExporter()
.convertNameToLowercase()
.locale(ENGLISH)
.addInstanceSamplesProvider(miSamplesProvider)
.addInstanceSamplesProvider(new SimpleCollectorRegistryPrometheusInstanceSamplesProvider(
name("defaultRegistry"), // optional prefix
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ public PrometheusMetricsExporter prometheusMetricsExporter(

configBuilder = new MfPrometheusConfigBuilder()
.convertNameToLowercase(properties.getConvertNameToLowercase())
.locale(properties.getLocale())
.rebase(configBuilder);

MfPrometheusConfig config = configBuilder.build();
Expand All @@ -78,7 +77,6 @@ public PrometheusMetricsExporter prometheusMetricsExporter(

PrometheusMetricsExporter exporter = prometheusMetricsExporterBuilder()
.convertNameToLowercase(config.convertNameToLowercase())
.locale(config.locale())
.addInstanceSamplesProvider(instanceSamplesProvider)
.build();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
package com.ringcentral.platform.metrics.spring.prometheus;

import com.ringcentral.platform.metrics.samples.*;
import com.ringcentral.platform.metrics.samples.prometheus.*;

import java.util.Locale;
import com.ringcentral.platform.metrics.samples.InstanceSamplesProvider;
import com.ringcentral.platform.metrics.samples.prometheus.PrometheusInstanceSample;
import com.ringcentral.platform.metrics.samples.prometheus.PrometheusSample;

public class MfPrometheusConfig {

private final InstanceSamplesProvider<? extends PrometheusSample, ? extends PrometheusInstanceSample> instanceSamplesProvider;
private final boolean convertNameToLowercase;
private final Locale locale;

public MfPrometheusConfig(
InstanceSamplesProvider<? extends PrometheusSample, ? extends PrometheusInstanceSample> instanceSamplesProvider,
boolean convertNameToLowercase,
Locale locale) {
boolean convertNameToLowercase) {

this.instanceSamplesProvider = instanceSamplesProvider;
this.convertNameToLowercase = convertNameToLowercase;
this.locale = locale;
}

public boolean hasInstanceSamplesProvider() {
Expand All @@ -32,12 +28,4 @@ public boolean hasInstanceSamplesProvider() {
public boolean convertNameToLowercase() {
return convertNameToLowercase;
}

public boolean hasLocale() {
return locale != null;
}

public Locale locale() {
return locale;
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package com.ringcentral.platform.metrics.spring.prometheus;

import com.ringcentral.platform.metrics.samples.InstanceSamplesProvider;
import com.ringcentral.platform.metrics.samples.prometheus.*;
import com.ringcentral.platform.metrics.samples.prometheus.PrometheusInstanceSample;
import com.ringcentral.platform.metrics.samples.prometheus.PrometheusSample;

import java.util.Locale;

import static com.ringcentral.platform.metrics.reporters.prometheus.PrometheusMetricsExporter.*;
import static com.ringcentral.platform.metrics.reporters.prometheus.PrometheusMetricsExporter.DEFAULT_CONVERT_NAME_TO_LOWER_CASE;

public class MfPrometheusConfigBuilder {

private InstanceSamplesProvider<? extends PrometheusSample, ? extends PrometheusInstanceSample> instanceSamplesProvider;
private Boolean convertNameToLowercase;
private Locale locale;

public MfPrometheusConfigBuilder() {}

Expand All @@ -24,10 +22,6 @@ public MfPrometheusConfigBuilder rebase(MfPrometheusConfigBuilder base) {
convertNameToLowercase = base.convertNameToLowercase;
}

if (base.locale != null && locale == null) {
locale = base.locale;
}

return this;
}

Expand All @@ -41,21 +35,13 @@ public MfPrometheusConfigBuilder convertNameToLowercase(Boolean convertNameToLow
return this;
}

public MfPrometheusConfigBuilder locale(Locale locale) {
this.locale = locale;
return this;
}

public MfPrometheusConfig build() {
boolean convertNameToLowercase = DEFAULT_CONVERT_NAME_TO_LOWER_CASE;

if (this.convertNameToLowercase != null) {
convertNameToLowercase = this.convertNameToLowercase;
}

return new MfPrometheusConfig(
instanceSamplesProvider,
convertNameToLowercase,
locale != null ? locale : DEFAULT_LOCALE);
return new MfPrometheusConfig(instanceSamplesProvider, convertNameToLowercase);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,12 @@
import com.ringcentral.platform.metrics.spring.MfProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Locale;

@ConfigurationProperties(prefix = MfPrometheusProperties.PREFIX)
public class MfPrometheusProperties {

public static final String PREFIX = MfProperties.PREFIX + ".prometheus";

private Boolean convertNameToLowercase;
private Locale locale;

public Boolean getConvertNameToLowercase() {
return convertNameToLowercase;
Expand All @@ -20,12 +17,4 @@ public Boolean getConvertNameToLowercase() {
public void setConvertNameToLowercase(Boolean convertNameToLowercase) {
this.convertNameToLowercase = convertNameToLowercase;
}

public Locale getLocale() {
return locale;
}

public void setLocale(Locale locale) {
this.locale = locale;
}
}

0 comments on commit 9425155

Please sign in to comment.