iota_core/execution_cache/
metrics.rs1use prometheus::{
6 IntCounterVec, IntGauge, Registry, register_int_counter_vec_with_registry,
7 register_int_gauge_with_registry,
8};
9use tracing::trace;
10
11pub struct ExecutionCacheMetrics {
12 pub(crate) pending_notify_read: IntGauge,
13 pub(crate) cache_requests: IntCounterVec,
14 pub(crate) cache_hits: IntCounterVec,
15 pub(crate) cache_negative_hits: IntCounterVec,
16 pub(crate) cache_misses: IntCounterVec,
17 pub(crate) cache_writes: IntCounterVec,
18}
19
20impl ExecutionCacheMetrics {
21 pub fn new(registry: &Registry) -> Self {
22 Self {
23 pending_notify_read: register_int_gauge_with_registry!(
24 "pending_notify_read",
25 "Pending notify read requests",
26 registry,
27 )
28 .unwrap(),
29 cache_requests: register_int_counter_vec_with_registry!(
32 "execution_cache_requests",
33 "Execution cache requests",
34 &["request_type", "level"],
35 registry,
36 )
37 .unwrap(),
38 cache_hits: register_int_counter_vec_with_registry!(
39 "execution_cache_hits",
40 "Execution cache hits",
41 &["request_type", "level"],
42 registry,
43 )
44 .unwrap(),
45 cache_negative_hits: register_int_counter_vec_with_registry!(
46 "execution_cache_negative_hits",
47 "Execution cache negative hits",
48 &["request_type", "level"],
49 registry,
50 )
51 .unwrap(),
52 cache_misses: register_int_counter_vec_with_registry!(
53 "execution_cache_misses",
54 "Execution cache misses",
55 &["request_type", "level"],
56 registry,
57 )
58 .unwrap(),
59
60 cache_writes: register_int_counter_vec_with_registry!(
62 "execution_cache_writes",
63 "Execution cache writes",
64 &["collection"],
65 registry,
66 )
67 .unwrap(),
68 }
69 }
70
71 pub(crate) fn record_cache_request(&self, request_type: &'static str, level: &'static str) {
72 trace!(target: "cache_metrics", "Cache request: {} {}", request_type, level);
73 self.cache_requests
74 .with_label_values(&[request_type, level])
75 .inc();
76 }
77
78 pub(crate) fn record_cache_multi_request(
79 &self,
80 request_type: &'static str,
81 level: &'static str,
82 count: usize,
83 ) {
84 trace!(
85 target: "cache_metrics",
86 "Cache multi request: {} {} count: {}",
87 request_type,
88 level,
89 count
90 );
91 self.cache_requests
92 .with_label_values(&[request_type, level])
93 .inc_by(count as u64);
94 }
95
96 pub(crate) fn record_cache_hit(&self, request_type: &'static str, level: &'static str) {
97 trace!(target: "cache_metrics", "Cache hit: {} {}", request_type, level);
98 self.cache_hits
99 .with_label_values(&[request_type, level])
100 .inc();
101 }
102
103 pub(crate) fn record_cache_miss(&self, request_type: &'static str, level: &'static str) {
104 trace!(target: "cache_metrics", "Cache miss: {} {}", request_type, level);
105 self.cache_misses
106 .with_label_values(&[request_type, level])
107 .inc();
108 }
109
110 pub(crate) fn record_cache_negative_hit(
111 &self,
112 request_type: &'static str,
113 level: &'static str,
114 ) {
115 trace!(target: "cache_metrics", "Cache negative hit: {} {}", request_type, level);
116 self.cache_negative_hits
117 .with_label_values(&[request_type, level])
118 .inc();
119 }
120
121 pub(crate) fn record_cache_write(&self, collection: &'static str) {
122 self.cache_writes.with_label_values(&[collection]).inc();
123 }
124}