diff --git a/implementations/micrometer-registry-prometheus/src/main/java/io/micrometer/prometheusmetrics/DefaultExemplarSamplerFactory.java b/implementations/micrometer-registry-prometheus/src/main/java/io/micrometer/prometheusmetrics/DefaultExemplarSamplerFactory.java index 295c5d822f..e4be6236fa 100644 --- a/implementations/micrometer-registry-prometheus/src/main/java/io/micrometer/prometheusmetrics/DefaultExemplarSamplerFactory.java +++ b/implementations/micrometer-registry-prometheus/src/main/java/io/micrometer/prometheusmetrics/DefaultExemplarSamplerFactory.java @@ -27,7 +27,6 @@ * Default implementation of {@link ExemplarSamplerFactory}. * * @author Jonatan Ivanov - * @since 1.13.0 */ class DefaultExemplarSamplerFactory implements ExemplarSamplerFactory { @@ -39,7 +38,7 @@ class DefaultExemplarSamplerFactory implements ExemplarSamplerFactory { private final SpanContext spanContext; - public DefaultExemplarSamplerFactory(SpanContext spanContext, ExemplarsProperties exemplarsProperties) { + DefaultExemplarSamplerFactory(SpanContext spanContext, ExemplarsProperties exemplarsProperties) { this.spanContext = spanContext; this.exemplarsProperties = exemplarsProperties; } @@ -52,10 +51,9 @@ public ExemplarSampler createExemplarSampler(int numberOfExemplars) { } @Override - public ExemplarSampler createExemplarSampler(double[] histogramClassicUpperBounds) { + public ExemplarSampler createExemplarSampler(double[] histogramUpperBounds) { ExemplarSamplerConfig config = exemplarSamplerConfigsByHistogramUpperBounds.computeIfAbsent( - histogramClassicUpperBounds, - key -> new ExemplarSamplerConfig(exemplarsProperties, histogramClassicUpperBounds)); + histogramUpperBounds, key -> new ExemplarSamplerConfig(exemplarsProperties, histogramUpperBounds)); return new ExemplarSampler(config, spanContext); } diff --git a/implementations/micrometer-registry-prometheus/src/main/java/io/micrometer/prometheusmetrics/ExemplarSamplerFactory.java b/implementations/micrometer-registry-prometheus/src/main/java/io/micrometer/prometheusmetrics/ExemplarSamplerFactory.java index 61663b2d6f..5d6441bb0d 100644 --- a/implementations/micrometer-registry-prometheus/src/main/java/io/micrometer/prometheusmetrics/ExemplarSamplerFactory.java +++ b/implementations/micrometer-registry-prometheus/src/main/java/io/micrometer/prometheusmetrics/ExemplarSamplerFactory.java @@ -21,7 +21,6 @@ * A factory that creates {@link ExemplarSampler} instances with the desired properties. * * @author Jonatan Ivanov - * @since 1.13.0 */ interface ExemplarSamplerFactory { @@ -34,7 +33,7 @@ interface ExemplarSamplerFactory { /** * Creates an {@link ExemplarSampler} that stores exemplars for the defined histogram - * buckets. This means as many exemplars as many buckets are defined. + * buckets. This means as many exemplars as buckets are defined. * @param histogramUpperBounds histogram buckets to store exemplars for. * @return a new {@link ExemplarSampler} instance. */ diff --git a/implementations/micrometer-registry-prometheus/src/test/java/io/micrometer/prometheusmetrics/PrometheusMeterRegistryTest.java b/implementations/micrometer-registry-prometheus/src/test/java/io/micrometer/prometheusmetrics/PrometheusMeterRegistryTest.java index 5499651b5e..d2475e39e0 100644 --- a/implementations/micrometer-registry-prometheus/src/test/java/io/micrometer/prometheusmetrics/PrometheusMeterRegistryTest.java +++ b/implementations/micrometer-registry-prometheus/src/test/java/io/micrometer/prometheusmetrics/PrometheusMeterRegistryTest.java @@ -871,18 +871,18 @@ void openMetricsScrapeWithExemplars() throws InterruptedException { Timer timerWithHistogram = Timer.builder("timer.withHistogram").publishPercentileHistogram().register(registry); timerWithHistogram.record(15, TimeUnit.MILLISECONDS); - Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + sleepToAvoidRateLimiting(); timerWithHistogram.record(150, TimeUnit.MILLISECONDS); - Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + sleepToAvoidRateLimiting(); timerWithHistogram.record(60, TimeUnit.SECONDS); Timer timerWithSlos = Timer.builder("timer.withSlos") .serviceLevelObjectives(Duration.ofMillis(100), Duration.ofMillis(200), Duration.ofMillis(300)) .register(registry); timerWithSlos.record(Duration.ofMillis(15)); - Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + sleepToAvoidRateLimiting(); timerWithSlos.record(Duration.ofMillis(1_500)); - Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + sleepToAvoidRateLimiting(); timerWithSlos.record(Duration.ofMillis(150)); DistributionSummary summary = DistributionSummary.builder("summary.noHistogram").register(registry); @@ -894,18 +894,18 @@ void openMetricsScrapeWithExemplars() throws InterruptedException { .publishPercentileHistogram() .register(registry); summaryWithHistogram.record(0.15); - Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + sleepToAvoidRateLimiting(); summaryWithHistogram.record(5E18); - Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + sleepToAvoidRateLimiting(); summaryWithHistogram.record(15); DistributionSummary slos = DistributionSummary.builder("summary.withSlos") .serviceLevelObjectives(100, 200, 300) .register(registry); slos.record(10); - Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + sleepToAvoidRateLimiting(); slos.record(1_000); - Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + sleepToAvoidRateLimiting(); slos.record(250); String scraped = registry.scrape("application/openmetrics-text"); @@ -944,6 +944,10 @@ void openMetricsScrapeWithExemplars() throws InterruptedException { assertThat(scraped).endsWith("# EOF\n"); } + private static void sleepToAvoidRateLimiting() throws InterruptedException { + Thread.sleep(5); // sleeping 5ms since the sample interval limit is 1ms + } + @Test void noExemplarsIfNoSampler() { PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT, prometheusRegistry, diff --git a/samples/micrometer-samples-core/src/main/java/io/micrometer/core/samples/PrometheusExemplarsSample.java b/samples/micrometer-samples-core/src/main/java/io/micrometer/core/samples/PrometheusExemplarsSample.java index 8bf569f898..ca5b38ded1 100644 --- a/samples/micrometer-samples-core/src/main/java/io/micrometer/core/samples/PrometheusExemplarsSample.java +++ b/samples/micrometer-samples-core/src/main/java/io/micrometer/core/samples/PrometheusExemplarsSample.java @@ -40,26 +40,26 @@ public static void main(String[] args) throws InterruptedException { Timer timer = Timer.builder("test.timer").publishPercentileHistogram().register(registry); timer.record(Duration.ofNanos(1_000 * 100)); - sleep(); // sleeping to avoid rate-limiting + sleepToAvoidRateLimiting(); timer.record(Duration.ofMillis(2)); - sleep(); // sleeping to avoid rate-limiting + sleepToAvoidRateLimiting(); timer.record(Duration.ofMillis(100)); - sleep(); // sleeping to avoid rate-limiting + sleepToAvoidRateLimiting(); timer.record(Duration.ofSeconds(60)); DistributionSummary distributionSummary = DistributionSummary.builder("test.distribution") .publishPercentileHistogram() .register(registry); distributionSummary.record(0.15); - sleep(); // sleeping to avoid rate-limiting + sleepToAvoidRateLimiting(); distributionSummary.record(15); - sleep(); // sleeping to avoid rate-limiting + sleepToAvoidRateLimiting(); distributionSummary.record(5E18); System.out.println(registry.scrape(CONTENT_TYPE_OPENMETRICS_100)); } - static void sleep() { + static void sleepToAvoidRateLimiting() { try { // sleeping 100ms since the sample interval limit is 90ms Thread.sleep(100);