1
1
use crate :: experiments:: { Experiment , Mode , Status } ;
2
2
use crate :: prelude:: * ;
3
- use crate :: results :: TestResult ;
3
+ use crate :: report :: ResultName ;
4
4
use crate :: server:: routes:: ui:: { render_template, LayoutContext } ;
5
5
use crate :: server:: { Data , HttpError } ;
6
6
use chrono:: { Duration , SecondsFormat , Utc } ;
7
7
use chrono_humanize:: { Accuracy , HumanTime , Tense } ;
8
8
use http:: Response ;
9
9
use hyper:: Body ;
10
+ use std:: collections:: HashMap ;
10
11
use std:: sync:: Arc ;
11
12
12
13
#[ derive( Serialize ) ]
@@ -121,7 +122,7 @@ struct ExperimentExt {
121
122
122
123
total_jobs : u32 ,
123
124
completed_jobs : u32 ,
124
- result_counts : Vec < ( TestResult , u32 ) > ,
125
+ result_counts : Vec < ( String , u32 ) > ,
125
126
duration : Option < String > ,
126
127
estimated_end : Option < String > ,
127
128
average_job_duration : Option < String > ,
@@ -136,7 +137,13 @@ struct ExperimentContext {
136
137
pub fn endpoint_experiment ( name : String , data : Arc < Data > ) -> Fallible < Response < Body > > {
137
138
if let Some ( ex) = Experiment :: get ( & data. db , & name) ? {
138
139
let ( completed_jobs, total_jobs) = ex. raw_progress ( & data. db ) ?;
139
- let result_counts = ex. get_result_counts ( & data. db ) ?;
140
+ // this is done to avoid having tons of different test result types in the experiment page
141
+ // all CompilerError and DependsOn failures are grouped together
142
+ let mut result_counts = HashMap :: new ( ) ;
143
+ for ( res, count) in ex. get_result_counts ( & data. db ) ? {
144
+ * result_counts. entry ( res. name ( ) ) . or_default ( ) += count;
145
+ }
146
+ let result_counts = result_counts. into_iter ( ) . collect :: < Vec < _ > > ( ) ;
140
147
141
148
let ( duration, estimated_end, average_job_duration) = if completed_jobs > 0
142
149
&& total_jobs > 0
0 commit comments