reifydb_sub_flow/transaction/
metrics.rs1#[derive(Debug, Clone, Default)]
3pub struct FlowTransactionMetrics {
4 pub reads: usize,
5 pub writes: usize,
6 pub removes: usize,
7 pub state_operations: usize,
8}
9
10impl FlowTransactionMetrics {
11 pub fn new() -> Self {
12 Self::default()
13 }
14
15 pub fn increment_reads(&mut self) {
16 self.reads += 1;
17 }
18
19 pub fn increment_writes(&mut self) {
20 self.writes += 1;
21 }
22
23 pub fn increment_removes(&mut self) {
24 self.removes += 1;
25 }
26
27 pub fn increment_state_operations(&mut self) {
28 self.state_operations += 1;
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[tokio::test]
37 async fn test_new_metrics() {
38 let metrics = FlowTransactionMetrics::new();
39 assert_eq!(metrics.reads, 0);
40 assert_eq!(metrics.writes, 0);
41 assert_eq!(metrics.removes, 0);
42 assert_eq!(metrics.state_operations, 0);
43 }
44
45 #[tokio::test]
46 async fn test_default_metrics() {
47 let metrics = FlowTransactionMetrics::default();
48 assert_eq!(metrics.reads, 0);
49 assert_eq!(metrics.writes, 0);
50 assert_eq!(metrics.removes, 0);
51 assert_eq!(metrics.state_operations, 0);
52 }
53
54 #[tokio::test]
55 async fn test_increment_reads() {
56 let mut metrics = FlowTransactionMetrics::new();
57 assert_eq!(metrics.reads, 0);
58
59 metrics.increment_reads();
60 assert_eq!(metrics.reads, 1);
61
62 metrics.increment_reads();
63 assert_eq!(metrics.reads, 2);
64
65 assert_eq!(metrics.writes, 0);
67 assert_eq!(metrics.removes, 0);
68 assert_eq!(metrics.state_operations, 0);
69 }
70
71 #[tokio::test]
72 async fn test_increment_writes() {
73 let mut metrics = FlowTransactionMetrics::new();
74 assert_eq!(metrics.writes, 0);
75
76 metrics.increment_writes();
77 assert_eq!(metrics.writes, 1);
78
79 metrics.increment_writes();
80 assert_eq!(metrics.writes, 2);
81
82 assert_eq!(metrics.reads, 0);
84 assert_eq!(metrics.removes, 0);
85 assert_eq!(metrics.state_operations, 0);
86 }
87
88 #[tokio::test]
89 async fn test_increment_removes() {
90 let mut metrics = FlowTransactionMetrics::new();
91 assert_eq!(metrics.removes, 0);
92
93 metrics.increment_removes();
94 assert_eq!(metrics.removes, 1);
95
96 metrics.increment_removes();
97 assert_eq!(metrics.removes, 2);
98
99 assert_eq!(metrics.reads, 0);
101 assert_eq!(metrics.writes, 0);
102 assert_eq!(metrics.state_operations, 0);
103 }
104
105 #[tokio::test]
106 async fn test_increment_state_operations() {
107 let mut metrics = FlowTransactionMetrics::new();
108 assert_eq!(metrics.state_operations, 0);
109
110 metrics.increment_state_operations();
111 assert_eq!(metrics.state_operations, 1);
112
113 metrics.increment_state_operations();
114 assert_eq!(metrics.state_operations, 2);
115
116 assert_eq!(metrics.reads, 0);
118 assert_eq!(metrics.writes, 0);
119 assert_eq!(metrics.removes, 0);
120 }
121
122 #[tokio::test]
123 async fn test_mixed_metrics() {
124 let mut metrics = FlowTransactionMetrics::new();
125
126 metrics.increment_reads();
127 metrics.increment_reads();
128 metrics.increment_writes();
129 metrics.increment_removes();
130 metrics.increment_state_operations();
131 metrics.increment_state_operations();
132 metrics.increment_state_operations();
133
134 assert_eq!(metrics.reads, 2);
135 assert_eq!(metrics.writes, 1);
136 assert_eq!(metrics.removes, 1);
137 assert_eq!(metrics.state_operations, 3);
138 }
139
140 #[tokio::test]
141 async fn test_metrics_clone() {
142 let mut original = FlowTransactionMetrics::new();
143 original.increment_reads();
144 original.increment_writes();
145
146 let cloned = original.clone();
147 assert_eq!(cloned.reads, 1);
148 assert_eq!(cloned.writes, 1);
149 assert_eq!(cloned.removes, 0);
150 assert_eq!(cloned.state_operations, 0);
151 }
152}