Skip to content

Commit 4aa5e7d

Browse files
authored
Merge pull request #816 from hatoo/fix-dns-stat
Fix dns and connection time stats
2 parents b6521f4 + 38fa2dc commit 4aa5e7d

File tree

4 files changed

+45
-26
lines changed

4 files changed

+45
-26
lines changed

src/client.rs

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ fn format_host_port(host: &str, port: u16) -> String {
4343

4444
#[derive(Debug, Clone, Copy)]
4545
pub struct ConnectionTime {
46-
pub dns_lookup: std::time::Instant,
47-
pub dialup: std::time::Instant,
46+
pub dns_lookup: std::time::Duration,
47+
pub dialup: std::time::Duration,
4848
}
4949

5050
#[derive(Debug, Clone)]
@@ -698,7 +698,10 @@ impl Client {
698698
self.client_http1(&self.url, &mut client_state.rng).await?;
699699
let dialup = std::time::Instant::now();
700700

701-
connection_time = Some(ConnectionTime { dns_lookup, dialup });
701+
connection_time = Some(ConnectionTime {
702+
dns_lookup: dns_lookup - start,
703+
dialup: dialup - start,
704+
});
702705
send_request
703706
};
704707
while send_request.ready().await.is_err() {
@@ -709,7 +712,10 @@ impl Client {
709712
self.client_http1(&self.url, &mut client_state.rng).await?;
710713
send_request = send_request_;
711714
let dialup = std::time::Instant::now();
712-
connection_time = Some(ConnectionTime { dns_lookup, dialup });
715+
connection_time = Some(ConnectionTime {
716+
dns_lookup: dns_lookup - start,
717+
dialup: dialup - start,
718+
});
713719
}
714720
match send_request.send_request(request).await {
715721
Ok(res) => {
@@ -787,6 +793,7 @@ impl Client {
787793
url: &Url,
788794
rng: &mut R,
789795
) -> Result<(ConnectionTime, SendRequestHttp2), ClientError> {
796+
let start = std::time::Instant::now();
790797
if let Some(proxy_url) = &self.proxy_url {
791798
let http_proxy_version = if self.is_proxy_http2() {
792799
http::Version::HTTP_2
@@ -838,17 +845,35 @@ impl Client {
838845
tokio::spawn(conn);
839846
let dialup = std::time::Instant::now();
840847

841-
Ok((ConnectionTime { dns_lookup, dialup }, send_request))
848+
Ok((
849+
ConnectionTime {
850+
dns_lookup: dns_lookup - start,
851+
dialup: dialup - start,
852+
},
853+
send_request,
854+
))
842855
} else {
843856
let send_request = stream.handshake_http2().await?;
844857
let dialup = std::time::Instant::now();
845-
Ok((ConnectionTime { dns_lookup, dialup }, send_request))
858+
Ok((
859+
ConnectionTime {
860+
dns_lookup: dns_lookup - start,
861+
dialup: dialup - start,
862+
},
863+
send_request,
864+
))
846865
}
847866
} else {
848867
let (dns_lookup, stream) = self.client(url, rng, self.http_version).await?;
849868
let send_request = stream.handshake_http2().await?;
850869
let dialup = std::time::Instant::now();
851-
Ok((ConnectionTime { dns_lookup, dialup }, send_request))
870+
Ok((
871+
ConnectionTime {
872+
dns_lookup: dns_lookup - start,
873+
dialup: dialup - start,
874+
},
875+
send_request,
876+
))
852877
}
853878
}
854879

src/client_h3.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,17 @@ impl Client {
6868
url: &Url,
6969
rng: &mut R,
7070
) -> Result<(ConnectionTime, SendRequestHttp3), ClientError> {
71+
let start = std::time::Instant::now();
7172
let (dns_lookup, stream) = self.client(url, rng, http::Version::HTTP_3).await?;
7273
let send_request = stream.handshake_http3().await?;
7374
let dialup = std::time::Instant::now();
74-
Ok((ConnectionTime { dns_lookup, dialup }, send_request))
75+
Ok((
76+
ConnectionTime {
77+
dns_lookup: dns_lookup - start,
78+
dialup: dialup - start,
79+
},
80+
send_request,
81+
))
7582
}
7683

7784
pub(crate) async fn quic_client(

src/printer.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -392,10 +392,7 @@ fn print_csv<W: Write>(w: &mut W, start: Instant, res: &ResultData) -> std::io::
392392

393393
for request in success_requests {
394394
let dns_and_dialup = match request.connection_time {
395-
Some(connection_time) => (
396-
connection_time.dns_lookup - request.start,
397-
connection_time.dialup - request.start,
398-
),
395+
Some(connection_time) => (connection_time.dns_lookup, connection_time.dialup),
399396
None => (std::time::Duration::ZERO, std::time::Duration::ZERO),
400397
};
401398
let first_byte = match request.first_byte {

src/result_data.rs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -123,20 +123,14 @@ impl ResultData {
123123
pub fn dns_dialup_stat(&self) -> MinMaxMean {
124124
self.success
125125
.iter()
126-
.filter_map(|r| {
127-
r.connection_time
128-
.map(|ct| (ct.dialup - r.start).as_secs_f64())
129-
})
126+
.filter_map(|r| r.connection_time.map(|ct| ct.dialup.as_secs_f64()))
130127
.collect()
131128
}
132129

133130
pub fn dns_lookup_stat(&self) -> MinMaxMean {
134131
self.success
135132
.iter()
136-
.filter_map(|r| {
137-
r.connection_time
138-
.map(|ct| (ct.dns_lookup - r.start).as_secs_f64())
139-
})
133+
.filter_map(|r| r.connection_time.map(|ct| ct.dns_lookup.as_secs_f64()))
140134
.collect()
141135
}
142136

@@ -207,12 +201,8 @@ mod tests {
207201
start_latency_correction: None,
208202
start: now,
209203
connection_time: Some(ConnectionTime {
210-
dns_lookup: now
211-
.checked_add(Duration::from_millis(connection_time_dns_lookup))
212-
.unwrap(),
213-
dialup: now
214-
.checked_add(Duration::from_millis(connection_time_dialup))
215-
.unwrap(),
204+
dns_lookup: Duration::from_millis(connection_time_dns_lookup),
205+
dialup: Duration::from_millis(connection_time_dialup),
216206
}),
217207
first_byte: Some(now.checked_add(Duration::from_millis(first_byte)).unwrap()),
218208
end: now

0 commit comments

Comments
 (0)