@@ -18,6 +18,7 @@ use std::{collections::BTreeMap, io};
18
18
use crate :: {
19
19
client:: { ClientError , RequestResult } ,
20
20
printer:: PrintMode ,
21
+ result_data:: ResultData ,
21
22
timescale:: { TimeLabel , TimeScale } ,
22
23
} ;
23
24
@@ -65,7 +66,7 @@ pub struct Monitor {
65
66
}
66
67
67
68
impl Monitor {
68
- pub async fn monitor ( self ) -> Result < Vec < Result < RequestResult , ClientError > > , std:: io:: Error > {
69
+ pub async fn monitor ( self ) -> Result < ResultData , std:: io:: Error > {
69
70
crossterm:: terminal:: enable_raw_mode ( ) ?;
70
71
io:: stdout ( ) . execute ( crossterm:: terminal:: EnterAlternateScreen ) ?;
71
72
io:: stdout ( ) . execute ( crossterm:: cursor:: Hide ) ?;
@@ -77,11 +78,9 @@ impl Monitor {
77
78
78
79
// Return this when ends to application print summary
79
80
// We must not read all data from this due to computational cost.
80
- let mut all: Vec < Result < RequestResult , ClientError > > = Vec :: new ( ) ;
81
+ let mut all: ResultData = Default :: default ( ) ;
81
82
// stats for HTTP status
82
83
let mut status_dist: BTreeMap < http:: StatusCode , usize > = Default :: default ( ) ;
83
- // stats for Error
84
- let mut error_dist: BTreeMap < String , usize > = Default :: default ( ) ;
85
84
86
85
#[ cfg( unix) ]
87
86
// Limit for number open files. eg. ulimit -n
@@ -100,9 +99,8 @@ impl Monitor {
100
99
loop {
101
100
match self . report_receiver . try_recv ( ) {
102
101
Ok ( report) => {
103
- match report. as_ref ( ) {
104
- Ok ( report) => * status_dist. entry ( report. status ) . or_default ( ) += 1 ,
105
- Err ( e) => * error_dist. entry ( e. to_string ( ) ) . or_default ( ) += 1 ,
102
+ if let Ok ( report) = report. as_ref ( ) {
103
+ * status_dist. entry ( report. status ) . or_default ( ) += 1 ;
106
104
}
107
105
all. push ( report) ;
108
106
}
@@ -136,19 +134,17 @@ impl Monitor {
136
134
137
135
let mut bar_num_req = vec ! [ 0u64 ; count] ;
138
136
let short_bin = ( now - self . start ) . as_secs_f64 ( ) % bin;
139
- for r in all. iter ( ) . rev ( ) {
140
- if let Ok ( r) = r. as_ref ( ) {
141
- let past = ( now - r. end ) . as_secs_f64 ( ) ;
142
- let i = if past <= short_bin {
143
- 0
144
- } else {
145
- 1 + ( ( past - short_bin) / bin) as usize
146
- } ;
147
- if i >= bar_num_req. len ( ) {
148
- break ;
149
- }
150
- bar_num_req[ i] += 1 ;
137
+ for r in all. success . iter ( ) . rev ( ) {
138
+ let past = ( now - r. end ) . as_secs_f64 ( ) ;
139
+ let i = if past <= short_bin {
140
+ 0
141
+ } else {
142
+ 1 + ( ( past - short_bin) / bin) as usize
143
+ } ;
144
+ if i >= bar_num_req. len ( ) {
145
+ break ;
151
146
}
147
+ bar_num_req[ i] += 1 ;
152
148
}
153
149
154
150
let cols = bar_num_req
@@ -189,7 +185,7 @@ impl Monitor {
189
185
[
190
186
Constraint :: Length ( 3 ) ,
191
187
Constraint :: Length ( 8 ) ,
192
- Constraint :: Length ( error_dist . len ( ) as u16 + 2 ) ,
188
+ Constraint :: Length ( all . error . len ( ) as u16 + 2 ) ,
193
189
Constraint :: Fill ( 1 ) ,
194
190
]
195
191
. as_ref ( ) ,
@@ -224,9 +220,9 @@ impl Monitor {
224
220
f. render_widget ( gauge, row4[ 0 ] ) ;
225
221
226
222
let last_1_timescale = all
223
+ . success
227
224
. iter ( )
228
225
. rev ( )
229
- . filter_map ( |r| r. as_ref ( ) . ok ( ) )
230
226
. take_while ( |r| ( now - r. end ) . as_secs_f64 ( ) <= timescale. as_secs_f64 ( ) )
231
227
. collect :: < Vec < _ > > ( ) ;
232
228
@@ -316,7 +312,7 @@ impl Monitor {
316
312
) ;
317
313
f. render_widget ( stats2, mid[ 1 ] ) ;
318
314
319
- let mut error_v: Vec < ( String , usize ) > = error_dist . clone ( ) . into_iter ( ) . collect ( ) ;
315
+ let mut error_v: Vec < ( String , usize ) > = all . error . clone ( ) . into_iter ( ) . collect ( ) ;
320
316
error_v. sort_by_key ( |t| std:: cmp:: Reverse ( t. 1 ) ) ;
321
317
let errors_text = error_v
322
318
. into_iter ( )
@@ -370,9 +366,9 @@ impl Monitor {
370
366
}
371
367
. max ( 2 ) ;
372
368
let values = all
369
+ . success
373
370
. iter ( )
374
371
. rev ( )
375
- . filter_map ( |r| r. as_ref ( ) . ok ( ) )
376
372
. take_while ( |r| ( now - r. end ) . as_secs_f64 ( ) < timescale. as_secs_f64 ( ) )
377
373
. map ( |r| r. duration ( ) . as_secs_f64 ( ) )
378
374
. collect :: < Vec < _ > > ( ) ;
0 commit comments