dynamo_runtime/metrics/
work_handler_perf.rs1use once_cell::sync::{Lazy, OnceCell};
8use prometheus::{Histogram, HistogramOpts};
9
10use super::prometheus_names::{name_prefix, work_handler};
11use crate::MetricsRegistry;
12
13fn work_handler_metric_name(suffix: &str) -> String {
14 format!("{}_{}", name_prefix::WORK_HANDLER, suffix)
15}
16
17pub static WORK_HANDLER_NETWORK_TRANSIT_SECONDS: Lazy<Histogram> = Lazy::new(|| {
19 Histogram::with_opts(
20 HistogramOpts::new(
21 work_handler_metric_name(work_handler::NETWORK_TRANSIT_SECONDS),
22 "Frontend-to-backend network transit time (cross-process wall-clock, seconds)",
23 )
24 .buckets(vec![
25 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1.0,
26 ]),
27 )
28 .expect("work_handler_network_transit_seconds histogram")
29});
30
31pub static WORK_HANDLER_TIME_TO_FIRST_RESPONSE_SECONDS: Lazy<Histogram> = Lazy::new(|| {
33 Histogram::with_opts(
34 HistogramOpts::new(
35 work_handler_metric_name(work_handler::TIME_TO_FIRST_RESPONSE_SECONDS),
36 "Backend processing time from handle_payload entry to prologue sent (seconds)",
37 )
38 .buckets(vec![
39 0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0, 30.0, 60.0,
40 ]),
41 )
42 .expect("work_handler_time_to_first_response_seconds histogram")
43});
44
45static METRICS_REGISTERED: OnceCell<()> = OnceCell::new();
47
48pub fn ensure_work_handler_perf_metrics_registered(registry: &MetricsRegistry) {
50 let _ = METRICS_REGISTERED.get_or_init(|| {
51 registry.add_metric_or_warn(
52 Box::new(WORK_HANDLER_NETWORK_TRANSIT_SECONDS.clone()),
53 "work_handler_network_transit_seconds",
54 );
55 registry.add_metric_or_warn(
56 Box::new(WORK_HANDLER_TIME_TO_FIRST_RESPONSE_SECONDS.clone()),
57 "work_handler_time_to_first_response_seconds",
58 );
59 });
60}