@ file : Suppress (" EXPERIMENT AL _ API _ USAGE ") Ċ Ċ package Ġf tl . run . common Ċ Ċ import Ġfl ank . common . log Ln Ċ import Ġf tl . api . Test Matrix Ċ import Ġf tl . api . refresh Test Matrix Ċ import Ġf tl . args . I Args Ċ import Ġf tl . run . status . Test Matrix Status Printer Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . as Flow Ċ import Ġkotlinx . coroutines . flow . flatMap Merge Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . fold Ċ import Ġkotlinx . coroutines . flow . on Each Ċ Ċ suspend Ġfun Ġpoll Mat rices ( ĊĠĠĠ Ġtest Mat rices Ids : ĠIterable < String >, ĊĠĠĠ Ġargs : ĠI Args , ĊĠĠĠ Ġprint Matrix Status : Ġ( Test Matrix . Data ) Ġ-> ĠUnit Ġ= ĠTest Matrix Status Printer ( ĊĠĠĠĠĠĠĠ Ġargs Ġ= Ġargs , ĊĠĠĠĠĠĠĠ Ġtest Mat rices Ids Ġ= Ġtest Mat rices Ids ĊĠĠĠ Ġ) Ċ ): ĠCollection < Test Matrix . Data > Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠ Ġtest Mat rices Ids . as Flow (). flatMap Merge Ġ{ Ġtest Matrix Id Ġ-> ĊĠĠĠĠĠĠĠ Ġmatrix Changes Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Matrix Id Ġ= Ġtest Matrix Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= Ġargs . project ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. on Each Ġ{ ĊĠĠĠĠĠĠĠ Ġprint Matrix Status ( it ) ĊĠĠĠ Ġ}. fold ( empty Map < String , ĠTest Matrix . Data >()) Ġ{ Ġmatrices , Ġnext Ġ-> ĊĠĠĠĠĠĠĠ Ġmatrices Ġ+ Ġ( next . matrix Id Ġto Ġnext ) ĊĠĠĠ Ġ}. values . also Ġ{ ĊĠĠĠĠĠĠĠ Ġlog Ln () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġmatrix Changes Flow ( ĊĠĠĠ Ġtest Matrix Id : ĠString , ĊĠĠĠ ĠprojectId : ĠString Ċ ): ĠFlow < Test Matrix . Data > Ġ= Ġflow Ġ{ ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= Ġrefresh Test Matrix ( Test Matrix . Identity ( test Matrix Id , ĠprojectId )) ĊĠĠĠĠĠĠĠ Ġemit ( matrix ) ĊĠĠĠĠĠĠĠ Ġif Ġ( matrix . is Completed ) Ġbreak Ġelse Ġdelay ( 5 _ 0 0 0 ) ĊĠĠĠ Ġ} Ċ } Ċ