nym_statistics_common/clients/
gateway_conn_statistics.rs1use super::ClientStatsEvents;
9use std::collections::VecDeque;
10
11use nym_metrics::{inc, inc_by};
12use serde::{Deserialize, Serialize};
13
14#[derive(Default, Debug, Clone, Serialize, Deserialize)]
15pub(crate) struct GatewayStats {
16 real_packets_sent: u64,
18 real_packets_sent_size: usize,
19
20 failures: VecDeque<()>, }
23
24impl GatewayStats {
25 fn handle(&mut self, event: GatewayStatsEvent) {
26 match event {
27 GatewayStatsEvent::RealPacketSent(packet_size) => {
28 self.real_packets_sent += 1;
29 self.real_packets_sent_size += packet_size;
30 inc!("real_packets_sent");
31 inc_by!("real_packets_sent_size", packet_size);
32 }
33 }
34 }
35
36 fn summary(&self) -> (String, String) {
37 (
38 format!("packets sent: {}", self.real_packets_sent),
39 "packets received: todo".to_owned(),
40 )
41 }
42}
43
44impl From<GatewayStatsEvent> for ClientStatsEvents {
45 fn from(event: GatewayStatsEvent) -> ClientStatsEvents {
46 ClientStatsEvents::GatewayConn(event)
47 }
48}
49
50#[derive(Debug)]
52pub enum GatewayStatsEvent {
53 RealPacketSent(usize),
55}
56
57#[derive(Default)]
59pub struct GatewayStatsControl {
60 stats: GatewayStats,
62}
63
64impl GatewayStatsControl {
65 pub(crate) fn handle_event(&mut self, event: GatewayStatsEvent) {
66 self.stats.handle(event)
67 }
68
69 pub(crate) fn report(&self) -> GatewayStats {
70 self.stats.clone()
71 }
72
73 pub(crate) fn local_report(&self) {
74 self.report_counters();
75 }
76
77 fn report_counters(&self) {
78 log::trace!("packet statistics: {:?}", &self.stats);
79 let (summary_sent, summary_recv) = self.stats.summary();
80 log::debug!("{summary_sent}");
81 log::debug!("{summary_recv}");
82 }
83}