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