Search in sources :

Example 6 with Timer

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

the class SimpleMeterRegistryTest method slasOnlyNoPercentileHistogram.

@Issue("#370")
@Test
void slasOnlyNoPercentileHistogram() {
    DistributionSummary summary = DistributionSummary.builder("my.summary").sla(1, 2).register(registry);
    summary.record(1);
    Timer timer = Timer.builder("my.timer").sla(Duration.ofMillis(1)).register(registry);
    timer.record(1, TimeUnit.MILLISECONDS);
    Gauge summaryHist1 = registry.get("my.summary.histogram").tags("le", "1").gauge();
    Gauge summaryHist2 = registry.get("my.summary.histogram").tags("le", "2").gauge();
    Gauge timerHist = registry.get("my.timer.histogram").tags("le", "0.001").gauge();
    assertThat(summaryHist1.value()).isEqualTo(1);
    assertThat(summaryHist2.value()).isEqualTo(1);
    assertThat(timerHist.value()).isEqualTo(1);
    clock.add(SimpleConfig.DEFAULT.step());
    assertThat(summaryHist1.value()).isEqualTo(0);
    assertThat(summaryHist2.value()).isEqualTo(0);
    assertThat(timerHist.value()).isEqualTo(0);
}
Also used : DistributionSummary(io.micrometer.core.instrument.DistributionSummary) Timer(io.micrometer.core.instrument.Timer) Gauge(io.micrometer.core.instrument.Gauge) Issue(io.micrometer.core.Issue) Test(org.junit.jupiter.api.Test)

Example 7 with Timer

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

the class MetricsRequestEventListener method onEvent.

@Override
public void onEvent(RequestEvent event) {
    ContainerRequest containerRequest = event.getContainerRequest();
    Set<Timed> timedAnnotations;
    switch(event.getType()) {
        case ON_EXCEPTION:
            if (!(event.getException() instanceof NotFoundException)) {
                break;
            }
        case REQUEST_MATCHED:
            timedAnnotations = annotations(event);
            timedAnnotationsOnRequest.put(containerRequest, timedAnnotations);
            shortTaskSample.put(containerRequest, Timer.start(registry));
            List<LongTaskTimer.Sample> longTaskSamples = longTaskTimers(timedAnnotations, event).stream().map(LongTaskTimer::start).collect(Collectors.toList());
            if (!longTaskSamples.isEmpty()) {
                this.longTaskSamples.put(containerRequest, longTaskSamples);
            }
            break;
        case FINISHED:
            timedAnnotations = timedAnnotationsOnRequest.remove(containerRequest);
            Timer.Sample shortSample = shortTaskSample.remove(containerRequest);
            if (shortSample != null) {
                for (Timer timer : shortTimers(timedAnnotations, event)) {
                    shortSample.stop(timer);
                }
            }
            Collection<LongTaskTimer.Sample> longSamples = this.longTaskSamples.remove(containerRequest);
            if (longSamples != null) {
                for (LongTaskTimer.Sample longSample : longSamples) {
                    longSample.stop();
                }
            }
            break;
    }
}
Also used : LongTaskTimer(io.micrometer.core.instrument.LongTaskTimer) Timer(io.micrometer.core.instrument.Timer) Timed(io.micrometer.core.annotation.Timed) NotFoundException(javax.ws.rs.NotFoundException) ContainerRequest(org.glassfish.jersey.server.ContainerRequest) LongTaskTimer(io.micrometer.core.instrument.LongTaskTimer)

Example 8 with Timer

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

the class SpectatorTimerTest method timerMax.

@Test
void timerMax() {
    AtlasConfig atlasConfig = k -> null;
    AtlasMeterRegistry registry = new AtlasMeterRegistry(atlasConfig, new MockClock());
    Timer timer = registry.timer("timer");
    timer.record(1, TimeUnit.SECONDS);
    clock(registry).add(atlasConfig.step());
    assertThat(timer.max(TimeUnit.MILLISECONDS)).isEqualTo(1000);
}
Also used : Test(org.junit.jupiter.api.Test) TimeUnit(java.util.concurrent.TimeUnit) AtlasConfig(com.netflix.spectator.atlas.AtlasConfig) Timer(io.micrometer.core.instrument.Timer) MockClock(io.micrometer.core.instrument.MockClock) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) MockClock.clock(io.micrometer.core.instrument.MockClock.clock) Timer(io.micrometer.core.instrument.Timer) AtlasConfig(com.netflix.spectator.atlas.AtlasConfig) MockClock(io.micrometer.core.instrument.MockClock) Test(org.junit.jupiter.api.Test)

Example 9 with Timer

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

the class TimerMaximumThroughputSample method main.

public static void main(String[] args) {
    MeterRegistry registry = SampleConfig.myMonitoringSystem();
    Timer timer = Timer.builder("timer").publishPercentileHistogram().sla(Duration.ofMillis(275), Duration.ofMillis(300), Duration.ofMillis(500)).distributionStatisticExpiry(Duration.ofSeconds(10)).distributionStatisticBufferLength(3).register(registry);
    RandomEngine r = new MersenneTwister64(0);
    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();
    Stream<Integer> infiniteStream = Stream.iterate(0, i -> (i + 1) % 1000);
    Flux.fromStream(infiniteStream).parallel(4).runOn(Schedulers.parallel()).doOnEach(d -> timer.record(latencyForThisSecond.get(), TimeUnit.MILLISECONDS)).subscribe();
    Flux.never().blockLast();
}
Also used : TimeUnit(java.util.concurrent.TimeUnit) Flux(reactor.core.publisher.Flux) Timer(io.micrometer.core.instrument.Timer) Stream(java.util.stream.Stream) RandomEngine(cern.jet.random.engine.RandomEngine) SampleConfig(io.micrometer.core.samples.utils.SampleConfig) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Normal(cern.jet.random.Normal) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) Duration(java.time.Duration) MersenneTwister64(cern.jet.random.engine.MersenneTwister64) Schedulers(reactor.core.scheduler.Schedulers) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) 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)

Example 10 with Timer

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

the class TimerSample method main.

public static void main(String[] args) {
    MeterRegistry registry = SampleConfig.myMonitoringSystem();
    Timer timer = Timer.builder("timer").publishPercentileHistogram().publishPercentiles(0.5, 0.95, 0.99).sla(Duration.ofMillis(275), Duration.ofMillis(300), Duration.ofMillis(500)).distributionStatisticExpiry(Duration.ofSeconds(10)).distributionStatisticBufferLength(3).register(registry);
    FunctionTimer.builder("ftimer", timer, Timer::count, t -> t.totalTime(TimeUnit.SECONDS), TimeUnit.SECONDS).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);
        }
    }).blockLast();
}
Also used : TimeUnit(java.util.concurrent.TimeUnit) Flux(reactor.core.publisher.Flux) Timer(io.micrometer.core.instrument.Timer) RandomEngine(cern.jet.random.engine.RandomEngine) SampleConfig(io.micrometer.core.samples.utils.SampleConfig) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Normal(cern.jet.random.Normal) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) Duration(java.time.Duration) MersenneTwister64(cern.jet.random.engine.MersenneTwister64) FunctionTimer(io.micrometer.core.instrument.FunctionTimer) Timer(io.micrometer.core.instrument.Timer) FunctionTimer(io.micrometer.core.instrument.FunctionTimer) 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