use super::*;
impl NetworkManager {
#[cfg_attr(feature = "instrument", instrument(level = "trace", skip(self), err, fields(__VEILID_LOG_KEY = self.log_key())))]
#[allow(clippy::unused_async)]
pub async fn rolling_transfers_task_routine(
&self,
_stop_token: StopToken,
last_ts: Timestamp,
cur_ts: Timestamp,
) -> EyreResult<()> {
{
let stats = &mut *self.stats.write();
stats.self_stats.transfer_stats_accounting.roll_transfers(
last_ts,
cur_ts,
&mut stats.self_stats.transfer_stats,
);
let mut dead_addrs: HashSet<PerAddressStatsKey> = HashSet::new();
for (addr, pa_stats) in &mut stats.per_address_stats {
pa_stats.transfer_stats_accounting.roll_transfers(
last_ts,
cur_ts,
&mut pa_stats.transfer_stats,
);
if cur_ts.duration_since(pa_stats.last_seen_ts) >= IPADDR_MAX_INACTIVE_DURATION {
dead_addrs.insert(*addr);
}
}
for da in &dead_addrs {
stats.per_address_stats.remove(da);
}
}
if let Err(e) = self.event_bus().post(NetworkManagerStatsChangeEvent {
stats: self.stats.clone(),
}) {
veilid_log!(self debug "failed to post network stats change event: {}", e);
}
self.send_network_update();
Ok(())
}
}