public Sample start(MeterRegistry registry) { if (longTask) { LongTaskTimer.Sample sample = LongTaskTimer.builder(name) .description(description) .tags(tags) .register(registry) .start(); return () -> sample.stop(); } Timer.Sample sample = Timer.start(registry); Timer timer = Timer.builder(name) .description(description) .tags(tags) .publishPercentileHistogram(histogram) .publishPercentiles(percentiles) .register(registry); return () -> sample.stop(timer); }
private Stream<MetricDatum> longTaskTimerData(LongTaskTimer longTaskTimer) { return Stream.of( metricDatum(longTaskTimer.getId(), "activeTasks", longTaskTimer.activeTasks()), metricDatum(longTaskTimer.getId(), "duration", longTaskTimer.duration(getBaseTimeUnit()))); }
@Override protected void serializeStatistics(LongTaskTimer timer, JsonGenerator json, SerializerProvider provider) throws IOException { json.writeNumberField("activeTasks", timer.activeTasks()); json.writeNumberField("duration", timer.duration(timeUnit)); } }
@Test @DisplayName("total time is preserved for a single timing") default void record(MeterRegistry registry) { LongTaskTimer t = registry.more().longTaskTimer("myTimer"); LongTaskTimer.Sample sample = t.start(); clock(registry).add(10, TimeUnit.NANOSECONDS); assertAll(() -> assertEquals(10, t.duration(TimeUnit.NANOSECONDS)), () -> assertEquals(0.01, t.duration(TimeUnit.MICROSECONDS)), () -> assertEquals(10, sample.duration(TimeUnit.NANOSECONDS)), () -> assertEquals(0.01, sample.duration(TimeUnit.MICROSECONDS)), () -> assertEquals(1, t.activeTasks())); clock(registry).add(10, TimeUnit.NANOSECONDS); sample.stop(); assertAll(() -> assertEquals(0, t.duration(TimeUnit.NANOSECONDS)), () -> assertEquals(-1, sample.duration(TimeUnit.NANOSECONDS)), () -> assertEquals(0, t.activeTasks())); } }
private Object recordThrowable(LongTaskTimer timer, ThrowableCallable f) throws Throwable { LongTaskTimer.Sample timing = timer.start(); try { return f.call(); } finally { timing.stop(); } }
longTaskTimer = LongTaskTimer.builder(timed.value()) .tags(timed.extraTags()) .description("Timer of @Scheduled long task")
private Stream<String> writeLongTaskTimer(LongTaskTimer ltt) { return Stream.of( event(ltt.getId(), new Attribute("activeTasks", ltt.activeTasks()), new Attribute("duration", ltt.duration(getBaseTimeUnit()))) ); }
Optional<String> writeLongTaskTimer(LongTaskTimer timer) { return Optional.of(writeDocument(timer, builder -> { builder.append(",\"activeTasks\":").append(timer.activeTasks()); builder.append(",\"duration\":").append(timer.duration(getBaseTimeUnit())); })); }
@Nullable private Optional<String> writeLongTaskTimer(LongTaskTimer timer) { int activeTasks = timer.activeTasks(); if (activeTasks > 0) { return Optional.of(write(timer.getId(), "longTaskTimer", Fields.Count.tag(), decimal(activeTasks), Fields.Sum.tag(), decimal(timer.duration(getBaseTimeUnit())))); } return Optional.empty(); }
private Stream<SignalFxProtocolBuffers.DataPoint.Builder> addLongTaskTimer(LongTaskTimer longTaskTimer) { return Stream.of( addDatapoint(longTaskTimer, GAUGE, "activeTasks", longTaskTimer.activeTasks()), addDatapoint(longTaskTimer, COUNTER, "duration", longTaskTimer.duration(getBaseTimeUnit())) ); }
private Collection<LongTaskTimer.Sample> getLongTaskTimerSamples( HttpServletRequest request, Object handler, Set<Timed> annotations) { List<LongTaskTimer.Sample> samples = new ArrayList<>(); annotations.stream().filter(Timed::longTask).forEach((annotation) -> { Iterable<Tag> tags = this.tagsProvider.getLongRequestTags(request, handler); LongTaskTimer.Builder builder = LongTaskTimer.builder(annotation).tags(tags); LongTaskTimer timer = builder.register(this.registry); samples.add(timer.start()); }); return samples; }
Stream<String> writeLongTaskTimer(LongTaskTimer timer) { long wallTime = config().clock().wallTime(); return Stream.of( writeMetric(idWithSuffix(timer.getId(), "activeTasks"), wallTime, timer.activeTasks()), writeMetric(idWithSuffix(timer.getId(), "duration"), wallTime, timer.duration(getBaseTimeUnit())) ); }
private Stream<TimeSeries> createLongTaskTimer(Batch batch, LongTaskTimer longTaskTimer) { return Stream.of( batch.createTimeSeries(longTaskTimer, longTaskTimer.activeTasks(), "activeTasks"), batch.createTimeSeries(longTaskTimer, longTaskTimer.duration(getBaseTimeUnit()), "duration") ); }
TimingSampleContext(HttpServletRequest request, Object handlerObject) { timedAnnotations = annotations(handlerObject); timerSample = Timer.start(registry); longTaskTimerSamples = timedAnnotations.stream() .filter(Timed::longTask) .map(t -> LongTaskTimer.builder(t) .tags(tagsProvider.httpLongRequestTags(request, handlerObject)) .register(registry) .start()) .collect(Collectors.toList()); }
private void announceLongTaskTimer(LongTaskTimer longTaskTimer) { announce(longTaskTimer, longTaskTimer.activeTasks(), "activeTasks"); announce(longTaskTimer, longTaskTimer.duration(getBaseTimeUnit()), "duration"); }