micrometer-metrics/micrometer

Timer API does not support Kotlin suspend function (coroutines)

Open

#4,455 opened on 2023年12月7日

GitHub で見る
 (4 comments) (6 reactions) (0 assignees)Java (935 forks)batch import
enhancementhelp wantedkotlin

Repository metrics

Stars
 (4,220 stars)
PR merge metrics
 (平均マージ 1d 21h) (30d で 100 merged PRs)

説明

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.

コントリビューターガイド