Skip to content

Commit f221ab3

Browse files
WIP better boxplots
1 parent 0e87150 commit f221ab3

File tree

6 files changed

+663
-223
lines changed

6 files changed

+663
-223
lines changed

src/measurements.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ fn log_measurements_by_test_type(
131131
stat_measurements
132132
}
133133

134-
fn calc_stats(mbit_measurements: Vec<f64>) -> Option<(f64, f64, f64, f64, f64, f64)> {
134+
pub fn calc_stats(mbit_measurements: Vec<f64>) -> Option<(f64, f64, f64, f64, f64, f64)> {
135135
log::debug!("calc_stats for mbit_measurements {mbit_measurements:?}");
136136
let length = mbit_measurements.len();
137137
if length == 0 {

src/speedtest.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const BASE_URL: &str = "https://speed.cloudflare.com";
1717
const DOWNLOAD_URL: &str = "__down?bytes=";
1818
const UPLOAD_URL: &str = "__up";
1919

20-
#[derive(Clone, Copy, Debug, Hash, Serialize, Eq, PartialEq)]
20+
#[derive(Clone, Copy, Debug, Hash, Serialize, Eq, PartialEq, Ord, PartialOrd)]
2121
pub enum TestType {
2222
Download,
2323
Upload,

src/speedtest_tui.rs

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ pub fn speed_test_tui(
3535

3636
// Run download tests
3737
if options.should_download() {
38+
let _ = event_sender.send(TestEvent::TestPhaseStarted(
39+
TestType::Download,
40+
options.nr_tests,
41+
payload_sizes.clone(),
42+
));
3843
measurements.extend(run_tests_tui(
3944
&client,
4045
test_download,
@@ -48,6 +53,11 @@ pub fn speed_test_tui(
4853

4954
// Run upload tests
5055
if options.should_upload() {
56+
let _ = event_sender.send(TestEvent::TestPhaseStarted(
57+
TestType::Upload,
58+
options.nr_tests,
59+
payload_sizes.clone(),
60+
));
5161
measurements.extend(run_tests_tui(
5262
&client,
5363
test_upload,
@@ -62,14 +72,20 @@ pub fn speed_test_tui(
6272
let _ = event_sender.send(TestEvent::AllTestsCompleted);
6373
measurements
6474
}
65-
6675
pub fn run_latency_test_tui(
6776
client: &Client,
6877
nr_latency_tests: u32,
6978
event_sender: Sender<TestEvent>,
7079
) -> (Vec<f64>, f64) {
7180
let mut measurements: Vec<f64> = Vec::new();
7281

82+
// Set latency phase
83+
let _ = event_sender.send(TestEvent::TestPhaseStarted(
84+
TestType::Download, // Use Download as placeholder for latency
85+
nr_latency_tests + 1,
86+
vec![0], // Single "payload size" for latency
87+
));
88+
7389
for _i in 0..=nr_latency_tests {
7490
let latency = test_latency(client);
7591
measurements.push(latency);
@@ -86,7 +102,6 @@ pub fn run_latency_test_tui(
86102
let avg_latency = measurements.iter().sum::<f64>() / measurements.len() as f64;
87103
(measurements, avg_latency)
88104
}
89-
90105
pub fn run_tests_tui(
91106
client: &Client,
92107
test_fn: fn(&Client, usize, OutputFormat) -> f64,
@@ -98,16 +113,22 @@ pub fn run_tests_tui(
98113
) -> Vec<Measurement> {
99114
let mut measurements: Vec<Measurement> = Vec::new();
100115

101-
for payload_size in payload_sizes {
102-
let _ = event_sender.send(TestEvent::TestStarted(test_type, payload_size));
116+
for (payload_index, payload_size) in payload_sizes.iter().enumerate() {
117+
let _ = event_sender.send(TestEvent::PayloadSizeStarted(
118+
test_type,
119+
*payload_size,
120+
payload_index,
121+
));
103122

104123
let start = Instant::now();
105124
for _i in 0..nr_tests {
106-
let mbit = test_fn(client, payload_size, OutputFormat::None);
125+
let _ = event_sender.send(TestEvent::TestStarted(test_type, *payload_size));
126+
127+
let mbit = test_fn(client, *payload_size, OutputFormat::None);
107128

108129
let measurement = Measurement {
109130
test_type,
110-
payload_size,
131+
payload_size: *payload_size,
111132
mbit,
112133
};
113134
measurements.push(measurement.clone());
@@ -116,23 +137,36 @@ pub fn run_tests_tui(
116137
timestamp: Instant::now(),
117138
speed: mbit,
118139
test_type,
119-
payload_size,
140+
payload_size: *payload_size,
120141
}));
121142

122-
let _ = event_sender.send(TestEvent::TestCompleted(test_type, payload_size));
143+
let _ = event_sender.send(TestEvent::TestCompleted(test_type, *payload_size));
123144

124145
// Small delay to make the UI updates visible
125146
thread::sleep(Duration::from_millis(100));
126147
}
127148

149+
let _ = event_sender.send(TestEvent::PayloadSizeCompleted(test_type, *payload_size));
150+
128151
let duration = start.elapsed();
129152

130153
// Check time threshold for dynamic payload sizing
131154
if !disable_dynamic_max_payload_size && duration > TIME_THRESHOLD {
132155
log::info!("Exceeded threshold");
156+
let _ = event_sender.send(TestEvent::TestsSkipped(
157+
test_type,
158+
"time limit exceeded".to_string(),
159+
));
133160
break;
134161
}
135162
}
136163

164+
// Calculate average speed for this test type
165+
if !measurements.is_empty() {
166+
let total_speed: f64 = measurements.iter().map(|m| m.mbit).sum();
167+
let average_speed = total_speed / measurements.len() as f64;
168+
let _ = event_sender.send(TestEvent::TestPhaseCompleted(test_type, average_speed));
169+
}
170+
137171
measurements
138172
}

0 commit comments

Comments
 (0)