in multiversion/src/main/scala/multiversion/loggers/ProgressLogger.scala [51:96]
private def update(scrollUp: Boolean = true): Runnable =
new Runnable {
def run() = {
clear()
for ((_, s) <- states.asScala.toVector.sortBy(_._2.totalOpt.sum)) {
val m = s.processed.asScala.iterator.toMap
val ongoing = m.count(_._2.isLeft)
val extra =
if (ongoing > 0) {
val total =
m.iterator.flatMap(_._2.left.toOption.iterator.map(_._2)).sum
if (total > 0L) {
val done = m.iterator
.flatMap(
_._2.left.toOption.iterator.filter(_._2 > 0L).map(_._1)
)
.sum
val pct = f"${100L * done.toDouble / total}%.2f %%"
s" ($pct, $ongoing on-going)"
} else
s" ($ongoing on-going)"
} else
""
val doneCount = m.count(_._2.isRight)
val done = s.done.get()
val em =
if (done) {
val emoji = if (s.isError.get()) errorEmoji else doneEmoji
emoji.fold("")(_ + " ")
} else {
tickers(doneCount % tickers.length) + " "
}
out.write(s" $em$processedMessage $doneCount${s.totalOpt
.filter(_ => !done)
.fold("")(t => s" / $t")} $elementName$extra\n")
printed += 1
}
if (scrollUp)
out.up(printed)
out.flush()
}
}