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 messages_received: AtomicU64,
15 message_requests_received: AtomicU64,
16 heartbeats_received: AtomicU64,
17
18 milestone_requests_sent: AtomicU64,
19 messages_sent: AtomicU64,
20 message_requests_sent: AtomicU64,
21 heartbeats_sent: AtomicU64,
22
23 invalid_messages: AtomicU64,
24 new_messages: AtomicU64,
25 known_messages: AtomicU64,
26 messages_average_latency: AtomicU64,
27
28 referenced_messages: AtomicU64,
29 excluded_no_transaction_messages: AtomicU64,
30 excluded_conflicting_messages: AtomicU64,
31 included_messages: AtomicU64,
32
33 created_outputs: AtomicU64,
34 consumed_outputs: AtomicU64,
35 receipts: AtomicU64,
36
37 transaction_payloads: AtomicU64,
38 milestone_payloads: AtomicU64,
39 indexation_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 messages_received(&self) -> u64 {
75 self.messages_received.load(Ordering::Relaxed)
76 }
77
78 pub fn messages_received_inc(&self) -> u64 {
80 self.messages_received.fetch_add(1, Ordering::SeqCst)
81 }
82
83 pub fn message_requests_received(&self) -> u64 {
85 self.message_requests_received.load(Ordering::Relaxed)
86 }
87
88 pub fn message_requests_received_inc(&self) -> u64 {
90 self.message_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 messages_sent(&self) -> u64 {
115 self.messages_sent.load(Ordering::Relaxed)
116 }
117
118 pub fn messages_sent_inc(&self) -> u64 {
120 self.messages_sent.fetch_add(1, Ordering::SeqCst)
121 }
122
123 pub fn message_requests_sent(&self) -> u64 {
125 self.message_requests_sent.load(Ordering::Relaxed)
126 }
127
128 pub fn message_requests_sent_inc(&self) -> u64 {
130 self.message_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_messages(&self) -> u64 {
145 self.invalid_messages.load(Ordering::Relaxed)
146 }
147
148 pub fn invalid_messages_inc(&self) -> u64 {
150 self.invalid_messages.fetch_add(1, Ordering::SeqCst)
151 }
152
153 pub fn new_messages(&self) -> u64 {
155 self.new_messages.load(Ordering::Relaxed)
156 }
157
158 pub fn new_messages_inc(&self) -> u64 {
160 self.new_messages.fetch_add(1, Ordering::SeqCst)
161 }
162
163 pub fn known_messages(&self) -> u64 {
165 self.known_messages.load(Ordering::Relaxed)
166 }
167
168 pub fn known_messages_inc(&self) -> u64 {
170 self.known_messages.fetch_add(1, Ordering::SeqCst)
171 }
172
173 pub fn messages_average_latency(&self) -> u64 {
175 self.messages_average_latency.load(Ordering::Relaxed)
176 }
177
178 pub fn messages_average_latency_set(&self, val: u64) {
180 self.messages_average_latency.store(val, Ordering::Relaxed)
181 }
182
183 pub fn referenced_messages(&self) -> u64 {
185 self.referenced_messages.load(Ordering::Relaxed)
186 }
187
188 pub fn referenced_messages_inc(&self, value: u64) -> u64 {
190 self.referenced_messages.fetch_add(value, Ordering::SeqCst)
191 }
192
193 pub fn excluded_no_transaction_messages(&self) -> u64 {
195 self.excluded_no_transaction_messages.load(Ordering::Relaxed)
196 }
197
198 pub fn excluded_no_transaction_messages_inc(&self, value: u64) -> u64 {
200 self.excluded_no_transaction_messages.fetch_add(value, Ordering::SeqCst)
201 }
202
203 pub fn excluded_conflicting_messages(&self) -> u64 {
205 self.excluded_conflicting_messages.load(Ordering::Relaxed)
206 }
207
208 pub fn excluded_conflicting_messages_inc(&self, value: u64) -> u64 {
210 self.excluded_conflicting_messages.fetch_add(value, Ordering::SeqCst)
211 }
212
213 pub fn included_messages(&self) -> u64 {
215 self.included_messages.load(Ordering::Relaxed)
216 }
217
218 pub fn included_messages_inc(&self, value: u64) -> u64 {
220 self.included_messages.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 indexation_payloads(&self) -> u64 {
275 self.indexation_payloads.load(Ordering::Relaxed)
276 }
277
278 pub fn indexation_payload_inc(&self, value: u64) -> u64 {
280 self.indexation_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.messages_received(), 0);
316 assert_eq!(metrics.message_requests_received(), 0);
317 assert_eq!(metrics.heartbeats_received(), 0);
318 assert_eq!(metrics.milestone_requests_sent(), 0);
319 assert_eq!(metrics.messages_sent(), 0);
320 assert_eq!(metrics.message_requests_sent(), 0);
321 assert_eq!(metrics.heartbeats_sent(), 0);
322 assert_eq!(metrics.invalid_messages(), 0);
323 assert_eq!(metrics.new_messages(), 0);
324 assert_eq!(metrics.known_messages(), 0);
325 assert_eq!(metrics.messages_average_latency(), 0);
326 assert_eq!(metrics.referenced_messages(), 0);
327 assert_eq!(metrics.excluded_no_transaction_messages(), 0);
328 assert_eq!(metrics.excluded_conflicting_messages(), 0);
329 assert_eq!(metrics.included_messages(), 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.indexation_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.messages_received_inc();
342 metrics.message_requests_received_inc();
343 metrics.heartbeats_received_inc();
344 metrics.milestone_requests_sent_inc();
345 metrics.messages_sent_inc();
346 metrics.message_requests_sent_inc();
347 metrics.heartbeats_sent_inc();
348 metrics.invalid_messages_inc();
349 metrics.new_messages_inc();
350 metrics.known_messages_inc();
351 metrics.messages_average_latency_set(42);
352 metrics.referenced_messages_inc(1);
353 metrics.excluded_no_transaction_messages_inc(1);
354 metrics.excluded_conflicting_messages_inc(1);
355 metrics.included_messages_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.indexation_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.messages_received(), 1);
368 assert_eq!(metrics.message_requests_received(), 1);
369 assert_eq!(metrics.heartbeats_received(), 1);
370 assert_eq!(metrics.milestone_requests_sent(), 1);
371 assert_eq!(metrics.messages_sent(), 1);
372 assert_eq!(metrics.message_requests_sent(), 1);
373 assert_eq!(metrics.heartbeats_sent(), 1);
374 assert_eq!(metrics.invalid_messages(), 1);
375 assert_eq!(metrics.new_messages(), 1);
376 assert_eq!(metrics.known_messages(), 1);
377 assert_eq!(metrics.messages_average_latency(), 42);
378 assert_eq!(metrics.referenced_messages(), 1);
379 assert_eq!(metrics.excluded_no_transaction_messages(), 1);
380 assert_eq!(metrics.excluded_conflicting_messages(), 1);
381 assert_eq!(metrics.included_messages(), 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.indexation_payloads(), 1);
388 assert_eq!(metrics.snapshots(), 1);
389 assert_eq!(metrics.prunings(), 1);
390 }
391}