/** * Returns a newly-registered {@link Timer} with percentile publication configured. * @deprecated Use {@link #newTimer(MeterRegistry, String, Iterable)}. */ @Deprecated public static Timer timerWithDefaultQuantiles(MeterRegistry registry, String name, Iterable<Tag> tags) { requireNonNull(registry, "registry"); requireNonNull(name, "name"); requireNonNull(tags, "tags"); return Timer.builder(name) .tags(tags) .publishPercentiles(PERCENTILES) .register(registry); }
/** * Returns a newly-registered {@link Timer} configured by {@link #distributionStatisticConfig()}. */ public static Timer newTimer(MeterRegistry registry, String name, Iterable<Tag> tags) { requireNonNull(registry, "registry"); requireNonNull(name, "name"); requireNonNull(tags, "tags"); final Duration maxExpectedValue = Optional.ofNullable(distStatCfg.getMaximumExpectedValue()) .map(Duration::ofNanos).orElse(null); final Duration minExpectedValue = Optional.ofNullable(distStatCfg.getMinimumExpectedValue()) .map(Duration::ofNanos).orElse(null); return Timer.builder(name) .tags(tags) .maximumExpectedValue(maxExpectedValue) .minimumExpectedValue(minExpectedValue) .publishPercentiles(distStatCfg.getPercentiles()) .publishPercentileHistogram(distStatCfg.isPercentileHistogram()) .distributionStatisticBufferLength(distStatCfg.getBufferLength()) .distributionStatisticExpiry(distStatCfg.getExpiry()) .register(registry); }
.builder(FluxMetrics.METER_FLOW_DURATION) .tags(commonTags) .tag(FluxMetrics.TAG_STATUS, FluxMetrics.TAGVALUE_ON_COMPLETE) .register(registry); this.subscribeToCancelTimer = Timer .builder(FluxMetrics.METER_FLOW_DURATION) .tags(commonTags) .tag(FluxMetrics.TAG_STATUS, FluxMetrics.TAGVALUE_CANCEL) .builder(FluxMetrics.METER_FLOW_DURATION) .tags(commonTags) .tag(FluxMetrics.TAG_STATUS, FluxMetrics.TAGVALUE_ON_ERROR)
.builder(METER_FLOW_DURATION) .tags(commonTags) .tag(TAG_STATUS, TAGVALUE_ON_COMPLETE) .register(registry); this.subscribeToCancelTimer = Timer .builder(METER_FLOW_DURATION) .tags(commonTags) .tag(TAG_STATUS, TAGVALUE_CANCEL) .builder(METER_FLOW_DURATION) .tags(commonTags) .tag(TAG_STATUS, TAGVALUE_ON_ERROR) .builder(METER_ON_NEXT_DELAY) .tags(commonTags) .description("Measures delays between onNext signals (or between onSubscribe and first onNext)")
MicroTimerBuilder(MeterRegistry meterRegistry, String name) { this.meterRegistry = meterRegistry; this.builder = Timer.builder(name); }
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); }
this.connectionObtainTimer = Timer.builder(METRIC_NAME_WAIT) .description("Connection acquire time") .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); this.connectionCreation = Timer.builder(METRIC_NAME_CONNECT) .description("Connection creation time") .tags(METRIC_CATEGORY, poolName) .register(meterRegistry); this.connectionUsage = Timer.builder(METRIC_NAME_USAGE) .description("Connection usage time") .tags(METRIC_CATEGORY, poolName)
private Timer.Builder getTimeBuilder(HttpRequest request, ClientHttpResponse response) { return Timer.builder(this.metricName) .tags(this.tagProvider.getTags(urlTemplate.get(), request, response)) .description("Timer of RestTemplate operation"); }
private void record(TimingContext timingContext, HttpServletResponse response, HttpServletRequest request, Throwable exception) { Object handlerObject = request .getAttribute(HandlerMapping.BEST_MATCHING_HANDLER_ATTRIBUTE); Set<Timed> annotations = getTimedAnnotations(handlerObject); Timer.Sample timerSample = timingContext.getTimerSample(); Supplier<Iterable<Tag>> tags = () -> this.tagsProvider.getTags(request, response, handlerObject, exception); if (annotations.isEmpty()) { if (this.autoTimeRequests) { stop(timerSample, tags, Timer.builder(this.metricName)); } } else { for (Timed annotation : annotations) { stop(timerSample, tags, Timer.builder(annotation, this.metricName)); } } }
/** * Creates a new timer builder for the given method. * * @param method The method the timer will be created for. * @param name The name of the timer to use. * @param description The description of the timer to use. * @return The newly created timer builder. */ public static Timer.Builder prepareTimerFor(final MethodDescriptor<?, ?> method, final String name, final String description) { return Timer.builder(name) .description(description) .tag(TAG_SERVICE_NAME, extractServiceName(method)) .tag(TAG_METHOD_NAME, extractMethodName(method)); }
@Override public Mono<ClientResponse> filter(ClientRequest clientRequest, ExchangeFunction exchangeFunction) { return exchangeFunction.exchange(clientRequest).doOnEach((signal) -> { if (!signal.isOnComplete()) { Long startTime = signal.getContext().get(METRICS_WEBCLIENT_START_TIME); ClientResponse clientResponse = signal.get(); Throwable throwable = signal.getThrowable(); Iterable<Tag> tags = this.tagProvider.tags(clientRequest, clientResponse, throwable); Timer.builder(this.metricName).tags(tags) .description("Timer of WebClient operation") .register(this.meterRegistry) .record(System.nanoTime() - startTime, TimeUnit.NANOSECONDS); } }).subscriberContext((context) -> context.put(METRICS_WEBCLIENT_START_TIME, System.nanoTime())); }
private Timer.Builder getTimerBuilder(MethodProceedingJoinPoint methodProceedingJoinPoint, Throwable throwable) { return Timer.builder(format(METRIC_NAME, getComponentType())) .tags(createTags(methodProceedingJoinPoint, throwable)) .description(format("Timer of %s operations", getComponentType())); }
@Deprecated @Test default void histogramCounts(MeterRegistry registry) { Timer t = Timer.builder("my.timer") .sla(Duration.ofMillis(1)) .register(registry); t.record(1, TimeUnit.MILLISECONDS); assertThat(t.histogramCountAtValue((long) millisToUnit(1, TimeUnit.NANOSECONDS))).isEqualTo(1); assertThat(t.histogramCountAtValue(1)).isEqualTo(Double.NaN); } }
public Timer get(String... values) { // Get or create the Timer return Timer.builder(name) .description(description) .tags(Labels.toTags(keys, values)) .register(registry); }
public MicrometerTimer(MeterRegistry meterRegistry, MetricId id) { super(id); timer = io.micrometer.core.instrument.Timer.builder(id.getName()) .description(id.getDescription()) .tags(id.getTags().stream().map(tag -> Tag.of(tag.getKey(), tag.getValue())) .collect(Collectors.toList())) .publishPercentiles(0.5, 0.75, 0.98, 0.99, 0.999) .register(meterRegistry); }
private Timer.Builder getActionTimerBuilder(Action<S, E> action) { String actionName = actionToName(action); Timer.Builder builder = Timer.builder("ssm.action.duration") .tags("actionName", actionName) .description("Timer of Action"); builder.publishPercentileHistogram(); return builder; }
@Deprecated @Test default void percentiles(MeterRegistry registry) { Timer t = Timer.builder("my.timer") .publishPercentiles(1) .register(registry); t.record(1, TimeUnit.MILLISECONDS); assertThat(t.percentile(1, TimeUnit.MILLISECONDS)).isEqualTo(1, Offset.offset(0.3)); assertThat(t.percentile(0.5, TimeUnit.MILLISECONDS)).isEqualTo(Double.NaN); }
@Test @DisplayName("meters with synthetics can be removed without causing deadlocks") void removeMeterWithSynthetic(MeterRegistry registry) { Timer timer = Timer.builder("my.timer") .publishPercentiles(0.95) .sla(Duration.ofMillis(10)) .register(registry); registry.remove(timer); }
public void onExchangeDone(Exchange exchange) { Timer.Sample sample = (Timer.Sample) exchange.removeProperty(propertyName(exchange)); if (sample != null) { Timer timer = Timer.builder(namingStrategy.getName(route)) .tags(namingStrategy.getTags(route, exchange)) .description(route.getDescription()) .register(meterRegistry); sample.stop(timer); } }
@Override public void nodeProcessingDone() { super.nodeProcessingDone(); Timer timer = Timer.builder(namingStrategy.getName(route, getNode())) .tags(namingStrategy.getTags(route, getNode())) .description(getNode().getDescriptionText()) .register(meterRegistry); sample.stop(timer); }