fix(stats): align rolling directional loss with window counts
This commit is contained in:
8 files changed
+489
-34
No files matched your search
@@ -8,9 +8,15 @@ use crate::PacketCounts;
|
||||
/// server-reported counts exceed local expectations.
|
||||
///
|
||||
/// The directional fields are derived from
|
||||
/// [`PacketCounts::server_packets_received`] and are `None` when the server
|
||||
/// reported no receive count. [`PacketCounts::server_received_window`] is never
|
||||
/// used to derive loss.
|
||||
/// [`PacketCounts::server_packets_received`] for cumulative snapshots. Rolling
|
||||
/// snapshots use the increase in the highest observed count over the retained
|
||||
/// packet-event arrival interval, with the preceding observation as baseline
|
||||
/// (zero at the start of the collector's history). They are `None` without a
|
||||
/// known baseline/endpoint or when time filtering leaves an interior packet gap.
|
||||
/// The percentage fields are `0.0` when the corresponding estimate is unavailable.
|
||||
/// These remain estimates: outstanding sends and replies crossing a window
|
||||
/// boundary can produce signed values. [`PacketCounts::server_received_window`]
|
||||
/// is never used to derive loss.
|
||||
pub struct LossStats {
|
||||
/// Locally inferred total lost packets.
|
||||
pub lost_packets: u64,
|
||||
@@ -30,7 +36,7 @@ pub struct LossStats {
|
||||
pub late_packets_percent: f64,
|
||||
}
|
||||
|
||||
pub(crate) fn loss_stats(packets: PacketCounts) -> LossStats {
|
||||
pub(crate) fn loss_stats(packets: PacketCounts, server_received: Option<u64>) -> LossStats {
|
||||
let lost = packets.packets_sent.saturating_sub(packets.unique_replies);
|
||||
let packet_loss_percent = if packets.packets_sent == 0 {
|
||||
0.0
|
||||
@@ -45,7 +51,7 @@ pub(crate) fn loss_stats(packets: PacketCounts) -> LossStats {
|
||||
upstream_loss_percent,
|
||||
downstream_loss_packets,
|
||||
downstream_loss_percent,
|
||||
) = if let Some(server_received) = packets.server_packets_received {
|
||||
) = if let Some(server_received) = server_received {
|
||||
let upstream = i128::from(packets.packets_sent) - i128::from(server_received);
|
||||
let downstream = i128::from(server_received) - i128::from(packets.packets_received);
|
||||
let upstream_percent = if packets.packets_sent == 0 {
|
||||
|
||||
Reference in new issue
Block a user