bee_protocol_types/metrics/
node.rs1use std::sync::atomic::{AtomicU64, Ordering};
7
8#[derive(Default, Debug)]
10pub struct NodeMetrics {
11 invalid_packets: AtomicU64,
12
13 milestone_requests_received: AtomicU64,
14 blocks_received: AtomicU64,
15 block_requests_received: AtomicU64,
16 heartbeats_received: AtomicU64,
17
18 milestone_requests_sent: AtomicU64,
19 blocks_sent: AtomicU64,
20 block_requests_sent: AtomicU64,
21 heartbeats_sent: AtomicU64,
22
23 invalid_blocks: AtomicU64,
24 new_blocks: AtomicU64,
25 known_blocks: AtomicU64,
26 blocks_average_latency: AtomicU64,
27
28 referenced_blocks: AtomicU64,
29 excluded_no_transaction_blocks: AtomicU64,
30 excluded_conflicting_blocks: AtomicU64,
31 included_blocks: AtomicU64,
32
33 created_outputs: AtomicU64,
34 consumed_outputs: AtomicU64,
35 receipts: AtomicU64,
36
37 transaction_payloads: AtomicU64,
38 milestone_payloads: AtomicU64,
39 tagged_data_payloads: AtomicU64,
40
41 snapshots: AtomicU64,
42 prunings: AtomicU64,
43}
44
45impl NodeMetrics {
46 pub fn new() -> Self {
48 Self::default()
49 }
50}
51
52impl NodeMetrics {
53 pub fn invalid_packets(&self) -> u64 {
55 self.invalid_packets.load(Ordering::Relaxed)
56 }
57
58 pub fn invalid_packets_inc(&self) -> u64 {
60 self.invalid_packets.fetch_add(1, Ordering::SeqCst)
61 }
62
63 pub fn milestone_requests_received(&self) -> u64 {
65 self.milestone_requests_received.load(Ordering::Relaxed)
66 }
67
68 pub fn milestone_requests_received_inc(&self) -> u64 {
70 self.milestone_requests_received.fetch_add(1, Ordering::SeqCst)
71 }
72
73 pub fn blocks_received(&self) -> u64 {
75 self.blocks_received.load(Ordering::Relaxed)
76 }
77
78 pub fn blocks_received_inc(&self) -> u64 {
80 self.blocks_received.fetch_add(1, Ordering::SeqCst)
81 }
82
83 pub fn block_requests_received(&self) -> u64 {
85 self.block_requests_received.load(Ordering::Relaxed)
86 }
87
88 pub fn block_requests_received_inc(&self) -> u64 {
90 self.block_requests_received.fetch_add(1, Ordering::SeqCst)
91 }
92
93 pub fn heartbeats_received(&self) -> u64 {
95 self.heartbeats_received.load(Ordering::Relaxed)
96 }
97
98 pub fn heartbeats_received_inc(&self) -> u64 {
100 self.heartbeats_received.fetch_add(1, Ordering::SeqCst)
101 }
102
103 pub fn milestone_requests_sent(&self) -> u64 {
105 self.milestone_requests_sent.load(Ordering::Relaxed)
106 }
107
108 pub fn milestone_requests_sent_inc(&self) -> u64 {
110 self.milestone_requests_sent.fetch_add(1, Ordering::SeqCst)
111 }
112
113 pub fn blocks_sent(&self) -> u64 {
115 self.blocks_sent.load(Ordering::Relaxed)
116 }
117
118 pub fn blocks_sent_inc(&self) -> u64 {
120 self.blocks_sent.fetch_add(1, Ordering::SeqCst)
121 }
122
123 pub fn block_requests_sent(&self) -> u64 {
125 self.block_requests_sent.load(Ordering::Relaxed)
126 }
127
128 pub fn block_requests_sent_inc(&self) -> u64 {
130 self.block_requests_sent.fetch_add(1, Ordering::SeqCst)
131 }
132
133 pub fn heartbeats_sent(&self) -> u64 {
135 self.heartbeats_sent.load(Ordering::Relaxed)
136 }
137
138 pub fn heartbeats_sent_inc(&self) -> u64 {
140 self.heartbeats_sent.fetch_add(1, Ordering::SeqCst)
141 }
142
143 pub fn invalid_blocks(&self) -> u64 {
145 self.invalid_blocks.load(Ordering::Relaxed)
146 }
147
148 pub fn invalid_blocks_inc(&self) -> u64 {
150 self.invalid_blocks.fetch_add(1, Ordering::SeqCst)
151 }
152
153 pub fn new_blocks(&self) -> u64 {
155 self.new_blocks.load(Ordering::Relaxed)
156 }
157
158 pub fn new_blocks_inc(&self) -> u64 {
160 self.new_blocks.fetch_add(1, Ordering::SeqCst)
161 }
162
163 pub fn known_blocks(&self) -> u64 {
165 self.known_blocks.load(Ordering::Relaxed)
166 }
167
168 pub fn known_blocks_inc(&self) -> u64 {
170 self.known_blocks.fetch_add(1, Ordering::SeqCst)
171 }
172
173 pub fn blocks_average_latency(&self) -> u64 {
175 self.blocks_average_latency.load(Ordering::Relaxed)
176 }
177
178 pub fn blocks_average_latency_set(&self, val: u64) {
180 self.blocks_average_latency.store(val, Ordering::Relaxed)
181 }
182
183 pub fn referenced_blocks(&self) -> u64 {
185 self.referenced_blocks.load(Ordering::Relaxed)
186 }
187
188 pub fn referenced_blocks_inc(&self, value: u64) -> u64 {
190 self.referenced_blocks.fetch_add(value, Ordering::SeqCst)
191 }
192
193 pub fn excluded_no_transaction_blocks(&self) -> u64 {
195 self.excluded_no_transaction_blocks.load(Ordering::Relaxed)
196 }
197
198 pub fn excluded_no_transaction_blocks_inc(&self, value: u64) -> u64 {
200 self.excluded_no_transaction_blocks.fetch_add(value, Ordering::SeqCst)
201 }
202
203 pub fn excluded_conflicting_blocks(&self) -> u64 {
205 self.excluded_conflicting_blocks.load(Ordering::Relaxed)
206 }
207
208 pub fn excluded_conflicting_blocks_inc(&self, value: u64) -> u64 {
210 self.excluded_conflicting_blocks.fetch_add(value, Ordering::SeqCst)
211 }
212
213 pub fn included_blocks(&self) -> u64 {
215 self.included_blocks.load(Ordering::Relaxed)
216 }
217
218 pub fn included_blocks_inc(&self, value: u64) -> u64 {
220 self.included_blocks.fetch_add(value, Ordering::SeqCst)
221 }
222
223 pub fn created_outputs(&self) -> u64 {
225 self.created_outputs.load(Ordering::Relaxed)
226 }
227
228 pub fn created_outputs_inc(&self, value: u64) -> u64 {
230 self.created_outputs.fetch_add(value, Ordering::SeqCst)
231 }
232
233 pub fn consumed_outputs(&self) -> u64 {
235 self.consumed_outputs.load(Ordering::Relaxed)
236 }
237
238 pub fn consumed_outputs_inc(&self, value: u64) -> u64 {
240 self.consumed_outputs.fetch_add(value, Ordering::SeqCst)
241 }
242
243 pub fn receipts(&self) -> u64 {
245 self.receipts.load(Ordering::Relaxed)
246 }
247
248 pub fn receipts_inc(&self, value: u64) -> u64 {
250 self.receipts.fetch_add(value, Ordering::SeqCst)
251 }
252
253 pub fn transaction_payloads(&self) -> u64 {
255 self.transaction_payloads.load(Ordering::Relaxed)
256 }
257
258 pub fn transaction_payloads_inc(&self, value: u64) -> u64 {
260 self.transaction_payloads.fetch_add(value, Ordering::SeqCst)
261 }
262
263 pub fn milestone_payloads(&self) -> u64 {
265 self.milestone_payloads.load(Ordering::Relaxed)
266 }
267
268 pub fn milestone_payloads_inc(&self, value: u64) -> u64 {
270 self.milestone_payloads.fetch_add(value, Ordering::SeqCst)
271 }
272
273 pub fn tagged_data_payloads(&self) -> u64 {
275 self.tagged_data_payloads.load(Ordering::Relaxed)
276 }
277
278 pub fn tagged_data_payload_inc(&self, value: u64) -> u64 {
280 self.tagged_data_payloads.fetch_add(value, Ordering::SeqCst)
281 }
282
283 pub fn snapshots(&self) -> u64 {
285 self.snapshots.load(Ordering::Relaxed)
286 }
287
288 pub fn snapshots_inc(&self, value: u64) -> u64 {
290 self.snapshots.fetch_add(value, Ordering::SeqCst)
291 }
292
293 pub fn prunings(&self) -> u64 {
295 self.prunings.load(Ordering::Relaxed)
296 }
297
298 pub fn prunings_inc(&self, value: u64) -> u64 {
300 self.prunings.fetch_add(value, Ordering::SeqCst)
301 }
302}
303
304#[cfg(test)]
305mod tests {
306
307 use super::*;
308
309 #[test]
310 fn protocol_metrics() {
311 let metrics = NodeMetrics::default();
312
313 assert_eq!(metrics.invalid_packets(), 0);
314 assert_eq!(metrics.milestone_requests_received(), 0);
315 assert_eq!(metrics.blocks_received(), 0);
316 assert_eq!(metrics.block_requests_received(), 0);
317 assert_eq!(metrics.heartbeats_received(), 0);
318 assert_eq!(metrics.milestone_requests_sent(), 0);
319 assert_eq!(metrics.blocks_sent(), 0);
320 assert_eq!(metrics.block_requests_sent(), 0);
321 assert_eq!(metrics.heartbeats_sent(), 0);
322 assert_eq!(metrics.invalid_blocks(), 0);
323 assert_eq!(metrics.new_blocks(), 0);
324 assert_eq!(metrics.known_blocks(), 0);
325 assert_eq!(metrics.blocks_average_latency(), 0);
326 assert_eq!(metrics.referenced_blocks(), 0);
327 assert_eq!(metrics.excluded_no_transaction_blocks(), 0);
328 assert_eq!(metrics.excluded_conflicting_blocks(), 0);
329 assert_eq!(metrics.included_blocks(), 0);
330 assert_eq!(metrics.created_outputs(), 0);
331 assert_eq!(metrics.consumed_outputs(), 0);
332 assert_eq!(metrics.receipts(), 0);
333 assert_eq!(metrics.transaction_payloads(), 0);
334 assert_eq!(metrics.milestone_payloads(), 0);
335 assert_eq!(metrics.tagged_data_payloads(), 0);
336 assert_eq!(metrics.snapshots(), 0);
337 assert_eq!(metrics.prunings(), 0);
338
339 metrics.invalid_packets_inc();
340 metrics.milestone_requests_received_inc();
341 metrics.blocks_received_inc();
342 metrics.block_requests_received_inc();
343 metrics.heartbeats_received_inc();
344 metrics.milestone_requests_sent_inc();
345 metrics.blocks_sent_inc();
346 metrics.block_requests_sent_inc();
347 metrics.heartbeats_sent_inc();
348 metrics.invalid_blocks_inc();
349 metrics.new_blocks_inc();
350 metrics.known_blocks_inc();
351 metrics.blocks_average_latency_set(42);
352 metrics.referenced_blocks_inc(1);
353 metrics.excluded_no_transaction_blocks_inc(1);
354 metrics.excluded_conflicting_blocks_inc(1);
355 metrics.included_blocks_inc(1);
356 metrics.created_outputs_inc(1);
357 metrics.consumed_outputs_inc(1);
358 metrics.receipts_inc(1);
359 metrics.transaction_payloads_inc(1);
360 metrics.milestone_payloads_inc(1);
361 metrics.tagged_data_payload_inc(1);
362 metrics.snapshots_inc(1);
363 metrics.prunings_inc(1);
364
365 assert_eq!(metrics.invalid_packets(), 1);
366 assert_eq!(metrics.milestone_requests_received(), 1);
367 assert_eq!(metrics.blocks_received(), 1);
368 assert_eq!(metrics.block_requests_received(), 1);
369 assert_eq!(metrics.heartbeats_received(), 1);
370 assert_eq!(metrics.milestone_requests_sent(), 1);
371 assert_eq!(metrics.blocks_sent(), 1);
372 assert_eq!(metrics.block_requests_sent(), 1);
373 assert_eq!(metrics.heartbeats_sent(), 1);
374 assert_eq!(metrics.invalid_blocks(), 1);
375 assert_eq!(metrics.new_blocks(), 1);
376 assert_eq!(metrics.known_blocks(), 1);
377 assert_eq!(metrics.blocks_average_latency(), 42);
378 assert_eq!(metrics.referenced_blocks(), 1);
379 assert_eq!(metrics.excluded_no_transaction_blocks(), 1);
380 assert_eq!(metrics.excluded_conflicting_blocks(), 1);
381 assert_eq!(metrics.included_blocks(), 1);
382 assert_eq!(metrics.created_outputs(), 1);
383 assert_eq!(metrics.consumed_outputs(), 1);
384 assert_eq!(metrics.receipts(), 1);
385 assert_eq!(metrics.transaction_payloads(), 1);
386 assert_eq!(metrics.milestone_payloads(), 1);
387 assert_eq!(metrics.tagged_data_payloads(), 1);
388 assert_eq!(metrics.snapshots(), 1);
389 assert_eq!(metrics.prunings(), 1);
390 }
391}