package Ġfour key metrics . metrics . calculator Ċ Ċ import Ġfour key metrics . common . model . Build Ċ import Ġfour key metrics . common . model . Status Ċ import Ġfour key metrics . metrics . model . LEVEL Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠDeployment Frequency Calculator Ġ: ĠMetrics Calculator Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠONE _ WEEK : ĠInt Ġ= Ġ 7 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠONE _ MONTH : ĠInt Ġ= Ġ 3 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Value ( ĊĠĠĠĠĠĠĠ Ġall Build s : ĠList < Build >, ĊĠĠĠĠĠĠĠ Ġstart Timestamp : ĠLong , ĊĠĠĠĠĠĠĠ Ġend Timestamp : ĠLong , ĊĠĠĠĠĠĠĠ Ġpipeline Stages Map : ĠMap < String , ĠString > ĊĠĠĠ Ġ): ĠNumber Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpipeline Stages Map . map Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Build s . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pipeline Id Ġ== Ġentry . key Ġ&& Ġ! is Invalid Build ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Timestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Timestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. size ĊĠĠĠĠĠĠĠ Ġ}. sum () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Level ( value : ĠNumber , Ġdays : ĠInt ?): ĠLE VEL Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeployment Count Ġ= Ġvalue . toDouble () ĊĊĠĠĠĠĠĠĠ Ġval Ġdeployment Frequency Ġ= Ġdeployment Count / days !! ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeployment Frequency Ġ<= Ġ 1 . 0 Ġ/ ĠONE _ MONTH Ġ-> ĠLE VEL . LOW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeployment Frequency Ġ<= Ġ 1 . 0 Ġ/ ĠONE _ WEEK Ġ-> ĠLE VEL . MEDIUM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeployment Frequency Ġ<= Ġ 1 . 0 Ġ-> ĠLE VEL . HIGH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLE VEL . EL ITE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Invalid Build ( ĊĠĠĠĠĠĠĠ Ġcurrent Build : ĠBuild , Ġstart Timestamp : ĠLong , ĊĠĠĠĠĠĠĠ Ġend Timestamp : ĠLong , Ġtarget Stage : ĠString ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! is Target Stage Within Time Range ( current Build , Ġstart Timestamp , Ġend Timestamp , Ġtarget Stage ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! is Target Stage Success ( current Build , Ġtarget Stage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Target Stage Success ( build : ĠBuild , Ġtarget Stage : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġbuild . stages . find Ġ{ Ġstage Ġ-> Ġstage . name Ġ== Ġtarget Stage Ġ} ?. status Ġ== ĠStatus . SUCCESS ĊĊĠĠĠ Ġprivate Ġfun Ġis Target Stage Within Time Range ( ĊĠĠĠĠĠĠĠ Ġbuild : ĠBuild , Ġstart Timestamp : ĠLong , ĊĠĠĠĠĠĠĠ Ġend Timestamp : ĠLong , Ġtarget Stage : ĠString ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstage Ġ= Ġbuild . stages . find Ġ{ Ġit . name Ġ== Ġtarget Stage Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdeployment Finish Timestamp Ġ= Ġstage ?. get Stage Done Time () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdeployment Finish Timestamp Ġin Ġstart Timestamp .. end Timestamp ĊĠĠĠ Ġ} ĊĊ Ċ }