@@ -2,6 +2,7 @@ import {BuildErrorType, BuildResultStatus} from '../workers/builder/builder-type
22import { UserFacingError } from '../utils/errors.js' ;
33import {
44 AggregatedRunStats ,
5+ AggregatedTimings ,
56 AssessmentResult ,
67 RuntimeStats ,
78 ScoreBucket ,
@@ -15,13 +16,32 @@ export const BUCKET_CONFIG = [
1516 { name : 'Poor' , min : 0 , max : 70 , id : 'poor' } ,
1617] ;
1718
19+ function calculateMean ( values : number [ ] ) : number {
20+ if ( values . length === 0 ) return 0 ;
21+ return values . reduce ( ( sum , value ) => sum + value , 0 ) / values . length ;
22+ }
23+
24+ function calculateMedian ( values : number [ ] ) : number {
25+ if ( values . length === 0 ) return 0 ;
26+ const sorted = [ ...values ] . sort ( ( a , b ) => a - b ) ;
27+ const middle = Math . floor ( sorted . length / 2 ) ;
28+ if ( sorted . length % 2 === 0 ) {
29+ return ( sorted [ middle - 1 ] + sorted [ middle ] ) / 2 ;
30+ }
31+ return sorted [ middle ] ;
32+ }
33+
1834/**
1935 * Calculates build and check statistics from assessment results.
2036 *
2137 * @param assessments - An array of `AssessmentResult` objects.
2238 * @returns An object containing aggregated build and check statistics.
2339 */
2440export function calculateBuildAndCheckStats ( assessments : AssessmentResult [ ] ) : AggregatedRunStats {
41+ const generateDurations : number [ ] = [ ] ;
42+ const buildDurations : number [ ] = [ ] ;
43+ const repairDurations : number [ ] = [ ] ;
44+
2545 let successfulInitialBuilds = 0 ;
2646 let successfulBuildsAfterRepair = 0 ;
2747 let failedBuilds = 0 ;
@@ -63,6 +83,12 @@ export function calculateBuildAndCheckStats(assessments: AssessmentResult[]): Ag
6383 }
6484 }
6585
86+ if ( result . timings ) {
87+ generateDurations . push ( result . timings . generateDurationMs ) ;
88+ buildDurations . push ( result . timings . buildDurationMs ) ;
89+ repairDurations . push ( result . timings . repairDurationMs ) ;
90+ }
91+
6692 // Calculate test statistics
6793 if ( result . testResult ) {
6894 if ( result . testResult . passed ) {
@@ -158,6 +184,22 @@ export function calculateBuildAndCheckStats(assessments: AssessmentResult[]): Ag
158184 : undefined ,
159185 accessibility : accessibilityStats ,
160186 security : securityStats ,
187+ ...( generateDurations . length > 0 && {
188+ timings : {
189+ generate : {
190+ mean : calculateMean ( generateDurations ) ,
191+ median : calculateMedian ( generateDurations ) ,
192+ } ,
193+ build : {
194+ mean : calculateMean ( buildDurations ) ,
195+ median : calculateMedian ( buildDurations ) ,
196+ } ,
197+ repair : {
198+ mean : calculateMean ( repairDurations ) ,
199+ median : calculateMedian ( repairDurations ) ,
200+ } ,
201+ } ,
202+ } ) ,
161203 } ;
162204}
163205
0 commit comments