private def update()

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()
      }
    }