TLA Line data Source code
1 : //! Helpers for observing duration on `HistogramVec` / `CounterVec` / `GaugeVec` / `MetricVec<T>`.
2 :
3 : use std::{future::Future, time::Instant};
4 :
5 : pub trait DurationResultObserver {
6 : fn observe_result<T, E>(&self, res: &Result<T, E>, duration: std::time::Duration);
7 : }
8 :
9 CBC 638 : pub async fn observe_async_block_duration_by_result<
10 638 : T,
11 638 : E,
12 638 : F: Future<Output = Result<T, E>>,
13 638 : O: DurationResultObserver,
14 638 : >(
15 638 : observer: &O,
16 638 : block: F,
17 638 : ) -> Result<T, E> {
18 638 : let start = Instant::now();
19 40022 : let result = block.await;
20 638 : let duration = start.elapsed();
21 638 : observer.observe_result(&result, duration);
22 638 : result
23 638 : }
|