diff --git a/TODO.md b/TODO.md
index dddbef86..c9586747 100644
--- a/TODO.md
+++ b/TODO.md
@@ -5,7 +5,6 @@
latency histogram
* use SyncHistogram?
* avoid reporting zero (send more often?)
- * add config flag, don't calculate when turned off
* cleaning
## Medium priority
diff --git a/aquatic_udp/src/common.rs b/aquatic_udp/src/common.rs
index e3cac67c..3f0b41da 100644
--- a/aquatic_udp/src/common.rs
+++ b/aquatic_udp/src/common.rs
@@ -17,6 +17,12 @@ pub const MAX_PACKET_SIZE: usize = 8192;
#[derive(Clone, Copy, Debug)]
pub struct RequestTag(pub usize);
+impl RequestTag {
+ pub fn placeholder() -> Self {
+ Self(0)
+ }
+}
+
#[derive(Debug)]
pub struct PendingScrapeRequest {
pub slab_key: usize,
diff --git a/aquatic_udp/src/config.rs b/aquatic_udp/src/config.rs
index 6e235992..617ec4da 100644
--- a/aquatic_udp/src/config.rs
+++ b/aquatic_udp/src/config.rs
@@ -141,6 +141,8 @@ pub struct StatisticsConfig {
pub write_html_to_file: bool,
/// Path to save HTML file to
pub html_file_path: PathBuf,
+ /// Report response latencies
+ pub latencies: bool,
}
impl StatisticsConfig {
@@ -156,6 +158,7 @@ impl Default for StatisticsConfig {
print_to_stdout: false,
write_html_to_file: false,
html_file_path: "tmp/statistics.html".into(),
+ latencies: true,
}
}
}
diff --git a/aquatic_udp/src/workers/socket.rs b/aquatic_udp/src/workers/socket.rs
index 85ba6c1e..f9837c8c 100644
--- a/aquatic_udp/src/workers/socket.rs
+++ b/aquatic_udp/src/workers/socket.rs
@@ -308,7 +308,9 @@ pub fn run_socket_worker(
last_pending_scrape_cleaning = now;
}
- if now > last_histogram_sending + statistics_update_interval {
+ if config.statistics.latencies
+ & (now > last_histogram_sending + statistics_update_interval)
+ {
if let Err(err) = histogram_sender.try_send(latency_recorder.extract_histogram()) {
::log::error!("Couldn't send latency data to statistics worker: {:#}", err);
}
@@ -345,7 +347,11 @@ fn read_requests(
loop {
match socket.recv_from(&mut buffer[..]) {
Ok((amt, src)) => {
- let request_tag = latency_recorder.request_received();
+ let request_tag = if config.statistics.latencies {
+ latency_recorder.request_received()
+ } else {
+ RequestTag::placeholder()
+ };
let res_request =
Request::from_bytes(&buffer[..amt], config.protocol.max_scrape_torrents);
@@ -580,7 +586,9 @@ fn send_response(
match socket.send_to(&cursor.get_ref()[..amt], addr) {
Ok(amt) if config.statistics.active() => {
- latency_recorder.response_sent(tag);
+ if config.statistics.latencies {
+ latency_recorder.response_sent(tag);
+ }
let stats = if canonical_addr_is_ipv4 {
&state.statistics_ipv4
diff --git a/aquatic_udp/src/workers/statistics.rs b/aquatic_udp/src/workers/statistics.rs
index 423863a5..49f5aac6 100644
--- a/aquatic_udp/src/workers/statistics.rs
+++ b/aquatic_udp/src/workers/statistics.rs
@@ -171,7 +171,8 @@ struct TemplateData {
ipv6_active: bool,
ipv4: FormattedStatistics,
ipv6: FormattedStatistics,
- latency: LatencyData,
+ latencies_active: bool,
+ latencies: LatencyData,
last_updated: String,
peer_update_interval: String,
}
@@ -201,7 +202,7 @@ pub fn run_statistics_worker(
loop {
::std::thread::sleep(Duration::from_secs(config.statistics.interval));
- let latency_data: LatencyData = histogram_receivers
+ let latency_data = histogram_receivers
.iter()
.filter_map(|receiver| receiver.try_recv().ok())
.sum::
| Mean | -{ latency.mean } ms | +{ latencies.mean } ms |
|---|---|---|
| Standard deviation | -{ latency.stdev } ms | +{ latencies.stdev } ms |
| 95:th percentile | -{ latency.p95 } ms | +{ latencies.p95 } ms |
| 99:th percentile | -{ latency.p99 } ms | +{ latencies.p99 } ms |
| 99.9:th percentile | -{ latency.p999 } ms | +{ latencies.p999 } ms |