refactor: use an unbounded mpsc tokio channel for measurements
Build binaries / Build (aarch64-musl) (push) Successful in 1m44s
Build binaries / Build (arm-musleabi) (push) Successful in 1m44s
Build binaries / Build (arm-musleabihf) (push) Successful in 1m36s
Build binaries / Build (armv7-musleabi) (push) Successful in 1m37s
Build binaries / Build (armv7-musleabihf) (push) Successful in 1m38s
Build binaries / Build (i686-musl) (push) Successful in 1m39s
Build binaries / Build (mips64-muslabi64) (push) Successful in 1m58s
Build binaries / Build (mips-musl) (push) Successful in 1m58s
Build binaries / Build (mipsel-musl) (push) Successful in 2m1s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 2m2s
Build binaries / Build (x86_64-musl) (push) Successful in 1m38s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m39s

This commit is contained in:
Nils Andreas Svee committed 2026-10-28 19:02:34 +07:00
1 parent 9f92b13186
commit 923e1ced1b
6 files changed
+25 -296

No files matched your search

+6 -7
View File
@@ -5,7 +5,7 @@ use std::{
time::{Duration, Instant, SystemTime},
};
use flume::{Receiver, Sender};
use flume::Receiver;
use icmp_socket2::{
AsyncIcmpSocket, IcmpSocket4, Icmpv4Message, Icmpv4Packet,
packet::{IcmpPacketBuildError, WithEchoRequest, WithTimestampRequest},
@@ -13,6 +13,7 @@ use icmp_socket2::{
};
use log::debug;
use thiserror::Error;
use tokio::sync::mpsc::UnboundedSender;
use crate::{
measurement::model::{
@@ -104,7 +105,7 @@ pub struct IcmpEngine {
origin: Instant,
binding_rx: Receiver<Vec<IcmpBinding>>,
observation_tx: Sender<MeasurementEvent>,
observation_tx: UnboundedSender<MeasurementEvent>,
}
async fn wait_for_deadline(deadline: Option<Instant>) {
@@ -123,7 +124,7 @@ impl IcmpEngine {
pub fn new(
origin: Instant,
#[allow(unused)] settings: &NetworkSettings,
observation_tx: Sender<MeasurementEvent>,
observation_tx: UnboundedSender<MeasurementEvent>,
binding_rx: Receiver<Vec<IcmpBinding>>,
) -> Result<Self, IcmpError> {
#[allow(unused_mut)]
@@ -420,12 +421,11 @@ impl IcmpEngine {
for probe in expired {
self.observation_tx
.send_async(MeasurementEvent::Loss(MeasurementLoss {
.send(MeasurementEvent::Loss(MeasurementLoss {
stream: probe.stream,
started_at: probe.sent_at,
detected_at: now,
}))
.await
.map_err(|_| IcmpError::EventChannelClosed)?;
}
@@ -468,8 +468,7 @@ impl IcmpEngine {
) {
Ok(observation) => {
self.observation_tx
.send_async(MeasurementEvent::Observation(observation))
.await
.send(MeasurementEvent::Observation(observation))
.map_err(|_| IcmpError::EventChannelClosed)?;
}