Skip to content

Commit

Permalink
Hack Timer UX
Browse files Browse the repository at this point in the history
  • Loading branch information
jonatan-ivanov committed Mar 27, 2023
1 parent c839f96 commit f47c83b
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 5 deletions.
Expand Up @@ -51,6 +51,14 @@ protected AbstractTimerBuilder(String name) {
maximumExpectedValue(Duration.ofSeconds(30));
}

protected AbstractTimerBuilder(B builder) {
this.name = builder.name;
tags(builder.tags);
this.distributionConfigBuilder = new DistributionStatisticConfig.Builder(builder.distributionConfigBuilder);
description(builder.description);
pauseDetector(builder.pauseDetector);
}

/**
* @param tags Must be an even number of arguments representing key/value pairs of
* tags.
Expand Down
Expand Up @@ -27,11 +27,7 @@
import java.util.Arrays;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import java.util.function.BooleanSupplier;
import java.util.function.DoubleSupplier;
import java.util.function.IntSupplier;
import java.util.function.LongSupplier;
import java.util.function.Supplier;
import java.util.function.*;

/**
* Timer intended to track of a large number of short running events. Example would be
Expand Down Expand Up @@ -354,6 +350,14 @@ class Builder extends AbstractTimerBuilder<Builder> {
super(name);
}

Builder(Builder builder) {
super(builder);
}

public Function<Tags, Timer> with(MeterRegistry registry) {
return tags -> new Builder(this).tags(tags).register(registry);
}

@Override
public Builder tags(String... tags) {
return super.tags(tags);
Expand Down
Expand Up @@ -272,6 +272,20 @@ public static class Builder {

private final DistributionStatisticConfig config = new DistributionStatisticConfig();

public Builder() {
}

public Builder(Builder builder) {
percentilesHistogram(builder.config.isPublishingHistogram());
percentiles(builder.config.getPercentiles());
percentilePrecision(builder.config.getPercentilePrecision());
serviceLevelObjectives(builder.config.getServiceLevelObjectiveBoundaries());
expiry(builder.config.getExpiry());
bufferLength(builder.config.getBufferLength());
minimumExpectedValue(builder.config.getMinimumExpectedValueAsDouble());
maximumExpectedValue(builder.config.getMaximumExpectedValueAsDouble());
}

public Builder percentilesHistogram(@Nullable Boolean enabled) {
config.percentileHistogram = enabled;
return this;
Expand Down
@@ -0,0 +1,33 @@
package io.micrometer.core.samples;

import io.micrometer.core.instrument.Tags;
import io.micrometer.core.instrument.Timer;
import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;

import java.time.Duration;
import java.util.function.Function;

public class Demo {

private static final PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);

private static final Function<Tags, Timer> timerFactory = Timer.builder("cache.initialization.latency")
.description("Time initialize cache from database")
.tag("static", "abc")
.publishPercentiles(0.99, 0.999)
.publishPercentileHistogram()
.minimumExpectedValue(Duration.ofSeconds(10))
.maximumExpectedValue(Duration.ofSeconds(600))
.with(registry);

public static void main(String[] args) {
doSomething("test");
}

private static void doSomething(String cacheName) {
timerFactory.apply(Tags.of("cacheName", cacheName)).record(Duration.ofMillis(100));
System.out.println(registry.scrape());
}

}

0 comments on commit f47c83b

Please sign in to comment.