use std::sync::Arc;
use iroh_metrics::MetricsGroupSet;
#[cfg(feature = "test-utils")]
pub use iroh_relay::server::Metrics as RelayMetrics;
use serde::{Deserialize, Serialize};
pub use crate::{
net_report::Metrics as NetReportMetrics, portmapper::Metrics as PortmapMetrics,
socket::Metrics as SocketMetrics,
};
#[derive(Default, Debug, Clone, Serialize, Deserialize, MetricsGroupSet)]
#[metrics(name = "endpoint")]
#[non_exhaustive]
pub struct EndpointMetrics {
pub socket: Arc<SocketMetrics>,
pub net_report: Arc<NetReportMetrics>,
pub portmapper: Arc<PortmapMetrics>,
}
#[cfg(test)]
mod tests {
use super::EndpointMetrics;
#[test]
fn test_serde() {
let metrics = EndpointMetrics::default();
metrics.socket.actor_link_change.inc();
metrics.net_report.reports.inc_by(10);
let encoded = postcard::to_stdvec(&metrics).unwrap();
let decoded: EndpointMetrics = postcard::from_bytes(&encoded).unwrap();
assert_eq!(decoded.socket.actor_link_change.get(), 1);
assert_eq!(decoded.net_report.reports.get(), 10);
}
}