@@ -167,6 +167,24 @@ fn print_json<W: Write>(
167167 size_per_sec : f64 ,
168168 }
169169
170+ #[ derive( Serialize ) ]
171+ struct Metrics {
172+ success_rate : f64 ,
173+ requests_per_sec : f64 ,
174+ latency_ms : LatencyMs ,
175+ }
176+
177+ #[ derive( Serialize ) ]
178+ #[ serde( rename = "latency_ms" ) ]
179+ struct LatencyMs {
180+ min : f64 ,
181+ mean : f64 ,
182+ p50 : f64 ,
183+ p95 : f64 ,
184+ p99 : f64 ,
185+ max : f64 ,
186+ }
187+
170188 #[ derive( Serialize ) ]
171189 struct Triple {
172190 average : f64 ,
@@ -196,6 +214,7 @@ fn print_json<W: Write>(
196214 #[ derive( Serialize ) ]
197215 struct Result {
198216 summary : Summary ,
217+ metrics : Metrics ,
199218 #[ serde( rename = "responseTimeHistogram" ) ]
200219 response_time_histogram : BTreeMap < String , usize > ,
201220 #[ serde( rename = "latencyPercentiles" ) ]
@@ -259,7 +278,20 @@ fn print_json<W: Write>(
259278 . percentiles
260279 . into_iter ( )
261280 . map ( |( p, v) | ( format ! ( "p{p}" ) , v) )
262- . collect ( ) ;
281+ . collect :: < BTreeMap < String , f64 > > ( ) ;
282+
283+ let metrics = Metrics {
284+ success_rate : res. success_rate ( ) ,
285+ requests_per_sec : res. len ( ) as f64 / total_duration. as_secs_f64 ( ) ,
286+ latency_ms : LatencyMs {
287+ min : ms ( latency_stat. min ( ) ) ,
288+ mean : ms ( latency_stat. mean ( ) ) ,
289+ p50 : ms ( latency_percentiles[ "p50" ] ) ,
290+ p95 : ms ( latency_percentiles[ "p95" ] ) ,
291+ p99 : ms ( latency_percentiles[ "p99" ] ) ,
292+ max : ms ( latency_stat. max ( ) ) ,
293+ } ,
294+ } ;
263295
264296 let first_byte_statistics = res. first_byte_all_statistics ( ) ;
265297
@@ -389,6 +421,7 @@ fn print_json<W: Write>(
389421 w,
390422 & Result {
391423 summary,
424+ metrics,
392425 response_time_histogram,
393426 latency_percentiles,
394427 first_byte_histogram,
@@ -732,6 +765,11 @@ fn percentiles(values: &mut [f64]) -> BTreeMap<String, f64> {
732765 . collect ( )
733766}
734767
768+ // convert s to ms
769+ fn ms ( value : f64 ) -> f64 {
770+ ( value * 1000.0 * 1000.0 ) . round ( ) / 1000.0
771+ }
772+
735773#[ cfg( test) ]
736774mod tests {
737775 use float_cmp:: assert_approx_eq;
0 commit comments