Search in sources :

Example 11 with Timer

use of io.micrometer.core.instrument.Timer in project micrometer by micrometer-metrics.

the class TimerTest method recordWithRunnable.

@Test
@DisplayName("record a runnable task")
default void recordWithRunnable(MeterRegistry registry) {
    Timer t = registry.timer("myTimer");
    try {
        t.record(() -> clock(registry).add(10, TimeUnit.NANOSECONDS));
        clock(registry).add(step());
    } finally {
        assertAll(() -> assertEquals(1L, t.count()), () -> assertEquals(10, t.totalTime(TimeUnit.NANOSECONDS), 1.0e-12));
    }
}
Also used : Timer(io.micrometer.core.instrument.Timer) Test(org.junit.jupiter.api.Test) DisplayName(org.junit.jupiter.api.DisplayName)

Example 12 with Timer

use of io.micrometer.core.instrument.Timer in project micrometer by micrometer-metrics.

the class TimerTest method recordMax.

@Test
default void recordMax(MeterRegistry registry) {
    Timer timer = registry.timer("my.timer");
    timer.record(10, TimeUnit.MILLISECONDS);
    timer.record(1, TimeUnit.SECONDS);
    // for Atlas, which is step rather than ring-buffer based
    clock(registry).add(step());
    assertThat(timer.max(TimeUnit.SECONDS)).isEqualTo(1);
    assertThat(timer.max(TimeUnit.MILLISECONDS)).isEqualTo(1000);
    // noinspection ConstantConditions
    clock(registry).add(Duration.ofMillis(step().toMillis() * DistributionStatisticConfig.DEFAULT.getBufferLength()));
    assertThat(timer.max(TimeUnit.SECONDS)).isEqualTo(0);
}
Also used : Timer(io.micrometer.core.instrument.Timer) Test(org.junit.jupiter.api.Test)

Example 13 with Timer

use of io.micrometer.core.instrument.Timer in project micrometer by micrometer-metrics.

the class TimerTest method recordDuration.

@Test
@DisplayName("record durations")
default void recordDuration(MeterRegistry registry) {
    Timer t = registry.timer("myTimer");
    t.record(Duration.ofMillis(42));
    clock(registry).add(step());
    assertAll(() -> assertEquals(1L, t.count()), () -> assertEquals(42, t.totalTime(TimeUnit.MILLISECONDS), 1.0e-12));
}
Also used : Timer(io.micrometer.core.instrument.Timer) Test(org.junit.jupiter.api.Test) DisplayName(org.junit.jupiter.api.DisplayName)

Example 14 with Timer

use of io.micrometer.core.instrument.Timer in project micrometer by micrometer-metrics.

the class TimerTest method recordWithSample.

@Test
@DisplayName("record with stateful Sample instance")
default void recordWithSample(MeterRegistry registry) {
    Timer timer = registry.timer("myTimer");
    Timer.Sample sample = Timer.start(registry);
    clock(registry).add(10, TimeUnit.NANOSECONDS);
    sample.stop(timer);
    clock(registry).add(step());
    assertAll(() -> assertEquals(1L, timer.count()), () -> assertEquals(10, timer.totalTime(TimeUnit.NANOSECONDS), 1.0e-12));
}
Also used : Timer(io.micrometer.core.instrument.Timer) Test(org.junit.jupiter.api.Test) DisplayName(org.junit.jupiter.api.DisplayName)

Example 15 with Timer

use of io.micrometer.core.instrument.Timer in project micrometer by micrometer-metrics.

the class FunctionTimerSample method main.

// For Atlas: http://localhost:7101/api/v1/graph?q=name,ftimer,:eq,:dist-avg,name,timer,:eq,:dist-avg,1,:axis&s=e-5m&l=0
public static void main(String[] args) {
    MeterRegistry registry = SampleConfig.myMonitoringSystem();
    Timer timer = Timer.builder("timer").publishPercentiles(0.5, 0.95).register(registry);
    Object placeholder = new Object();
    AtomicLong totalTimeNanos = new AtomicLong(0);
    AtomicLong totalCount = new AtomicLong(0);
    FunctionTimer.builder("ftimer", placeholder, p -> totalCount.get(), p -> totalTimeNanos.get(), TimeUnit.NANOSECONDS).register(registry);
    RandomEngine r = new MersenneTwister64(0);
    Normal incomingRequests = new Normal(0, 1, r);
    Normal duration = new Normal(250, 50, r);
    AtomicInteger latencyForThisSecond = new AtomicInteger(duration.nextInt());
    Flux.interval(Duration.ofSeconds(1)).doOnEach(d -> latencyForThisSecond.set(duration.nextInt())).subscribe();
    // the potential for an "incoming request" every 10 ms
    Flux.interval(Duration.ofMillis(10)).doOnEach(d -> {
        if (incomingRequests.nextDouble() + 0.4 > 0) {
            // pretend the request took some amount of time, such that the time is
            // distributed normally with a mean of 250ms
            timer.record(latencyForThisSecond.get(), TimeUnit.MILLISECONDS);
            totalCount.incrementAndGet();
            totalTimeNanos.addAndGet((long) TimeUtils.millisToUnit(latencyForThisSecond.get(), TimeUnit.NANOSECONDS));
        }
    }).blockLast();
}
Also used : SampleConfig(io.micrometer.core.samples.utils.SampleConfig) Normal(cern.jet.random.Normal) FunctionTimer(io.micrometer.core.instrument.FunctionTimer) TimeUtils(io.micrometer.core.instrument.util.TimeUtils) TimeUnit(java.util.concurrent.TimeUnit) Flux(reactor.core.publisher.Flux) AtomicLong(java.util.concurrent.atomic.AtomicLong) Timer(io.micrometer.core.instrument.Timer) RandomEngine(cern.jet.random.engine.RandomEngine) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) Duration(java.time.Duration) MersenneTwister64(cern.jet.random.engine.MersenneTwister64) AtomicLong(java.util.concurrent.atomic.AtomicLong) FunctionTimer(io.micrometer.core.instrument.FunctionTimer) Timer(io.micrometer.core.instrument.Timer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MersenneTwister64(cern.jet.random.engine.MersenneTwister64) RandomEngine(cern.jet.random.engine.RandomEngine) Normal(cern.jet.random.Normal) MeterRegistry(io.micrometer.core.instrument.MeterRegistry)

Aggregations

Timer (io.micrometer.core.instrument.Timer)26 Test (org.junit.jupiter.api.Test)11 MeterRegistry (io.micrometer.core.instrument.MeterRegistry)9 DisplayName (org.junit.jupiter.api.DisplayName)7 LongTaskTimer (io.micrometer.core.instrument.LongTaskTimer)6 SimpleMeterRegistry (io.micrometer.core.instrument.simple.SimpleMeterRegistry)6 Duration (java.time.Duration)5 TimeUnit (java.util.concurrent.TimeUnit)5 Test (org.junit.Test)5 Normal (cern.jet.random.Normal)4 MersenneTwister64 (cern.jet.random.engine.MersenneTwister64)4 RandomEngine (cern.jet.random.engine.RandomEngine)4 SampleConfig (io.micrometer.core.samples.utils.SampleConfig)4 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)4 Flux (reactor.core.publisher.Flux)4 FunctionTimer (io.micrometer.core.instrument.FunctionTimer)3 Timed (io.micrometer.core.annotation.Timed)2 DistributionSummary (io.micrometer.core.instrument.DistributionSummary)2 Match (io.vertx.micrometer.Match)2 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)1