micrometer-metrics/micrometer

Timer API does not support Kotlin suspend function (coroutines)

Open

#4.455 aberto em 7 de dez. de 2023

Ver no GitHub
 (4 comments) (6 reactions) (0 assignees)Java (935 forks)batch import
enhancementhelp wantedkotlin

Métricas do repositório

Stars
 (4.220 stars)
Métricas de merge de PR
 (Mesclagem média 1d 21h) (100 fundiu PRs em 30d)

Description

Please describe the feature request.

For standard (non suspend functions) it is possible to use record function to measure method invocation time:

Timer.builder("method.timed")
            .register(meterRegistry)
            .record { fn() } // fn() is a standard, non suspend function

However, it is not possible to call a suspend function from within record block:

Timer.builder("method.timed")
            .register(meterRegistry)
            .record { suspendFn() } // Suspension functions can be called only within coroutine body

The support for suspend functions should be added to the library.

Rationale Suspend functions are popular for non-blocking API, and it is currently not possible to measure time needed to call suspend functions without having a custom function to record the time.

Additional context Maybe this could be added as a extension function to the Timer interface.

Guia do colaborador