1use prometheus::{
5 HistogramVec, IntCounterVec, Registry, register_histogram_vec_with_registry,
6 register_int_counter_vec_with_registry,
7};
8use std::sync::Arc;
9
10pub(crate) struct KvMetrics {
11 pub kv_get_success: IntCounterVec,
12 pub kv_get_not_found: IntCounterVec,
13 pub kv_get_errors: IntCounterVec,
14 pub kv_get_latency_ms: HistogramVec,
15 pub kv_get_batch_size: HistogramVec,
16 pub kv_get_latency_ms_per_key: HistogramVec,
17 pub kv_scan_success: IntCounterVec,
18 pub kv_scan_not_found: IntCounterVec,
19 pub kv_scan_error: IntCounterVec,
20 pub kv_scan_latency_ms: HistogramVec,
21 pub kv_bt_chunk_latency_ms: HistogramVec,
22 pub kv_bt_chunk_rows_returned_count: IntCounterVec,
23 pub kv_bt_chunk_rows_seen_count: IntCounterVec,
24}
25
26impl KvMetrics {
27 pub(crate) fn new(registry: &Registry) -> Arc<Self> {
28 Arc::new(Self {
29 kv_get_success: register_int_counter_vec_with_registry!(
30 "kv_get_success",
31 "Number of successful fetches from kv store",
32 &["client", "table"],
33 registry,
34 )
35 .unwrap(),
36 kv_get_not_found: register_int_counter_vec_with_registry!(
37 "kv_get_not_found",
38 "Number of fetches from kv store that returned not found",
39 &["client", "table"],
40 registry,
41 )
42 .unwrap(),
43 kv_get_errors: register_int_counter_vec_with_registry!(
44 "kv_get_errors",
45 "Number of fetches from kv store that returned an error",
46 &["client", "table"],
47 registry,
48 )
49 .unwrap(),
50 kv_get_latency_ms: register_histogram_vec_with_registry!(
51 "kv_get_latency_ms",
52 "Latency of fetches from kv store",
53 &["client", "table"],
54 prometheus::exponential_buckets(1.0, 1.6, 24)
55 .unwrap()
56 .to_vec(),
57 registry,
58 )
59 .unwrap(),
60 kv_get_batch_size: register_histogram_vec_with_registry!(
61 "kv_get_batch_size",
62 "Number of keys fetched per batch from kv store",
63 &["client", "table"],
64 prometheus::exponential_buckets(1.0, 1.6, 20)
65 .unwrap()
66 .to_vec(),
67 registry,
68 )
69 .unwrap(),
70 kv_get_latency_ms_per_key: register_histogram_vec_with_registry!(
71 "kv_get_latency_ms_per_key",
72 "Latency of fetches from kv store per key",
73 &["client", "table"],
74 prometheus::exponential_buckets(1.0, 1.6, 24)
75 .unwrap()
76 .to_vec(),
77 registry,
78 )
79 .unwrap(),
80 kv_scan_success: register_int_counter_vec_with_registry!(
81 "kv_scan_success",
82 "Number of successful scans from kv store",
83 &["client", "table"],
84 registry,
85 )
86 .unwrap(),
87 kv_scan_not_found: register_int_counter_vec_with_registry!(
88 "kv_scan_not_found",
89 "Number of fetches from kv store that returned not found",
90 &["client", "table"],
91 registry,
92 )
93 .unwrap(),
94 kv_scan_error: register_int_counter_vec_with_registry!(
95 "kv_scan_error",
96 "Number of scans from kv store that returned an error",
97 &["client", "table"],
98 registry,
99 )
100 .unwrap(),
101 kv_scan_latency_ms: register_histogram_vec_with_registry!(
102 "kv_scan_latency_ms",
103 "Latency of scans from kv store",
104 &["client", "table"],
105 prometheus::exponential_buckets(1.0, 1.6, 24)
106 .unwrap()
107 .to_vec(),
108 registry,
109 )
110 .unwrap(),
111 kv_bt_chunk_latency_ms: register_histogram_vec_with_registry!(
112 "kv_bt_chunk_latency_ms",
113 "Reported BigTable latency for a single chunk",
114 &["client", "table"],
115 prometheus::exponential_buckets(1.0, 1.6, 24)
116 .unwrap()
117 .to_vec(),
118 registry,
119 )
120 .unwrap(),
121 kv_bt_chunk_rows_returned_count: register_int_counter_vec_with_registry!(
122 "kv_bt_chunk_rows_returned_count",
123 "Reported BigTable rows returned count for a single chunk",
124 &["client", "table"],
125 registry,
126 )
127 .unwrap(),
128 kv_bt_chunk_rows_seen_count: register_int_counter_vec_with_registry!(
129 "kv_bt_chunk_rows_seen_count",
130 "Reported BigTable rows seen count for a single chunk",
131 &["client", "table"],
132 registry,
133 )
134 .unwrap(),
135 })
136 }
137}