package Ġio . github . jan bar ari . gradle . analytics . metric . configuration Ċ Ċ import Ġio . github . jan bar ari . gradle . core . Stage Ċ import Ġio . github . jan bar ari . gradle . analytics . domain . model . Report Ċ import Ġio . github . jan bar ari . gradle . analytics . domain . model . Build Metric Ċ import Ġio . github . jan bar ari . gradle . analytics . domain . model . Chart Point Ċ import Ġio . github . jan bar ari . gradle . analytics . domain . model . Configuration Report Ċ import Ġio . github . jan bar ari . gradle . core . Triple Ċ import Ġio . github . jan bar ari . gradle . extension . ensure NotNull Ċ import Ġio . github . jan bar ari . gradle . extension . is Big ger Equals Ċ import Ġio . github . jan bar ari . gradle . extension . isNotNull Ċ import Ġio . github . jan bar ari . gradle . extension . isNull Ċ import Ġio . github . jan bar ari . gradle . utils . DateTime Utils Ċ import Ġio . github . jan bar ari . gradle . utils . Math Utils Ċ Ċ class ĠCreate Configuration Report Stage ( ĊĠĠĠ Ġprivate Ġval Ġmetrics : ĠList < Build Metric > Ċ ) Ġ: ĠStage < Report , ĠReport > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSKIP _ METRIC _ THRESHOLD Ġ= Ġ 5 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCH ART _ MAX _ COLUMNS Ġ= Ġ 1 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( input : ĠReport ): ĠReport Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Chart Points Ġ= Ġmetrics . filter Ġ{ Ġit . configuration Metric . isNotNull () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġensure NotNull ( it . configuration Metric ). average . isNotNull () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġensure NotNull ( it . configuration Metric ). average . is Big ger Equals ( SKIP _ METRIC _ THRESHOLD ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration Chart Point ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġensure NotNull ( it . configuration Metric ). average , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstarted At Ġ= Ġit . createdAt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinished At Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Metrics Mean Ġ= Ġresize Configuration Chart Points ( configuration Chart Points , ĠCH ART _ MAX _ COLUMNS ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( configuration Metrics Mean . isEmpty ()) Ġreturn Ġinput ĊĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Report Ġ= ĠConfiguration Report ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġconfiguration Chart Points . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperiod Ġ= Ġif Ġ( it . finished At . isNull ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Utils . format ( it . started At , Ġ" dd / MM ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Utils . format ( it . started At , Ġ" dd / MM ") Ġ+ Ġ"-" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Utils . format ( ensure NotNull ( it . finished At ), Ġ" dd / MM ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChart Point ( it . value , Ġperiod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġconfiguration Metrics Mean . max Of Ġ{ Ġit . value Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġconfiguration Metrics Mean . min Of Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġinput . configuration Report Ġ= Ġconfiguration Report ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresize Configuration Chart Points ( ĊĠĠĠĠĠĠĠ Ġinput : ĠList < Configuration Chart Point >, Ġtarget Size : ĠInt ĊĠĠĠ Ġ): ĠList < Configuration Chart Point > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( input . size Ġ> Ġtarget Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresize Configuration Chart Points ( calculate Points Mean ( input ), Ġtarget Size ) ĊĠĠĠĠĠĠĠ Ġelse Ġinput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalculate Points Mean ( values : ĠList < Configuration Chart Point >): ĠList < Configuration Chart Point > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( values . isEmpty ()) Ġreturn Ġvalues ĊĊĠĠĠĠĠĠĠ Ġval Ġmean Ġ= Ġarray ListOf < Configuration Chart Point >() ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġvalues . size ĊĠĠĠĠĠĠĠ Ġvar Ġnext Index Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġnext Index ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ+ Ġ 1 Ġ>= Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean . add ( values [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfinished At Ġ= Ġvalues [ i Ġ+ Ġ 1 ]. finished At ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( finished At . isNull ()) Ġfinished At Ġ= Ġvalues [ i Ġ+ Ġ 1 ]. started At ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration Chart Point ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠMath Utils . long Mean ( values [ i ]. value , Ġvalues [ i Ġ+ Ġ 1 ]. value ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstarted At Ġ= Ġvalues [ i ]. started At , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinished At Ġ= Ġfinished At ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Index Ġ= Ġi Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠConfiguration Chart Point ( ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠLong , ĊĠĠĠĠĠĠĠ Ġval Ġstarted At : ĠLong , ĊĠĠĠĠĠĠĠ Ġval Ġfinished At : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠTrip le < Long , ĠLong , ĠLong ? >( value , Ġstarted At , Ġfinished At ) Ċ Ċ } Ċ