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);
}
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;
}
}
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);
}
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();
}
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();
}
Aggregations